<?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>216608</bug_id>
          
          <creation_ts>2020-09-16 07:11:06 -0700</creation_ts>
          <short_desc>Remove the legacy animation code</short_desc>
          <delta_ts>2020-10-01 12:17:03 -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>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>dino</cc>
    
    <cc>dstockwell</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>fred.wang</cc>
    
    <cc>glenn</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kangil.han</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>noam</cc>
    
    <cc>pdr</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sam</cc>
    
    <cc>sergio</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1689080</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 07:11:06 -0700</bug_when>
    <thetext>Remove the legacy animation code</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689082</commentid>
    <comment_count>1</comment_count>
      <attachid>408920</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 07:20:01 -0700</bug_when>
    <thetext>Created attachment 408920
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689085</commentid>
    <comment_count>2</comment_count>
      <attachid>408921</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 07:35:30 -0700</bug_when>
    <thetext>Created attachment 408921
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689105</commentid>
    <comment_count>3</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 08:51:19 -0700</bug_when>
    <thetext>Looks like I broke computed style for transform and filter, both accelerated properties.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689127</commentid>
    <comment_count>4</comment_count>
      <attachid>408928</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 09:40:16 -0700</bug_when>
    <thetext>Created attachment 408928
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689142</commentid>
    <comment_count>5</comment_count>
      <attachid>408931</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 10:06:44 -0700</bug_when>
    <thetext>Created attachment 408931
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689144</commentid>
    <comment_count>6</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 10:07:16 -0700</bug_when>
    <thetext>Filed bug 216612 to look into the GTK / WPE build failures which seem to be a bug in the code generation for IDL files.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689171</commentid>
    <comment_count>7</comment_count>
      <attachid>408938</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 11:38:13 -0700</bug_when>
    <thetext>Created attachment 408938
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689179</commentid>
    <comment_count>8</comment_count>
      <attachid>408941</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 12:22:28 -0700</bug_when>
    <thetext>Created attachment 408941
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689187</commentid>
    <comment_count>9</comment_count>
      <attachid>408945</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 12:56:56 -0700</bug_when>
    <thetext>Created attachment 408945
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689204</commentid>
    <comment_count>10</comment_count>
      <attachid>408952</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-16 13:40:04 -0700</bug_when>
    <thetext>Created attachment 408952
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689410</commentid>
    <comment_count>11</comment_count>
      <attachid>409018</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-17 03:48:01 -0700</bug_when>
    <thetext>Created attachment 409018
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689415</commentid>
    <comment_count>12</comment_count>
      <attachid>409020</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-17 04:12:44 -0700</bug_when>
    <thetext>Created attachment 409020
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689425</commentid>
    <comment_count>13</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-17 05:25:29 -0700</bug_when>
    <thetext>The test failures on the Windows bots don&apos;t seem related to this patch. A local Windows build manages to pass animation tests that otherwise showed as a Crash.

Note that the Windows build required a manual clean build on the bot to succeed. Same goes for WPE and GTK builds, though I managed to get the EWS bots to build by making a dummy change to ShadowRoot.idl. This is covered by bug 216612.

Going to land the patch as I believe it to be OK with the caveats listed above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689429</commentid>
    <comment_count>14</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2020-09-17 05:39:40 -0700</bug_when>
    <thetext>Committed r267188: &lt;https://trac.webkit.org/changeset/267188&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1689430</commentid>
    <comment_count>15</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-17 05:40:18 -0700</bug_when>
    <thetext>&lt;rdar://problem/69063339&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408920</attachid>
            <date>2020-09-16 07:20:01 -0700</date>
            <delta_ts>2020-09-16 08:35:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916161959.patch</filename>
            <type>text/plain</type>
            <size>549245</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGZiODMxYjM1OTc3MTBiZmY4YWFkOGY4ZDI5ZTA5
ZDRkYTRiYzNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzLCBzb21lIFJlbmRl
ckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25z
IGFuZCBhCisgICAgICAgIG1lY2hhbmlzbSB0byBub3RpZnkgd2hlbiBhbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkbyBub3QgdXNl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsOgorICAgICAg
ICAqIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9u
UGxheWJhY2tFdmVudEluaXQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcik6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oLgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NUcmFu
c2l0aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGw6CisgICAgICAgICogYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0
aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzdW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBk
b20vUHNldWRvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50Ojpj
bGVhckhvc3RFbGVtZW50KToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJB
bmltYXRpb25TdGFydGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFUaW1lVG9DdXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFuaW1hdGlv
bkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbGVtZW50OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
UGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJl
bmRlcmVycyk6CisgICAgICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgICog
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRy
ZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0
aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAy
MC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl1bMS4xOF0gUmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmQ4OGQwOWM2MGQy
NjllYjhlYjkxZjgxMmMyMTJlNzc5OGNjMTM1OC4uZjIxNmYyOTRmODMxYmQxZDBlYTAwOWJjYWYz
ODFlZmI2NmZlNmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwg
dGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25z
IGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92
ZWQuCisKKyAgICAgICAgV2UgYWxzbyByZW1vdmUgdGhlIG1lY2hhbmlzbSB0byBub3RpZnkgd2hl
biBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9u
IGVuZ2luZSBkbyBub3QgdXNlLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAg
ICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
ZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1ByZWZlcmVu
Y2VzIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVI
b3N0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25E
aWRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpvdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0
YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAobWVkaWFUaW1lVG9DdXJy
ZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0
aW9uRGlkU3RhcnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KTog
RGVsZXRlZC4KKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlM
RUQgaW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3
NDYxM2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24g
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2lu
Y2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxh
Z3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAg
ICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVd
KToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgor
CiAyMDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQ
SQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcy
ZGQ0NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0w
OS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9u
IGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBB
bmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUg
bm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAq
IFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXpl
RGVmYXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBz
ZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAyMGY4YzQxMmFhMjMzNzU1NWIzN2Q1OTQxZTE4YjJlYWRmZDM3YmVmLi41OWY3
OTJhOTQ4N2ZhOThiODE2NTliYTEyMWEyMjBjYzJjMTA0OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vbWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVfRElS
fS9wYWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1NWExOGQzMjA0OGU3NmU2NTFlMDA2MDVmODBiMDVh
MzI3YTExZWUuLmNiNGE5ZGU5Mjc3YWZlOWI3NDRlY2ZlNTQzZDA1Y2RhYTU5YWE1MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtODg5LDkgKzg4OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAgcGFn
ZS9XaW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgK
LSAgICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQyZmEyMTQ2Y2ZiYTlk
OC4uMzg4MjdjNDNjMWM1MWVlMjhlODY5N2Y5Y2RkN2IxZmJhNjhmYmVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNwcAog
YW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmltYXRp
b24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5j
cHAKQEAgLTE2NzUsMTIgKzE2NzYsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5jcHAK
IHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRv
ci5jcHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1wYWdl
L2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAot
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuY3Bw
CiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjY1NTk4
ZjYzNTA0ZDgzNWQ0ZGRhNzNlMjY3ZTYyMjlkMDcxMzNkMi4uMjhlOWYyOTFiZjMwOTlkNmMyNTNi
ZmVmZWJmMGVkMmRmMTliM2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4MjJF
M0M0N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBGcmFt
ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUw
RjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmls
dGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURB
ODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87
IH07CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdFQzdD
NTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9s
bEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsg
fTsKIAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgxODAw
RDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05MTYsMTEgKzkxNSw2IEBACiAJCTMxNkRFNzAyMUU4M0FFMUQw
MDg0QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0
YUNoYW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyogSlND
U1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oICov
OyB9OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3MDBF
NkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZFMTEy
MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEw
QTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFEQTcw
MEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3Np
dGVBbmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxp
Y2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLzsg
fTsKLQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBFNkUx
REE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQxNjYz
NjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8q
IFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVyRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxN0Qz
RkYyMjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JGODkg
LyogSW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIxNTIs
NyBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0
MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1
QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIz
OEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1
MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJG
RjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIz
RUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZH
UHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThB
M0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2IEBA
CiAJCTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAxQjFF
RDcyMkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3N0Q1
MTAyNTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1NTAw
REE0Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQxMkY5
REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAwQzc3
QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJDNjE1
NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAyMTI2
NkUgLyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3NpdGlv
bkV2ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUYyRjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3
QTA5Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JEQiAv
KiBGaWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZp
bHRlcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBs
YXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VDN0M1
MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2VkQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIx
NSwxNiArNzIwOCw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZy
YW1lc1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlmcmFt
ZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NEN0Yw
MEJGNjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENT
U0tleWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDky
MEU2Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRp
b25CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4
IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZFMURB
NzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYw
ODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZy
YW1lQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtl
eWZyYW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUx
MTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2ludGVy
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk4ODMsNiArOTg2Niw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAyQjM4
OEYwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9u
RWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3
MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhU
b3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQ
b2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJB
MDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTk5MSw4ICs5OTc2LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2aWdh
dG9yQ3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZp
Z2F0b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VGNjJG
MTEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURCNzQw
MEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4
RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21w
b3NpdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q29tcG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5
MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0aW9u
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTIsMjYgKzE4Njk1
LDYgQEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKLQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2
MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4IC8q
IENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4
OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUxREE3
MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5MEYz
QUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAotCQkJ
CTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8s
Ci0JCQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
Ki8sCi0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNw
cCAqLywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24u
aCAqLywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24u
Y3BwICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlv
bi5oICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0aW9u
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQzMSw3
ICsyMTM5NCw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUxRDg0
MDBCRjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3OCAv
KiBjb2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAogCQkJ
CTE4QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3NCw2ICsyMTgzNiw4
IEBACiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAgKi8s
CiAJCQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAogCQkJ
CTcxQzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJCTcx
RjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCisJ
CQkJNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8s
CiAJCQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQuaCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5j
cHAgKi8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaCAq
LywKQEAgLTMwMzE1LDcgKzMwMjc5LDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAg
LyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIx
OUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25F
ZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4
IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjk4LDcgKzMwNjYxLDYg
QEAKIAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9z
ZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNB
NkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAvKiBD
b21wb3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3MTEw
MEVCN0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApAQCAt
MzA4MzgsOCArMzA4MDAsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBDcnlw
dG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0MUYz
Q0NFNjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEw
MTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDkwOCw3ICszMDg2OCw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVE
OEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5
MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcxMzQx
RkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzIsNyArMzE2OTIsNiBAQAogCQkJCTU1
QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMzOEMw
MEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzg2
MzNFOTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVudGlm
aWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA5LDcgKzMyNjY4LDYgQEAKIAkJCQk1MTdBNjND
NjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0UgLyog
S2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNCNDFG
OUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcx
MjQ3RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0NjQ3
MTAwMDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1NjIy
ZWNhZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJs
ZS5pZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvd2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1bCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBBbmlt
YXRhYmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dFeGNl
cHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0
PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5p
bWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRB
bmltYXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJkZjFm
ZTJjNjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlhM2M1
MTIzMjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvbkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0
UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3RvbVRv
SlNPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2OTFi
NDg1MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVlMWUw
ZTgzMmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsK
LSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3cs
CiBdIGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNvbnN0
cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5p
dCBldmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBlODIx
ZGI0N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFiYjI2
MDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5
YmFja0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blBsYXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rpb25h
cnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFyeSBB
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBjdXJy
ZW50VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4IDA0
ZmE5NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIxNDNl
ZmM4NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9F
WFBPUlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGltZWxp
bmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAxZTVi
ODg0YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5NmY5
YmU5NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5p
bWF0aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJp
bmc7CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
biwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2ViQW5p
bWF0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9uTmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZmYTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlB
bmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlB
bmltYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JCbGVu
ZGluZy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUgIkZv
bnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUgIklk
ZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVu
ZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dy
ZXNzKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20p
ICogcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jl
c3MpOworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVu
Z3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgp
IHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgo
KSwgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZy
b20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJu
IHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5k
RnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKworc3Rh
dGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisg
ICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsK
KyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jl
c3MpOworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRv
d1N0eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93
RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNv
bnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgpICE9
IHRvLT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8p
OworCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRp
b24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+cmFk
aXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5zcHJl
YWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmltLCBm
cm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5pc1dl
YmtpdEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3Io
KSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rp
b25MaXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRp
b25zKGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50
ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRl
cmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNT
aGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQ
YXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpT
aGFwZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNo
YXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUo
KTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0
aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5jYW5C
bGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBlQ2xp
cFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3Mp
KTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVl
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAg
IHJldHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6
U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAgICAg
cmV0dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKKyAg
ICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZy
b20tPnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUo
KTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICByZXR1
cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7CisgICAg
QVNTRVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBi
bGVuZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMg
YmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0Owor
ICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXpl
X3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0
ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwg
ZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygp
W2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9w
ID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dy
ZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVz
cywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9w
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0ZXJP
cGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0
eUZpbHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElmIHdl
IGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rp
b24gYW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIHN3
aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAgICAg
IGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAg
YnJlYWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJv
cEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAg
IGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0g
YW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0c01h
dGNoKQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwg
dG8sIHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5j
dGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBk
b24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAgIC8v
IEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9IHRv
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRy
PFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NF
UlQoaW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0
ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGltYWdl
VmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRlclZh
bHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVu
dFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFs
dWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9w
ZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0
eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55IG5v
bi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUu
IE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52aXNp
YmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBW
aXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFs
dWVzLgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRvOwor
ICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRV
bmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9m
ZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgp
LCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJsaW5l
T2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29y
YXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25U
aGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFs
dWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERlY29y
YXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVu
Z3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKK3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0
by50b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0s
IGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxl
ZnQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5l
IFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJv
bSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlu
bGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3Qg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBzaXpl
X3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNp
emUoKTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBm
cm9tIDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzID09
IDEgPyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7Cisg
ICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIo
c3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xl
bmd0aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwg
dG9MZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9t
TGVuZ3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVz
dWx0KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5n
dGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21b
aSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdl
KiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVzcyBp
cyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hv
dyB0aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhh
bmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNzKQor
ICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEpCisg
ICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICByZXR1
cm4gdG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8gdG9J
bWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBjcm9z
c2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VW
YWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsK
KyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRl
VmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20s
IFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0
bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2Uo
KTsKKyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRv
KQorICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdv
IGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAgICBp
ZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRl
ZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Cisg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlzPENT
U0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRl
ZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KKyAg
ICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0Zp
bHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIu
ZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNz
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdl
bmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAg
ICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9z
c2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1
ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQp
OworICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3Nz
ZmFkZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jv
c3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAg
fSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNo
ZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2Vu
ZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUo
KTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7
CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAoZnJv
bUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0byku
Y2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJv
bUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3Mp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVu
IGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2Fj
aGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8
U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVy
YXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRkIGlu
dGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAgfQor
CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5k
IGdlbmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBp
czxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQo
YW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2Fj
aGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkg
fHwgIXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1FICg3
NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0
IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmltYWdl
U2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRv
LmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5m
aWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9u
dGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCisg
ICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAx
LjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAgICAg
IHJldHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5j
KGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9t
LmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91
dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOworfQor
CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFyaWF0
aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUoKSAh
PSB0by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAg
ICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBmcm9t
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVtID0g
dG8uYXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCisg
ICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0
IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0u
dmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFn
KCksIGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vu
ZGlmCisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwg
Rm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20p
LCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5l
IE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAg
IHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZs
b2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dy
ZXNzKSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJvcChw
cm9wKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwg
ZG91YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHko
KSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBD
U1NQcm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
UHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkK
KyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgIH0K
KworICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwg
IiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIg
PDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2
YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJlbmRl
clN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+
OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVm
UHRyPFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0
dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0
ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dy
ZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3Nl
dHRlcikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAgICB9
CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChh
LT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYm
KTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9w
ZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVy
YXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBz
YW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBp
cyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0aE9w
ZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBhdGhP
cGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChjbGlw
UGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0
aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5n
cz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJp
YXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNl
dHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25T
ZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAg
cmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAgfQor
fTsKKyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHBy
b3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBp
ZiAoc2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHls
ZUltYWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBy
ZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQorfTsK
KworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xv
ciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJT
dHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9w
YWNpdHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJB
Y2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDogUHJv
cGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0s
IGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQor
ICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVy
dHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9u
SXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gcHJv
cGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIp
CisgICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25z
Jj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgIH0K
K307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0gMDsg
c2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRh
KiBvdGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4g
ZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1h
bCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hT
aGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hh
ZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsK
KworICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAgICBp
ZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAgICBy
ZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2Vi
S2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOwor
CisgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRX
ZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOworfQor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0
YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cwor
ICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3Rz
CisgICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hh
ZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dM
aXN0TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVu
Z3RoKHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChm
cm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3QtPipt
X3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywg
c2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMo
YW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwg
ZmFsc2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBi
ZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVh
bSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IG5ld1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOworCisg
ICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0Ip
OworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxl
bmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0
U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93
UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93
KQorICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQo
V1RGTW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVu
ZGVkU2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0Et
Pm5leHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5l
eHQoKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKKyAg
ICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hh
ZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVyc2Ug
dGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93
RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
ZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93c1tp
XSA9IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOworICAg
ICAgICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3Mo
dG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAgIHNo
YWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVuZ3Ro
ID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBm
cm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAgICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93
c1tpXSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNo
YWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9t
U2hhZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5k
ZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNz
KTsKKyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJl
c2VydmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZN
b3ZlKG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3Zl
KGJsZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0Rh
dGE7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNv
bnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9w
KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZh
bHVlKGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICByZXR1
cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAg
ICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8
PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENv
bG9yJik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRD
b2xvciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlx
dWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAg
LCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3As
IHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUlu
dmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCisg
ICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICB7
CisgICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyYXBw
ZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CisgICAg
fQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
UmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3dy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zpc2l0
ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBw
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1f
dmlzaXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1h
dGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAgICB9
CisgICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0g
ZGVmYXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19ESVNB
QkxFRAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Cisj
ZW5kaWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIg
OiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnBy
b3BlcnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisgICAg
ICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBGaWxs
TGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlciko
KSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChG
aWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdp
blNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKKyAg
ICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5H
ZXR0ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRl
cikKKyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRvTGVu
Z3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRl
cikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYm
IGZyb21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5
ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAgIExl
bmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVkZ2Ug
PSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdl
KSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisgICAg
ICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChm
cm9tTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsK
KyAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aCh0b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9t
RWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8g
dGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAo
ZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0
aCwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwg
IiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
KyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVu
Z3RoU2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVy
KSgpIGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsK
KyAgICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
RmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxM
YXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwg
Y29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAg
PDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUo
YSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNl
bmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0
dGVyKSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Cisg
ICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExh
eWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShi
KSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJz
KHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCit9
OworCitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0
ZXIpKCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVy
c0FjY2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3Nv
cikKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAg
ICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29y
KGFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5
V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHBy
b3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwg
JkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRY
T3JpZ2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxs
TGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdp
biwgRWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAg
ICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXll
clByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVM
ZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBtX2Zp
bGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpz
ZXRJbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byog
ZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5
ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxheWVy
ICYmIHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAg
ICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwor
ICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAgICAg
d2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmls
bExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOworICAg
ICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXllciA9
IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVy
c0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVy
KSgpOworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIp
KCk7CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAg
ICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwg
YUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+
bmV4dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAg
ICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXllcnNH
ZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3Nv
cjsKK307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJz
KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAg
ICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVy
IDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFs
cyhhLCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVy
cykKKyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3Mp
OworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRz
dCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChhdXRv
JiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+bG9n
QmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBW
ZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAgVmVj
dG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9
OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3co
KSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+
ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRG
dW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7CisgICAg
ICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBi
LT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9Cisj
ZW5kaWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwg
U1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29s
b3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09
IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBT
VkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBldmVy
eXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lz
ZQorICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2
ZXIuCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlw
ZTo6UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKwor
ICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7Cisg
ICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRvQ29s
b3IgPSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChiLT4q
bV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4K
KyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGlu
ZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1BhaW50
VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBDb2xv
ciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHls
ZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
Rm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9u
YWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHls
ZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZv
bnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50Owor
ICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAgICAg
ICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAgICAg
aWYgKGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8
IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKwor
ICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAgICAg
ICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8gYmxl
bmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250
SXRhbGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJ
dGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJv
Z3Jlc3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRz
dC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlv
biA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxp
YyhibGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4
aXMoYmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShj
dXJyZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5
YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJldHVy
biBtYXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAgIGlm
IChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1By
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQg
d3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAgICAg
aWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVy
c1t3cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAo
KTsKKyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisKKyAg
ICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlE
IC0gZmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworICAg
IHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4
ID0gVUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAvLyBi
dWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMg
YW5kIGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxl
OjpzZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKKyAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0
eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5k
ZXJTdHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
V2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWlu
V2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgp
LAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgs
ICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAorCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5k
ZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6
bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6
OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lk
dGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVm
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5U
b3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5C
b3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBh
ZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJT
dHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwK
KworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJv
cGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0
eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tn
cm91bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0
eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCisg
ICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1h
Z2UpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFu
dFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwg
JlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJ
bWFnZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAgICAg
IG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFn
ZVNvdXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1h
Z2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94
SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcgRmls
bExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3Jv
dW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxs
TGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5
ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRl
clN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorICAg
ICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVN
YXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5
bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwg
JlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAorICAg
ICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3Bl
cnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRD
b2x1bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBM
ZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0
eWxlOjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNo
b3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0
aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2
ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFj
aW5nKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4
LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZp
ZWRaSW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0
eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5z
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3Ms
ICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVPZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQs
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVj
dGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHls
ZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2lu
WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVj
dGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9y
bU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVu
ZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3Jp
Z2luWSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJh
bnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5
bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3Bl
cnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJU
b3BMZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxl
Ojpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJh
ZGl1cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNp
emU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRp
dXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXpl
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0
eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpYmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRS
ZXR1cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0
eWxlOjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRP
cGFjaXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9y
bSgpLAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9w
ZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVy
KSwKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2VuZGlm
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9y
RmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0
QXBwbGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRo
KENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQ
cm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVu
ZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBl
SW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCisK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3Bl
cnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRM
aW5rQ29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRB
ZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0
ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxs
Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdo
dENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJU
b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9y
ZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNv
bG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGlu
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKworICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAm
UmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJl
bmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAorCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5k
ZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNp
dHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQ
YWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRTdHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZS
ZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hB
cnJheSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ry
b2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5
bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRD
eCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJl
bmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHls
ZTo6c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlS
eCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJl
bmRlclN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQs
ICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJv
a2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJT
dHlsZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJT
dHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29k
Q29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENv
bG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0
b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0
b3BPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRp
bmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQs
ICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2Vs
aW5lU2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFs
dWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5
bGU6OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFy
aWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVu
ZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJv
cGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxl
OjpzZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUo
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4o
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVj
b3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NT
UHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVP
ZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZf
QVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisgICAg
c3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNb
XSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1j
b2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBm
b3IgZm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ss
IC8vIGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAgICAg
ICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRp
dXMsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3Ig
bGlzdC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAgQ1NT
UHJvcGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxl
LAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAgQ1NT
UHJvcGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVz
IHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgLy8K
KyAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgbV9w
cm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisgICAg
Q09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0
YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRh
YmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlXcmFw
cGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXND
b3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8gRmly
c3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1h
cCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4K
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0
aWVzQ291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3
cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAgICAg
bV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Qcm9w
ZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgewor
ICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJv
cGVydGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1dG8g
bG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRl
eCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdyYXBw
ZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVy
SW5kZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1f
cHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhh
bmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykp
KTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
ciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
cio+KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgewor
ICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwg
Y3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBw
cm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KGNvbnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkp
OworCisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5l
ZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENT
U1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKHBy
b3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRv
bigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAgICAg
ICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9HX0RJ
U0FCTEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwor
I2VuZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5
QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3Ap
OworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNB
Y2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2lu
Z2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVyID8g
d3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5vdGU6
IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRp
b25BdFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246
OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9w
ZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMp
OworCisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVy
dHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5J
bnRlcnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5SUQg
Q1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8
Ym9vbD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKwor
ICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAgIGlz
U2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJuIHdy
YXBwZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVt
UHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cDo6c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgwYzUz
ZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVy
dHlJRCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
Q1NTUHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAg
c3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBDU1NQ
cm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0
aGFuZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBz
dGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQcm9w
ZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFiNWFk
ZmQwNmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEzOWIw
NTlmMWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Ry
YW5zaXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9u
LmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwKICAg
ICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1hdGlv
biB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9wZXJ0
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlv
bnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwK
aW5kZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRlNDll
MjAyZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwog
CiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9u
cy10by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJB
bmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50ZXJm
YWNlIERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0
aW1lbGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1l
bnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4YTUz
NGMxZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0YTc4
ZWRlNTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9y
U2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8K
IAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lv
bnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAgIEVu
YWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBE
b2N1bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVudE9y
U2hhZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25zKCk7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxp
bmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCmlu
ZGV4IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEyNTQ0
MjU1ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAog
XSBpbnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAgICBb
Q2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxpbmVP
cHRpb25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5pZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4uZjBm
MzJiMGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVm
IFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNlYzNm
YTg0MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0ZThk
YTAwZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmlt
YXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRs
CkBAIC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwogICAg
IEFjdGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAg
ICAgSW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2Vi
QW5pbWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZjOWE2
ZDRhNTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiArNTAs
MTEgQEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAgfQog
fTsKIAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21wb3Np
dGUgICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAxCit9
OworCiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0aW9u
c01hcmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9IExp
c3RIYXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBhYzBk
ODA1YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uYTUxYjQzODE1NTUxMTFkMzc3NGFjMTM5N2UyOGY1
NDgyZTU1NzNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NT
Qm9yZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94Q29u
dGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRp
b24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEgKzIy
NDYsOSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5
bGVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Nv
bXBvc2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVk
QW5pbWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgeworICAgIGlmIChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlv
bk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKSB7CiAgICAgICAgIGlmIChhdXRv
IHRpbWVsaW5lID0gZWxlbWVudC5kb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAg
ICAgICAgIG93bmVkU3R5bGUgPSB0aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpy
ZW5kZXJlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJl
ci0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7
CiAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICE9IFBzZXVkb0lkOjpOb25lICYm
ICFlbGVtZW50LmlzUHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBjYWNoZWQgcHNldWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhh
cyBiZWVuIHJ1biBhdCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUt
PmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggOTA5NmYyNjQ2NzkxMzBhNzg0YTUxYTlhZGM4YmFkZWJlYzdjN2Fj
NC4uMjk0MGM1OGJmMTc4YzUyMGE2MDllYjFiNzM3NzM4ZWI2NjlmZGMwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkJlZm9yZVVubG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5j
bHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCkBAIC0xOTYyLDcgKzE5NjEsNiBAQCB2b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5
bGUoUmVzb2x2ZVN0eWxlVHlwZSB0eXBlKQogICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKFN0
eWxlUmVjYWxjU3RhcnQsIFN0eWxlUmVjYWxjRW5kKTsKIAogICAgIFJlbmRlclZpZXc6OlJlcGFp
bnRSZWdpb25BY2N1bXVsYXRvciByZXBhaW50UmVnaW9uQWNjdW11bGF0b3IocmVuZGVyVmlldygp
KTsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmbV9mcmFt
ZS0+bGVnYWN5QW5pbWF0aW9uKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoaXMgdXBkYXRlIHBl
ciB0cmVlIHNjb3BlLgogICAgIHsKQEAgLTI0MjIsMTkgKzI0MjAsMTMgQEAgdm9pZCBEb2N1bWVu
dDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSgpCiAgICAgLy8gYmUgb3V0IG9mIHN5
bmMgaWYgdGhlIERPTSBzdXNwZW5zaW9uIHN0YXRlIGNoYW5nZWQgd2hpbGUgdGhlIGRvY3VtZW50
IHdhcyBub3QgaW4gdGhlIGZyYW1lIChwb3NzaWJseSBpbiB0aGUKICAgICAvLyBiYWNrL2Zvcndh
cmQgY2FjaGUsIG9yIHNpbXBseSBuZXdseSBjcmVhdGVkKS4KICAgICBpZiAobV9mcmFtZS0+YWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNwZW5kZWQoKSkgewotICAgICAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xs
ZXIpCi0gICAgICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1h
dGlvbigpLnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgICAgIGlmICht
X3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXIt
PnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIHN1c3BlbmRTY2hlZHVsZWRUYXNrcyhSZWFz
b25Gb3JTdXNwZW5zaW9uOjpQYWdlV2lsbEJlU3VzcGVuZGVkKTsKICAgICB9IGVsc2UgewogICAg
ICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlV2lsbEJl
U3VzcGVuZGVkKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAg
ICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIG1fdGltZWxp
bmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1
bWVudCh0aGlzKTsKKyAgICAgICAgaWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKKyAgICAgICAg
ICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgIH0KIH0K
IApAQCAtMjUyOCw5ICsyNTIwLDYgQEAgdm9pZCBEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21G
cmFtZSgpCiAgICAgaWYgKG1faGFzUHJlcGFyZWRGb3JEZXN0cnVjdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlv
bigpLmRldGFjaEZyb21Eb2N1bWVudCh0aGlzKTsKLQogI2lmIFVTRShMSUJXRUJSVEMpCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIE1vZHVsZXMvbWVkaWFzdHJlYW0uCiAg
ICAgaWYgKExpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKSkgewpAQCAtMzA2Niw4
ICszMDU1LDYgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgICAgIGlmIChh
dXRvKiBkb2N1bWVudExvYWRlciA9IGxvYWRlcigpKQogICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXItPnN0YXJ0SWNvbkxvYWRpbmcoKTsKIAotICAgICAgICBmLT5sZWdhY3lBbmltYXRpb24oKS5z
dGFydEFuaW1hdGlvbnNJZk5vdFN1c3BlbmRlZCh0aGlzKTsKLQogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGJlIGRpc3BhdGNoaW5nIHBlbmRpbmcgZXZlbnRzIGdsb2JhbGx5IG9uIGFs
bCBEb2N1bWVudHMgaGVyZS4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBkbyB0aGlzIHdoZW4g
dGhlcmUgaXMgYSBGcmFtZSwgb3RoZXJ3aXNlIHRoaXMgY291bGQgY2F1c2UgSlMgcmVlbnRyYW5j
eQogICAgICAgICAvLyBiZWxvdyBTVkcgZm9udCBwYXJzaW5nLCBmb3IgZXhhbXBsZS4gPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEzNjI2OT4KQEAgLTU0NTQsMTEgKzU0NDEsOCBAQCB2b2lkIERvY3Vt
ZW50OjpyZXN1bWUoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAKICAgICBBU1NFUlQobV9m
cmFtZSk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKG1f
dGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+
cmVzdW1lQW5pbWF0aW9ucygpOyAgCi0gICAgfSBlbHNlCi0gICAgICAgIG1fZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCh0aGlzKTsKKyAgICBpZiAo
bV90aW1lbGluZXNDb250cm9sbGVyKQorICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJl
c3VtZUFuaW1hdGlvbnMoKTsKIAogICAgIHJlc3VtZVNjaGVkdWxlZFRhc2tzKHJlYXNvbik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA4Zjg2ZmY0MWE2NjQ2ODJjMmZjNjg3ZTNlYmE2ODNj
NTNmYzYzODZhLi5jNWIzMzE2Y2NmNjQyMTZmMjkxZTZiYTU2YWI4NzA4MTMwZjcxNDY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQVhPYmplY3RD
YWNoZS5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGVDaGFuZ2VJbnZh
bGlkYXRpb24uaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCkBAIC0xMTksNiArMTE4LDcgQEAKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgogI2lu
Y2x1ZGUgIlZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlvbi5oIgorI2luY2x1
ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0yMjg4LDkgKzIy
ODgsNiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVt
b3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcgogICAgIGlmIChhdXRvKiB0aW1lbGluZSA9
IGRvY3VtZW50KCkuZXhpc3RpbmdUaW1lbGluZSgpKQogICAgICAgICB0aW1lbGluZS0+ZWxlbWVu
dFdhc1JlbW92ZWQoKnRoaXMpOwogCi0gICAgaWYgKGZyYW1lKQotICAgICAgICBmcmFtZS0+bGVn
YWN5QW5pbWF0aW9uKCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICNpZiBFTkFCTEUoV0hF
RUxfRVZFTlRfTEFUQ0hJTkcpCiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlciA9IGZyYW1lLT5wYWdlKCkt
PnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcklmRXhpc3RzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5jcHAKaW5kZXggMTVkODFjMTA2ZDgwOTM1M2YyMWJlN2VjODQ4M2RkODhiNzYyOGIz
Ny4uZGFkMTU2NmNjMDZhM2QxNGQ2YmNiN2M1MDc2ZWNjMThiNmM3YTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qc2V1ZG9FbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50VGltZWxpbmUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAg
LTkzLDkgKzkyLDYgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KCkKICAg
ICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAg
ICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNSZW1vdmVkKCp0aGlzKTsKICAgICAKLSAgICBpZiAo
YXV0byogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGZyYW1lLT5sZWdhY3lB
bmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0aGlzKTsKLQogICAgIG1faG9zdEVsZW1lbnQg
PSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmluZGV4
IDQ2OTg1NzRkMzI1MDVlNmY5YzVjM2ExY2JhY2FiZmViMmQwZDQxZGMuLjhkZTI2ZTFiYzE1MzNm
ZDBiM2YwNzRmMDZiMWYzNGQzZTgwYjg5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVk
RnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUuaCIKIAog
I2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRl
ICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0yNzMsOCArMjcyLDYg
QEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAKICAgICBGcmFtZTo6Y2xlYXJUaW1lcnMo
bV92aWV3LmdldCgpLCBtX2RvY3VtZW50LmdldCgpKTsKIAotICAgIG1fdmlldy0+ZnJhbWUoKS5s
ZWdhY3lBbmltYXRpb24oKS5kZXRhY2hGcm9tRG9jdW1lbnQobV9kb2N1bWVudC5nZXQoKSk7Ci0K
ICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCByZW1vdmVBbGxFdmVudExpc3Rl
bmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNrL2ZvcndhcmQgY2FjaGUsIHRo
aXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3YXksIGJlY2F1c2UgdGhlIGRv
Y3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01XaW5kb3cgb2JqZWN0IChkdWUg
dG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5yZW1vdmVBbGxFdmVudExpc3Rl
bmVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzYzVhZTQ1ODU0YzcyYmRmNmZiNzM2NWVm
NWYyN2ZhYTZmZGJlNWVjLi5iZDM0OTdjMWEyMjAwMTU2NTZlMDAyMDQ1ZTRlNjE3N2MzOTM5OGI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFwcGx5
U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgpA
QCAtMTU2LDcgKzE1NSw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25hdmln
YXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhpcykp
CiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdChtYWtl
VW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkKICAg
ICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAgLCBt
X3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV9ldmVu
dEhhbmRsZXIobWFrZVVuaXF1ZVJlZjxFdmVudEhhbmRsZXI+KCp0aGlzKSkKQEAgLTczNywxMSAr
NzM1LDggQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVu
dCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+bGF5b3V0Q29u
dGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQtPnRpbWVs
aW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmlt
YXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS5sZWdh
Y3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LT50aW1lbGluZXNDb250cm9sbGVy
KCkpCisgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAg
IHZpZXctPmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcigpOwogICAg
IH0KIH0KQEAgLTEwMjksMTEgKzEwMjQsOCBAQCB2b2lkIEZyYW1lOjpyZXN1bWVBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpCiAKICAgICAvLyBGcmFtZTo6Y2xlYXJUaW1lcnMoKSBzdXNw
ZW5kZWQgYW5pbWF0aW9ucyBhbmQgcGVuZGluZyByZWxheW91dHMuCiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IG1fZG9jLT50
aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1h
dGlvbnMoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5p
bWF0aW9uc0ZvckRvY3VtZW50KG1fZG9jLmdldCgpKTsKKyAgICBpZiAoYXV0byogdGltZWxpbmVz
ID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgdGltZWxpbmVzLT5yZXN1
bWVBbmltYXRpb25zKCk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlvdXRD
b250ZXh0KCkuc2NoZWR1bGVMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA2OGZkYzEx
NTVkOTEzZWVjZjI1NzA2YWQ5ODg5YjUwMjFmYWJmMmM0Li41MGM2NWY1ZTViMDc1M2MxZTZkMzA3
YjIxM2I1MjAwYzQ1MGFhMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC02Niw3ICs2Niw2IEBAIGNs
YXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRG9j
dW1lbnQ7CkBAIC0xNzQsOCArMTczLDYgQEAgcHVibGljOgogICAgIEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIGNvbnN0
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5z
ZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwotICAgIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsgfQotICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIFNjcmlw
dENvbnRyb2xsZXImIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAgICAgY29uc3QgU2Ny
aXB0Q29udHJvbGxlciYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KIApAQCAt
MzQ1LDcgKzM0Miw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKIAog
ICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVSZWY8
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rp
b25SZXN1bHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc1YjllMmJmYzllYWUz
ZTM1YmVlMThmZWJkNDkxZjQwZjM2N2M2MTYuLmQ0OTI0MWVmMDg4YjgzNzYyNTYwOWQyYzY1YWJm
MjgzNGRhNDE4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNo
ZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01ODYsOCAr
NTg1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKCkKIAogICAgIEFT
U0VSVCghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdwb3J0Q29uc3RyYWlu
ZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9zbG93UmVwYWludE9i
amVjdHMgfHwgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0KLSAgICBB
U1NFUlQoIWZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuaGFzQW5pbWF0aW9ucygpKTsKIH0KIAog
dm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAt
NDQxNyw4ICs0NDE0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZO
ZWVkZWRSZWN1cnNpdmUoKQogICAgIC8vIFN0eWxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgc2NyaXB0
LCB3aGljaCBjYW4gY2F1c2UgdGhpcyBGcmFtZVZpZXcgdG8gYmUgZGVzdHJveWVkLgogICAgIFJl
ZjxGcmFtZVZpZXc+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgQW5pbWF0aW9uVXBkYXRl
QmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkpOwot
CiAgICAgdXNpbmcgRGVzY2VuZGFudHNEZXF1ZSA9IERlcXVlPFJlZjxGcmFtZVZpZXc+LCAxNj47
CiAgICAgYXV0byBuZXh0UmVuZGVyZWREZXNjZW5kYW50ID0gW3RoaXNdIChEZXNjZW5kYW50c0Rl
cXVlJiBkZXNjZW5kYW50c0RlcXVlKSAtPiBSZWZQdHI8RnJhbWVWaWV3PiB7CiAgICAgICAgIGlm
IChkZXNjZW5kYW50c0RlcXVlLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDBjOGJlNzk0OTUxYjc4ZTE5Yjc1OTI4ODVi
YmY4MzVlYjFjOTUzYjEuLjlmYTUxNzBmYTE1MTVmM2FmYjY3Y2YzMTA3ZDk4Y2ZiOTVlYjJkNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcApA
QCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lVmll
d0xheW91dENvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0yMDQsNyArMjAzLDYgQEAgdm9pZCBGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQoKQogICAgIExheW91dFNjb3BlIGxheW91dFNjb3BlKCp0aGlz
KTsKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlvdXRTdGFydCwgTGF5b3V0RW5kKTsK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZyYW1lKCkp
OwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZ2aWV3KCku
ZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7CiAgICAgV2Vha1B0cjxSZW5kZXJFbGVtZW50PiBs
YXlvdXRSb290OwogICAgIAogICAgIG1fbGF5b3V0VGltZXIuc3RvcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggYTBhNzdkMjg4MzY0ODIxYzUxMGIyZDUxMmJhNzBlNzI5YzIxYjZkNS4uZjkyM2Jh
ODkyOTljMDA4ZTEwZjBkMjhlZTgwYTNmM2Y5N2JhYTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBA
IC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlU3Rv
cmFnZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNs
dWRlICJDaHJvbWUuaCIKQEAgLTE2NDgsOSArMTY0Nyw2IEBAIHZvaWQgUGFnZTo6aGFuZGxlTG93
TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogICAgIG1fdGhyb3R0
bGluZ1JlYXNvbnMgPSBtX3Rocm90dGxpbmdSZWFzb25zIF4gVGhyb3R0bGluZ1JlYXNvbjo6TG93
UG93ZXJNb2RlOwogICAgIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpLmFkanVzdFJlbmRlcmlu
Z1VwZGF0ZUZyZXF1ZW5jeSgpOwogCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAg
ICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0YXRl
KCk7Ci0KICAgICB1cGRhdGVET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiB9CiAKQEAgLTIx
ODUsMTMgKzIxODEsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlz
VmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPnNob3coKTsKIAogICAgICAgICBpZiAobV9zZXR0
aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVh
Y2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1h
aW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICAgICAg
ICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIo
KSkKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRpb25zKCk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAo
RG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yMjA5LDEzICsyMjAyLDEwIEBAIHZvaWQgUGFnZTo6
c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAKICAgICBpZiAoIWlzVmlzaWJs
ZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3Bl
bnNpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkg
ewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50
aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMt
PnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5zdXNw
ZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVu
dCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9j
dW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0aW1lbGlu
ZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yNTYw
LDIxICsyNTUwLDE0IEBAIHZvaWQgUGFnZTo6cmVzZXRTZWVuTWVkaWFFbmdpbmVzKCkKIHZvaWQg
UGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKQogewog
ICAgIGlmICghaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGltZWxp
bmVzQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldHRpbmdzLT5o
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmlt
YXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlv
blN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5
QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25z
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGlt
ZWxpbmVzQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhp
ZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAg
ICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDA4NDNlZDc2MGNkZWM3M2E5Y2IxYWZm
N2RhMjljY2E0MDI0YTZhNDMuLmU2NGIyZTYxOWIxYWQ0MDFlY2U5OGM3ZWE4NDA5ZWY1YTk5NmFh
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBA
IC03MCwxMiArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1NlY3VyZUNvbnRleHRBdHRy
aWJ1dGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5hYmxl
ZDsgfQogCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGFyZUVuYWJsZWQp
IHsgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KLSAgICBib29sIHdl
YkFuaW1hdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5h
YmxlZDsgfQotCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
ID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCAmJiBtX2lzV2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsgfQotCiAgICAgdm9pZCBzZXRXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7IG1fYXJl
V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkID0gYXJlRW5hYmxlZDsgfQog
ICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7IH0K
IApAQCAtMzAwLDggKzI5NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTWVudUl0ZW1FbGVt
ZW50RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGlyZWN0b3J5VXBsb2FkRW5hYmxl
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgeyB0cnVlIH07Ci0g
ICAgYm9vbCBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCB7IHRydWUgfTsK
ICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFi
bGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbWFnZUJpdG1hcEVuYWJsZWQgeyB0cnVlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFlNzQzNTk3N2ZhOTI1MGVjMTBjMTczOTQx
NWRlNGNkNGY1NTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5j
bHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0
IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRp
b24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkKLSAgICAs
IG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2FuaW1h
dGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikpCi17Ci0gICAgLy8gQ29tcHV0
ZSB0aGUgdG90YWwgZHVyYXRpb24KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkgPiAwKQotICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotfQotCi1BbmltYXRpb25CYXNlOjp+
QW5pbWF0aW9uQmFzZSgpID0gZGVmYXVsdDsKLQotY29uc3QgUmVuZGVyU3R5bGUmIEFuaW1hdGlv
bkJhc2U6OmN1cnJlbnRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpOwotICAg
IHJldHVybiB1bmFuaW1hdGVkU3R5bGUoKTsKLX0KLQotUmVuZGVyRWxlbWVudCogQW5pbWF0aW9u
QmFzZTo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgPyBtX2VsZW1l
bnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmNsZWFy
KCkKLXsKLSAgICBlbmRBbmltYXRpb24oKTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRyOwotICAg
IG1fY29tcG9zaXRlQW5pbWF0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNl
OjpzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFlbGVt
ZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAg
IGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFzZTo6
ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsK
LX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6
UGxheWluZzsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2goY29uc3Qg
QW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5h
bmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRp
YyBjb25zdCBjaGFyKiBuYW1lRm9yU3RhdGUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGUg
c3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6
QW5pbWF0aW9uU3RhdGU6Ok5ldzogcmV0dXJuICJOZXciOwotICAgIGNhc2UgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOiByZXR1cm4gIlN0YXJ0V2FpdFRpbWVy
IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZTogcmV0dXJuICJTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6IHJldHVybiAi
U3RhcnRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGU6Okxvb3Bpbmc6IHJldHVybiAiTG9vcGluZyI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZTo6RW5kaW5nOiByZXR1cm4gIkVuZGluZyI7Ci0gICAgY2FzZSBBbmltYXRp
b25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OiByZXR1cm4gIlBhdXNlZE5ldyI7Ci0g
ICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVyOiBy
ZXR1cm4gIlBhdXNlZFdhaXRUaW1lciI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlBhdXNlZFdhaXRTdHls
ZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1
c2VkV2FpdFJlc3BvbnNlOiByZXR1cm4gIlBhdXNlZFdhaXRSZXNwb25zZSI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOiByZXR1cm4gIlBhdXNlZFJ1
biI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RG9uZTogcmV0dXJu
ICJEb25lIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpGaWxsaW5n
Rm9yd2FyZHM6IHJldHVybiAiRmlsbGluZ0ZvcndhcmRzIjsKLSAgICB9Ci0gICAgcmV0dXJuICIi
OwotfQotI2VuZGlmCi0KLSNpZiAhRVJST1JfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyKiBu
YW1lRm9yU3RhdGVJbnB1dChBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0
KQotewotICAgIHN3aXRjaCAoaW5wdXQpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXc6IHJldHVybiAiTWFrZU5ldyI7Ci0gICAgY2FzZSBBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbjogcmV0dXJuICJT
dGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlu
cHV0OjpSZXN0YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlJlc3RhcnRBbmltYXRpb24iOwotICAgIGNh
c2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkOiBy
ZXR1cm4gIlN0YXJ0VGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdHlsZUF2YWlsYWJsZSI7Ci0g
ICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQ6
IHJldHVybiAiU3RhcnRUaW1lU2V0IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlv
blN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkOiByZXR1cm4gIkxvb3BUaW1lckZpcmVkIjsKLSAg
ICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQ6
IHJldHVybiAiRW5kVGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlOiByZXR1cm4gIlBhdXNlT3ZlcnJpZGUiOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGU6
IHJldHVybiAiUmVzdW1lT3ZlcnJpZGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZzogcmV0dXJuICJQbGF5U3RhdGVSdW5uaW5n
IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0
ZVBhdXNlZDogcmV0dXJuICJQbGF5U3RhdGVQYXVzZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uOiByZXR1cm4gIkVuZEFuaW1hdGlv
biI7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLSNlbmRpZgotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUg
cGFyYW0pCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRp
b24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuCi0g
ICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKLSAgICAgICAg
aWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0gICAg
ICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhpcywg
bmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25TdGF0
ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0gV1RGOjpudWxs
b3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgbV9yZXF1
ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9IFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1h
dGlvbikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlv
bi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgbV9zdGFy
dFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0
OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4dEl0ZXJh
dGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24oKTsKLQot
ICAgICAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0
aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAgIGVuZEFu
aW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ID09IEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0
aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB3ZSBhcmUgaW4gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlLCB0
aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKLSAgICAgICAgICAgIC8vIHdl
IGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAg
ZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSkgewotICAgICAgICBpZiAobV9hbmltYXRp
b25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyB8fCBtX2FuaW1hdGlvblN0YXRlID09
IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmlt
YXRpb24KLSAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEV4ZWN1dGUgc3RhdGUgbWFjaGluZQotICAgIHN3aXRjaCAobV9h
bmltYXRpb25TdGF0ZSkgewotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpOZXc6Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRp
b24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8fCBp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0gICAgICAg
ICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24gfHwg
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewotICAgICAg
ICAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1l
KCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBTdGFydFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRl
KSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHBhdXNpbmcgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZC4KLSAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWROZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAg
ICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3Owot
ICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBs
YXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0g
Pj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRo
ZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFy
dCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlzLCBuYW1l
Rm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBtX2Fu
aW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOwot
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KLSAg
ICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rp
c3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIXBhdXNlZCgpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZv
ciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNlbCB0aGUg
dGltZXIsIHBhdXNlIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0
ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5
bGVBdmFpbGFibGU6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3R5bGVBdmFpbGFibGUgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxh
eVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIg
aGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRv
IHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSAodGltZSBpcyAlZiki
LCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3Bv
bnNlOwotCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG92ZXJy
aWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkgdG8gc3RhcnQg
YWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQKLSAgICAgICAg
ICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAg
ICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0
V2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNl
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBmb3IgJ2FuaW1hdGlv
bi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9uIGFwcGVhcnMgdG8gaGF2ZSBz
dGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb24t
PmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1tX2Fu
aW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3Rh
cnRBbmltYXRpb24odGltZU9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhlIHN0
eWxlIHRvIGJlIGF2YWlsYWJsZSBhbmQgd2UgZ290IGEgcGF1c2UuIFBhdXNlIGFuZCB3YWl0Ci0g
ICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsK
LSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlv
blN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0
YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6
Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRU
aW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCk7
Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRp
bWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPiAtMC4wMDEpOyAvLyBTb21l
dGltZXMgQ29yZSBBbmltYXRpb24gZ2l2ZXMgdXMgYSBiZWdpblRpbWUgc2xpZ2h0bHkgaW50byB0
aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9u
U3RhdGUgJXMgLT4gU3RhcnRUaW1lU2V0ICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0
ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSBhIHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxyZWFkeSBz
ZXQKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2
YWx1ZSBmb3IgJ2FuaW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9u
IGFwcGVhcnMgdG8gaGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZSgpICsgbV9hbmltYXRpb24tPmRlbGF5KCk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25v
dyB0aGUgc3RhcnQgdGltZSwgZmlyZSB0aGUgc3RhcnQgZXZlbnQuCi0gICAgICAgICAgICAgICAg
b25BbmltYXRpb25TdGFydCgwKTsgLy8gVGhlIGVsYXBzZWRUaW1lIGlzIDAuCi0KLSAgICAgICAg
ICAgICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0
YXRlCi0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLQotICAg
ICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2UgY2FuIHN0
YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0aW5nIGZv
ciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4gV2hlbiAK
LSAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91Z2ggdGhl
IHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5pbWF0aW9u
KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0g
ICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQ
YXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmc6Ci0gICAgICAgICAgICBBU1NFUlQoaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQgfHwgaW5wdXQgPT0gQW5p
bWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlu
cHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkKSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtID49IDApOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTG9vcFRpbWVyRmlyZWQgKHRpbWUgaXMgJWYpIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KLSAgICAgICAg
ICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRlCi0gICAg
ICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmluZy4g
Q2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGlt
ZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5p
bWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigw
KSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
UnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5p
bWF0aW9uU3RhdGU6OkVuZGluZzoKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgICAgIGlm
IChpbnB1dCAhPSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkICYmIGlucHV0ICE9
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIlN0YXRlIGlzIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcsIGJ1dCBpbnB1dCBpcyBu
b3QgQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCBvciBBbmltYXRpb25TdGF0ZUlu
cHV0OjpQbGF5U3RhdGVQYXVzZWQuIEl0IGlzICVzLiIsIG5hbWVGb3JTdGF0ZUlucHV0KGlucHV0
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0
OjpFbmRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwot
ICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCi0gICAgICAgICAg
ICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lICh0aW1lIGlzICVmKSIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAgICAg
IG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEZpbGxpbmdGb3J3
YXJkcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkZpbGxpbmdG
b3J3YXJkczsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZpbmFs
IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFk
ZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcg
d2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAg
ICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAg
ICAgICAgIHBhdXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFy
dFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBB
bmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmlt
YXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRp
b25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gfHRoaXN8
IG1heSBiZSBkZWxldGVkIGhlcmUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFu
aW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyk7Ci0gICAgICAgICAgICBB
U1NFUlQocGF1c2VkKCkpOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwotICAgICAg
ICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5BbmltYXRp
b25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAgICAgbV9w
YXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgIC8vIHdlIHdlcmUgd2FpdGlu
ZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4KLSAg
ICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3Iiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgIG1fYW5p
bWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc6Ci0g
ICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZToKLSAgICAgICAg
Y2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOgotICAgICAgICBj
YXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46Ci0gICAgICAgICAgICAvLyBXZSB0cmVhdCB0
aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwgd2hl
biB3ZSBhcmUgaW4KLSAgICAgICAgICAgIC8vIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVz
cG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBzZW5kIDAg
dG8gc3RhcnRBbmltYXRpb24uCi0gICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVTZXQgY29tZXMgaW4gYW5kIHdlIHdlcmUgaW4gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZFJ1biwgd2Ugd2lsbCBub3RpY2UKLSAgICAgICAgICAgIC8vIHRoYXQgd2UgaGF2
ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAgICAgICAg
ICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQg
fHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8fCBpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0gQW5pbWF0
aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpOwotICAgICAgICAgICAgQVNTRVJUKHBhdXNl
ZCgpKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBs
YXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdl
IHdlcmUgcGF1c2VkIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQsIGFuZCBub3cgd2UncmUgc3VwcG9z
ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RhcnQsIHNvIGp1bXAgYmFjayB0byB0aGUg
TmV3IHN0YXRlIGFuZCByZXNldC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6TmV3IiwgdGhpcywgbmFt
ZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbmlt
YXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICAgICAgICAgIG1f
cGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0
ZU1hY2hpbmUoaW5wdXQsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwotICAg
ICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVz
ZWRSdW4pCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWUudmFs
dWVPcigwKSArIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUudmFsdWVP
cigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRU
aW1lID0gMDsKLQotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0Owot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBXZSB3ZXJlIGVpdGhlciBydW5uaW5nIG9yIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGltZSByZXNw
b25zZSBmcm9tIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB3
YXkgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhbmltYXRpb24gKHBvc3NpYmx5IHdpdGggYW4gb2Zm
c2V0IGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhZCBhbHJlYWR5IGJlZW4gcnVubmlu
ZykgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChvdmVycmlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFyZSBvdmVy
cmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRo
ZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0g
bV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2UgZ290IHRoZSBj
YWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9uIHN0
YXJ0ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBzdGFydCB0aW1lIGFuZCBq
dXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KLSAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biAodGltZSBpcyAl
ZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAg
ICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gbV9wYXVz
ZVRpbWUudmFsdWVPcigwKSArIHBhcmFtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZTo6UGF1c2VkTmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBB
bmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpT
dHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0IHdlIGdv
dCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IHN0eWxlIGhhcyBiZWVuIHVwZGF0
ZWQuCi0gICAgICAgICAgICAvLyBXZSBtb3ZlIHRvIHRoZSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
V2FpdFJlc3BvbnNlIHN0YXRlCi0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1h
dGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZSht
X2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIG92ZXJyaWRlQW5pbWF0
aW9ucygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6
OkZpbGxpbmdGb3J3YXJkczoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RG9uZToKLSAg
ICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3ZSBhcmUg
ZGVsZXRlZAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0
ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcg
Zm9yIHRoZSBkZWxheSB0aW1lIHRvIGV4cGlyZSBhbmQgaXQgaGFzLCBnbyB0byB0aGUgbmV4dCBz
dGF0ZQotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRUaW1lciAmJiBtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpMb29waW5nICYm
IG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0byB0aGUg
dGhpcyBwb2ludGVyLCBiZWNhdXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAvLyBkdXJp
bmcgYW4gYW5pbWF0aW9uIGNhbGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4gU2luY2UgdGhl
IG93bmVyIGlzIGEgQ29tcG9zaXRlQW5pbWF0aW9uCi0gICAgLy8gYW5kIGl0IHJlZiBjb3VudHMg
dGhpcyBvYmplY3QsIHdlIHdpbGwga2VlcCBhIHJlZiB0byB0aGF0IGluc3RlYWQuIFRoYXQgd2F5
IHRoZSBBbmltYXRpb25CYXNlCi0gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGUgcmVzb3VyY2Vz
IG9mIGl0cyBDb21wb3NpdGVBbmltYXRpb24gYXMgbmVlZGVkLgotICAgIFJlZjxBbmltYXRpb25C
YXNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBSZWY8Q29tcG9zaXRlQW5pbWF0aW9uPiBw
cm90ZWN0Q29tcG9zaXRlQW5pbWF0aW9uKCptX2NvbXBvc2l0ZUFuaW1hdGlvbik7Ci0gICAgCi0g
ICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKLSAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIpIHsKLSAgICAgICAgaWYgKGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPj0gbV9hbmltYXRpb24t
PmRlbGF5KCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCBlbGFwc2VkRHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBzdWdnZXN0
cyB0aGF0Ci0gICAgLy8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJlZ2luQW5p
bWF0aW9uVXBkYXRlKCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCi0gICAgLy8gQWxzbyBjaGVjayBp
biBnZXRUaW1lVG9OZXh0RXZlbnQoKS4KLSAgICBlbGFwc2VkRHVyYXRpb24gPSBzdGQ6Om1heChl
bGFwc2VkRHVyYXRpb24sIDAuMCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGVuZCB0aW1lb3V0
Ci0gICAgaWYgKG1fdG90YWxEdXJhdGlvbiAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90b3RhbER1
cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGJlIGluIEFuaW1hdGlv
blN0YXRlOjpMb29waW5nIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2tpcCBhCi0gICAgICAgIC8vIHdo
b2xlIGl0ZXJhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQganVtcCB0byB0aGUgZW5kIHN0
YXRlLgotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEVu
ZGluZyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOwotCi0gICAgICAgIC8vIEZp
cmUgYW4gZW5kIGV2ZW50Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpFbmRUaW1lckZpcmVkLCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlvbiB0aW1lb3V0Ci0gICAgICAgIGlm
ICghbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEhhc24ndCBiZWVu
IHNldCB5ZXQsIHNldCBpdAotICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5k
dXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNl
ZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoZWxhcHNlZER1cmF0aW9uID49IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0gICAgICAg
ICAgICAvLyBTZXQgdG8gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICBkb3VibGUgcHJl
dmlvdXMgPSBtX25leHRJdGVyYXRpb25EdXJhdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgZG91
YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2Vk
RHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0
ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBldmVudAotICAgICAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkLCBwcmV2aW91
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlUGxh
eVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSBwbGF5U3RhdGUpCi17Ci0gICAgaWYgKCFtX2NvbXBv
c2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2hlbiB3ZSBnZXQgaGVy
ZSwgd2UgY2FuIGhhdmUgb25lIG9mIDQgZGVzaXJlZCBzdGF0ZXM6IHJ1bm5pbmcsIHBhdXNlZCwg
c3VzcGVuZGVkLCBwYXVzZWQgJiBzdXNwZW5kZWQuCi0gICAgLy8gVGhlIHN0YXRlIG1hY2hpbmUg
Y2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQuCi0gICAgLy8gU2V0
IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgIGJvb2wgcGF1c2Ug
PSBwbGF5U3RhdGUgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQgfHwgbV9jb21wb3NpdGVB
bmltYXRpb24tPmlzU3VzcGVuZGVkKCk7Ci0KLSAgICBpZiAocGF1c2UgPT0gcGF1c2VkKCkgJiYg
IWlzTmV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShwYXVz
ZSA/ICBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQgOiBBbmltYXRpb25TdGF0
ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nLCAtMSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IEFu
aW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICAvLyBSZXR1cm5zIHRoZSB0
aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1lYW5z
IG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJlcXVp
cmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNv
bmRzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkgfHwgcG9zdEFj
dGl2ZSgpIHx8IGZpbGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRUaW1lcikgewotICAgICAgICBkb3VibGUgdGltZUZyb21Ob3cgPSBtX2FuaW1hdGlvbi0+
ZGVsYXkoKSAtIChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVkU3RhcnRU
aW1lKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KFNlY29uZHMgeyB0aW1lRnJvbU5vdyB9LCAw
X3MpOwotICAgIH0KLSAgICAKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLSAg
ICAgICAgCi0gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2UgcmlnaHQg
YXdheS4KLSAgICByZXR1cm4gMF9zOwotfQotCi0vLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFsIHRp
bWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotLy8gVGhlcmUgaXMgbm8gbmVlZCB0
byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZlCi0v
LyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lLgotCi1kb3VibGUgQW5pbWF0
aW9uQmFzZTo6ZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNlZFRpbWUs
IGRvdWJsZSBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gbV9h
bmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSkgOiAxOwotICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0aGUgY3Vy
cmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0aGUgZnJh
bWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIuIFNvIHdl
IG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3NzaWJsZQot
ICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3RpY2VhYmxl
LiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3Ci0gICAgLy8gQVNTRVJUKGZyYWN0
aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCi0gICAgICAgIGZy
YWN0aW9uYWxUaW1lID0gMDsKLQotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBjb25zdCBpbnQgaW50ZWdyYWxJdGVyYXRpb25Db3Vu
dCA9IHN0YXRpY19jYXN0PGludD4obV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpOwotICAg
IGNvbnN0IGJvb2wgaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsID0gbV9hbmltYXRpb24tPml0
ZXJhdGlvbkNvdW50KCkgLSBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50OwotICAgIGlmIChtX2FuaW1h
dGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5p
dGUgJiYgIWl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCkKLSAgICAgICAgaW50ZWdyYWxUaW1l
ID0gc3RkOjptaW4oaW50ZWdyYWxUaW1lLCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50IC0gMSk7Ci0K
LSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0KLSAgICBpZiAoKChtX2FuaW1h
dGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgKChtX2FuaW1hdGlvbi0+ZGly
ZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNl
KSAmJiAhKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCBtX2FuaW1hdGlvbi0+ZGlyZWN0
aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAgICAgICBm
cmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2FsZSAhPSAx
IHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRpbWUgLSBv
ZmZzZXQpICogc2NhbGU7Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0KLWRvdWJs
ZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQsIGNv
bnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikgY29uc3QKLXsKLSAgICBpZiAocHJl
QWN0aXZlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUoKSkKLSAg
ICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGlt
ZSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7Ci0g
ICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKLSAgICAgICAgZHVyYXRp
b24gKj0gbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoZmlsbGluZ0Zv
cndhcmRzKCkpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gZHVyYXRpb247Ci0KLSAgICBkb3VibGUg
ZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZShzY2FsZSwgZWxhcHNlZFRpbWUs
IG9mZnNldCk7Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwICYm
IGVsYXBzZWRUaW1lID49IGR1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChXVEY6OmlzSW50ZWdyYWwo
ZnJhY3Rpb25hbFRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOwotICAg
IH0KLQotICAgIGlmICghdGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0g
bV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gdGltaW5nRnVuY3Rp
b24tPnRyYW5zZm9ybVRpbWUoZnJhY3Rpb25hbFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigp
KTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoU2Vjb25kcyYg
dGltZSwgYm9vbCYgaXNMb29waW5nKSBjb25zdAotewotICAgIC8vIERlY2lkZSB3aGVuIHRoZSBl
bmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgY29uc3QgZG91YmxlIGVsYXBzZWRE
dXJhdGlvbiA9IHN0ZDo6bWF4KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRp
bWUudmFsdWVPcigwKSwgMC4wKTsKLSAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsKLSAgICBk
b3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb24udmFsdWVPcigwKTsKLQot
ICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90YWxEdXJh
dGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJh
dGlvbigpID4gMCA/IChtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1cmF0
aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkpIDogMDsKLSAgICAgICAgbmV4dEl0ZXJhdGlv
blRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgfQotICAgIAotICAg
IGlmICghbV90b3RhbER1cmF0aW9uIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3RhbER1cmF0
aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUgZW5kIHlldAotICAg
ICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKLSAgICAgICAgaXNMb29waW5nID0g
dHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZAotICAgICAg
ICBpc0xvb3BpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdGltZSA9IFNlY29uZHMgeyBk
dXJhdGlvbkxlZnQgfTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdPckxv
b3BpbmdTdGF0ZSgpCi17Ci0gICAgU2Vjb25kcyB0OwotICAgIGJvb2wgaXNMb29waW5nOwotICAg
IGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOwotICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gJXMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRp
b25TdGF0ZSksIGlzTG9vcGluZyA/ICJMb29waW5nIiA6ICJFbmRpbmciKTsKLSAgICBtX2FuaW1h
dGlvblN0YXRlID0gaXNMb29waW5nID8gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgOiBBbmltYXRp
b25TdGF0ZTo6RW5kaW5nOwotfQotICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZnJlZXplQXRUaW1l
KGRvdWJsZSB0KQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZW4n
dCBzdGFydGVkIHlldCwgbWFrZSBpdCBhcyBpZiB3ZSBzdGFydGVkLgotICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgb25Bbmlt
YXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobV9zdGFydFRpbWUpOyAvLyBJZiBtX3N0YXJ0VGltZSBpcyB6ZXJvLCB3ZSBoYXZlbid0
IHN0YXJ0ZWQgeWV0LCBzbyB3ZSdsbCBnZXQgYSBiYWQgcGF1c2UgdGltZS4KLSAgICBpZiAodCA8
PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0VGlt
ZS52YWx1ZU9yKDApOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0VGlt
ZS52YWx1ZU9yKDApICsgdCAtIG1fYW5pbWF0aW9uLT5kZWxheSgpOwotCi0gICAgaWYgKGF1dG8q
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnN1c3BlbmRB
bmltYXRpb25zKE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKG1fcGF1c2VUaW1lLnZhbHVl
KCkpKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNl
Y29uZHMoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1lKCkgY29u
c3QKLXsKLSAgICBpZiAocGF1c2VkKCkpIHsKLSAgICAgICAgZG91YmxlIGRlbGF5T2Zmc2V0ID0g
KCFtX3N0YXJ0VGltZSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApID8gbV9hbmltYXRpb24t
PmRlbGF5KCkgOiAwOwotICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWUudmFsdWVPcigwKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCkgLSBkZWxheU9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
c3RhcnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZlKCkgfHwg
ZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBtX3RvdGFsRHVyYXRpb24udmFsdWVP
cigwKTsKLQotICAgIHJldHVybiBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRU
aW1lLnZhbHVlT3IoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0RWxhcHNlZFRpbWUo
ZG91YmxlIHRpbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAotICAg
IFVOVVNFRF9QQVJBTSh0aW1lKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwbGF5KCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0KLXZvaWQgQW5pbWF0aW9u
QmFzZTo6cGF1c2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLX0K
LQotc3RhdGljIGJvb2wgY29udGFpbnNSb3RhdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4+JiBvcGVyYXRpb25zKQotewotICAgIGZvciAoY29uc3QgYXV0byYgb3Bl
cmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0g
VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVU
cmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJl
ckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0
Ci17Ci0gICAgRmxvYXRSZWN0IGZsb2F0Qm91bmRzID0gYm91bmRzOwotICAgIEZsb2F0UG9pbnQg
dHJhbnNmb3JtT3JpZ2luOwotICAgIAotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1PcmlnaW4gPSBj
b250YWluc1JvdGF0aW9uKHN0eWxlLnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKSkgfHwgc3R5bGUu
dHJhbnNmb3JtKCkuYWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdpbigpOwotICAgIGlmIChhcHBseVRy
YW5zZm9ybU9yaWdpbikgewotICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSByZW5kZXJlckJveC5s
b2NhdGlvbigpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnRyYW5zZm9ybU9yaWdp
blhZKCksIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgIC8vIElnbm9yZSB0cmFuc2Zvcm1P
cmlnaW5aIGJlY2F1c2Ugd2UnbGwgYmFpbCBpZiB3ZSBlbmNvdW50ZXIgYW55IDNEIHRyYW5zZm9y
bXMuCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2luKTsKLSAgICB9
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHN0eWxlLnRyYW5zZm9ybSgpLm9w
ZXJhdGlvbnMoKSkgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEUpIHsKLSAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3QgdHJlYXQg
dGhpcyBhcyBhIGZ1bGwgcm90YXRpb24uIFRoaXMgY291bGQgdGFrZSBhbmdsZSBpbnRvIGFjY291
bnQgdG8gcmVkdWNlIGluZmxhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gYm91bmRz
T2ZSb3RhdGluZ1JlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICAgICAgb3BlcmF0aW9u
LT5hcHBseSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAo
IXRyYW5zZm9ybS5pc0FmZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYIHx8IG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
XzNEKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQy
VHlwZSB0b0RlY29tcDsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZGVjb21wb3NlMih0b0Rl
Y29tcCk7Ci0gICAgICAgICAgICAgICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVzIGZyb20g
dXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgICAgICAgICAgICAgaWYg
KHRvRGVjb21wLmFuZ2xlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gdHJhbnNmb3JtLm1hcFJlY3Qo
ZmxvYXRCb3VuZHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFwcGx5VHJhbnNmb3Jt
T3JpZ2luKQotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkodHJhbnNmb3JtT3JpZ2luKTsKLQot
ICAgIGJvdW5kcyA9IExheW91dFJlY3QoZmxvYXRCb3VuZHMpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJp
eChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5kZXJlckJv
eCwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgIGlmICghdHJhbnNm
b3JtLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5cGUgZnJvbURlY29tcDsKLSAgICB0cmFuc2Zvcm0uZGVj
b21wb3NlMihmcm9tRGVjb21wKTsKLSAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMgdXMgZnJv
bSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICBpZiAoZnJvbURlY29t
cC5hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm91bmRzID0gTGF5b3V0UmVj
dCh0cmFuc2Zvcm0ubWFwUmVjdChib3VuZHMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLQotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQyMDRlZDc5
NmFlNTIxYWE4YjFjOGU0NzI4OTI0MDI0NTRhODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlQW5pbWF0
aW9uOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheW91dFJlY3Q7
Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUaW1pbmdG
dW5jdGlvbjsKLQotZW51bSBjbGFzcyBBbmltYXRlQ2hhbmdlIHsKLSAgICBTdHlsZUJsZW5kZWQg
ICAgICAgICAgICA9IDEgPDwgMCwgLy8gU3R5bGUgd2FzIGNoYW5nZWQuCi0gICAgU3RhdGVDaGFu
Z2UgICAgICAgICAgICAgPSAxIDw8IDEsIC8vIEFuaW1hdGlvbiBzdGF0ZSgpIGNoYW5nZWQuCi0g
ICAgUnVubmluZ1N0YXRlQ2hhbmdlICAgICAgPSAxIDw8IDIsIC8vIEFuaW1hdGlvbiAicnVubmlu
ZyBvciBwYXVzZWQiIGNoYW5nZWQuCi19OwotCi1lbnVtIGNsYXNzIEFuaW1hdGlvbkltcGFjdCB7
Ci0gICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAgICAgPSAxIDw8IDAsCi0gICAgRm9yY2VzU3RhY2tp
bmdDb250ZXh0ICAgPSAxIDw8IDEKLX07Ci0KLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxBbmltYXRpb25CYXNlPgotICAgICwgcHVibGljIENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci0gICAgZnJp
ZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0
aW9uLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0gICAgdmlydHVhbCB+QW5pbWF0
aW9uQmFzZSgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3Q7Ci0KLSAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRoZSBz
dGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKLSAgICAvLyB0aGUg
YW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBkZWZlcnJl
ZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KLSAgICAvLyBJZiBzbywgd2Ugc3RheSBpbiB0
aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1cm5z
IHRoZSBzdGFydCB0aW1lKS4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3VycmVudCB0
aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byBBbmltYXRpb25TdGF0
ZTo6TG9vcGluZwotICAgIC8vIG9yIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcuCi0gICAgZW51bSBj
bGFzcyBBbmltYXRpb25TdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBOZXcsICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBydW5u
aW5nIHlldAotICAgICAgICBTdGFydFdhaXRUaW1lciwgICAgICAgICAgICAgLy8gc3RhcnQgdGlt
ZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBTdGFydFdhaXRTdHlsZUF2YWls
YWJsZSwgICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFuaW1h
dGlvbnMKLSAgICAgICAgU3RhcnRXYWl0UmVzcG9uc2UsICAgICAgICAgIC8vIGFuaW1hdGlvbiBz
dGFydGVkLCB3YWl0aW5nIGZvciByZXNwb25zZQotICAgICAgICBMb29waW5nLCAgICAgICAgICAg
ICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBsb29wIHRp
bWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgRW5kaW5nLCAgICAgICAgICAg
ICAgICAgICAgIC8vIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVyIHJ1bm5p
bmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgUGF1c2VkTmV3LCAgICAgICAgICAgICAgICAg
IC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24gd2FzIGNyZWF0ZWQKLSAgICAgICAgUGF1
c2VkV2FpdFRpbWVyLCAgICAgICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24g
c3RhcnRlZAotICAgICAgICBQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGUsICAgLy8gaW4gcGF1c2Ug
bW9kZSB3aGVuIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwCi0gICAgICAgIFBhdXNlZFdhaXRSZXNw
b25zZSwgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcgc3RhdGUK
LSAgICAgICAgUGF1c2VkUnVuLCAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQg
d2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQotICAgICAgICBEb25lLCAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5kIHJl
bW92ZWQKLSAgICAgICAgRmlsbGluZ0ZvcndhcmRzICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBo
YXMgZW5kZWQgYW5kIGlzIHJldGFpbmluZyBpdHMgZmluYWwgdmFsdWUKLSAgICB9OwotCi0gICAg
ZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZUlucHV0IDogdWludDhfdCB7Ci0gICAgICAgIE1ha2VO
ZXcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0ZQotICAgICAg
ICBTdGFydEFuaW1hdGlvbiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQKLSAgICAg
ICAgUmVzdGFydEFuaW1hdGlvbiwgIC8vIGZvcmNlIGEgcmVzdGFydCBmcm9tIGFueSBzdGF0ZQot
ICAgICAgICBTdGFydFRpbWVyRmlyZWQsICAgLy8gc3RhcnQgdGltZXIgZmlyZWQKLSAgICAgICAg
U3R5bGVBdmFpbGFibGUsICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFydCBhbmlt
YXRpbmcKLSAgICAgICAgU3RhcnRUaW1lU2V0LCAgICAgIC8vIG1fc3RhcnRUaW1lIHdhcyBzZXQK
LSAgICAgICAgTG9vcFRpbWVyRmlyZWQsICAgIC8vIGxvb3AgdGltZXIgZmlyZWQKLSAgICAgICAg
RW5kVGltZXJGaXJlZCwgICAgIC8vIGVuZCB0aW1lciBmaXJlZAotICAgICAgICBQYXVzZU92ZXJy
aWRlLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQotICAgICAgICBS
ZXN1bWVPdmVycmlkZSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9uCi0gICAg
ICAgIFBsYXlTdGF0ZVJ1bm5pbmcsICAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5uaW5nCi0g
ICAgICAgIFBsYXlTdGF0ZVBhdXNlZCwgICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1c2Vk
Ci0gICAgICAgIEVuZEFuaW1hdGlvbiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBhbnkgc3Rh
dGUKLSAgICB9OwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIEFuaW1hdGlv
blN0YXRlOjpOZXcgdG8gc3RhcnQgYW5pbWF0aW9uCi0gICAgdm9pZCB1cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uU3RhdGVJbnB1dCwgZG91YmxlIHBhcmFtKTsKLQotICAgIC8vIEFuaW1hdGlv
biBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKLSAgICB2b2lkIG9uQW5pbWF0
aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLSAgICB7Ci0gICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIHN0
YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgfQotCi0gICAgLy8g
Q2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQotICAgIHZvaWQgdXBkYXRl
UGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSk7Ci0gICAgYm9vbCBwbGF5U3RhdGVQbGF5aW5n
KCkgY29uc3Q7Ci0KLSAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyIHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgcHJlQWN0aXZlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGlt
ZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVB
dmFpbGFibGUgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
UmVzcG9uc2U7Ci0gICAgfQotCi0gICAgYm9vbCBwb3N0QWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotICAgIGJvb2wgZmls
bGluZ0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7IHJl
dHVybiAhcG9zdEFjdGl2ZSgpICYmICFwcmVBY3RpdmUoKTsgfQotICAgIGJvb2wgcnVubmluZygp
IGNvbnN0IHsgcmV0dXJuICFpc05ldygpICYmICFwb3N0QWN0aXZlKCk7IH0KLSAgICBib29sIHBh
dXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNQYXVzZWRT
dGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZE5ldyAmJiBzdGF0ZSA8PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOyB9Ci0g
ICAgc3RhdGljIGJvb2wgaXNSdW5uaW5nU3RhdGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUpIHsgcmV0
dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAmJiBz
dGF0ZSA8IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0KLSAgICBib29sIGluUGF1c2VkU3RhdGUo
KSBjb25zdCB7IHJldHVybiBpc1BhdXNlZFN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpOyB9Ci0gICAg
Ym9vbCBpblJ1bm5pbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUnVubmluZ1N0YXRlKG1fYW5p
bWF0aW9uU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
YXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0YXJ0VGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFJlc3BvbnNlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRTdHlsZUF2YWlsYWJsZTsgfQotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0FjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxl
ID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51bGxwdHIp
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKLQotICAgIHZpcnR1YWwg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0
ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0K
LSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBjb25zdDsKLQotICAg
IGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb247
IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbikgeyBt
X2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsgfQotCi0gICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3aWxs
IG9ubHkgYmUgdGhlIGNhc2UgZm9yCi0gICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBpcyB1
c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKLSAgICAvLyBz
ZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3aWxs
IHByb2JhYmx5IG5vdCBnZXQKLSAgICAvLyBiYWNrIHRoZSBBbmltYXRpb25TdGF0ZUlucHV0OjpT
dGFydFRpbWVTZXQgaW5wdXQuCi0gICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0aW9u
IGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PwotICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCAvKnByb3BlcnR5Ki8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Ym9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYWNjZWxlcmF0
ZWRPbmx5ICYmICFtX2lzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgaWYgKCFhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBpblJ1bm5pbmdTdGF0ZSgpIHx8IGluUGF1c2Vk
U3RhdGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoOyB9
Ci0gICAgYm9vbCBmaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2lmIEVOQUJMRShGSUxURVJTX0xF
VkVMXzIpCi0gICAgYm9vbCBiYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7IH0K
LSNlbmRpZgotICAgIGJvb2wgY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0KLSAg
ICAvLyBGcmVlemUgdGhlIGFuaW1hdGlvbjsgdXNlZCBieSBEdW1wUmVuZGVyVHJlZS4KLSAgICB2
b2lkIGZyZWV6ZUF0VGltZShkb3VibGUgdCk7Ci0KLSAgICAvLyBQbGF5IGFuZCBwYXVzZSBBUEkK
LSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0gICAgCi0gICAgZG91YmxlIGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIGNvbnN0OwotICAgIAotICAgIGRvdWJsZSBnZXRFbGFw
c2VkVGltZSgpIGNvbnN0OwotICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3aWxsIGFk
anVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KLSAgICB2b2lkIHNl
dEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0gICAgCi0gICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpIAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKTsKLSAgICAg
ICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxl
LCAtMSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlQW5p
bWF0aW9ucygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9u
cygpIHsgfQotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24oKSB7
IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgfQotCi0gICAgLy8gVGhlc2UgYXJlIGNhbGxl
ZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMgY2FuIGRv
IGFueSBleHRyYSB3b3JrCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91Ymxl
IC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0
aW9uKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1h
dGlvbkVuZChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICAKLSAgICAvLyB0aW1lT2Zm
c2V0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgd2hlbiB0aGUgYW5pbWF0aW9u
IHNob3VsZCBzdGFydC4gTmVnYXRpdmUgdmFsdWVzIGFyZSBPSy4KLSAgICAvLyBSZXR1cm4gdmFs
dWUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhwZWN0IGFuIGFzeW5jaHJvbm91cyBub3RpZnlBbmlt
YXRpb25TdGFydGVkKCkgY2FsbGJhY2suCi0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9u
KGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyB0aW1lT2Zm
c2V0IGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhbmltYXRpb24gaXMgYmVpbmcgcGF1c2VkLgot
ICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKmZpbGxpbmdGb3J3YXJkcyov
ID0gZmFsc2UpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRl
ZFN0eWxlKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0
ZSgpOwotCi0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvblN0YXRlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1l
bnQqKTsKLSAgICAKLSAgICB2b2lkIGdldFRpbWVUb05leHRFdmVudChTZWNvbmRzJiB0aW1lLCBi
b29sJiBpc0xvb3BpbmcpIGNvbnN0OwotCi0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lKGRvdWJs
ZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBkb3VibGUgb2Zmc2V0KSBjb25zdDsKLQotICAg
IC8vIFRoZXNlIHJldHVybiB0cnVlIGlmIHdlIGNhbiBlYXNpbHkgY29tcHV0ZSBhIGJvdW5kaW5n
IGJveCBieSBhcHBseWluZyB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gdG8gdGhlIGJvdW5kcyByZWN0
LgotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChjb25z
dCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJlY3Qm
IGJvdW5kcykgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRy
aXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBMYXlv
dXRSZWN0JiBib3VuZHMpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2lzQWNjZWxl
cmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2gg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxzZSB9
OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgYm9vbCBtX2JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBDb21wb3NpdGVBbmlt
YXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAvLyBJZGVhbGx5IHRoaXMgd291bGQgYmUgYSBy
ZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xlYXJlZCBpZiBhbiBhbmltYXRpb24gaXMgZGVz
dHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFjay4KLSAgICBSZWY8QW5pbWF0aW9uPiBtX2Fu
aW1hdGlvbjsKLQotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV9zdGFydFRpbWU7Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRpbWUg
eyAwIH07Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3RvdGFsRHVyYXRpb247Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBtX25leHRJdGVyYXRpb25EdXJhdGlvbjsKLQotICAgIEFuaW1hdGlvblN0YXRl
IG1fYW5pbWF0aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07Ci0gICAgYm9vbCBtX2Nv
bG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMmFjOWRhNzhkMzI2YzU4NDE1MmYyMzlmMjdkZTgzNDEyZjYxNzQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MDUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkFu
aW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVHJhbnNpdGlvbkV2ZW50LmgiCi0jaW5jbHVk
ZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZl
bnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRo
YW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRl
Lgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9uVGltZXJEZWxheSB7IDE1X21zIH07Ci0v
LyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gMzBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBs
ZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9u
VGltZXJUaHJvdHRsZWREZWxheSB7IDMwX21zIH07Ci0KLWNsYXNzIEFuaW1hdGlvblByaXZhdGVV
cGRhdGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrKENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQotICAgICAg
ICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAgIHsKLSAg
ICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAg
fQotICAgIAotICAgIH5BbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2soKQotICAgIHsKLSAgICAg
ICAgbV9hbmltYXRpb25Db250cm9sbGVyLmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0KLSAg
ICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25Db250cm9s
bGVyOwotfTsKLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fYW5pbWF0aW9uVGltZXIoKnRo
aXMsICZDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZCkK
LSAgICAsIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKnRoaXMsICZDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCkK
LSAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQo
MCkKLSAgICAsIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24oZmFsc2UpCi0gICAg
LCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChmYWxzZSkKLXsKLX0KLQotQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSgpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBjb21wb3NpdGUg
YW5pbWF0aW9ucyBoZXJlIGJlY2F1c2UgdGhlCi0gICAgLy8gZGVzdHJ1Y3RvciBvZiBDb21wb3Np
dGVBbmltYXRpb24gd2lsbCBjYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBiYWNrLgotICAgIG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5jbGVhcigpOwotfQotCi1Db21wb3NpdGVBbmltYXRpb24mIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRpb24oRWxl
bWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnNldEhhc0NTU0FuaW1hdGlvbigpOwotCi0g
ICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJlKCZlbGVtZW50LCBb
Jl0gewotICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRoaXMpOwot
ICAgIH0pOwotCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudCgmZWxl
bWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3VzcGVu
ZEFuaW1hdGlvbnMoKTsKLQotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0K
LQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoRWxlbWVudCYgZWxl
bWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNDU1NBbmltYXRpb24oKSA9PSBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuY29udGFpbnMoJmVsZW1lbnQpKTsKLQotICAgIGlmICghZWxlbWVudC5o
YXNDU1NBbmltYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1lbnQuY2xl
YXJIYXNDU1NBbmltYXRpb24oKTsKLQotICAgIGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMuZmluZCgmZWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAmZWxlbWVudCk7
Ci0KLSAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBF
dmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluZm8uZWxlbWVudC5wdHIo
KSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNo
LnJlbW92ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjdXJyZW50RWxlbWVudCkgewotICAgICAgICBy
ZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0gICAgCi0g
ICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUgc3Vz
cGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCi0gICAgLy8gRklYTUU6IFRoZSBjb2RlIGJlbG93
IGRvZXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cyByZWdhcmRp
bmcgc3VzcGVuZGVkIHN0YXRlLgotICAgIGF1dG8mIGFuaW1hdGlvbiA9ICppdC0+dmFsdWU7Ci0g
ICAgYm9vbCByZXN1bHQgPSBhbmltYXRpb24uaXNTdXNwZW5kZWQoKTsKLSAgICBhbmltYXRpb24u
Y2xlYXJFbGVtZW50KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMucmVtb3ZlKGl0KTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNldENo
YW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBBbmltYXRpb25Qcml2YXRl
VXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotICAgIE9wdGlvbmFsPFNlY29uZHM+IHRp
bWVUb05leHRTZXJ2aWNlOwotICAgIGJvb2wgY2FsbGVkU2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0g
ICAgZm9yIChhdXRvJiBjb21wb3NpdGVBbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMp
IHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqY29tcG9zaXRlQW5p
bWF0aW9uLnZhbHVlOwotICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpICYmIGFu
aW1hdGlvbi5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+
IHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlmICh0ICYm
ICghdGltZVRvTmV4dFNlcnZpY2UgfHwgdC52YWx1ZSgpIDwgdGltZVRvTmV4dFNlcnZpY2UudmFs
dWUoKSkpCi0gICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0LnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYgdGltZVRvTmV4dFNlcnZpY2UudmFs
dWUoKSA9PSAwX3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQgIT0gQ2Fs
bFNldENoYW5nZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9zaXRlQW5pbWF0aW9u
LmtleTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAg
ICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgICAgICAgICAg
Y2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoY2FsbGVkU2V0Q2hhbmdlZCkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdGltZVRvTmV4dFNlcnZpY2U7
Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlv
blRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotCi0gICAgY29uc3QgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wb3NpdGVBbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50KTsK
LSAgICBpZiAoIWNvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKSAmJiBjb21wb3NpdGVB
bmltYXRpb24tPmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSBj
b21wb3NpdGVBbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBpZiAoIXRpbWVU
b05leHRTZXJ2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hbmltYXRpb25UaW1l
ci5pc0FjdGl2ZSgpICYmIChtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfHwgbV9h
bmltYXRpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCkgPD0gdGltZVRvTmV4dFNlcnZpY2UudmFs
dWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25k
cz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFuZ2VkKTsK
LQotICAgIExPRyhBbmltYXRpb25zLCAidXBkYXRlQW5pbWF0aW9uVGltZXI6IHRpbWVUb05leHRT
ZXJ2aWNlIGlzICUuMmYiLCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZU9yKFNlY29uZHMgeyAtMSB9
KS52YWx1ZSgpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2VydmljZSwgd2Ugd2FudCB0
byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5nCi0gICAgaWYgKCF0aW1l
VG9OZXh0U2VydmljZSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
KQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3YW50IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdlIHN0YXJ0
IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRpbmcKLSAg
ICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byogcGFnZSA9
IG1fZnJhbWUucGFnZSgpOwotICAgICAgICBib29sIHNob3VsZFRocm90dGxlID0gcGFnZSAmJiBw
YWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgU2Vjb25kcyBkZWxheSA9IHNo
b3VsZFRocm90dGxlID8gYW5pbWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSA6IGFuaW1hdGlvblRp
bWVyRGVsYXk7Ci0KLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkgfHwg
bV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IGRlbGF5KQotICAgICAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhkZWxheSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gc3RhcnQgYSBvbmUtc2hvdCB0
aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCkKLXsK
LSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKLXsKLSAgICAvLyBQ
cm90ZWN0IHRoZSBmcmFtZSBmcm9tIGdldHRpbmcgZGVzdHJveWVkIGluIHRoZSBldmVudCBoYW5k
bGVyCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICBib29sIHVwZGF0
ZVN0eWxlID0gIW1fZXZlbnRzVG9EaXNwYXRjaC5pc0VtcHR5KCkgfHwgIW1fZWxlbWVudENoYW5n
ZXNUb0Rpc3BhdGNoLmlzRW1wdHkoKTsKLQotICAgIC8vIGZpcmUgYWxsIHRoZSBldmVudHMKLSAg
ICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RGTW92ZShtX2V2
ZW50c1RvRGlzcGF0Y2gpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHNUb0Rpc3BhdGNo
KSB7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBldmVudC5lbGVtZW50OwotICAgICAgICBp
ZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCi0g
ICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNldWRvRWxl
bWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgpKSwgV1RG
OjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1lbnQu
ZGlzcGF0Y2hFdmVudChBbmltYXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlwZSwgZXZl
bnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0VsZW1lbnRO
YW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikp
OwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hhbmdlc1RvRGlz
cGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBtX2VsZW1l
bnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwotCi0gICAgaWYgKHVwZGF0ZVN0eWxlKQotICAg
ICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVk
RGlzcGF0Y2hlcigpCi17Ci0gICAgaWYgKCFtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIuc3Rh
cnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBl
dmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAg
IG1fZXZlbnRzVG9EaXNwYXRjaC5hcHBlbmQoeyBlbGVtZW50LCBldmVudFR5cGUsIG5hbWUsIGVs
YXBzZWRUaW1lIH0pOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsK
LX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVudENoYW5n
ZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9E
aXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5nZXNUb0Rp
c3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1
bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVk
ZWREaXNwYXRjaGVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJlZCgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4g
dGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2VkKTsKLQot
ICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT52
aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIC8vIFdlIG5lZWQgdG8g
a2VlcCB0aGUgZnJhbWUgYWxpdmUsIHNpbmNlIGl0IG93bnMgdXMuCi0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICAvLyBUaGUgYW5pbWF0aW9uIHRpbWVyIG1pZ2h0IGZp
cmUgYmVmb3JlIHRoZSBsYXlvdXQgdGltZXIsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3ZSBtaWdo
dCBjcmVhdGUgc29tZSBhbmltYXRpb25zIHdpdGggaW5jb3JyZWN0Ci0gICAgLy8gdmFsdWVzIGlm
IHdlIGRvbid0IGxheW91dCBmaXJzdC4KLSAgICBpZiAobV9yZXF1aXJlc0xheW91dCkgewotICAg
ICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS5kb2N1bWVudCgpLT52aWV3KCkpIHsK
LSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAgICAg
ICAgZnJhbWVWaWV3LT5mb3JjZUxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVxdWly
ZXNMYXlvdXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYW5pbWF0aW9uVXBk
YXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBubwotICAg
IC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmltYXRpb25z
KQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0K
LSAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hhbmdl
ZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRvIGFu
IGltbWVkaWF0ZQotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQuIEl0IHdpbGwgdGhlbiBjYWxs
IGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0aW9uVGlt
ZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdheSwgdG8g
YXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlvbiBjb21w
bGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0gICAgZmly
ZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJl
ci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiBhbmltYXRpb24g
PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0gICAgaWYg
KCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYW5pbWF0aW9u
LT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSk7Ci19Ci0KLWJvb2wgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkg
Y29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVu
ZGVyZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHks
IHRydWUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVU
aHJvdHRsaW5nU3RhdGUoKQotewotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0KLSAgICBm
b3IgKGF1dG8qIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxk
RnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgY2hpbGRGcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0YXRl
KCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlv
bkludGVydmFsKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBJTkZJTklUWSB9OwotCi0gICAgcmV0dXJuIFNl
Y29uZHMgeyBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfTsKLX0KLQotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQotewotICAg
IGlmIChpc1N1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdXNwZW5kQW5pbWF0
aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2ZXJzZSBz
dWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAg
ICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLQotICAgIG1f
aXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIWlzU3VzcGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2ZyYW1lLmRv
Y3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVzCi0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmxlZ2FjeUFuaW1hdGlvbigp
LnJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLX0KLQot
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uc0FyZVN1c3BlbmRl
ZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gaXNTdXNwZW5k
ZWQoKSB8fCBtX3N1c3BlbmRlZERvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7Ci19Ci0KLXZv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmRldGFjaEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMucmVtb3ZlKGRvY3Vt
ZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFu
aW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKGFuaW1h
dGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci0KLSAgICBBbmltYXRp
b25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9yIChhdXRv
JiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZhbmlt
YXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5pbWF0aW9u
LnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3Vt
ZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFh
bmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgQW5pbWF0aW9u
UHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5pbWF0
aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1hdGlvbi52
YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1hdGlvblRp
bWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0QW5p
bWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAoIWFu
aW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkgfHwgYWxsb3dzTmV3QW5p
bWF0aW9uc1doaWxlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1
bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sIGFsbG93ZWQpCi17Ci0g
ICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBhbGxvd2VkOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAg
ICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBvc2l0
ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNlQW5p
bWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
KCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAgQ29t
cG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmlt
YXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRyYW5zaXRp
b25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3Bh
dGNoZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1Nb25vdG9uaWNUaW1lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0aW9uVXBk
YXRlQ291bnQpOwotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpCi0gICAgICAg
IG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0KLSAg
ICByZXR1cm4gbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUudmFsdWUoKTsKLX0KLQotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5BbmltYXRpb25VcGRhdGUoKQotewot
ICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KQotICAgICAgICBtX2JlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICArK21fYmVnaW5BbmltYXRpb25V
cGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5k
QW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNv
dW50ID4gMCk7Ci0gICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCA9PSAxKSB7Ci0g
ICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgICAgIGlmICghbV93YWl0aW5nRm9yQXN5bmNT
dGFydE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICB9Ci0gICAgLS1tX2JlZ2luQW5pbWF0aW9uVXBkYXRl
Q291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlY2VpdmVk
U3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIExPRyhBbmltYXRp
b25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgcmVjZWl2ZWRTdGFydFRpbWVS
ZXNwb25zZSAlZiIsIHRoaXMsIHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwot
Ci0gICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotICAgIHN0
YXJ0VGltZVJlc3BvbnNlKHRpbWUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRlZFN0eWxlRm9yRWxlbWVudChF
bGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRpb25V
cGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBhdXRvIGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0aW9u
LT5nZXRBbmltYXRlZFN0eWxlKCk7Ci0gICAgaWYgKCFhbmltYXRpbmdTdHlsZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFuaW1hdGluZ1N0eWxlOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRp
b24oRWxlbWVudCYgZWxlbWVudCwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIGF1
dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAg
IGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYW5pbWF0
aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBmYWxzZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbi0+Y29tcHV0ZUV4dGVu
dE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcyk7Ci19Ci0KLXVuc2lnbmVkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRv
Y3VtZW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBpZiAo
JmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBjb3Vu
dCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwotICAgIH0K
LQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1h
dGlvbikKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVt
b3ZlKCZhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5hZGQoJmFu
aW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRv
UmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFuaW1h
dGlvblRvUmVtb3ZlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
c3R5bGVBdmFpbGFibGUoKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFu
ZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3YWl0aW5nQW5p
bWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKQotICAgICAgICB3YWl0aW5nQW5p
bWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFk
ZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiBh
bmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQotewotICAgIC8vIElmIHdpbGxHZXRSZXNw
b25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3YWl0aW5n
IGZvciBhIHJlc3BvbnNlCi0gICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNhbGwgdG8g
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qg
bmVlZCB0byBhZGQgaXQgdG8gdGhpcyBsaXN0LiBXZSBqdXN0IHNldCBhIHdhaXRpbmdGb3JBUmVz
cG9uc2UgZmxhZyAKLSAgICAvLyB3aGljaCBzYXlzIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgcmVz
cG9uc2UuIElmIHdpbGxHZXRSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24gCi0gICAg
Ly8gaXMgbm90IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJhdGhlciBm
b3IgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCBmb3IgCi0gICAgLy8gYW5vdGhlciBhbmltYXRp
b24gdG8gd2hpY2ggaXQgd2lsbCBzeW5jLgotICAgIC8vCi0gICAgLy8gV2hlbiBlbmRBbmltYXRp
b25VcGRhdGUoKSBpcyBjYWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5nRm9yQVJl
c3BvbnNlIGZsYWcgaXMKLSAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4gYW5kIHdp
bGwgZG8gb3VyIHdvcmsgd2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwKLSAg
ICAvLyBjb21lcyBpbi4gSWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRpbmcgYSBu
b3RpZnlYWFhTdGFydGVkKCkgY2FsbCwgc28gd2Ugd2lsbAotICAgIC8vIGRvIG91ciB3b3JrIHJp
Z2h0IGF3YXkuIEluIGJvdGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFydFJlc3Bv
bnNlKCkgbWV0aG9kCi0gICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJzdCBjYXNl
IHdlIHNlbmQgaW4gdGhlIHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgpLgotICAg
IC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFuaW1hdGlv
blVwZGF0ZVRpbWUoKS4KLSAgICAvLwotICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwg
c29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAK
LSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgotICAgIC8vCi0KLSAgICBpZiAod2ls
bEdldFJlc3BvbnNlKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9u
ID0gdHJ1ZTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5h
ZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlv
bkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICBpZiAobV9h
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKLSAgICAgICAg
bV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNU
aW1lIHRpbWUpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5kIHNlbmQg
dGhlbSBvbiB0aGVpciB3YXkKLQotICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uIDogbV9h
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKQotICAgICAgICBhbmltYXRpb24t
Pm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsKLSAgICAKLSAgICBtX2FuaW1hdGlvbnNX
YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKLSAgICBtX3dhaXRpbmdGb3JBc3lu
Y1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYgYW5pbWF0
aW9uKQotewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9uKTsKLQot
ICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7Ci0gICAg
cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5pbWF0aW9u
KTsKLQotICAgIGJvb2wgYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0gZmFsc2U7
Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lUmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+d2FpdGluZ0ZvclN0YXJ0VGlt
ZSgpICYmIGFuaW1hdGlvbi0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBhbnlBbmlt
YXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5bmNT
dGFydCkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNl
OwotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9sbGVyKEZy
YW1lJiBmcmFtZSkKLSAgICA6IG1fZGF0YShtYWtlVW5pcXVlPENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlPihmcmFtZSkpCi17Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6On5DU1NB
bmltYXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAoIW1f
ZGF0YS0+Y2xlYXIoZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlbGVtZW50
LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09
IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlKCk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0ZSBDU1NBbmltYXRpb25Db250cm9sbGVyOjp1
cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGJvb2wgaGFzT3JIYWRB
bmltYXRpb25zID0gKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zT3JUcmFuc2l0
aW9ucygpKSB8fCBuZXdTdHlsZS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpOwotICAgIGlm
ICghaGFzT3JIYWRBbmltYXRpb25zKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGVs
ZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90
SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gRG9uJ3Qg
cnVuIHRyYW5zaXRpb25zIHdoZW4gcHJpbnRpbmcuCi0gICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQo
KS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAv
LyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEgaGFz
aHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQotICAgIC8vIGFnYWluc3QgdGhlIGFuaW1hdGlv
bnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gSWYgZGVzdGluYXRp
b24gdmFsdWVzCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0aW9uLiBX
ZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgotICAgIC8v
IGEgbmV3IHN0eWxlLgotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRp
b24gPSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBhdXRv
IHVwZGF0ZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9sZFN0eWxlLCBu
ZXdTdHlsZSk7Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAg
ICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUuYW5pbWF0
aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewotICAgICAg
ICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICAgICAg
aWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkp
Ci0gICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAgIG1fZGF0
YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICBmcmFt
ZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXBkYXRlOwot
fQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
OmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKLXsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKLQotICAgIGlmIChyZW5kZXJl
ci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxlbWVu
dCgpKQotICAgICAgICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KCpy
ZW5kZXJlci5lbGVtZW50KCkpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9
IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y29tcHV0ZUV4dGVudE9m
QW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNv
bnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVFeHRl
bnRPZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIExPRyhBbmltYXRp
b25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlciAlcCBub3RpZnlBbmltYXRpb25TdGFydGVkIG9u
IHJlbmRlcmVyICVwLCB0aW1lPSVmIiwgdGhpcywgJnJlbmRlcmVyLCBzdGFydFRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7Ci0K
LSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAg
ICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRp
b25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9k
YXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBuYW1lLCB0KTsKLX0KLQotdW5zaWdu
ZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3Vt
ZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5udW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25V
cGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9kYXRhLT5wYXVzZVRyYW5zaXRpb25BdFRp
bWUoZWxlbWVudCwgcHJvcGVydHksIHQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5zdHls
ZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVy
LCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNSdW5uaW5n
QWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuc3R5bGUo
KS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVy
KHJlbmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6
aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmlzU3VzcGVuZGVkKCk7
Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKQot
ewotICAgIExPRyhBbmltYXRpb25zLCAiY29udHJvbGxlciBpcyBzdXNwZW5kaW5nIGFuaW1hdGlv
bnMiKTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFuaW1hdGlv
bnMsICJjb250cm9sbGVyIGlzIHJlc3VtaW5nIGFuaW1hdGlvbnMiKTsKLSAgICBtX2RhdGEtPnJl
c3VtZUFuaW1hdGlvbnMoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjphbGxv
d3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rh
dGEtPmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi12b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChi
b29sIGFsbG93ZWQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVT
dXNwZW5kZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c2Vy
dmljZUFuaW1hdGlvbnMoKQotewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxsYmFja0Zp
cmVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwotfQotCi1T
ZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbkludGVydmFsKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25JbnRlcnZhbCgpOwotfQotCi1ib29sIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9uc0FyZVN1
c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJl
dHVybiBtX2RhdGEtPmRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJzdXNwZW5kaW5nIGFuaW1hdGlv
bnMgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1h
dGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBMT0coQW5pbWF0aW9ucywgInJlc3VtaW5nIGFuaW1hdGlvbnMgZm9yIGRvY3VtZW50ICVw
IiwgZG9jdW1lbnQpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJs
b2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3Vt
ZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlvbnNJ
Zk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMs
ICJhbmltYXRpb25zIG1heSBzdGFydCBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0KLSAg
ICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICBt
X2RhdGEtPnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKGRvY3VtZW50KTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAg
bV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5lbmRBbmltYXRp
b25VcGRhdGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0Fj
Y2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewot
ICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNj
ZWxlcmF0ZWQocHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Omhh
c0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmhhc0FuaW1hdGlvbnMo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlY2Q2MDU4NDUzOThhYThlNzVhOWE1MjY1ZTAwZWY2NGQ2MjIyODEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5o
IgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOwot
Y2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIExheW91dFJlY3Q7Ci1jbGFzcyBS
ZW5kZXJFbGVtZW50OwotCi1zdHJ1Y3QgQW5pbWF0aW9uVXBkYXRlIHsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBhY3Q+
IGltcGFjdDsKLQotfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYpOwotICAgIEFuaW1hdGlvblVwZGF0ZSB1
cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwotCi0gICAgLy8g
SWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5zZm9ybSBh
bmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCi0gICAgLy8gdXNpbmcgdGhlIGdpdmVuIHJl
Y3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBSZXR1cm4gZmFsc2UgaWYgdGhl
cmUgaXMgc29tZQotICAgIC8vIHRyYW5zZm9ybSBhbmltYXRpb24gYnV0IHdlIHdlcmUgdW5hYmxl
IHRvIGNoZWFwbHkgY29tcHV0ZSBpdHMgYWZmZWN0IG9uIHRoZSBleHRlbnQuCi0gICAgYm9vbCBj
b21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25z
dDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
IG9yIHRyYW5zaXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgdG8gYW5pbWF0ZS4KLSAgICB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYsIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUo
RWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNl
ZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRp
b25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8g
VG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQg
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJlIHVzZWQg
b25seSBmb3IgdGVzdGluZwotICAgIAotICAgIC8vICJSdW5uaW5nIiBoZXJlIG1lYW5zIHRoZSBh
bmltYXRpb24gaXMgcnVubmluZyBvciBwYXVzZWQuCi0gICAgYm9vbCBpc1J1bm5pbmdBbmltYXRp
b25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLSAgICBi
b29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50
JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzU3Vz
cGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHZv
aWQgc2VydmljZUFuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGluZ1N0YXRl
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBhbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50
KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRpb25zRm9y
RG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFuaW1hdGlvbnNB
cmVTdXNwZW5kZWRGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1c3BlbmRl
ZChEb2N1bWVudCopOwotCi0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAgIHZv
aWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93
c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwotICAgIAot
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KENT
U1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlPiBtX2RhdGE7Ci19OwotCi1jbGFzcyBBbmltYXRpb25VcGRhdGVCbG9jayB7Ci1wdWJsaWM6
Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0
aW9uQ29udHJvbGxlcikKLSAgICAgICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9u
Q29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xsZXIpCi0g
ICAgICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7
Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25VcGRhdGVCbG9jaygpCi0gICAgewotICAgICAg
ICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICAgICAgbV9hbmltYXRpb25Db250
cm9sbGVyLT5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250cm9sbGVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQzMjAzNzdkZWNjOWM1MzRkZWViN2I0ZTk1Y2UwZWQyZDg1YWVkYjEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBEb2N1bWVudDsKLWNs
YXNzIEZyYW1lOwotCi1lbnVtIFNldENoYW5nZWQgeyBEb05vdENhbGxTZXRDaGFuZ2VkLCBDYWxs
U2V0Q2hhbmdlZCB9OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgdW50aWwgdGhlIG5leHQg
YW5pbWF0aW9uIG5lZWRzIHRvIGJlIHNlcnZpY2VkLCBvciAtMSBpZiB0aGVyZSBhcmUgbm9uZS4K
LSAgICBPcHRpb25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNl
dENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsK
LQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKEVsZW1l
bnQmKTsKLSAgICBib29sIGNsZWFyKEVsZW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRlU3R5bGVJ
Zk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnRVcGRhdGVTdHlsZUlmTmVl
ZGVkRGlzcGF0Y2hlcigpOwotICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1lbnQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVs
YXBzZWRUaW1lKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKEVsZW1lbnQm
KTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsK
LSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lQ2Fs
bGJhY2tGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLSAgICBT
ZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN1c3BlbmRBbmlt
YXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnNG
b3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZv
ckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1c3Bl
bmRlZChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50Kik7
Ci0KLSAgICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYs
IENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmlt
YXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLQot
ICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50
JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwotICAgIHVuc2lnbmVkIG51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yRWxlbWVudChFbGVtZW50Jik7Ci0KLSAg
ICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVjdCYpIGNv
bnN0OwotCi0gICAgTW9ub3RvbmljVGltZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAg
ICAKLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRBbmltYXRp
b25VcGRhdGUoKTsKLSAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3Rvbmlj
VGltZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5p
bWF0aW9uQmFzZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsK
LSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
KEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmlt
YXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChF
bGVtZW50Jik7Ci0KLSAgICBib29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9Ci0g
ICAgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7Ci0KLSAg
ICB2b2lkIHNldFJlcXVpcmVzTGF5b3V0KCkgeyBtX3JlcXVpcmVzTGF5b3V0ID0gdHJ1ZTsgfQot
Ci1wcml2YXRlOgotICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBz
dHlsZUF2YWlsYWJsZSgpOwotICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci0g
ICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLQotICAgIEhhc2hNYXA8
UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3NpdGVB
bmltYXRpb25zOwotICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7Ci0gICAgVGltZXIgbV91cGRh
dGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKLSAgICBGcmFtZSYgbV9mcmFtZTsKLQotICAgIHN0
cnVjdCBFdmVudFRvRGlzcGF0Y2ggewotICAgICAgICBSZWY8RWxlbWVudD4gZWxlbWVudDsKLSAg
ICAgICAgQXRvbVN0cmluZyBldmVudFR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAg
ICBkb3VibGUgZWxhcHNlZFRpbWU7Ci0gICAgfTsKLSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNo
PiBtX2V2ZW50c1RvRGlzcGF0Y2g7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9lbGVtZW50
Q2hhbmdlc1RvRGlzcGF0Y2g7Ci0gICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3VzcGVuZGVkRG9j
dW1lbnRzOwotCi0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gbV9iZWdpbkFuaW1hdGlvblVw
ZGF0ZVRpbWU7Ci0KLSAgICB1c2luZyBBbmltYXRpb25zU2V0ID0gSGFzaFNldDxSZWZQdHI8QW5p
bWF0aW9uQmFzZT4+OwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlOwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlOwotCi0gICAgaW50IG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLQotICAgIGJv
b2wgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbjsKLSAgICBib29sIG1faXNTdXNw
ZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZXF1aXJlc0xheW91dCB7IGZhbHNlIH07Ci0K
LSAgICAvLyBVc2VkIHRvIGZsYWcgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHByZXZpb3Vz
IGJ1Z2d5Ci0gICAgLy8gYmVoYXZpb3Igb2YgYWxsb3dpbmcgbmV3IHRyYW5zaXRpb25zIGFuZCBh
bmltYXRpb25zIHRvCi0gICAgLy8gcnVuIGV2ZW4gd2hlbiB0aGlzIG9iamVjdCBpcyBzdXNwZW5k
ZWQuCi0gICAgYm9vbCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWJlNzU5YjA4MTYwOWJmNTMzMzQwZDMwYTAyNjE0NzM3NjUwNTAwNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxODcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0KLSNp
bmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NDcm9z
c2ZhZGVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgot
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJD
bGlwUGF0aE9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKLSNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUg
IkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKLSNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJHYXBMZW5ndGguaCIKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgot
I2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIK
LSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBhcmlz
b24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGludCBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9tLCBpbnQg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dy
ZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
LCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKLX0K
LQotc3RhdGljIGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3RhdGlj
IGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05vcm1hbCgp
KSA/IHRvIDogYmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNzKTsKLX0K
LQotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBMZW5ndGhT
aXplJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiB7IGJsZW5kRnVuYyhhbmlt
LCBmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJvbS5o
ZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU2hhZG93
U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFNo
YWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAg
aWYgKGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGRvdWJsZSBmcm9tVmFs
ID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91YmxlIHRvVmFs
ID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSByZXN1bHQg
PSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICByZXR1cm4g
cmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dEYXRhKiBm
cm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VS
VChmcm9tICYmIHRvKTsKLSAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUoKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKLQotICAgIHJldHVybiBt
YWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5sb2NhdGlv
bigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFkaXVz
KCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5zcHJlYWQo
KSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUoKSwgdG8t
PnN0eWxlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFkb3coKSwK
LSAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNzKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNz
KQotewotICAgIGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKQot
ICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBwcm9ncmVz
cyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJvbSwg
cHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25jYXN0
PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUo
KSA6IExheW91dFNpemUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENsaXBQ
YXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVz
cykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAv
LyBPdGhlciBjbGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBub3QgYmUg
YW5pbWF0ZWQuCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hh
cGUgfHwgdG8tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCi0gICAgICAgIHJl
dHVybiB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25jYXN0PFNo
YXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7Ci0gICAgY29uc3QgQmFz
aWNTaGFwZSYgdG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCp0byku
YmFzaWNTaGFwZSgpOwotCi0gICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFwZSkpCi0g
ICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpj
cmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAg
ICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRvLT50eXBl
KCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAg
IGlmIChmcm9tLT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCi0gICAgICAgIHJldHVybiB0bzsK
LQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgpOwotICAg
IGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0KLSAgICBpZiAoIWZy
b21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgcmV0
dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3Mp
LCB0by0+Y3NzQm94KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsdGVyT3Bl
cmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQotewotICAgIEFTU0VSVCh0b09wKTsKLSAg
ICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJvdWdo
KTsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3BlcmF0
aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLSAgICBzaXplX3QgZnJvbVNp
emUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvU2l6ZSA9IHRvLm9w
ZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9tU2l6ZSwg
dG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAg
ICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZyb20u
b3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlv
bj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0g
ICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1
bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9wID8g
YmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDogMCk7Ci0g
ICAgICAgIGlmIChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFw
cGVuZChibGVuZGVkT3ApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gaWRlbnRp
dHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAg
IGlmIChwcm9ncmVzcyA+IDAuNSkKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygp
LmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcCA/
IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVz
cywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCi17Ci0gICAg
RmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGZ1
bmN0aW9uIGxpc3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlvbi4KLSAg
ICAKLSAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SUQp
IHsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5p
bS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmls
dGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxp
c3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5
QXBwbGVDb2xvckZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9yRmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdHNNYXRjaCkKLSAgICAgICAgcmVz
dWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMgZG9uJ3Qg
bWF0Y2gsIHdlIGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhhdmUgYSB3
YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4gQ1NTLgotICAgICAgICAvLyBGb3Igbm93IHdlJ2xsIGp1
c3QgZmFpbCB0byBhbmltYXRlLgotICAgICAgICByZXN1bHQgPSB0bzsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVu
ZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNoZWRJbWFn
ZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICBG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmlt
LCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotCi0gICAgYXV0byBpbWFnZVZhbHVlID0gQ1NTSW1hZ2VW
YWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1dGVkU3R5
bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBmaWx0ZXJS
ZXN1bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwotCi0gICAgYXV0byByZXN1bHQgPSBDU1NG
aWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92ZShmaWx0
ZXJWYWx1ZSkpOwotICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZpbHRlclJl
c3VsdCk7Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHJl
c3VsdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0
eSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEFueSBub24temVybyByZXN1bHQgbWVh
bnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8gd2Ug
Y29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQotICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlzaWJs
ZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29sbGFw
c2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KLSAgICBkb3VibGUg
ZnJvbVZhbCA9IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAgZG91
YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAgaWYg
KGZyb21WYWwgPT0gdG9WYWwpCi0gICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUgcmVzdWx0
ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJu
IHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5OjpW
aXNpYmxlID8gdG8gOiBmcm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zm
c2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25z
dCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiB0
bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3RoVmFsdWUo
KSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0
aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgVGV4dERl
Y29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiB0
bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVX
aXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0aFZh
bHVlKCksIHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpj
cmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoQm94JiBm
cm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgTGVuZ3Ro
Qm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNz
KSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0KCksIHRv
LnJpZ2h0KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmlt
LCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAg
ICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dyZXNzKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTVkdMZW5ndGhWYWx1ZSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNWR0xlbmd0
aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
LXsKLSAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9yPFNWR0xl
bmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNv
bnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhW
YWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgc2l6ZV90IGZyb21MZW5ndGggPSBm
cm9tLnNpemUoKTsKLSAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7Ci0gICAgaWYgKCFm
cm9tTGVuZ3RoKQotICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOwotICAgIGlm
ICghdG9MZW5ndGgpCi0gICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6IHRvOwot
ICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOwotICAgIGlmIChmcm9tTGVuZ3Ro
ICE9IHRvTGVuZ3RoKSB7Ci0gICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZyb21MZW5n
dGgsIHRvTGVuZ3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKLSAgICAgICAg
ICAgIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRvTGVuZ3Ro
OwotICAgIH0KLSAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0gICAgICAg
IHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwg
dG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGNy
b3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNhY2hl
ZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBk
b3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9mIHRoZSBl
eHRyZW1lcywgd2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdlLAotICAg
IC8vIG5vdCBhIGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25lIG9mIHRo
ZSBleGlzdGluZyBpbWFnZXMuCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0dXJuIGZy
b21TdHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4gdG9T
dHlsZUltYWdlOwotICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgfHwgIXRv
U3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvU3R5bGVJbWFnZTsK
LQotICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmZyb21T
dHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9IENTU0lt
YWdlVmFsdWU6OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRv
IHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENT
U1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUgPSBDU1ND
cm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZNb3ZlKHRv
SW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7Ci0gICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdlKiB0bywg
ZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJldHVy
biB0bzsKLQotICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7Ci0gICAgdG8gPSB0by0+
c2VsZWN0ZWRJbWFnZSgpOwotCi0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0dXJu
IHRvOyAgICAKLQotICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQgaW1hZ2Vz
LiBDcm9zcyBmYWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gICAgaWYgKGlzPFN0eWxlR2VuZXJh
dGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Ci0gICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHls
ZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykuaW1hZ2VWYWx1ZSgpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkp
IHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1c3QgcG9z
c2libGUgaWYgaW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KLSAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSBmYWxsIGJhY2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCi0gICAgICAgICAgICBDU1NGaWx0
ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
ZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRl
ciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZyb21GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5p
bSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMo
KSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENT
U0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFk
ZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21H
ZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRlID0g
ZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIGlm
IChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVuZChmcm9t
Q3Jvc3NmYWRlLCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW9uIGJl
dHdlZW4gdHdvICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgotICAgIH0gZWxzZSBpZiAoaXM8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykpIHsK
LSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25jYXN0
PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlmIChp
czxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewotICAgICAgICAgICAgQ1NT
RmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFs
dWU+KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1h
Z2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdlKCkgPT0g
ZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZp
bHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3Bl
cmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRlIGFuZCBp
bWFnZSBzb3VyY2UuCi0gICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkg
JiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0
bykuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9H
ZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9
IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAgICAg
IGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+
KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZEltYWdlKCks
IEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVz
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdl
ZW4gaW1hZ2Ugc291cmNlIGFuZCBjcm9zcy1mYWRlLgotICAgIH0KLQotICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQgaW1hZ2Vz
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI5Mwot
ICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJbWFn
ZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25jYXN0PFN0
eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0byksIHBy
b2dyZXNzKTsKLQotICAgIHJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSBOaW5lUGllY2VJ
bWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29u
c3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywgZG91Ymxl
IHByb2dyZXNzKQotewotICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgp
KQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBwb3J0IHRy
YW5zaXRpb25pbmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkgbW9yZSB0
aGFuIGltYWdlIGNvbnRlbnQuCi0KLSAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9IHRvLmlt
YWdlU2xpY2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGljZXMoKSB8
fCBmcm9tLm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRvLmZpbGwo
KSB8fCBmcm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8fCBmcm9t
LnZlcnRpY2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQotICAgICAgICByZXR1cm4gdG87
Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7Ci0gICAgICAg
IGlmIChmcm9tLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5pbWFnZSgp
LT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkpCi0gICAgICAgICAgICByZXR1cm4gdG87Ci0gICAg
fQotCi0gICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9tLmltYWdl
KCksIHRvLmltYWdlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS5pbWFnZVNsaWNlcygpLCBm
cm9tLmZpbGwoKSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJvbS5ob3Jp
em9udGFsUnVsZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKLX0KLQotI2lmIEVOQUJMRShWQVJJ
QVRJT05fRk9OVFMpCi0KLXN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBGb250VmFy
aWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgRm9udFZhcmlhdGlvblNl
dHRpbmdzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBhdXRvJiBmcm9tSXRl
bSA9IGZyb20uYXQoaSk7Ci0gICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOwotICAgICAg
ICBpZiAoZnJvbUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQotICAgICAgICAgICAgcmV0dXJu
IEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBpbnRlcnBvbGF0ZWQgPSBi
bGVuZEZ1bmMoYW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHByb2dyZXNz
KTsKLSAgICAgICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBvbGF0ZWQg
fSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgaW5s
aW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25WYWx1
ZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUo
YmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxGb250U2Vs
ZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRTZWxl
Y3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9udFNlbGVj
dGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1ZSgp
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotfQotCi1jbGFz
cyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKLSAgICB7Ci0gICAg
fQotICAgIHZpcnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1bHQ7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0gICAgCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29uc3QgPSAw
OwotI2VuZGlmCi0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJRCBtX3By
b3A7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5V3JhcHBlckdl
dHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoQ1NT
UHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKLSAgICAg
ICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9nZXR0
ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICgh
YSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChhLT4q
bV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNv
bnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9n
ZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJT
dHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwg
Z2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIg
dG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0g
ICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBUIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVy
KSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9wZXJ0eVdy
YXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihwcm9w
LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRl
clN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1f
c2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1f
Z2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipt
X3NldHRlcikoVCk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6KmdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAg
ICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmlt
LCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3Bl
cnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0cjxUPiYm
KTsKLX07Ci0KLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3As
IGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7Ci0gICAgfQotCi0gICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+Ojpt
X2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1f
Z2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJl
bmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoVCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVk
OgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Ci19OwotCi1jbGFzcyBQ
cm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PENsaXBQYXRoT3BlcmF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9wLCBDbGlw
UGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAgICAgICAg
OiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9wLCBnZXR0
ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVy
IGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZh
bHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQYXRo
QSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlwUGF0
aEIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNsaXBQYXRo
QikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWNsaXBQYXRoQSB8fCAh
Y2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gKmNs
aXBQYXRoQSA9PSAqY2xpcFBhdGhCOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzIDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0
aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGluZ3MgKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
Rm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZh
cmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJz
IGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJ
ZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4g
dHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAoYS0+Km1f
Z2V0dGVyKSgpOwotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlv
blNldHRpbmdzQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiB2YXJpYXRpb25T
ZXR0aW5nc0EgPT0gdmFyaWF0aW9uU2V0dGluZ3NCOwotICAgIH0KLX07Ci0jZW5kaWYKLQotY2xh
c3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBl
cjxTaGFwZVZhbHVlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3Jh
cHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJz
IGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJ
ZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4g
dHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
U2hhcGVWYWx1ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU2hhcGVWYWx1
ZSogc2hhcGVCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKHNoYXBlQSA9PSBzaGFw
ZUIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaGFwZUEgfHwgIXNo
YXBlQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpzaGFwZUEg
PT0gKnNoYXBlQjsKLSAgICB9Ci19OwotCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJbWFn
ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihw
cm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5
bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU3R5bGVJbWFnZSog
aW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9F
cXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5V3Jh
cHBlckNvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBw
ZXJDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYp
KQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHByb3AsIGdl
dHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5
bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0
ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xv
ciY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3Im
Pjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFBy
b3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9w
ZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6c2V0T3BhY2l0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0T3BhY2l0
eShibGVuZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dyZXNzKSk7
Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0g
OiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPiB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVy
QWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6
dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0oKSwgYi0+
dHJhbnNmb3JtKCksIHByb2dyZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFw
cGVyRmlsdGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25z
Jj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5
V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdy
YXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwgc2V0dGVy
KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NTUHJvcGVy
dHlGaWx0ZXIKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAgfHwgcHJv
cGVydHkoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCi0jZW5kaWYKLSAgICAg
ICAgICAgIDsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlcikoKSwgKGIt
PipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRl
cikoKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgaW5saW5l
IHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKLXsKLSAg
ICBzaXplX3QgY291bnQ7Ci0gICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93ID0gc2hh
ZG93LT5uZXh0KCkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1z
dGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNvbnN0IFNo
YWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dEYXRhKExh
eW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRl
ZmF1bHRJbnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Oklu
c2V0LCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2lu
dCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJbnNl
dFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Oklu
c2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0KLSAgICBpZiAoc3JjU2hhZG93
KQotICAgICAgICByZXR1cm4gc3JjU2hhZG93OwotCi0gICAgaWYgKG90aGVyU2hhZG93LT5zdHls
ZSgpID09IFNoYWRvd1N0eWxlOjpJbnNldCkKLSAgICAgICAgcmV0dXJuIG90aGVyU2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEuZ2V0
KCkgOiAmZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKLQotICAgIHJldHVybiBvdGhlclNo
YWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YS5n
ZXQoKSA6ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKLX0KLQotY2xhc3MgUHJvcGVydHlXcmFw
cGVyU2hhZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNoYWRv
dyhDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiwgYm9vbCkpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFh
IHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKLSAgICAgICAgICAgIGlmICghc2hh
ZG93QSAmJiAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICAgICAgLy8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cwotICAgICAgICAgICAgaWYgKCFz
aGFkb3dBIHx8ICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAg
ICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIp
KCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgp
OwotCi0gICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dBKTsK
LSAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsKLQotICAg
ICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAxICYmIHRv
TGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kU2ltcGxl
T3JNYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IpLCBm
YWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFk
b3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKLSAgICB9Ci0KLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgU2hh
ZG93RGF0YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwotICAg
ICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKLQotICAgICAgICB3aGlsZSAoc2hhZG93
QSB8fCBzaGFkb3dCKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cg
PSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKLSAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRv
d0EpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNo
YWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOwot
ICAgICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFkb3cu
Z2V0KCk7Ci0KLSAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKLSAgICAgICAgICAgICAgICBu
ZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRlZFNoYWRv
dykpOwotCi0gICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsKLQotICAg
ICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOwotICAgICAg
ICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21MZW5ndGgs
IGludCB0b0xlbmd0aCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3dzIGluIFNo
YWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1hdGluZyBt
aXNtYXRjaGVkIGxpc3RzLAotICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNoIGZyb20g
dGhlIGVuZC4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9tU2hhZG93
cyhmcm9tTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOwotICAgICAg
ICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFZl
Y3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIHRv
U2hhZG93c1tpXSA9IHNoYWRvd0I7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93Qi0+bmV4
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5l
d1NoYWRvd0RhdGE7Ci0KLSAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5n
dGgsIHRvTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkgPCBmcm9t
TGVuZ3RoID8gZnJvbVNoYWRvd3NbaV0gOiAwOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0
YSogdG9TaGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOwotCi0gICAgICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhmcm9t
U2hhZG93LCB0b1NoYWRvdyk7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBkc3RTaGFk
b3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7Ci0KLSAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5j
KGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICAvLyBJ
bnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRlci4KLSAg
ICAgICAgICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dEYXRhKSk7
Ci0gICAgICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQotICAgIGNv
bnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAgIHZv
aWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiwg
Ym9vbCk7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6IHB1
YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAg
ICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX2dldHRl
cihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29s
b3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQo
KSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBh
LT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAg
dG9Db2xvciA9IGItPmNvbG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0Nv
bG9yOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3IgdG9Db2xv
ciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9D
b2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKLSAg
ICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5j
b2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tQ29s
b3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgdmFsdWUoY29uc3Qg
UmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRl
cikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxl
KiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlv
bnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgp
KSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAi
IDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykg
PDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotCi1lbnVt
IE1heWJlSW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNzIFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwg
Y29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9yJiAoUmVu
ZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnZp
c2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5
V3JhcHBlckNvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92aXNpdGVk
V3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNpdGVkR2V0
dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFByb3BlcnR5V3JhcHBlclZp
c2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlkQ29sb3JU
YWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBDb2xvciYg
KFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9w
ZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQotICAg
ICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0gICAgewot
ICAgIH0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbV93cmFwcGVy
LT5lcXVhbHMoYSwgYikgJiYgbV92aXNpdGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOwotICAgIH0K
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV93cmFw
cGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVk
V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0JsZW5kKGEs
IGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVu
ZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93cmFwcGVy
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3Zp
c2l0ZWRXcmFwcGVyOwotfTsKLQotLy8gV3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBhbmltYXRh
YmxlIHByb3BlcnR5IGluIGEgRmlsbExheWVyCi1jbGFzcyBGaWxsTGF5ZXJBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHkpCi0gICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICB7Ci0gICAgfQot
ICAgIHZpcnR1YWwgfkZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wZXJ0eTsgfQotCi0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqLCBj
b25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIq
LCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLQotI2lmICFMT0dfRElTQUJM
RUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOwotI2Vu
ZGlmCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyIDog
cHVibGljIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcik7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKEZpbGxMYXllcjo6KmdldHRlciko
KSBjb25zdCkKLSAgICAgICAgOiBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KHByb3BlcnR5KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsK
LSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gKGxheWVyLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxP
R19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywg
c3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8
ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwg
VGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAi
IC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAg
ICBUIChGaWxsTGF5ZXI6OiptX2dldHRlcikoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9n
cmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXll
ciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFBy
b3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojpwcm9w
ZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBG
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQotICAgICAg
ICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwotfTsKLQotY2xhc3MgRmlsbExh
eWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRnZSAoRmls
bExheWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipvcmlnaW5T
ZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIpCi0gICAg
ICAgICwgbV9sZW5ndGhTZXR0ZXIobGVuZ3RoU2V0dGVyKQotICAgICAgICAsIG1fb3JpZ2luR2V0
dGVyKG9yaWdpbkdldHRlcikKLSAgICAgICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5TZXR0ZXIp
Ci0gICAgICAgICwgbV9mYXJFZGdlKGZhckVkZ2UpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0b0xlbmd0
aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+Ojpt
X2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+Km1fb3Jp
Z2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5HZXR0ZXIp
KCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCAmJiBm
cm9tRWRnZSA9PSB0b0VkZ2U7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICBMZW5n
dGggdG9MZW5ndGggPSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBM
ZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdlID0g
KGEtPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3Jp
Z2luR2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyb21FZGdlICE9IHRvRWRnZSkg
ewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBjYWxjIGV4
cHJlc3Npb24sCi0gICAgICAgICAgICBpZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQotICAgICAg
ICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgoZnJv
bUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdlKSB7Ci0g
ICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgo
dG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChkc3QtPiptX29yaWdpblNldHRlcikoZnJvbUVk
Z2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZlIHRvIHRo
ZSBsZWZ0L3RvcCBlZGdlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKGRz
dC0+Km1fbGVuZ3RoU2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9MZW5ndGgs
IHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwg
Z2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIg
dG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0g
ICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX2xlbmd0
aFNldHRlcikoTGVuZ3RoKTsKLSAgICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdldHRlciko
KSBjb25zdDsKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRnZSk7Ci0g
ICAgRWRnZSBtX2ZhckVkZ2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEZp
bGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBUKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5
ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNv
bnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmlt
YXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAgICAgIDw8
ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGEp
Ci0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQqPjo6dmFsdWUoYikKLSAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3Jt
YXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5k
aWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShSZWZQdHI8
VD4mJik7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJbWFnZSog
KEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVyKShS
ZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogRmlsbExheWVyUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewot
ICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlciko
KTsKLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAg
ICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0K
LQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9w
ZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwg
IiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9n
cmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotfTsKLQot
Y2xhc3MgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIGNvbnN0IEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0dGVyKSgp
IGNvbnN0OwotICAgIHR5cGVkZWYgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNBY2Nl
c3NvcikoKTsKLQotICAgIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgTGF5ZXJzR2V0dGVyIGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNzb3IpCi0g
ICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAgICAg
LCBtX2xheWVyc0dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9sYXllcnNBY2Nlc3NvcihhY2Nl
c3NvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25YOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eSwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZGaWxs
TGF5ZXI6OmJhY2tncm91bmRYT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWE9yaWdp
biwgRWRnZTo6UmlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uWToKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0g
bWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZG
aWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExheWVy
OjpiYWNrZ3JvdW5kWU9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmlnaW4sIEVk
Z2U6OkJvdHRvbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRTaXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3Vu
ZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXplTGVuZ3Ro
LCAmRmlsbExheWVyOjpzZXRTaXplTGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgICAgICAgICAgbV9maWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0
eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6c2V0SW1h
Z2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFh
IHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIGZyb21M
YXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0g
JihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0
b0xheWVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5l
cXVhbHMoZnJvbUxheWVyLCB0b0xheWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwotICAgICAgICAg
ICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAg
ICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8q
IGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgICAgIHdoaWxl
IChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2ZpbGxMYXll
clByb3BlcnR5V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxheWVyLCBw
cm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAgICAgICAg
ICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0TGF5ZXIgPSBkc3RM
YXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxl
KiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBm
aW5hbAotICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0
ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlcikoKTsK
LSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVyKSgpOwot
Ci0gICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAg
ICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIsIGFMYXll
ciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQo
KTsKLSAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0
TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyOwotCi0gICAgTGF5ZXJzR2V0dGVy
IG1fbGF5ZXJzR2V0dGVyOwotICAgIExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNzb3I7Ci19
OwotCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFZl
Y3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVycykKLSAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAgICAgICAs
IG1fcHJvcGVydHlXcmFwcGVycyhXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09
IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1f
cHJvcGVydHlXcmFwcGVycykgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwg
YikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCi0g
ICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAg
ICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBkc3QsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgd3Jh
cHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5k
KGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29uc3QgVmVjdG9y
PEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwotfTsKLQot
Y2xhc3MgUHJvcGVydHlXcmFwcGVyRmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9w
ZXJ0eVdyYXBwZXJGbGV4KCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KENTU1Byb3BlcnR5RmxleCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkgPT0g
Yi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygpOwotICAg
IH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBk
c3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGItPmZsZXhC
YXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5kRnVuYyhh
bmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAgICAgICBk
c3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwgYi0+Zmxl
eFNocmluaygpLCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0cmVhbTo6
Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQotI2VuZGlm
Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3AsIFNWR1Bh
aW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENvbG9yIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQotICAgICAgICAsIG1fcGFpbnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikKLSAgICAg
ICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsK
LSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlciko
KSAhPSAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFp
bnRzIHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgotICAgICAgICAvLyBGb3IgZXZlcnl0aGlu
ZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKLSAg
ICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgot
ICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJH
QkNvbG9yKSB7Ci0gICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgp
OwotICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAg
ICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJvbUNvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAg
ICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICB0b0NvbG9yID0g
Q29sb3IoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRl
cikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCi0gICAgICAgICAgICB8fCAoYi0+Km1fcGFp
bnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKLSAg
ICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBm
cm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgU1ZH
UGFpbnQgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMo
cHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTVkdQYWludFR5cGUg
KFJlbmRlclN0eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29sb3IgKFJl
bmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipt
X3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRT
dHlsZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVl
Pj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5
V3JhcHBlckZvbnRTdHlsZSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFsPEZv
bnRTZWxlY3Rpb25WYWx1ZT4+KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5bGU6OmZv
bnRJdGFsaWMsICZSZW5kZXJTdHlsZTo6c2V0Rm9udEl0YWxpYykKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20t
PmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNjcmlwdGlv
bigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5mb250RGVz
Y3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAgICB9
Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGF1dG8gZGlzY3JldGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCi0gICAgICAgIGF1
dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAgIGlmIChk
aXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3MgPCAwLjUg
PyBmcm9tIDogdG8pLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7Ci0KLSAgICAg
ICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKLSAgICAgICAgYXV0
byB0b0ZvbnRJdGFsaWMgPSB0by0+Zm9udEl0YWxpYygpOwotICAgICAgICBhdXRvIGJsZW5kZWRG
b250SXRhbGljID0gcHJvZ3Jlc3MgPCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0YWxp
YzsKLSAgICAgICAgaWYgKCFkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRGb250SXRhbGlj
ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHByb2dyZXNz
KTsKLQotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkc3QtPmZv
bnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBk
c3QtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoYmxl
bmRlZEZvbnRJdGFsaWMpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKGJs
ZW5kZWRTdHlsZUF4aXMpOwotICAgICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVu
dEZvbnRTZWxlY3Rvcik7Ci0gICAgfQotfTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb25X
cmFwcGVyTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJlIHdl
IHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NBbmltYXRp
b25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD4gbWFwOwotICAgICAgICByZXR1cm4gbWFw
OwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi0gICAgewotICAgICAgICBpZiAocHJv
cGVydHlJRCA8IGZpcnN0Q1NTUHJvcGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQcm9wZXJ0
eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVuc2lnbmVkIHdyYXBw
ZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCk7Ci0gICAgICAgIGlmICh3
cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnNbd3Jh
cHBlckluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
cHJvcGVydHlXcmFwcGVyc1tpbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCk7Ci0g
ICAgfkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOwotCi0gICAgdW5z
aWduZWQgY2hhciYgaW5kZXhGcm9tUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJRCAtIGZp
cnN0Q1NTUHJvcGVydHldOwotICAgIH0KLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKLSAgICB1bnNp
Z25lZCBjaGFyIG1fcHJvcGVydHlUb0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOwotCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9IFVD
SEFSX01BWDsKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcD47Ci19OwotCi1DU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBw
ZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCi17Ci0gICAgLy8gYnVpbGQg
dGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25zIGFuZCBi
bGVuZHMKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxlTG9uZ2hh
bmRQcm9wZXJ0eVdyYXBwZXJzW10gPSB7Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0
TGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSaWdo
dCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6
dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVyU3R5
bGU6OnNldEJvdHRvbSksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdpZHRo
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbldpZHRo
LCAmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRoKSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCAmUmVu
ZGVyU3R5bGU6Om1heFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKLQotICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1pbkhl
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRNaW5IZWlnaHQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1heEhlaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJGbGV4KCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCAm
UmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFdp
ZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZS
ZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5SaWdodCwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAm
UmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2luQm90dG9t
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRkaW5n
TGVmdCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6cGFk
ZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6
OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5
bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSksCi0KLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENh
cmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6
Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKLQotICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExp
bmtCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5k
Q29sb3IpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZEltYWdlLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5k
ZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBTdHlsZUltYWdl
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6
bGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAotICAgICAg
ICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFn
ZSwgJlJlbmRlclN0eWxlOjptYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdlKSwK
LQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlckltYWdlU291cmNlKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VT
bGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhC
b3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFn
ZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgpLAotICAgICAgICBuZXcg
TGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVy
SW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHls
ZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5
bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VTb3Vy
Y2UpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUltYWdlJj4o
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdl
LCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZSksCi0KLSAgICAgICAgbmV3IEZpbGxMYXll
cnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAmUmVuZGVy
U3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExh
eWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uWSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgRmlsbExheWVy
c1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyks
Ci0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0
eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLQotICAgICAgICBuZXcgRmlsbExheWVyc1By
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5kZXJTdHls
ZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAgICAgICAg
bmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b25ZLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFza0xh
eWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza1NpemUsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjpl
bnN1cmVNYXNrTGF5ZXJzKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUsICZSZW5k
ZXJTdHlsZTo6c2V0Rm9udFNpemUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2ln
bmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKLSAgICAgICAg
bmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9wZXJ0eUNv
bHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1u
R2FwKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3Ro
PihDU1NQcm9wZXJ0eVJvd0dhcCwgJlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJTdHlsZTo6
c2V0Um93R2FwKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4o
Q1NTUHJvcGVydHlDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRl
clN0eWxlOjpzZXRDb2x1bW5Db3VudCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6b250
YWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVydGlj
YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRleCwgJlJl
bmRlclN0eWxlOjpzcGVjaWZpZWRaSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lmaWVkWklu
ZGV4KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlPcnBo
YW5zLCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFucyksCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dzLCAmUmVu
ZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0eWxl
OjpzcGVjaWZpZWRMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQs
ICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zm
c2V0KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPdXRs
aW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OnNldExldHRlclNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50LCAmUmVu
ZGVyU3R5bGU6OnNldFRleHRJbmRlbnQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5UGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmUs
ICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmUpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnBl
cnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblgpLAot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVP
cmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpz
ZXRQZXJzcGVjdGl2ZU9yaWdpblkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1Pcmln
aW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0
eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblkp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRyYW5zZm9y
bU9yaWdpblosICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjpz
ZXRUcmFuc2Zvcm1PcmlnaW5aKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdy
YXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVy
U3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wTGVm
dFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMp
LAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90
dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKSwK
LSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0
b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0VmlzaWJp
bGl0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Wm9v
bSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0UmV0dXJu
VmFsdWUpLAotCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJTdHlsZTo6
c2V0Q2xpcCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0
eSgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKSwK
LSAgICAgICAgCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlG
aWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlciksCi0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZp
bHRlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmJhY2tk
cm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKLSNlbmRpZgotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRl
ciwgJlJlbmRlclN0eWxlOjphcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEFwcGxl
Q29sb3JGaWx0ZXIpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQ
cm9wZXJ0eUNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNl
dENsaXBQYXRoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVy
dHlTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6
OnNldFNoYXBlT3V0c2lkZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU1hcmdpbiksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5U2hhcGVJbWFnZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFwZUltYWdl
VGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAotCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNv
bHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVs
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Nv
bHVtblJ1bGVDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0
ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZhbGlkQ29s
b3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRT
dHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciksCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRG
aWxsQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RmlsbENvbG9y
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpi
b3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAmUmVuZGVy
U3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0
ZWRMaW5rQm9yZGVyTGVmdENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0
ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJbnZhbGlk
Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRl
ZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclRv
cENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciksCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwg
TWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxpbmVDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciksCi0KLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJlbmRlclN0
eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgJlJlbmRl
clN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5kZXJT
dHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVuZGVyU3R5
bGU6OmZpbGxQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0RmlsbFBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFjaXR5LCAm
UmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRU
eXBlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0U3Ry
b2tlUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAmUmVuZGVy
U3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFZl
Y3RvcjxTVkdMZW5ndGhWYWx1ZT4+KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAmUmVuZGVy
U3R5bGU6OnN0cm9rZURhc2hBcnJheSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNoQXJyYXkp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0cm9rZU1p
dGVybGltaXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0eWxlOjpz
ZXRTdHJva2VNaXRlckxpbWl0KSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5Q3gsICZSZW5kZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0Q3gpLAot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZSZW5kZXJT
dHlsZTo6Y3ksICZSZW5kZXJTdHlsZTo6c2V0Q3kpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5bGU6OnNl
dFIpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UngsICZS
ZW5kZXJTdHlsZTo6cngsICZSZW5kZXJTdHlsZTo6c2V0UngpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZSZW5kZXJT
dHlsZTo6c2V0UnkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5U3Ryb2tlRGFzaG9mZnNldCwgJlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0LCAmUmVu
ZGVyU3R5bGU6OnNldFN0cm9rZURhc2hPZmZzZXQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ryb2tlV2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVyU3R5bGU6
OnNldFgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WSwg
JlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5bGU6OnNldFkpLAotCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6
OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9vZENvbG9y
LCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RDb2xvciks
Ci0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdG9wT3Bh
Y2l0eSwgJlJlbmRlclN0eWxlOjpzdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRTdG9wT3Bh
Y2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQ
cm9wZXJ0eVN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0U3RvcENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlk
Q29sb3IoQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0aW5nQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0TGlnaHRpbmdDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0LCAmUmVu
ZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNlbGluZVNo
aWZ0VmFsdWUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihD
U1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0eWxlOjpz
ZXRLZXJuaW5nKSwKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZhcmlhdGlv
blNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJlbmRlclN0
eWxlOjpzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MpLAotI2VuZGlmCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICZS
ZW5kZXJTdHlsZTo6Zm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0KSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5
Rm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6c2V0
Rm9udFN0cmV0Y2gpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCksCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+KENTU1By
b3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERlY29yYXRp
b25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25lc3MpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENTU1Byb3Bl
cnR5VGV4dFVuZGVybGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5lT2Zmc2V0
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRVbmRlcmxpbmVPZmZzZXQpLAotICAgIH07Ci0gICAgY29u
c3QgdW5zaWduZWQgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZ
X0xFTkdUSChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKLQotICAgIHN0YXRp
YyBjb25zdCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzW10gPSB7
Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQtY29sb3Is
IGJhY2tncm91bmQtcG9zaXRpb24sIGJhY2tncm91bmQtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8gZm9yIGZv
bnQtc2l6ZSwgZm9udC13ZWlnaHQKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrLCAvLyBm
b3IgbWFzay1wb3NpdGlvbgotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwK
LSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQsIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCi0gICAgICAgIENT
U1Byb3BlcnR5Qm9yZGVyQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzLAot
ICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRl
ciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwKLSAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJTcGFjaW5nLAotICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9yIGxpc3Qt
c3R5bGUtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCi0gICAgICAgIENTU1Byb3Bl
cnR5T3V0bGluZSwKLSAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAotICAgICAgICBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTdHJva2UsCi0gICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVsZSwKLSAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxlU2hvcnRo
YW5kUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUT0RPOgotICAgIC8vCi0gICAgLy8gIENTU1Byb3Bl
cnR5VmVydGljYWxBbGlnbgotICAgIC8vCi0gICAgLy8gQ29tcG91bmQgcHJvcGVydGllcyB0aGF0
IGhhdmUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBhbmltYXRhYmxlOgotICAgIC8vCi0gICAg
Ly8gIENTU1Byb3BlcnR5Q29sdW1ucwotICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxl
Y3QKLQotICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1fcHJvcGVy
dHlUb0lkTWFwW2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKLQotICAgIENPTVBJ
TEVfQVNTRVJUKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0YWJsZVBy
b3BlcnRpZXNNdXN0QmVMZXNzVGhhblVDaGFyTWF4KTsKLSAgICBtX3Byb3BlcnR5V3JhcHBlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQg
KyBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50KTsKLQotICAgIC8vIEZpcnN0IHdl
IHB1dCB0aGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBtYXAsIHNv
IHRoZSBzaG9ydGhhbmQtYnVpbGRpbmcKLSAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0uCi0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0Nv
dW50OyArK2kpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ciA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbaV07Ci0gICAgICAgIG1fcHJv
cGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2U+KHdyYXBwZXIpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJ
RCh3cmFwcGVyLT5wcm9wZXJ0eSgpKSA9IGk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsKLSAgICAg
ICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRp
ZXNbaV07Ci0gICAgICAgIGF1dG8gc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJv
cGVydHlJRCk7Ci0gICAgICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uq
PiBsb25naGFuZFdyYXBwZXJzOwotICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2hvcnRoYW5kLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChhdXRvIGxvbmdo
YW5kIDogc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5kZXggPSBp
bmRleEZyb21Qcm9wZXJ0eUlEKGxvbmdoYW5kKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVySW5k
ZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4
XSk7Ci0gICAgICAgICAgICBsb25naGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtX3Byb3Bl
cnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3Byb3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJv
cGVydHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7Ci0g
ICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hh
bmRQcm9wZXJ0aWVzQ291bnQgKyBpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZ2F0aGVyRW5j
bG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBw
cm9wZXJ0eVNldCkKLXsKLSAgICBpZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqIHNo
b3J0aGFuZFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqPih3
cmFwcGVyKTsKLSAgICBib29sIGNvbnRhaW5lZCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgY3Vy
cldyYXBwZXIgOiBzaG9ydGhhbmRXcmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsKLSAgICAg
ICAgaWYgKGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHksIGN1cnJX
cmFwcGVyLCBwcm9wZXJ0eVNldCkgfHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCi0gICAgICAgICAgICBjb250YWluZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChjb250
YWluZWQpCi0gICAgICAgIHByb3BlcnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgpKTsKLQot
ICAgIHJldHVybiBjb250YWluZWQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIHRv
IHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5k
UHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDU1NQcm9w
ZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChwcm9wICE9
IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53
cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAgICAgd3Jh
cHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0jaWYgIUxPR19ESVNBQkxF
RAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsKLSNlbmRp
ZgotICAgIH0KLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0eUFuaW1h
dGFibGUoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLX0K
LQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxl
cmF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRv
bigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBw
ZXItPmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwotfQotCi0vLyBOb3RlOiB0aGlz
IGlzIGluZWZmaWNpZW50LiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0aW9uQXRU
aW1lKCkuCi1IYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmlt
YXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkp
Ci17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiBmb3VuZFByb3BlcnRpZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
cC5zaXplKCk7ICsraSkKLSAgICAgICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGll
cyhwcm9wZXJ0eSwgbWFwLndyYXBwZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVzKTsKLQot
ICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRp
b246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0gICAgICAg
IHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJv
cGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
Ci17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHBy
b3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2FuSW50ZXJw
b2xhdGUoYSwgYik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DU1NQcm9wZXJ0eUlEIENTU1By
b3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFsPGJvb2w+
JiBpc1Nob3J0aGFuZCkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1h
cCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0KLSAgICBp
ZiAoaSA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKiB3cmFwcGVyID0gbWFwLndyYXBwZXJGb3JJbmRleChpKTsKLSAgICBpc1Nob3J0
aGFuZCA9IHdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpOwotICAgIHJldHVybiB3cmFwcGVy
LT5wcm9wZXJ0eSgpOwotfQotCi1pbnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVByb3Bl
cnRpZXMoKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLnNpemUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDU0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENTU1Byb3Bl
cnR5QW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5QW5pbWF0
YWJsZShDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlByb3BlcnR5
SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVz
RXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1By
b3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7Ci0g
ICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0aW9uYWw8
Ym9vbD4mIGlzU2hvcnRoYW5kKTsKLSAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMoKTsK
LQotICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9ydGhhbmRz
QWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKLSAgICBzdGF0aWMg
dm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENT
U1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M0OWJjZjZk
OTFmNGRjZGY1NDY3MTRhNTQzNjgzZTEyZDQ3OTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0
aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkltcGxpY2l0
QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICA6IG1fYW5p
bWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotewotICAgIG1fc3VzcGVuZGVk
ID0gbV9hbmltYXRpb25Db250cm9sbGVyLmlzU3VzcGVuZGVkKCkgJiYgIW1fYW5pbWF0aW9uQ29u
dHJvbGxlci5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQotQ29tcG9z
aXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUb3NzIHRoZSBy
ZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZyb20K
LSAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KLQotICAgIGNsZWFyRWxlbWVudCgpOwot
ICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jbGVh
cigpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkKLXsKLSAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENsZWFyIHRoZSBy
ZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBpbiB0
aGUgbWlkZGxlIG9mCi0gICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAgZm9yIChh
dXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5zaXRpb24p
OwotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZy
YW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5p
bWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwot
ICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlKQotewotICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJlIGFy
ZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNraXAgaXQKLSAgICBpZiAoIWN1cnJl
bnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGFsbCBleGlzdGluZyB0
cmFuc2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0aWxsIGFj
dGl2ZSBvbmVzCi0gICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRoZSBvbmVz
IHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90
cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0aXZlKGZhbHNl
KTsKLSAgICAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1
cnJlbnRTdHlsZTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRh
dGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwotICAgIGlmICh0YXJnZXRTdHlsZS50cmFuc2l0aW9u
cygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUudHJhbnNp
dGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRh
cmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAgICAgIGJvb2wg
aXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9uLmRl
bGF5KCkgPiAwOwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVydHko
KS5tb2RlOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9k
ZTo6Tm9uZSB8fCBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlVua25vd25Qcm9w
ZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NTUHJvcGVy
dHlJRCBwcm9wID0gYW5pbWF0aW9uLnByb3BlcnR5KCkuaWQ7Ci0KLSAgICAgICAgICAgIGJvb2wg
YWxsID0gbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGw7Ci0KLSAgICAgICAg
ICAgIC8vIEhhbmRsZSBib3RoIHRoZSAnYWxsJyBhbmQgc2luZ2xlIHByb3BlcnR5IGNhc2VzLiBG
b3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UsIHdlIG1ha2Ugb25seSBvbmUgcGFzcwotICAgICAgICAg
ICAgLy8gdGhyb3VnaCB0aGUgbG9vcC4KLSAgICAgICAgICAgIGZvciAoaW50IHByb3BlcnR5SW5k
ZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVByb3Bl
cnRpZXMoKTsgKytwcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbCkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2ggaXMgbm90
IGEgc2hvcnRoYW5kLgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBpc1Nob3J0
aGFuZDsKLSAgICAgICAgICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpn
ZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHByb3AgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNoZWQgYnkg
YWN0dWFsIHByb3BlcnRpZXMsIG5ldmVyIGFuaW1hdGVBbGwuCi0gICAgICAgICAgICAgICAgQVNT
RVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9wIDwgKGZpcnN0Q1NTUHJvcGVydHkg
KyBudW1DU1NQcm9wZXJ0aWVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
IHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlvbiBpcyBv
dmVycmlkZGVuCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFu
aW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0aGUgdGVzdAotICAgICAgICAg
ICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJvdmVy
cmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCi0gICAgICAgICAgICAgICAgYXV0byoga2V5ZnJh
bWVBbmltYXRpb24gPSBhbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAg
ICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW1hdGlvbiA/ICZrZXlmcmFtZUFuaW1hdGlv
bi0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJvcAotICAg
ICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlvbnMu
Z2V0KHByb3ApOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWwgPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGltcGxBbmltKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFy
ZSBwb3N0IGFjdGl2ZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUgYWN0aXZlIGZsYWcuIFRoaXMg
d2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFuaW1hdGlvbiB0byBnZXQg
cmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAg
IGlmICghaW1wbEFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlt
cGxBbmltLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiB0aGF0IGlzIGp1c3QgZmlu
aXNoaW5nLiBUaGF0IHdvdWxkIGJlIHRoZSBjYXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGlm
IGl0IHdlcmUgcG9zdEFjdGl2ZS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIGVxdWFs
aXR5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUganVzdCBmaW5p
c2hpbmcgQU5EIGNoYW5naW5nIHRvIGEgbmV3IGdvYWwgc3RhdGUuCi0gICAgICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbEFuaW0gbWlnaHQgYWxzbyBu
b3QgYmUgYW4gYWxyZWFkeSBydW5uaW5nIHRyYW5zaXRpb24uIEl0IG1pZ2h0IGJlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG5ld2x5IGFkZGVkIHRvIHRoZSBsaXN0IGluIGEgcHJldmlvdXMgaXRl
cmF0aW9uLiBUaGlzIHdvdWxkIGhhcHBlbiBpZgotICAgICAgICAgICAgICAgICAgICAvLyB5b3Ug
aGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkgYW5kICdhbGwnIGluIHRo
ZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwgdGhlIGxh
dHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRpb24gYmVp
bmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1wbEFuaW0tPmlzVGFyZ2V0
UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVkIHRvIHJldHVybiBhIG5l
dyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNpdGlvbnMg
dXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRl
ZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtb2RpZmllZEN1cnJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKmN1cnJlbnRTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsQW5p
bS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRTdHlsZS5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0aW9uICVw
IGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoKmltcGxBbmltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlv
bnMucmVtb3ZlKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2l0aW9uIGlmIGl0IGlzIGFj
dGl2ZSBhbmQgdGhlIHByb3BlcnRpZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAgICAg
ZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9w
ZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpIHx8ICFDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wLCBmcm9tU3R5bGUsICZ0
YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFpc0FjdGl2
ZVRyYW5zaXRpb24pLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gdGhhdCB0byBj
aGVjayB0byBzZWUgaWYgd2UgYXJlIGNhbmNlbGluZyBhIHRyYW5zaXRpb24uIEJ1dCB3ZSBkb24n
dCB3YW50IHRvCi0gICAgICAgICAgICAgICAgLy8gc3RhcnQgb25lIG9mIHRoZSBpbmFjdGl2ZSB0
cmFuc2l0aW9ucy4gU28gc2hvcnQgY2lyY3VpdCB0aGF0IGhlcmUuIChTZWUKLSAgICAgICAgICAg
ICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0Nzg3Pgot
ICAgICAgICAgICAgICAgIGlmICghZXF1YWwgJiYgaXNBY3RpdmVUcmFuc2l0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxpY2l0QW5pbWF0aW9uOjpjcmVhdGUo
YW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9kaWZpZWRDdXJyZW50U3R5bGUgPyAq
bW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9uLT5oYXNTdHlsZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmlt
YXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICJDcmVhdGVkIEltcGxpY2l0QW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgZm9yIHBy
b3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxpY2l0QW5pbWF0aW9uLnB0
cigpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmltYXRpb24uZHVyYXRpb24o
KSwgYW5pbWF0aW9uLmRlbGF5KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25z
LnNldChwcm9wLCBXVEZNb3ZlKGltcGxpY2l0QW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBwYXNzIGZvciB0aGUgc2lu
Z2xlIHByb3AgY2FzZQotICAgICAgICAgICAgICAgIGlmICghYWxsKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1h
a2UgYSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHJlbW92ZWQKLSAgICBWZWN0b3I8aW50PiB0
b0JlUmVtb3ZlZDsKLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZh
bHVlcygpKSB7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFuc2l0
aW9uKTsKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5hbmltYXRp
bmdQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgSW1w
bGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyIsIHRyYW5z
aXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+YW5pbWF0
aW5nUHJvcGVydHkoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHJlbW92ZSB0
aGUgdHJhbnNpdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoYXV0byBwcm9wZXJ0eVRvUmVt
b3ZlIDogdG9CZVJlbW92ZWQpCi0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3BlcnR5
VG9SZW1vdmUpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVB
bmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBOb3RoaW5nIHRv
IGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2ZSBhbnkg
YmVmb3JlCi0gICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFyZ2V0
U3R5bGUuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgCi0gICAgaWYgKGN1cnJlbnRTdHls
ZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5oYXNBbmlt
YXRpb25zKCkgJiYgKihjdXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJnZXRTdHls
ZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBbmltYXRpb25OYW1lTWFw
IG5ld0FuaW1hdGlvbnM7Ci0KLSAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgot
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwotCi0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBub25lKCJub25lIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAotICAgIC8vIE5vdyBtYXJrIGFu
eSBzdGlsbCBhY3RpdmUgYW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFuaW1h
dGlvbnMuCi0gICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgewotICAgICAgICBpbnQg
bnVtQW5pbXMgPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbmlt
YXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAg
ICAgIEF0b21TdHJpbmcgYW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKLQotICAgICAg
ICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMg
YSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhpcyBuYW1lLgotICAgICAgICAgICAgUmVmUHRyPEtl
eWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQo
YW5pbWF0aW9uTmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewot
ICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKGtleWZyYW1lQW5pbS0+bmFtZSgpLmlt
cGwoKSwga2V5ZnJhbWVBbmltKTsKLQotICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0t
PnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRpZmZlci4g
VXBkYXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVwZGF0ZVBs
YXlTdGF0ZShhbmltYXRpb24ucGxheVN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gU2V0
IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2UgdGhlIHBs
YXkgc3RhdGUgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRB
bmltYXRpb24oYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW1hdGlvbi5k
dXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpKSAmJiBhbmltYXRpb24uaXRlcmF0aW9uQ291
bnQoKSAmJiBhbmltYXRpb25OYW1lICE9IG5vbmUpIHsKLSAgICAgICAgICAgICAgICBrZXlmcmFt
ZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVudCwgKnRo
aXMsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0
aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFtZXMgJXMs
IGR1cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5p
bS5nZXQoKSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0
aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291
bnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRl
OjpQYXVzZWQpOwotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAgKGNyZWF0
ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgICAgICB9Ci0jaWYg
IUxPR19ESVNBQkxFRAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDoga2V5
ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5wcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAgICAgICAg
IExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0
eUlEKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuc2V0KGtleWZy
YW1lQW5pbS0+bmFtZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gdGhlIGFuaW1hdGlvbiBvcmRl
ciBtYXAuCi0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAgICAgICAgICAgICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgbGlzdCBvZiBhbmlt
YXRpb25zIHRvIGJlIHJlbW92ZWQuCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZy
YW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMuY29u
dGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0aW9u
Q29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0gICAgICAg
ICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJl
bW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1hdGlvbi5n
ZXQoKSwgJmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c3dhcChu
ZXdBbmltYXRpb25zLCBtX2tleWZyYW1lQW5pbWF0aW9ucyk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0
ZSBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQot
ewotICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEg
Y3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucyhlbGVtZW50
LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFtZUFuaW1hdGlv
bnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGlvbklt
cGFjdD4gaW1hcGN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRl
ZFN0eWxlOwotCi0gICAgaWYgKGN1cnJlbnRTdHlsZSkgewotICAgICAgICAvLyBOb3cgdGhhdCB3
ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUg
bmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAgICAgLy8gdG8gZmlsbCBpbiBhIFJl
bmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgICAgIGJvb2wgY2hlY2tGb3JTdGFja2lu
Z0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFu
c2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0gdHJhbnNpdGlv
bi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAgICAgICAg
ICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSkKLSAg
ICAgICAgICAgICAgICBjaGVja0ZvclN0YWNraW5nQ29udGV4dCB8PSBXaWxsQ2hhbmdlRGF0YTo6
cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3Bl
cnR5KCkpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hhbmdl
OjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIHRyYW5zaXRpb24tPmFmZmVjdHNBY2NlbGVyYXRlZFBy
b3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OlJl
cXVpcmVzUmVjb21wb3NpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFuaW1hdGVkU3R5
bGUgJiYgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGlzIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdCgpIGJ1
dCBvbmx5IG5lZWRzIHRvIGNvbnN1bHQKLSAgICAgICAgICAgIC8vIGFuaW1hdGFibGUgcHJvcGVy
dGllcyB0aGF0IGNhbiB0cmlnZ2VyIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICBpZiAo
YW5pbWF0ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICAgICAgICAgIHx8IGFuaW1h
dGVkU3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAgICAgICAg
fHwgYW5pbWF0ZWRTdHlsZS0+aGFzTWFzaygpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRT
dHlsZS0+Y2xpcFBhdGgoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmJveFJl
ZmxlY3QoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0ZpbHRlcigpCi0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0
eWxlLT5oYXNCYWNrZHJvcEZpbHRlcigpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICApCi0gICAg
ICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdDb250ZXh0
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0aW9u
IG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAg
V2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBu
ZWVkZWQuCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFw
KSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKSB7
Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSBrZXlmcmFtZUFuaW0tPmFuaW1hdGUoKnRoaXMs
IHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGFuZ2VzLmNv
bnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYga2V5ZnJhbWVBbmlt
LT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGltYXBjdC5h
ZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1aXJlc1JlY29tcG9zaXRlKTsKLQotICAgICAgICAgICAg
aWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSAmJiBrZXlm
cmFtZUFuaW0tPnRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgaW1h
cGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7Ci0KLSAgICAg
ICAgICAgIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCB8PSBrZXlmcmFtZUFuaW0t
PmRlcGVuZHNPbkxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgV1RG
TW92ZShhbmltYXRlZFN0eWxlKSwgaW1hcGN0IH07Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29uc3QKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwotICAgIGZvciAo
YXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRyYW5z
aXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotCi0gICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZSk7
Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKLSAgICAgICAgICAgIGtleWZyYW1lQW5p
bWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdFN0eWxlOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDb21wb3NpdGVBbmlt
YXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm5zIHRoZSB0
aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1lYW5z
IG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJlcXVp
cmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNv
bmRzIGluIHRoZSBmdXR1cmUuCi0gICAgT3B0aW9uYWw8U2Vjb25kcz4gbWluVDsKLSAgICAKLSAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFs
PFNlY29uZHM+IHQgPSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAgICAg
ICAgaWYgKCF0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFt
aW5UIHx8IHQudmFsdWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtaW5UID0g
dC52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1fa2V5ZnJh
bWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlm
cmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+
IHQgPSBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAoIXQp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQgfHwgdC52
YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQgPSB0LnZhbHVlKCk7
Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pblQ7Ci19Ci0KLUtl
eWZyYW1lQW5pbWF0aW9uKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGlvbkZvclByb3BlcnR5
KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24q
IHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNlbmQgYmFjayB0aGUgbGFz
dCBhbmltYXRpb24gd2l0aCB0aGUgcHJvcGVydHkgaWYgdGhlcmUgYXJlIG11bHRpcGxlcy4KLSAg
ICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9ucwotICAgIGlm
ICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVB
bmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRp
b24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGFu
aW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGFuaW1hdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50
T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIC8v
IElmIG1vcmUgdGhhbiBvbmUgdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0cmFuc2Zv
cm0sIGdpdmUgdXAuCi0gICAgYm9vbCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHko
Q1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFh
bmltYXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJhbnNpdGlv
biA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFu
aW1hdGluZ1Byb3BlcnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5zaXRpb24t
Pmhhc1N0eWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc2VlblRy
YW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIXRyYW5zaXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKLXsK
LSAgICBpZiAobV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VzcGVuZGVk
ID0gdHJ1ZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkKLSAg
ICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6
UGF1c2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsK
LSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQotICAgICAgICAgICAgICAg
IHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVB
bmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc3VzcGVuZGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9u
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRp
b25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5wbGF5U3RhdGVQbGF5
aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0
aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV90
cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmhh
c1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFu
aW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJy
aWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNp
dGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0
aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAgICAgIHRy
YW5zaXRpb24tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1i
b29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5
ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltYXRpb24t
PmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1f
dHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5pc0Fu
aW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IEF0
b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJh
bWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICBpZiAo
IWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGtleWZyYW1lQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIGlmICgocHJvcGVy
dHkgPCBmaXJzdENTU1Byb3BlcnR5KSB8fCAocHJvcGVydHkgPj0gZmlyc3RDU1NQcm9wZXJ0eSAr
IG51bUNTU1Byb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbXBsaWNp
dEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wZXJ0eSk7Ci0gICAg
aWYgKCFpbXBsQW5pbSkgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBwcm9wZXJ0
eSBpcyBiZWluZyBhbmltYXRlZCB2aWEgYSBzaG9ydGhhbmQuCi0gICAgICAgIC8vIFRoaXMgY29k
ZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcsIHNvIHBlcmZvcm1hbmNlIGlzIG5vdCBjcml0aWNh
bCBoZXJlLgotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IHNob3J0aGFuZFByb3BlcnRp
ZXMgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQ
cm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgYW55UGF1c2VkID0gZmFsc2U7Ci0gICAg
ICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgewotICAgICAg
ICAgICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKLSAgICAgICAg
ICAgICAgICBhbnlQYXVzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhbnlQ
YXVzZWQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbXBsQW5pbS0+cnVubmluZygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKHQgPj0gMC4wKSAmJiAodCA8PSBpbXBsQW5pbS0+ZHVy
YXRpb24oKSkpIHsKLSAgICAgICAgaW1wbEFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25lZCBD
b21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVB
bmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPnJ1bm5pbmcoKSkK
LSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9u
IDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlvbi0+cnVu
bmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNv
dW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NDIyNjkyMzk2ZDJmYmE2ODgwZDFjZDlmOWM4ZDY5YjgyZTdiMGM1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFuaW1h
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBDb21wb3NpdGVBbmltYXRp
b24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0IGFyZSBydW5uaW5n
Ci0vLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEgbnVtYmVyIG9mIHByb3Bl
cnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgotY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmltYXRpb24+
IGNyZWF0ZShDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxl
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFuaW1hdGlv
bihhbmltYXRpb25Db250cm9sbGVyKSk7Ci0gICAgfTsKLQotICAgIH5Db21wb3NpdGVBbmltYXRp
b24oKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwotCi0gICAgQW5pbWF0aW9uVXBk
YXRlIGFuaW1hdGUoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlRXh0ZW50
T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgT3B0aW9uYWw8
U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKLSAgICAKLSAgICBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygp
OwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBj
b25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotICAgIAotICAgIGJvb2wgaGFzQW5pbWF0aW9u
cygpIGNvbnN0ICB7IHJldHVybiAhbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkgfHwgIW1fa2V5ZnJh
bWVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQsIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdDsKLQotICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdDsK
LQotICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCk7Ci0g
ICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQp
OwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9tU3RyaW5nJiBuYW1l
LCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJvcGVydHlJ
RCwgZG91YmxlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25z
dDsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dDsgfQotCi1wcml2YXRlOgot
ICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwot
Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICB2b2lk
IHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICAKLSAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7Ci0KLSAgICBib29sIG1f
c3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNP
bkxheW91dCB7IGZhbHNlIH07Ci0KLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYg
bV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXAgbV90
cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRpb25zOwot
ICAgIFZlY3RvcjxBdG9tU3RyaW5nSW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDUzOWY2YTUzZWM1MTUwYzkwNzM3ZDIwZTFiYjJhNWJiNDBhMDlhOC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIK
LQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkNvbnRlbnRDaGFuZ2VPYnNlcnZl
ci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29u
c3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5
LCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlv
biwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UodHJh
bnNpdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9mcm9tU3R5bGUo
UmVuZGVyU3R5bGU6OmNsb25lUHRyKGZyb21TdHlsZSkpCi0gICAgLCBtX3RyYW5zaXRpb25Qcm9w
ZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkuaWQpCi0gICAgLCBtX2FuaW1hdGluZ1Byb3BlcnR5
KGFuaW1hdGluZ1Byb3BlcnR5KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZWxl
bWVudC5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEFkZFRyYW5zaXRpb24o
ZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYW5pbWF0aW5nUHJvcGVy
dHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLX0KLQotSW1wbGljaXRBbmltYXRpb246On5JbXBs
aWNpdEFuaW1hdGlvbigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0
byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQo
KS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVtZW50LCBt
X2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIC8vIC8vIE1ha2Ugc3VyZSB0byB0ZWxs
IHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1cmUgYW55
IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0QWN0aXZl
KCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9u
OjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGluTGlz
dGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCkuaGFz
TGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1hdGVDaGFu
Z2U+IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9z
aXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UgZ2V0IHRo
aXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmlu
ZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIFNvIGp1c3QgcmV0dXJuLiBF
dmVyeXRoaW5nIGlzIGFscmVhZHkgYWxsIGNsZWFuZWQgdXAuCi0gICAgaWYgKHBvc3RBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0YXRlID0g
c3RhdGUoKTsKLQotICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdlIGFy
ZSBuZXcKLSAgICBpZiAoaXNOZXcoKSkKLSAgICAgICAgcmVzZXQodGFyZ2V0U3R5bGUsIGNvbXBv
c2l0ZUFuaW1hdGlvbik7Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCi0gICAg
Ly8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBp
ZiBuZWVkZWQKLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgQ1NTUHJvcGVydHlB
bmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmlt
YXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9n
cmVzcygpKTsKLSAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNlcyB3aGVy
ZSB3ZSBoYXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCi0gICAgLy8g
c3VjaCBhcyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0KLSAgICAvLyBGaXJlIHRoZSBz
dGFydCB0aW1lb3V0IGlmIG5lZWRlZAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgp
OwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hhbmdlOjpT
dHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAgICBjaGFu
Z2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQYXVzZWRT
dGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQYXVzZWRT
dGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAgIGNoYW5n
ZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJldHVybiBj
aGFuZ2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBpZiAoIWFu
aW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKm1fdG9TdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0
aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIG1fZnJv
bVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotfQotCi1ib29sIElt
cGxpY2l0QW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0
UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChoYXNTdHlsZSgpKTsKLQotICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIE5v
bi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBBU1NFUlQobV9hbmltYXRpbmdQ
cm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0KLSAgICBSZW5kZXJCb3gmIGJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UmVjdCByZW5kZXJl
ckJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHN0YXJ0Qm91
bmRzID0gYm91bmRzOwotICAgIExheW91dFJlY3QgZW5kQm91bmRzID0gYm91bmRzOwotCi0gICAg
aWYgKHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKSB7Ci0gICAgICAgIGlmICghY29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKm1fZnJvbVN0
eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVyQm94
LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4
KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1h
dHJpeChyZW5kZXJlckJveCwgKm1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSB1bmlvblJlY3Qoc3RhcnRCb3VuZHMs
IGVuZEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRp
b246OmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NT
UHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1fYW5p
bWF0aW5nUHJvcGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1h
dGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0VHJhbnNpdGlvbih0
aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0
eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRp
b246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFuc2l0aW9u
UGF1c2VkKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotICAgIC8vIFJlc3RvcmUg
dGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6Y2xlYXIoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGF1
dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxlbWVudCwg
bV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICBBbmltYXRpb25CYXNlOjpjbGVhcigp
OwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkKLXsKLSAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJl
ci0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi12b2lkIElt
cGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVs
ZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2
ZXIoKS5kaWRGaW5pc2hUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsK
LSNlbmRpZgotICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24gdGhpcyBw
cm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBrZXlmcmFt
ZQotICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNhc2UgYSB0
cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCi0gICAgLy8g
cnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQsIHdlIG5l
ZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3Ci0gICAgLy8gZGVzdGluYXRpb24u
IElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5rIGEgdHJh
bnNpdGlvbiBoYWQgc3RhcnRlZAotICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFuaW1hdGVk
IHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbikuCi0gICAg
aWYgKGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Gb3JQ
cm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KSkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRVbmFu
aW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCptX3RvU3R5bGUpKTsKLQotICAgIHNl
bmRUcmFuc2l0aW9uRXZlbnQoZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCwgZWxhcHNl
ZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9u
OjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgZG91Ymxl
IGVsYXBzZWRUaW1lKQotewotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5z
aXRpb25lbmRFdmVudCkgewotICAgICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVy
VHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwotCi0gICAgICAgIGlmIChz
aG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKG1fYW5pbWF0aW5nUHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2
ZW50Ci0gICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVsZW1lbnQo
KSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgp
LmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2Fj
aGUpOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAgICAgICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRXZlbnRU
b0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRpbWUp
OwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5
bGUKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25l
bmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOyAv
LyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKLQotICAgIG1f
dG9TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0byk7Ci0KLSAgICBpZiAoZWxlbWVudCgp
KQotICAgICAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKm1fdG9TdHlsZSwgZWxlbWVu
dCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkpOwotCi0gICAgLy8gUmVzdGFydCB0aGUgdHJhbnNp
dGlvbi4KLSAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlICYmICFjb21wb3NpdGVBbmlt
YXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24sIC0xKTsKLQotICAgIC8vIFNldCB0aGUgdHJh
bnNmb3JtIGFuaW1hdGlvbiBsaXN0LgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0
KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFC
TEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1
bmN0aW9uTGlzdHMoKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJpZGRl
bihib29sIGIpCi17Ci0gICAgaWYgKGIgPT0gbV9vdmVycmlkZGVuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX292ZXJyaWRkZW4gPSBiOwotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShtX292ZXJy
aWRkZW4gPyBBbmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlIDogQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUsIC0xKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IHByb3BlcnR5KTsKLX0KLQotYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIC8vIFdlIGNhbiBnZXQgaGVy
ZSBmb3IgYSB0cmFuc2l0aW9uIHRoYXQgaGFzIG5vdCBzdGFydGVkIHlldC4gVGhpcyB3b3VsZCBt
YWtlIG1fdG9TdHlsZSB1bnNldCBhbmQgbnVsbC4gCi0gICAgLy8gU28gd2UgY2hlY2sgdGhhdCBo
ZXJlIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjcwNj4p
Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
Q1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5bGUuZ2V0
KCksIHRhcmdldFN0eWxlKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YmxlbmRQcm9w
ZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFkZCBhIHRyYW5zaXRpb24gd2l0aCBh
IDAgZHVyYXRpb24gYW5kIGRlbGF5LiBCdXQgaWYgd2UgZXZlciBkaWQKLSAgICAvLyBpdCB3b3Vs
ZCBoYXZlIGEgbnVsbCB0b1N0eWxlLiBTbyBqdXN0IGluIGNhc2UsIGxldCdzIGNoZWNrIHRoYXQg
aGVyZS4gKFNlZQotICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQ3ODc+Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wLCBj
dXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNz
KCkpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0
aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsK
LSAgICAKLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJm1fZnJv
bVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0b1Zh
bCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0aW9ucygp
LmlzRW1wdHkoKSkKLSAgICAgICAgdmFsID0gdG9WYWw7Ci0KLSAgICBpZiAodmFsLT5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEFuIGVt
cHR5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55dGhpbmcuCi0gICAgaWYgKHZhbCAhPSB0b1Zh
bCAmJiAhdG9WYWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIXZhbC0+b3BlcmF0aW9uc01h
dGNoKCp0b1ZhbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyYW5zZm9ybSBsaXN0cyBt
YXRjaC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIGZpbHRlck9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBm
cm9tT3BlcmF0aW9ucywgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG9PcGVyYXRpb25zKQotewot
ICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAg
ZnJvbU9wZXJhdGlvbnMgPSAmdG9PcGVyYXRpb25zOwotCi0gICAgaWYgKGZyb21PcGVyYXRpb25z
LT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoZnJvbU9wZXJhdGlvbnMgIT0gJnRvT3BlcmF0aW9ucyAmJiAhdG9PcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5pc0VtcHR5KCkgJiYgIWZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zTWF0Y2godG9P
cGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlv
bkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotCi0g
ICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRjaCgmbV9m
cm9tU3R5bGUtPmZpbHRlcigpLCBtX3RvU3R5bGUtPmZpbHRlcigpKTsKLX0KLQotI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1hdGNo
aW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFt
X3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlv
bkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJvbVN0eWxlLT5iYWNrZHJv
cEZpbHRlcigpLCBtX3RvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpOwotfQotI2VuZGlmCi0KLXZv
aWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9u
TGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAg
ICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2go
Jm1fZnJvbVN0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCksIG1fdG9TdHlsZS0+YXBwbGVDb2xvckZp
bHRlcigpKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gSW1wbGljaXRBbmltYXRpb246OnRpbWVU
b05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0ID0gQW5pbWF0aW9uQmFz
ZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAoIXQgfHwgdC52YWx1ZSgpICE9IDBfcyB8
fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBfTVNDX1ZFUiA+PSAxOTIwCi0g
ICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHQ7Ci0jZW5k
aWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2aWNlLiBC
dXQgaWYgdGhpcyBpcyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gd2UgCi0gICAgLy8gb25seSBu
ZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi4KLSAgICBpZiAoQ1NTUHJv
cGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1fYW5pbWF0
aW5nUHJvcGVydHkpICYmIGlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICBib29sIGlzTG9vcGlu
ZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI4NGFkY2VjZjkyOGQ4NGUxNWE0MGM1Yzg4NTc2MDVm
M2U2NDYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2Uu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotCi0vLyBBbiBJ
bXBsaWNpdEFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGEgdHJhbnNpdGlvbiBvZiBhIHNw
ZWNpZmljIENTUyBwcm9wZXJ0eQotLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCi1jbGFz
cyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBh
bmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1l
bnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSYgZnJvbVN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1w
bGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVudCwgY29t
cG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKLSAgICB9OwotICAgIAotICAgIENTU1Byb3Bl
cnR5SUQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9uUHJv
cGVydHk7IH0KLSAgICBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpbmdQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChk
b3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91
YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91Ymxl
IHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGlu
Z0ZvcndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFu
Z2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKLSAg
ICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5p
bWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSYg
dG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFu
c2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBh
ZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRPdmVycmlk
ZGVuKGJvb2wpOwotICAgIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fb3ZlcnJpZGRlbjsgfQotCi0gICAgYm9vbCBhZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Ci0KLSAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlF
cXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9pZCBibGVu
ZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKik7Ci0KLSAg
ICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwotICAgIAot
ICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KLSAgICB2b2lkIHNl
dEFjdGl2ZShib29sIGIpIHsgbV9hY3RpdmUgPSBiOyB9Ci0KLSAgICBjb25zdCBSZW5kZXJTdHls
ZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fZnJvbVN0eWxl
OyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBib29s
IHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUpIGNvbnN0
OyAgICAKLSAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYsIGRv
dWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25M
aXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
I2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQmFj
a2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNrRm9yTWF0
Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBJbXBsaWNp
dEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBFbGVtZW50JiwgQ29t
cG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2aXJ0dWFsIH5JbXBs
aWNpdEFuaW1hdGlvbigpOwotCi0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxl
bmRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHlsZTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKLQotICAgIENTU1Byb3Bl
cnR5SUQgbV90cmFuc2l0aW9uUHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkgYXMgc3Bl
Y2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5pbWF0aW5n
UHJvcGVydHk7IC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5pbWF0aW9u
Ci0KLSAgICBib29sIG1fYWN0aXZlIHsgdHJ1ZSB9OyAvLyBVc2VkIGZvciBjdWxsaW5nIHRoZSBs
aXN0IG9mIHRyYW5zaXRpb25zLgotICAgIGJvb2wgbV9vdmVycmlkZGVuIHsgZmFsc2UgfTsgLy8g
VHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJpZGVzIHRo
ZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjU3MTUwNzcyMzg3N2I1ZWJmMzMy
YmIwOGM4NTA5Nzc3OTg4YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0j
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0j
aW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBB
bmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUp
Ci0gICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0
aW9uKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUoKSkKLSAgICAsIG1fdW5hbmlt
YXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cih1bmFuaW1hdGVkU3R5bGUpKQotewotICAg
IHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBtX3RyYW5zZm9y
bUZ1bmN0aW9uTGlzdFZhbGlkIGZsYWcgYmFzZWQgb24gd2hldGhlciB0aGUgZnVuY3Rpb24gbGlz
dHMgaW4gdGhlIGtleWZyYW1lcyBtYXRjaC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9u
TGlzdCgpOwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYg
RU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0
ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0
ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJh
bWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoV2lsbENoYW5nZURhdGE6OnByb3BlcnR5
Q3JlYXRlc1N0YWNraW5nQ29udGV4dChwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIG1fdHJpZ2dl
cnNTdGFja2luZ0NvbnRleHQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0eUlE
KSkKLSAgICAgICAgICAgIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAg
IAotICAgICAgICBpZiAobV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCAmJiBtX2hhc0FjY2VsZXJh
dGVkUHJvcGVydHkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb21wdXRlTGF5
b3V0RGVwZW5kZW5jeSgpOwotfQotCi1LZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1lQW5pbWF0
aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0aGUgcmVuZGVyZXIgdGhhdCB3ZSBh
cmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBhY2NlbGVyYXRlZCBhbmltYXRpb25z
IGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgpKQotICAgICAgICBlbmRBbmltYXRp
b24oKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUxheW91dERlcGVuZGVu
Y3koKQotewotICAgIGlmICghbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1LZXlmcmFtZXMg
PSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlm
cmFtZXM7IGkrKykgewotICAgICAgICBhdXRvKiBrZXlmcmFtZVN0eWxlID0gbV9rZXlmcmFtZXNb
aV0uc3R5bGUoKTsKLSAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKSB7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChrZXlmcmFtZVN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAgICAgICAg
YXV0byYgdHJhbnNmb3JtT3BlcmF0aW9ucyA9IGtleWZyYW1lU3R5bGUtPnRyYW5zZm9ybSgpOwot
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiB0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24tPmlzVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gdHJhbnNsYXRpb24gPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KG9w
ZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbi0+eCgp
LmlzUGVyY2VudCgpIHx8IHRyYW5zbGF0aW9uLT55KCkuaXNQZXJjZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGVwZW5kc09uTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKLXsKLSAgICBzaXplX3QgbnVtS2V5ZnJh
bWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKLSAgICBkb3VibGUgZWxhcHNl
ZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwotICAgIGlmIChtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KSAmJiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlv
bkNvdW50SW5maW5pdGUpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gc3RkOjptaW4oZWxhcHNlZFRp
bWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkpOwotCi0gICAgY29uc3QgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJhY3Rpb25h
bFRpbWUoMSwgZWxhcHNlZFRpbWUsIDApOwotICAgIEFTU0VSVCghbV9rZXlmcmFtZXNbMF0ua2V5
KCkpOwotICAgIEFTU0VSVChtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkgLSAxXS5rZXko
KSA9PSAxKTsKLQotICAgIGludCBwcmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dEluZGV4ID0g
LTE7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIgc2VhcmNo
IHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFs
dWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotCi0gICAgICAgIGlmICghY3Vycktl
eUZyYW1lLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleUZyYW1lLmtleSgpKSB7Ci0g
ICAgICAgICAgICBuZXh0SW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAocHJldkluZGV4ID09IC0x
KQotICAgICAgICBwcmV2SW5kZXggPSAwOwotICAgIGlmIChuZXh0SW5kZXggPT0gLTEpCi0gICAg
ICAgIG5leHRJbmRleCA9IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7Ci0KLSAgICBjb25zdCBLZXlm
cmFtZVZhbHVlJiBwcmV2S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1twcmV2SW5kZXhdOwotICAgIGNv
bnN0IEtleWZyYW1lVmFsdWUmIG5leHRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW25leHRJbmRleF07
Ci0KLSAgICBmcm9tU3R5bGUgPSBwcmV2S2V5ZnJhbWUuc3R5bGUoKTsKLSAgICB0b1N0eWxlID0g
bmV4dEtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICBkb3VibGUgb2Zmc2V0ID0gcHJldktleWZyYW1l
LmtleSgpOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMCAvIChuZXh0SW5kZXggPT0gcHJldkluZGV4
ID8gIDEgOiAobmV4dEtleWZyYW1lLmtleSgpIC0gcHJldktleWZyYW1lLmtleSgpKSk7Ci0KLSAg
ICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0
aW9uKCkpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gS2V5ZnJhbWVBbmltYXRpb246
OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5p
bWF0ZWRTdHlsZSkKLXsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0YXRlKCk7Ci0K
LSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVk
IChGSVhNRTogdGhpcyBmdW5jdGlvbiBuZWVkcyBhIGJldHRlciBuYW1lKS4KLSAgICBmaXJlQW5p
bWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBzdGFy
dGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBzdGFydCB0
aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KLSAgICBpZiAoaXNOZXcoKSkgewotICAgICAgICBpZiAo
bV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyAm
JiAhY29tcG9zaXRlQW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0xKTsKLSAg
ICAgICAgZWxzZSBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlT
dGF0ZTo6UGF1c2VkKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCwgLTEpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xl
YW5pbmcgdXAgYSBqdXN0LWZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBzbywgd2UgbmVl
ZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZlKCkpIHsK
LSAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9
IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciwg
d2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldC4KLSAgICAvLyBTcGVjaWFsIGNh
c2UgMSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBzZXQgdGhl
IGZpcnN0IGZyYW1lIG9mIHRoZQotICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBUaGlzIGF2
b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCi0gICAgLy8gU3BlY2lhbCBj
YXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUsIHRoZW4gd2Ugd2FudCB0
byBjb250aW51ZQotICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJsZW5kIHNvIHRoYXQgd2Ug
Z2V0IHRoZSBmcm9tU3R5bGUuCi0gICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9hbmltYXRp
b24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1lcywgZG9u
J3QgYW5pbWF0ZS4KLSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewotICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uLCAtMSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0
aW9uLgotICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28g
bWFrZSBvbmUgaWYgbmVlZGVkLgotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0KLSAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmluZyB3
aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgotICAgIC8vIFdlIHNob3Vs
ZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGF1dG8gcHJvcGVy
dHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBHZXQgdGhlIGZy
b20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCi0gICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9T
dHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAgIGZl
dGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBmcm9tU3R5bGUsIHRv
U3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHls
ZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIE9wdGlvblNldDxBbmltYXRlQ2hh
bmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKTsKLSAgICBpZiAoc3RhdGUo
KSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpTdGF0ZUNo
YW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3RhdGUob2xkU3RhdGUpIHx8IGlzUnVubmluZ1N0
YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3RhdGUoc3RhdGUoKSkgfHwgaXNSdW5uaW5nU3Rh
dGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdT
dGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hhbmdlOwotfQotCi12b2lkIEtleWZyYW1lQW5p
bWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UncmUgZG9uZSwgb3IgaW4gdGhlIGRlbGF5IHBo
YXNlIGFuZCB3ZSdyZSBub3QgYmFja3dhcmRzIGZpbGxpbmcsIHRlbGwgdGhlIGNhbGxlciB0byB1
c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8fCAod2FpdGluZ1Rv
U3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9uLT5maWxs
c0JhY2t3YXJkcygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2tleWZyYW1lcy5z
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAg
ICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlcigpLT5zdHls
ZSgpKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGll
cygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNzIGJl
dHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxwdHI7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgZG91
YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3Bl
cnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0gICAgICAg
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVydHlJRCwg
YW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0gICAg
fQotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1B
bmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChtX2tleWZy
YW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSk7Ci0KLSAgICBpZiAo
IWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBOb24t
Ym94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgYXV0byYgYm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZW5kZXJlckJveCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGN1bXVsYXRpdmVCb3VuZHM7Ci0KLSAg
ICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKLSAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBrZXlmcmFtZS5zdHlsZSgpOwot
Ci0gICAgICAgIGlmICgha2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBrZXlmcmFtZSBpcyBtaXNzaW5n
IHRyYW5zZm9ybSBzdHlsZSwgdXNlIHRoZSBjdXJyZW50IHN0eWxlLgotICAgICAgICAgICAgaWYg
KCFrZXlmcmFtZS5rZXkoKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVN0eWxlID0gJmJveC5z
dHlsZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKLSAgICAgICAg
Ci0gICAgICAgIGJvb2wgY2FuQ29tcHV0ZTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUZ1bmN0aW9u
TGlzdHNNYXRjaCgpKQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFuc2Zvcm1l
ZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxlLCBrZXlm
cmFtZUJvdW5kcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21w
dXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxl
LCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNhbkNvbXB1dGUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBjdW11bGF0aXZlQm91
bmRzLnVuaXRlKGtleWZyYW1lQm91bmRzKTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBjdW11bGF0
aXZlQm91bmRzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9u
OjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAot
ewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KTsKLX0K
LQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1hdGlv
biwgbV9rZXlmcmFtZXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKCFl
bGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25QYXVzZWQodGltZU9m
ZnNldCwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhl
IG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0gICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRzKQotewotICAgIGlmICghZWxl
bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uRmluaXNoZWQobV9rZXlm
cmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1
bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghZmlsbGluZ0ZvcndhcmRzICYmICFwYXVzZWQoKSkK
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVu
ZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5kb2N1
bWVudCgpLmhhc0xpc3RlbmVyVHlwZShsaXN0ZW5lclR5cGUpOwotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBz
ZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQsIGVsYXBz
ZWRUaW1lKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25JdGVyYXRp
b24oZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5h
bWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKLX0KLQotdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQotewot
ICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQsIGVs
YXBzZWRUaW1lKTsKLSAgICBlbmRBbmltYXRpb24obV9hbmltYXRpb24tPmZpbGxzRm9yd2FyZHMo
KSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVudChjb25z
dCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBEb2N1
bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50KQotICAgICAgICBsaXN0ZW5lclR5
cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9OX0xJU1RFTkVSOwotICAgIGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKLSAgICAgICAgbGlzdGVu
ZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uU3Rh
cnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQp
OwotICAgICAgICBpZiAobV9zdGFydEV2ZW50RGlzcGF0Y2hlZCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0gICAgICAg
IGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFSVF9MSVNURU5FUjsKLSAgICB9
Ci0KLSAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewot
ICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgYXV0byBlbGVtZW50ID0gbWFr
ZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwotCi0gICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBl
bGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAg
ICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFdmVu
dFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFt
ZSgpLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVu
YW5pbWF0ZWQpIHN0eWxlCi0gICAgICAgIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53
ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1h
dGlvbmVuZEV2ZW50KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
RGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBEaWQg
bm90IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om92ZXJy
aWRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGltcGxpY2l0IGFu
aW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUgYW5pbWF0
aW9uCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5pbWF0aW9u
cyhwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJp
ZGRlbkFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgb3ZlcnJpZGRlbiBp
bXBsaWNpdCBhbmltYXRpb25zCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1l
cy5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1bWVPdmVy
cmlkZGVuSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi1ib29sIEtleWZyYW1l
QW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSk7Ci19
Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc29sdmVLZXlmcmFtZVN0eWxlcygpCi17Ci0g
ICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiBzdHls
ZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKCplbGVtZW50KCksIG1fYW5pbWF0aW9u
LT5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHN0eWxlU2NvcGUtPnJlc29sdmVy
KCkua2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oKmVsZW1lbnQoKSwgbV91bmFuaW1hdGVkU3R5
bGUuZ2V0KCksIG1fa2V5ZnJhbWVzKTsKLQotICAgIC8vIEVuc3VyZSByZXNvdXJjZSBsb2FkcyBm
b3IgYWxsIHRoZSBmcmFtZXMuCi0gICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5ZnJhbWVz
LmtleWZyYW1lcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUqPihrZXlmcmFtZS5zdHlsZSgpKSkKLSAgICAgICAgICAgIFN0eWxlOjpsb2FkUGVu
ZGluZ1Jlc291cmNlcygqc3R5bGUsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgZWxlbWVudCgpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3JtRnVu
Y3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNl
OwotICAgIAotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1lcy5j
b250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmly
c3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJh
bWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5VHJhbnNm
b3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYg
Y3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50S2V5
ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSkgewotICAgICAg
ICAgICAgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9uRW1wdHlU
cmFuc2Zvcm1LZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZtX2tl
eWZyYW1lc1tmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleF0uc3R5bGUoKS0+dHJh
bnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlkCi0g
ICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ICsg
MTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUm
IGN1cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiB2YWwgPSAmY3VycmVudEtleWZyYW1lLnN0eWxlKCktPnRyYW5zZm9ybSgp
OwotICAgICAgICAKLSAgICAgICAgLy8gQW4gZW10cHkgdHJhbnNmb3JtIGxpc3QgbWF0Y2hlcyBh
bnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmaXJzdFZhbC0+b3BlcmF0
aW9uc01hdGNoKCp2YWwpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdHJh
bnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1h
dGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChj
b25zdCBSZW5kZXJTdHlsZSYpPiYgZmlsdGVyc0dldHRlcikgY29uc3QKLXsKLSAgICBpZiAobV9r
ZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9w
ZXJ0eUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW1wdHkgZmlsdGVycyBt
YXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSBy
ZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwot
ICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAg
aWYgKGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ldLnN0eWxlKCkpLm9wZXJhdGlvbnMoKS5z
aXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0gaTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJzdE5v
bkVtcHR5S2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8mIGZpcnN0VmFsID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNbZmly
c3ROb25FbXB0eUtleWZyYW1lSW5kZXhdLnN0eWxlKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90
IGkgPSBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7ICsr
aSkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ld
LnN0eWxlKCkpOwotCi0gICAgICAgIC8vIEFuIGVtdHB5IGZpbHRlciBsaXN0IG1hdGNoZXMgYW55
dGhpbmcuCi0gICAgICAgIGlmICh2YWx1ZS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFmaXJzdFZhbC5vcGVyYXRpb25zTWF0Y2go
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmlsdGVy
RnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBjaGVj
a0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUZpbHRlciwgW10gKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAg
ICAgICByZXR1cm4gc3R5bGUuZmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBFTkFCTEUoRklM
VEVSU19MRVZFTF8yKQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0Jh
Y2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRlckZ1bmN0
aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENTU1By
b3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlLmJhY2tk
cm9wRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9j
b2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5j
dGlvbkxpc3RzKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgW10gKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICByZXR1cm4g
c3R5bGUuYXBwbGVDb2xvckZpbHRlcigpOwotICAgIH0pOwotfQotCi1PcHRpb25hbDxTZWNvbmRz
PiBLZXlmcmFtZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9wdGlvbmFs
PFNlY29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwotICAgIGlm
ICghdCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJTEVSKE1T
VkMpICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7Ci0jZWxz
ZQotICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFsdWUgb2Yg
MCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgYWNjZWxlcmF0ZWQg
YW5pbWF0aW9ucyB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9mIHRo
ZSB0cmFuc2l0aW9uLgotICAgIGJvb2wgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IHRydWU7
Ci0gICAgCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVz
KCkpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9w
ZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkgewotICAg
ICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRQcm9wZXJ0aWVz
T25seSkgewotICAgICAgICBib29sIGlzTG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2
ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5
MmUzOTE1NWM0YTliNzhjMWM2ZDZmZWUxYzJlZTNlMGJiNmJmMzguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIEtleWZyYW1l
QW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0aW9uIGZvciBh
IHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gZmluYWwgOiBw
dWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxLZXlmcmFtZUFu
aW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVt
ZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0
aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKLSAgICB9Ci0gICAgCi0gICAgT3B0aW9uU2V0PEFuaW1h
dGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRp
b24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgS2V5ZnJhbWVMaXN0
JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotCi0gICAgY29uc3Qg
QXRvbVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5h
bWUoKTsgfQotCi0gICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
KSBjb25zdDsKLQotICAgIGJvb2wgdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0OyB9Ci0gICAgYm9vbCBkZXBlbmRzT25MYXlv
dXQoKSBjb25zdCB7IHJldHVybiBtX2RlcGVuZHNPbkxheW91dDsgfQotICAgIGJvb2wgYWZmZWN0
c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJhdGVkUHJv
cGVydHk7IH0KLQotICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBXVEZNb3ZlKHN0eWxlKTsg
fQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAqbV91bmFuaW1hdGVkU3R5bGU7IH0KLQotICAgIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgS2V5ZnJhbWVB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1hdGlvbiYs
IGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1YWwgfktleWZy
YW1lQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVsYXBz
ZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBl
bGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRz
ID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgb3ZlcnJpZGU7Ci0K
LSAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5
cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0OwotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2ZW50KGNv
bnN0IEF0b21TdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotCi0gICAgYm9vbCBhZmZlY3Rz
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNvbXB1
dGVFeHRlbnRPZkFuaW1hdGlvbkZvck1hdHJpeEFuaW1hdGlvbihjb25zdCBGbG9hdFJlY3QmIHJl
bmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIGNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbkZvck1hdGNoaW5nVHJhbnNmb3JtTGlzdHMoY29uc3QgRmxvYXRSZWN0JiByZW5k
ZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgdm9pZCBjb21wdXRlTGF5b3V0RGVw
ZW5kZW5jeSgpOwotICAgIHZvaWQgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0gICAgdm9pZCB2
YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGlu
Z0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAg
IHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2Vu
ZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7
Ci0gICAgYm9vbCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0
eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChjb25zdCBS
ZW5kZXJTdHlsZSYpPiYpIGNvbnN0OwotICAgIAotICAgIC8vIEdldCB0aGUgc3R5bGVzIGZvciB0
aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRpbWUg
YW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCi0gICAgdm9pZCBmZXRjaEludGVydmFsRW5k
cG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqJiBmcm9t
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVzcykgY29u
c3Q7Ci0KLSAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsgLy8gVGhlIHN0eWxlIGp1c3QgYmVmb3Jl
IHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0KLSAgICBib29sIG1fc3RhcnRFdmVudERpc3BhdGNoZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9kZXBlbmRzT25MYXlvdXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5o
CmluZGV4IDdlNGZlM2ZkMDBjYTU5ZDliNzgyYThhMDQwZjRkNWI3OTE4MDlmZTYuLmVlMzQ3YmE4
NTMyNjFjOTYyZWE5OTQyYjY4M2YyYTJkYTkxMmFkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTQ3NCw5ICs0NzQsNyBAQCBw
dWJsaWM6CiAgICAgLy8gVHJhbnNpdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBzcGVjaWFsIGFu
aW1hdGlvbiBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXlmcmFtZSBpZGVudGlmaWVy
LgogICAgIHN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQ
cm9wZXJ0eUlEKTsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMgaGFu
ZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLiBJZiB0aGlzIHJldHVybnMKLSAgICAvLyBm
YWxzZSwgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHJ1biBieSBDU1NBbmltYXRpb25Db250cm9sbGVy
LgotICAgIC8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIGJvdGggdHJhbnNpdGlvbnMgYW5kIGtleWZy
YW1lIGFuaW1hdGlvbnMuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBo
YW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBib29sIGFkZEFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYgLypib3hT
aXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8s
IGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRvdWJs
ZSAvKnRpbWVPZmZzZXQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAppbmRleCA3OWEz
ZjUzOTYzYmY0N2I2MDE0ODAwYTc1MzIzNGQ2YTFkMTNhMWQ0Li41NjQ4NThlMmFhYTkxYTVlZWI3
ZjhhMjQ1OWIxNmEwMDNiOGY0ZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCkBAIC05Myw3ICs5Myw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBib29sIC8qdXNpbmdUaWxlZEJhY2tpbmcqLykgeyB9CiAgICAgCiAgICAg
Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gaGFyZHdhcmUtYWNjZWxlcmF0ZWQgYW5pbWF0aW9uIHN0YXJ0
ZWQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhp
Y3NMYXllciosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25LZXkqLywgTW9ub3RvbmljVGltZSAv
KnRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkVuZGVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uS2V5Ki8pIHsgfQogCiAg
ICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgYSBsYXllciBwcm9wZXJ0eSBjaGFuZ2VkIHRoYXQgcmVx
dWlyZXMgYSBzdWJzZXF1ZW50IGNhbGwgdG8gZmx1c2hDb21wb3NpdGluZ1N0YXRlKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwCmluZGV4IDQ3MjBlMTI5OWVhNjRiNGNiYmRmOWZlMGVjMmI0M2RmY2U1YjRiMWUuLmZl
NzgzZmFhNzMxOWY5MjBjMTZjMzMzZWM5NjgyMDYzNTZmMmU1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApA
QCAtMTEwOCwxMiArMTEwOCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZW1vdmVBbmltYXRp
b24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChBbmltYXRpb25DaGFuZ2VkIHwgQ292ZXJhZ2VSZWN0Q2hhbmdlZCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uS2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJHcmFwaGljc0xheWVyQ0EgIiA8PCB0
aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxheWVyQW5p
bWF0aW9uU3RhcnRlZCAiIDw8IGFuaW1hdGlvbktleSk7Ci0gICAgY2xpZW50KCkubm90aWZ5QW5p
bWF0aW9uU3RhcnRlZCh0aGlzLCBhbmltYXRpb25LZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbktleSkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3Ry
ZWFtIDw8ICJHcmFwaGljc0xheWVyQ0EgIiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5
ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uRW5kZWQgIiA8PCBhbmltYXRpb25L
ZXkpOwpAQCAtMzA0MCw5ICszMDM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNv
bnRlbnRzTmVlZHNEaXNwbGF5KCkKIAogc3RhdGljIGJvb2wgaXNLZXlmcmFtZShjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYgbGlzdCkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDE7Ci0gICAgcmV0dXJuIGxpc3Quc2l6ZSgpID4g
MjsKKyAgICByZXR1cm4gbGlzdC5zaXplKCkgPiAxOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBTZWNvbmRzIHRpbWVPZmZzZXQpCkBAIC0zMjkzLDM5ICszMjg1LDI5IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBw
cm9wZXJ0eUFuaW0sIGNvbnN0IEFuCiAgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2ZShhZGRp
dGl2ZSk7CiAgICAgcHJvcGVydHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7CiAKLSAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgLy8gQSBDU1MgVHJh
bnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkg
d2lsbCBoYXZlCi0gICAgICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4g
dGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCi0gICAgICAgIC8vIHRp
bWluZyBmdW5jdGlvbiB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24u
Ci0gICAgICAgIGlmIChhbmltLT5wcm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpUcmFuc2l0
aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkpCi0gICAgICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRp
bWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgIH0KKyAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAorICAgIC8v
IEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpw
cm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0
eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCisgICAgLy8g
dGltaW5nIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRhdGlv
bi4KKyAgICBpZiAoYW5pbS0+cHJvcGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJhbnNpdGlv
bk1vZGU6OlNpbmdsZVByb3BlcnR5KQorICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRpbWluZ0Z1
bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwogfQogCiBjb25zdCBUaW1pbmdGdW5jdGlv
biYgR3JhcGhpY3NMYXllckNBOjp0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0
IEFuaW1hdGlvblZhbHVlJiBhbmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbSkKIHsKLSAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGFuaW0ucHJvcGVydHko
KS5tb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5ICYmIGFu
aW0udGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgICAgIC8vIEEgQ1NT
IFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0
eSgpIHdpbGwgaGF2ZQotICAgICAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmdsZVByb3Bl
cnR5LiBJbiB0aGlzIGNhc2UsIHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQotICAgICAgICAg
ICAgLy8gYW5pbWF0aW9uLXdpZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQgb24gdGhl
IHNpbmdsZSBrZXlmcmFtZSBpbnRlcnZhbAotICAgICAgICAgICAgLy8gdG8gd29yayBhcm91bmQg
YSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgotICAgICAgICAgICAgcmV0dXJuICphbmltLnRp
bWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFuaW1WYWx1ZS50aW1pbmdG
dW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVuY3Rpb24o
KTsKLSAgICAgICAgaWYgKGFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkp
Ci0gICAgICAgICAgICByZXR1cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJh
bWVzKCk7Ci0gICAgICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVkTGluZWFy
VGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0gQW5pbWF0
aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdGdW5jdGlv
bigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE1OTE4CisgICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkg
c2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgICAgICAv
LyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgY2hvc2Ug
bm90IHRvIHNldCBzZXQgdGhlCisgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRpbWluZyBmdW5j
dGlvbiwgc28gd2Ugc2V0IGl0IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2YWwKKyAgICAg
ICAgLy8gdG8gd29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgorICAgICAg
ICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKICAgICB9Ci0KICAgICBpZiAoYW5pbVZh
bHVlLnRpbWluZ0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAqYW5pbVZhbHVlLnRpbWluZ0Z1
bmN0aW9uKCk7Ci0gICAgaWYgKGFuaW0uaXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAgICAgICBy
ZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0uZGVmYXVs
dFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiAqYW5pbS5kZWZh
dWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKTsKKyAgICByZXR1cm4gTGluZWFyVGltaW5n
RnVuY3Rpb246OnNoYXJlZExpbmVhclRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKIGJvb2wgR3JhcGhp
Y3NMYXllckNBOjpzZXRBbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FBbmltYXRp
b24qIGJhc2ljQW5pbSkKQEAgLTMzNDYsMTEgKzMzMjgsNiBAQCBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0QW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNl
ZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4g
dGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZl
cnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGlt
aW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJh
c2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFs
dWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0zNDQwLDExICszNDE3LDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6
OnNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmEKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3Ig
Mi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0
YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcg
YW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1
bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5p
bS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFs
dWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIGF1dG8gdmFsdWVG
dW5jdGlvbiA9IGdldFZhbHVlRnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5z
Zm9ybU9wVHlwZSk7CiAgICAgaWYgKHZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFuaW1hdGlv
bjo6Tm9WYWx1ZUZ1bmN0aW9uKQogICAgICAgICBiYXNpY0FuaW0tPnNldFZhbHVlRnVuY3Rpb24o
dmFsdWVGdW5jdGlvbik7CkBAIC0zNTUxLDExICszNTIzLDYgQEAgYm9vbCBHcmFwaGljc0xheWVy
Q0E6OnNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWUKICAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0aW9uLCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpOwogICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b09wZXJh
dGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKIAotICAgIC8vIFRoaXMgY29kZXBh
dGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRv
IGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGlu
IHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRl
cyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5p
bWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGZlN2RjNTZhNDdmM2ZiZTc4ZDEz
MWFhYTZkYzI5NjQ2ZTBlYzMyYmQuLmYyNmU1MWFkZmNmZjZiMzZmODg4M2Q0ZjY2NGNjNzU2N2Fi
YmYxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xOTUsNyArMTk1LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXll
ckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1RpbWUgYmVnaW5UaW1lKSBvdmVycmlk
ZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvbkVuZGVk
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KSBvdmVycmlkZTsKICAgICBDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNB
TGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXAsIEdyYXBoaWNz
TGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggNTA0YjAxYzI0NDRl
OWU5NTljMThjMzQ2Y2I1ZWI3YmVjYTBkNjM3NC4uMzZiYmMyMGE4NDFkMjlmMzc3NmM1MzY1NTFm
ZDA2ZGQwZGRmYTJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTEwMyw3ICsxMDMsNiBAQCBwdWJsaWM6CiAg
ICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
cikgeyBtX293bmVyID0gb3duZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25TdGFy
dGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgKaW5kZXggNjc3OGRlNzE5YzUwZTFhNDVmYzgyNDZkNzNhOTA4YWJmYmFkMTMwNi4uNGNkMDg0
M2I1ZWQ5YTY0ZGNiZDcwZGEyZGE0Y2IyZWFmZDEwODNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgKQEAgLTQwLDcgKzQwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
Q0FMYXllckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgeyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJp
bmcmIC8qYW5pbWF0aW9uS2V5Ki8sIE1vbm90b25pY1RpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9u
S2V5Ki8pIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b246OlRvcERvd247IH0KICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250
ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGluQ2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBTGF5ZXJDb2NvYS5oCmluZGV4IDk5MjJmNDhmYjcwZDA5Y2UwOGY2MmY0ZDFhMzdiMzg0OTU5
MThlZjIuLjViMjE2M2VjMDI5NzdkZDk0NmMxNzAyNmVlMTJmNGEzYzAxZmZlYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FM
YXllckNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmlt
YXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhbmlt
YXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IDI4ODQ2ZjZiOTE1NjExYjkyZWY3
NDBkOTNhOTgxZDAwMDNhNWI2OWMuLjU5NTQxZjg3NzRmODMyZmE3Y2RlNjA5MDdjMWRlYmNjNTk1
NTU5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC05OSw1NiArOTks
MTggQEAgUmVmPFBsYXRmb3JtQ0FMYXllckNvY29hPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3Jl
YXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
bGF0Zm9ybUNBTGF5ZXJDb2NvYSgoX19icmlkZ2UgQ0FMYXllciAqKXBsYXRmb3JtTGF5ZXIsIG93
bmVyKSk7CiB9CiAKLXN0YXRpYyBNb25vdG9uaWNUaW1lIG1lZGlhVGltZVRvQ3VycmVudFRpbWUo
Q0ZUaW1lSW50ZXJ2YWwgdCkKLXsKLSAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCkgKyBT
ZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotLy8gRGVsZWdhdGUgZm9yIGFuaW1hdGlvbkRpZFN0YXJ0IGNhbGxiYWNrCiBAaW50
ZXJmYWNlIFdlYkFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgewogICAgIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllciogbV9vd25lcjsKIH0KIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDoo
Q0FBbmltYXRpb24gKilhbmltOwogLSAodm9pZClzZXRPd25lcjooV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyKilvd25lcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0aW9uRGVs
ZWdhdGUKIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilhbmltYXRp
b24KLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIFdlYlRocmVhZExvY2soKTsKLSNlbmRpZgotICAgIGlmICghbV9vd25lcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7Ci0gICAgaWYgKGhh
c0V4cGxpY2l0QmVnaW5UaW1lKGFuaW1hdGlvbikpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qga25v
dyB3aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1hdGlvbiwgc28ganVzdCB1c2Ug
dGhlIGN1cnJlbnQgdGltZQotICAgICAgICAvLyAoZXZlbiB0aG91Z2ggdGhpcyB3aWxsIGJlIHNs
aWdodGx5IG9mZikuCi0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUo
Q0FDdXJyZW50TWVkaWFUaW1lKCkpOwotICAgIH0gZWxzZQotICAgICAgICBzdGFydFRpbWUgPSBt
ZWRpYVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5UaW1lXSk7Ci0KLSAgICBDQUxh
eWVyICpsYXllciA9IG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIFN0cmluZyBhbmlt
YXRpb25LZXk7Ci0gICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlz
XSkgewotICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlv
bikgewotICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fb3duZXItPmFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBzdGFydFRpbWUp
OwotfQotCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbWF0aW9u
IGZpbmlzaGVkOihCT09MKWZpbmlzaGVkCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC0zOTMsMTIgKzM1NSw2IEBAIFBsYXRmb3JtQ0FMYXllckNvY29hOjp+UGxhdGZvcm1DQUxh
eWVyQ29jb2EoKQogICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4o
bV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyQ29j
b2E6OmFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25p
Y1RpbWUgYmVnaW5UaW1lKQotewotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293bmVyLT5w
bGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGFuaW1hdGlvbktleSwgYmVnaW5UaW1lKTsK
LX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRW5kZWQoY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25LZXkpCiB7CiAgICAgaWYgKG1fb3duZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCBlMGE2MmQwZWUyNjBjNzQ4NDNkMGU5ZTE0ZjJm
MmYzN2IzMmQ0ODJjLi4wNzdiNzMyZWJkZTliMDVhNTVmMDkzZThhMzU1YWIyMDc1OGYxNzk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTIyNiwxMCArMjI2
LDYgQEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdCogYXR0YWNoUmVuZGVyZXJJbnRlcm5hbChS
ZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7
CiAgICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gZGV0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5k
ZXJPYmplY3QmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlIC8q
IHRpbWVPZmZzZXQgKi8sIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiAvKiBmcm9t
U3R5bGUgKi8sIGNvbnN0IFJlbmRlclN0eWxlKiAvKiB0b1N0eWxlICovKSB7IHJldHVybiBmYWxz
ZTsgfQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zm
c2V0ICovLCBDU1NQcm9wZXJ0eUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvbkZp
bmlzaGVkKENTU1Byb3BlcnR5SUQpIHsgfQotCiAgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0
aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlm
cmFtZUxpc3QmKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25Q
YXVzZWQoZG91YmxlIC8qIHRpbWVPZmZzZXQgKi8sIGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykg
eyB9CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgLyog
bmFtZSAqLykgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRl
eCA3ZDA3Y2RiZDg0OTcwMjg1M2UxYjkyNWEwYmJjOThkN2RkYWZhNzY2Li4wMjFjMWMyY2YwNjU4
MDY4ODU2ZjMxZWMxYTY5YjZmYTJhNzA0OTA1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllci5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5o
IgogCiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtMTMyNywyMSArMTMyNiwxMCBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6
QXBwbHlUcmFuc2Zvcm1PcgogCiAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVy
Qm94PihyZW5kZXJlcigpKTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAg
ICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkg
ewotICAgICAgICAgICAgaWYgKHRpbWVsaW5lLT5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlv
bk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKSB7Ci0gICAgICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKLSAgICAgICAgICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gdGltZWxpbmUtPmFuaW1h
dGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJl
Y3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVy
Qm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUtPnRyYW5zZm9y
bUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAg
ICAgICAgICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybShjdXJyVHJhbnNmb3JtLCBwaXhlbFNu
YXBwZWRCb3JkZXJSZWN0LCBhcHBseU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgbWFrZU1hdHJp
eFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwotICAg
ICAgICAgICAgICAgIHJldHVybiBjdXJyVHJhbnNmb3JtOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9u
KCkuaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENT
U1Byb3BlcnR5VHJhbnNmb3JtKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVy
KCkuZG9jdW1lbnRUaW1lbGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+aXNSdW5uaW5n
QWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJh
bnNmb3JtKSkgewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9y
bTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5k
ZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJl
cigpKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSB0
aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOwogICAgICAgICAg
ICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2aWNlUGl4
ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBlKHN0eWxl
LT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3Rv
cigpKTsKICAgICAgICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybShjdXJyVHJhbnNmb3JtLCBw
aXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBhcHBseU9yaWdpbik7CiAgICAgICAgICAgICBtYWtlTWF0
cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBA
IC0xMzQ5LDE3ICsxMzM3LDYgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OmN1
cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKICAgICAgICAgfQog
ICAgIH0KIAotCi0gICAgLy8gbV90cmFuc2Zvcm0gaW5jbHVkZXMgdHJhbnNmb3JtLW9yaWdpbiwg
c28gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHRyYW5zZm9ybSBoZXJlLgotICAgIGlmIChhcHBs
eU9yaWdpbiA9PSBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdpbikgewotICAgICAg
ICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3JtOwotICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5h
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7Ci0gICAgICAgIEZsb2F0UmVjdCBw
aXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gu
cmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS0+dHJhbnNmb3JtQm94
KCkpKSwgcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAg
IHJlbmRlckJveC5zdHlsZSgpLmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zvcm0sIHBpeGVsU25h
cHBlZEJvcmRlclJlY3QsIFJlbmRlclN0eWxlOjpFeGNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKLSAg
ICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFu
c2Zvcm1zKCkpOwotICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsKLSAgICB9Ci0KICAgICBy
ZXR1cm4gKm1fdHJhbnNmb3JtOwogfQogCkBAIC02MTY1LDIwICs2MTQyLDEzIEBAIGJvb2wgUmVu
ZGVyTGF5ZXI6OmdldE92ZXJsYXBCb3VuZHNJbmNsdWRpbmdDaGlsZHJlbkFjY291bnRpbmdGb3JU
cmFuc2Zvcm1BbmltYXRpCiAgICAgYm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHModGhpcywg
TGF5b3V0U2l6ZSgpLCBib3VuZHNGbGFncyk7CiAgICAgCiAgICAgTGF5b3V0UmVjdCBhbmltYXRl
ZEJvdW5kcyA9IGJvdW5kczsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpIHsK
LSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKHJlbmRl
cmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewotICAgICAgICAgICAgICAgIGJvdW5kcyA9IGFuaW1h
dGVkQm91bmRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkubGVnYWN5QW5p
bWF0aW9uKCkuY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91
bmRzKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1l
bGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9u
KHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewogICAgICAgICAgICAgYm91bmRzID0gYW5p
bWF0ZWRCb3VuZHM7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgIH0K
LSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0ZDU0N2M0YjdmZGQxYWU0MDlhNmNl
NmY4MjkyZjZhNmNkMzAzMjZmLi5iNzM4MGZlZGY3OTAzYjBhN2YwZjExNGU4YjIxNjViY2Y0OGMz
NTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNr
aW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5n
LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2luZy5oIgog
CiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNT
U1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgpAQCAtMTI1MSwxMSAr
MTI1MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShjb25zdCBS
ZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgIGNvbnN0IGF1dG8gZGV2aWNlU2Nh
bGVGYWN0b3IgPSB0aGlzLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogCiAgICAgYm9vbCBpc1J1bm5p
bmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwotICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigp
LmRvY3VtZW50VGltZWxpbmUoKSkKLSAgICAgICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJh
bnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9u
T25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gcmVuZGVy
ZXIoKS5sZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVu
ZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOworICAgIGlmIChhdXRvKiB0
aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQorICAgICAgICBpc1J1bm5p
bmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5lLT5pc1J1bm5pbmdBY2Nl
bGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zv
cm0pOwogCiAgICAgdXBkYXRlVHJhbnNmb3JtKHN0eWxlKTsKICAgICB1cGRhdGVPcGFjaXR5KHN0
eWxlKTsKQEAgLTM2NDgsOTkgKzM2NDQsNiBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6YW5p
bWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG1fb3duaW5n
TGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CiB9CiAKLWJvb2wgUmVu
ZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIENTU1By
b3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiB0b1N0eWxlKQotewotICAgIGJvb2wgZGlkQW5pbWF0ZSA9IGZhbHNlOwotCi0g
ICAgQVNTRVJUKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBpZiAocHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlPcGFjaXR5KSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbiog
b3BhY2l0eUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlP
cGFjaXR5KTsKLSAgICAgICAgaWYgKG9wYWNpdHlBbmltICYmICFvcGFjaXR5QW5pbS0+aXNFbXB0
eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0IG9wYWNp
dHlWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAgICAgICAgb3BhY2l0eVZl
Y3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCBjb21wb3NpdGlu
Z09wYWNpdHkoZnJvbVN0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICBvcGFjaXR5VmVj
dG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDEsIGNvbXBvc2l0aW5n
T3BhY2l0eSh0b1N0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICAvLyBUaGUgYm94U2l6
ZSBwYXJhbSBpcyBvbmx5IHVzZWQgZm9yIHRyYW5zZm9ybSBhbmltYXRpb25zICh3aGljaCBjYW4g
b25seSBydW4gb24gUmVuZGVyQm94ZXMpLCBzbyB3ZSBwYXNzIGFuIGVtcHR5IHNpemUgaGVyZS4K
LSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihvcGFjaXR5VmVj
dG9yLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5h
bWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgdGltZU9mZnNldCkpIHsK
LSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBvcGFjaXR5IGlz
IHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCBvcGFj
aXR5LgotICAgICAgICAgICAgICAgIHVwZGF0ZU9wYWNpdHkoKnRvU3R5bGUpOwotICAgICAgICAg
ICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNmb3JtICYmIG1fb3duaW5n
TGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uKiB0cmFuc2Zv
cm1BbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNm
b3JtKTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUFuaW0gJiYgIXRyYW5zZm9ybUFuaW0tPmlzRW1w
dHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCB0cmFu
c2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAgICAgICAgICB0cmFu
c2Zvcm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWU+KDAs
IGZyb21TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVZlY3Rvci5p
bnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZT4oMSwgdG9TdHlsZS0+dHJh
bnNmb3JtKCkpKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlv
bih0cmFuc2Zvcm1WZWN0b3IsIHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveCgpLT5ib3JkZXJCb3hS
ZWN0KCkpLnNpemUoKSwgdHJhbnNmb3JtQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFt
ZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSksIHRpbWVPZmZzZXQpKSB7
Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHJhbnNmb3Jt
IGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCB0
cmFuc2Zvcm0uCi0gICAgICAgICAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCp0b1N0eWxlKTsKLSAg
ICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
fQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUZpbHRlciAmJiBtX293
bmluZ0xheWVyLmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbiogZmlsdGVy
QW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUZpbHRlcik7
Ci0gICAgICAgIGlmIChmaWx0ZXJBbmltICYmICFmaWx0ZXJBbmltLT5pc0VtcHR5T3JaZXJvRHVy
YXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmlsdGVyVmVjdG9yKEFu
aW1hdGVkUHJvcGVydHlGaWx0ZXIpOwotICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmluc2VydCht
YWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5bGUtPmZpbHRlcigpKSk7
Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0
aW9uVmFsdWU+KDEsIHRvU3R5bGUtPmZpbHRlcigpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aGljc0xheWVyLT5hZGRBbmltYXRpb24oZmlsdGVyVmVjdG9yLCBGbG9hdFNpemUoKSwgZmlsdGVy
QW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQ
cm9wZXJ0eUZpbHRlciksIHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5z
dXJlIHRoYXQgdGhlIGNvcnJlY3QgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9u
IGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgdXBkYXRl
RmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoRklMVEVSU19MRVZF
TF8yKQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVy
ICYmIG1fb3duaW5nTGF5ZXIuaGFzQmFja2Ryb3BGaWx0ZXIoKSkgewotICAgICAgICBjb25zdCBB
bmltYXRpb24qIGJhY2tkcm9wRmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAgICAgICAgaWYgKGJhY2tk
cm9wRmlsdGVyQW5pbSAmJiAhYmFja2Ryb3BGaWx0ZXJBbmltLT5pc0VtcHR5T3JaZXJvRHVyYXRp
b24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgYmFja2Ryb3BGaWx0ZXJWZWN0
b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAgICAgICAgICAgIGJh
Y2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVl
PigwLCBmcm9tU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGJhY2tkcm9w
RmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigxLCB0
b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaGljc0xh
eWVyLT5hZGRBbmltYXRpb24oYmFja2Ryb3BGaWx0ZXJWZWN0b3IsIEZsb2F0U2l6ZSgpLCBiYWNr
ZHJvcEZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9u
KEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciksIHRpbWVPZmZzZXQpKSB7Ci0g
ICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgYmFja2Ryb3AgZmls
dGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5h
bCBiYWNrZHJvcCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgdXBkYXRlQmFja2Ryb3BGaWx0ZXJz
KCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKGRpZEFuaW1hdGUpCi0g
ICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUo
KTsKLQotICAgIHJldHVybiBkaWRBbmltYXRlOwotfQotCi12b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6dHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9IGNzc1Rv
R3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQcm9wZXJ0
eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKLSAgICAgICAgbV9ncmFwaGljc0xheWVyLT5w
YXVzZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihh
bmltYXRlZFByb3BlcnR5KSwgdGltZU9mZnNldCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJCYWNr
aW5nOjp0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBB
bmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9IGNzc1RvR3JhcGhpY3NMYXllclBy
b3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQcm9wZXJ0eSAhPSBBbmltYXRlZFBy
b3BlcnR5SW52YWxpZCkgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnJlbW92ZUFuaW1hdGlv
bihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihhbmltYXRlZFByb3Bl
cnR5KSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRp
bmdVcGRhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlB
bmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmLCBNb25v
dG9uaWNUaW1lIHRpbWUpCi17Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAg
ICAgcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5ub3RpZnlBbmltYXRpb25TdGFydGVkKHJl
bmRlcmVyKCksIHRpbWUpOwotfQotCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5Rmx1
c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKIHsKICAgICBpZiAocmVuZGVyZXIoKS5y
ZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCA5Yzc2NDdiYjI2NzZiM2ZjMWY5MjZmYWQ5Mjg0N2Q4
ZjhlYTdjMGYwLi44M2EyYTk1MThmNmYzNmNiN2IwZDg0ZDYyODZmMzdlOTAwMDI4ZTE2IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCkBAIC0xODQs
MTEgKzE4NCw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RpZmljYXRpb24gZnJvbSB0aGUgcmVuZGVy
ZXIgdGhhdCBpdHMgY29udGVudCBjaGFuZ2VkLgogICAgIHZvaWQgY29udGVudENoYW5nZWQoQ29u
dGVudENoYW5nZVR5cGUpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIHN0YXJ0LCBmaW5pc2gsIHN1
c3BlbmQgYW5kIHJlc3VtZSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucwotICAgIGJvb2wgc3Rh
cnRUcmFuc2l0aW9uKGRvdWJsZSwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGZy
b21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpOwotICAgIHZvaWQgdHJhbnNpdGlv
blBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCk7Ci0gICAgdm9pZCB0cmFu
c2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCk7Ci0KKyAgICAvLyBJbnRlcmZhY2UgdG8gc3Rh
cnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlvbnMKICAgICBib29sIHN0YXJ0
QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlm
cmFtZUxpc3QmKTsKICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwg
Y29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0
cmluZyYgbmFtZSk7CkBAIC0yMjYsNyArMjIyLDYgQEAgcHVibGljOgogCiAgICAgLy8gR3JhcGhp
Y3NMYXllckNsaWVudCBpbnRlcmZhY2UKICAgICB2b2lkIHRpbGVkQmFja2luZ1VzYWdlQ2hhbmdl
ZChjb25zdCBHcmFwaGljc0xheWVyKiwgYm9vbCAvKnVzaW5nVGlsZWRCYWNraW5nKi8pIG92ZXJy
aWRlOwotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVy
KiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKSBv
dmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXll
ciopIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5Rmx1c2hCZWZvcmVEaXNwbGF5UmVmcmVzaChj
b25zdCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXggMTg0MWY5NmYwYjYyOThj
YTUyM2VkN2YxZTY5ODlmMmMyNzZkZGQ3NS4uZjIzOWM0YTQ0ODBhZWU3MmEzOTJiMzZjNTI0NWI3
Y2Q0MWQ2MmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQ29tcG9zaXRvci5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXll
ckNvbXBvc2l0b3IuaCIKIAogI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRl
ICJDaHJvbWUuaCIKQEAgLTU2MCw5ICs1NTksNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3QpCiAgICAgICAgIHJl
dHVybjsKICAgICB9CiAKLSAgICBhdXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVW
aWV3KCk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZy
YW1lVmlldy5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKLQogICAgIEFTU0VSVCghbV9mbHVz
aGluZ0xheWVycyk7CiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxib29sPiBmbHVzaGluZ0xh
eWVyc1Njb3BlKG1fZmx1c2hpbmdMYXllcnMsIHRydWUpOwpAQCAtODE5LDggKzgxNSw2IEBAIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3Np
dGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAKICAgICArK21fY29tcG9zaXRpbmdVcGRhdGVDb3VudDsK
IAotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZtX3JlbmRl
clZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7Ci0KICAgICBTZXRG
b3JTY29wZTxib29sPiBwb3N0TGF5b3V0Q2hhbmdlKG1faW5Qb3N0TGF5b3V0VXBkYXRlLCB0cnVl
KTsKIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTI5NzcsMTcgKzI5NzEsNyBAQCBib29sIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJM
YXllck1vZGVsT2JqZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBhbmltQ29udHJvbGxl
ciA9IHJlbmRlcmVyLmxlZ2FjeUFuaW1hdGlvbigpOwotICAgIHJldHVybiAoYW5pbUNvbnRyb2xs
ZXIuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlPcGFj
aXR5KQotICAgICAgICAmJiAodXNlc0NvbXBvc2l0aW5nKCkgfHwgKG1fY29tcG9zaXRpbmdUcmln
Z2VycyAmIENocm9tZUNsaWVudDo6QW5pbWF0ZWRPcGFjaXR5VHJpZ2dlcikpKQotICAgICAgICB8
fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUZpbHRlcikKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICB8
fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKQotI2VuZGlmCi0gICAgICAgIHx8IGFuaW1D
b250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3Bl
cnR5VHJhbnNmb3JtKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJD
b21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRlckxheWVyTW9k
ZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdApAQCAtMzUxNSwxMCArMzQ5OSw3IEBAIGJvb2wgUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdCYKICAgICAgICAgICAgIHJldHVybiBlZmZlY3RzU3RhY2stPmlzQ3VycmVu
dGx5QWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwogICAgIH0KIAotICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
cmV0dXJuIHJlbmRlcmVyLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVu
ZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAgICByZXR1cm4gZmFsc2U7
CiB9CiAKIC8vIElmIGFuIGVsZW1lbnQgaGFzIGNvbXBvc2l0ZWQgbmVnYXRpdmUgei1pbmRleCBj
aGlsZHJlbiwgdGhvc2UgY2hpbGRyZW4gcmVuZGVyIGluIGZyb250IG9mIHRoZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4
IGNmZWNhZTQ0ZDNkZDg4NmFkNjQ3NDk3YjlhMTFiODQwZTRkMTVkNmIuLmNhZThmNzJmMzZjZDg1
MzJhMjU5OGI0OGI2YmViZjgzNTM4ZjQ0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTI1MCwyNyArMjUwLDYgQEAg
dm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlUmVwYWludExheW91dFJlY3RzKGNv
bnN0IFJlbmRlckxheWVyTW9kZWxPYmoKICAgICAgICAgc2V0UmVwYWludExheW91dFJlY3RzKFJl
cGFpbnRMYXlvdXRSZWN0cygqdGhpcywgcmVwYWludENvbnRhaW5lciwgZ2VvbWV0cnlNYXApKTsK
IH0KIAotYm9vbCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdGFydFRyYW5zaXRpb24oZG91Ymxl
IHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpCi17Ci0gICAgaWYgKCFsYXll
cigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gbGF5ZXIoKS0+YmFja2luZygpLT5zdGFydFRyYW5zaXRpb24odGltZU9mZnNldCwgcHJv
cGVydHlJZCwgZnJvbVN0eWxlLCB0b1N0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0Ojp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SWQpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkp
Ci0gICAgICAgIHJldHVybjsKLSAgICBsYXllcigpLT5iYWNraW5nKCktPnRyYW5zaXRpb25QYXVz
ZWQodGltZU9mZnNldCwgcHJvcGVydHlJZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdDo6dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAg
ICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIGxheWVyKCktPmJhY2tpbmcoKS0+dHJhbnNpdGlvbkZpbmlzaGVkKHByb3BlcnR5SWQpOwot
fQotCiBib29sIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0
aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgY29uc3QgS2V5ZnJhbWVMaXN0
JiBrZXlmcmFtZXMpCiB7CiAgICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9i
amVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3Qu
aAppbmRleCBhM2IzZGNhZGNhNmQ1MDQzNzcxM2RiNzJlYTIyYjYzMWZmZTJkYmE3Li5kOTc4MWNl
Y2M4OTdjMzU4NjlhNzcyOWJhMWNkMGU3NmUxOTQxZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKQEAgLTY5LDEwICs2OSw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGFpbnRMYXlvdXRSZWN0cyhjb25zdCBSZXBhaW50TGF5
b3V0UmVjdHMmKTsKICAgICB2b2lkIGNsZWFyUmVwYWludExheW91dFJlY3RzKCk7CiAKLSAgICBi
b29sIHN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpIG92
ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJv
cGVydHlJRCkgb3ZlcnJpZGU7Ci0KICAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1l
T2Zmc2V0LCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKSBvdmVycmlkZTsK
ICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5n
JiBuYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmlu
ZyYgbmFtZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
aW5kZXggMTkxMjVmZWY3OWZmZTI2MDA0ZmZlOTk4N2UxZmYwYjM0MGRkZjlhZC4uNTAwOWFkMTdi
YTljYjdiNjIzMGZjMWMzZGZlNGM2ZGYwYWY3NzI4NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJPYmplY3QuaApAQCAtNDYsNyArNDYsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDU1NBbmlt
YXRpb25Db250cm9sbGVyOwogY2xhc3MgQ29sb3I7CiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBEb2N1
bWVudDsKQEAgLTcwNiw3ICs3MDUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbWFnZUNoYW5nZWQo
Q2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogICAgIHZp
cnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9
IG51bGxwdHIpIHsgfQogCi0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0
aW9uKCkgY29uc3Q7CiAgICAgRG9jdW1lbnRUaW1lbGluZSogZG9jdW1lbnRUaW1lbGluZSgpIGNv
bnN0OwogCiAgICAgLy8gTWFwIHBvaW50cyBhbmQgcXVhZHMgdGhyb3VnaCBlbGVtZW50cywgcG90
ZW50aWFsbHkgdmlhIDNkIHRyYW5zZm9ybXMuIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBjYWxs
IHRoZXNlIGRpcmVjdGx5OyB1c2UKQEAgLTk3MywxMSArOTcxLDYgQEAgaW5saW5lIFBhZ2UmIFJl
bmRlck9iamVjdDo6cGFnZSgpIGNvbnN0CiAgICAgcmV0dXJuICpmcmFtZSgpLnBhZ2UoKTsKIH0K
IAotaW5saW5lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIFJlbmRlck9iamVjdDo6bGVnYWN5QW5p
bWF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKTsK
LX0KLQogaW5saW5lIERvY3VtZW50VGltZWxpbmUqIFJlbmRlck9iamVjdDo6ZG9jdW1lbnRUaW1l
bGluZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuZXhpc3RpbmdUaW1lbGluZSgp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRy
ZWVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJU
cmVlVXBkYXRlci5jcHAKaW5kZXggOGE3ZmQ2NThiMmRkOTkwNzA5NzA1MmQxMTNiZGNmODdkZDgx
OGQ4Ni4uYjEzMjhhYTk5OTk5NjNmYzI0ZmM1OWVlZWI4ZmNkNWFkZTJkZmU2NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0
ZXIuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIK
IAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAg
LTU1Niw3ICs1NTUsNiBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVy
cyhFbGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeQogCiAgICAgYXV0byYgZG9j
dW1lbnQgPSByb290LmRvY3VtZW50KCk7CiAgICAgYXV0byogdGltZWxpbmUgPSBkb2N1bWVudC5l
eGlzdGluZ1RpbWVsaW5lKCk7Ci0gICAgYXV0byYgYW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3Vt
ZW50LmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOyAgICAKIAogICAgIGF1dG8gcG9wID0gWyZd
ICh1bnNpZ25lZCBkZXB0aCkgewogICAgICAgICB3aGlsZSAodGVhcmRvd25TdGFjay5zaXplKCkg
PiBkZXB0aCkgewpAQCAtNTc1LDcgKzU3Myw2IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRl
YXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3QsIFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAg
ICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlYXJkb3duVHlwZSA9PSBUZWFyZG93blR5cGU6
OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5nQW5pbWF0aW9ucykKICAgICAgICAgICAgICAgICAgICAg
ICAgIHRpbWVsaW5lLT5jYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1l
bnQsIFdlYkFuaW1hdGlvbjo6U2lsZW50bHk6Ok5vKTsKICAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlci5jYW5jZWxBbmltYXRpb25zKGVsZW1lbnQp
OwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBUZWFyZG93blR5cGU6
OlJlbmRlcmVyVXBkYXRlOgogICAgICAgICAgICAgICAgIGlmICh0aW1lbGluZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggOGNlMDc1MmE2MzY2ZDgzMzAwMjYyYjAy
ZWUwODNlZTU5ZmMxMDczOC4uYTNlYmY2ZmI2N2YxZmE2MTJiZjA2NDY3YTdkNThkODlhM2ViOTlh
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCiAKLSNp
bmNsdWRlICJBbmltYXRpb25CYXNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAj
aW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtNTcsNiArNTYs
NyBAQAogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgi
CiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCiAKIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHls
ZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKaW5kZXggYjg1Y2Y0NjZjMTczYjg4MDNmNzVlMzc2MjVi
ZjAyNTg2ZWY5MGFlNS4uZjdmZmQ0NGY5YWE0Yjk3MWRkOWYxYjY2YWM1MmUwMzNlZjY3ZmY1NyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApAQCAtMjYsNyAr
MjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVy
LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NT
Rm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5o
IgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCkBAIC01NCw2ICs1Myw3IEBACiAj
aW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNs
dWRlICJUZXh0LmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCkBAIC0zMTIsMjYgKzMxMiwyMyBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNv
bHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dAogCiAgICAgT3B0aW9uU2V0PEFuaW1hdGlvbkltcGFjdD4gYW5pbWF0aW9uSW1wYWN0OwogCi0g
ICAgLy8gTmV3IGNvZGUgcGF0aCBmb3IgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9u
cy4KLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRmlyc3QsIHdl
IG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IG5ldyBDU1MgYW5pbWF0aW9uIG9jY3VyaW5nIG9u
IHRoaXMgZWxlbWVudCBoYXMgYSBtYXRjaGluZyBXZWJBbmltYXRpb24KLSAgICAgICAgLy8gb24g
dGhlIGRvY3VtZW50IHRpbWVsaW5lLiBOb3RlIHRoYXQgd2UgZ2V0IHRpbWVsaW5lKCkgb24gdGhl
IERvY3VtZW50IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIGEgdGltZWxpbmUgY3JlYXRlZAotICAgICAg
ICAvLyBpbiBjYXNlIG5vIFdlYiBBbmltYXRpb25zIGhhdmUgYmVlbiBjcmVhdGVkIHRocm91Z2gg
dGhlIEpTIEFQSS4KLSAgICAgICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENh
Y2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlICYmICFlbGVtZW50
LmRvY3VtZW50KCkucmVuZGVyVmlldygpLT5wcmludGluZygpKSB7Ci0gICAgICAgICAgICBpZiAo
b2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0aW9ucygpIHx8IG5ld1N0eWxlLT5oYXNU
cmFuc2l0aW9ucygpKSkKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBk
YXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5ld1N0eWxl
KTsKLQotICAgICAgICAgICAgLy8gVGhlIG9yZGVyIGluIHdoaWNoIENTUyBUcmFuc2l0aW9ucyBh
bmQgQ1NTIEFuaW1hdGlvbnMgYXJlIHVwZGF0ZWQgbWF0dGVycyBzaW5jZSBDU1MgVHJhbnNpdGlv
bnMgZGVmaW5lIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUKLSAgICAgICAgICAgIC8vIHRvIHVzZSBD
U1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBzdHlsZSBjaGFuZ2UgZXZl
bnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9ucyBhZnRlciBDU1MgVHJhbnNpdGlv
bnMKLSAgICAgICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0aW9ucyBhcmUgdXBk
YXRlZCB0aGUgQ1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBkdXJpbmcgdGhlIHBy
ZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4KLSAgICAgICAgICAgIGlmICgob2xkU3R5bGUgJiYg
b2xkU3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgfHwgbmV3U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkg
ewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIGFuZCBwYXNzIHRo
ZSBwYXJlbnQgc3R5bGUgdmlhIHVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50LgotICAgICAg
ICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJh
bWVzKCZwYXJlbnQoKS5zdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVs
aW5lKCkudXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgb2xkU3R5bGUsICpu
ZXdTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVs
ZW1lbnRTdHlsZUZvcktleWZyYW1lcyhudWxscHRyKTsKLSAgICAgICAgICAgIH0KKyAgICAvLyBG
aXJzdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgbmV3IENTUyBhbmltYXRpb24gb2Nj
dXJpbmcgb24gdGhpcyBlbGVtZW50IGhhcyBhIG1hdGNoaW5nIFdlYkFuaW1hdGlvbgorICAgIC8v
IG9uIHRoZSBkb2N1bWVudCB0aW1lbGluZS4gTm90ZSB0aGF0IHdlIGdldCB0aW1lbGluZSgpIG9u
IHRoZSBEb2N1bWVudCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCBhIHRpbWVsaW5lIGNyZWF0ZWQKKyAg
ICAvLyBpbiBjYXNlIG5vIFdlYiBBbmltYXRpb25zIGhhdmUgYmVlbiBjcmVhdGVkIHRocm91Z2gg
dGhlIEpTIEFQSS4KKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVT
dGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWVsZW1lbnQuZG9j
dW1lbnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpIHsKKyAgICAgICAgaWYgKG9sZFN0eWxl
ICYmIChvbGRTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSB8fCBuZXdTdHlsZS0+aGFzVHJhbnNpdGlv
bnMoKSkpCisgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNp
dGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5ld1N0eWxlKTsKKworICAgICAg
ICAvLyBUaGUgb3JkZXIgaW4gd2hpY2ggQ1NTIFRyYW5zaXRpb25zIGFuZCBDU1MgQW5pbWF0aW9u
cyBhcmUgdXBkYXRlZCBtYXR0ZXJzIHNpbmNlIENTUyBUcmFuc2l0aW9ucyBkZWZpbmUgdGhlIGFm
dGVyLWNoYW5nZSBzdHlsZQorICAgICAgICAvLyB0byB1c2UgQ1NTIEFuaW1hdGlvbnMgYXMgZGVm
aW5lZCBpbiB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LiBBcyBzdWNoLCB3ZSB1cGRh
dGUgQ1NTIEFuaW1hdGlvbnMgYWZ0ZXIgQ1NTIFRyYW5zaXRpb25zCisgICAgICAgIC8vIHN1Y2gg
dGhhdCB3aGVuIENTUyBUcmFuc2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlvbnMg
ZGF0YSBpcyB0aGUgc2FtZSBhcyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVu
dC4KKyAgICAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB8
fCBuZXdTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVt
b3ZlIHRoaXMgaGFjayBhbmQgcGFzcyB0aGUgcGFyZW50IHN0eWxlIHZpYSB1cGRhdGVDU1NBbmlt
YXRpb25zRm9yRWxlbWVudC4KKyAgICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50
RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7CisKKyAgICAgICAgICAg
IG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudChlbGVt
ZW50LCBvbGRTdHlsZSwgKm5ld1N0eWxlKTsKKworICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZl
ci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMobnVsbHB0cik7CiAgICAgICAgIH0K
ICAgICB9CiAKQEAgLTM0NywxNyArMzQ0LDYgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6
OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3QKICAg
ICB9IGVsc2UKICAgICAgICAgZWxlbWVudC5zZXRMYXN0U3R5bGVDaGFuZ2VFdmVudFN0eWxlKG51
bGxwdHIpOwogCi0gICAgLy8gT2xkIGNvZGUgcGF0aCBmb3IgQ1NTIEFuaW1hdGlvbnMgYW5kIENT
UyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAg
IGF1dG8mIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtX2RvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFu
aW1hdGlvbigpOwotCi0gICAgICAgIGF1dG8gYW5pbWF0aW9uVXBkYXRlID0gYW5pbWF0aW9uQ29u
dHJvbGxlci51cGRhdGVBbmltYXRpb25zKGVsZW1lbnQsICpuZXdTdHlsZSwgb2xkU3R5bGUpOwot
ICAgICAgICBhbmltYXRpb25JbXBhY3QuYWRkKGFuaW1hdGlvblVwZGF0ZS5pbXBhY3QpOwotCi0g
ICAgICAgIGlmIChhbmltYXRpb25VcGRhdGUuc3R5bGUpCi0gICAgICAgICAgICBuZXdTdHlsZSA9
IFdURk1vdmUoYW5pbWF0aW9uVXBkYXRlLnN0eWxlKTsKLSAgICB9Ci0KICAgICBpZiAoYW5pbWF0
aW9uSW1wYWN0KQogICAgICAgICBBZGp1c3Rlcjo6YWRqdXN0QW5pbWF0ZWRTdHlsZSgqbmV3U3R5
bGUsIHBhcmVudEJveFN0eWxlKCksIGFuaW1hdGlvbkltcGFjdCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCmluZGV4IGIzNzZiZjZjMTc1ZDU0NTlhNGUw
YjQ2M2NhNDhiOWJmMGNhNjY3OTkuLjZhNWI2ZjRhZTQyMDI5Y2U2NjA4YzA0YmM5MjY0ZmQwMzZm
ZWQ4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5n
cy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcApA
QCAtMTAyOSwxMSArMTAyOSw2IEBAIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0Rm9yY2VkU3Vw
cG9ydHNIaWdoRHluYW1pY1JhbmdlVmFsdWUoSW50ZXJuYWxTZXR0aW5nczo6CiAgICAgc2V0dGlu
Z3MoKS5zZXRGb3JjZWRTdXBwb3J0c0hpZ2hEeW5hbWljUmFuZ2VWYWx1ZShpbnRlcm5hbFNldHRp
bmdzVG9TZXR0aW5nc1ZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgSW50ZXJuYWxTZXR0aW5nczo6
d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpOwotfQotCiB2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldFNob3VsZERl
YWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbCBzaG91bGQpCiB7CiAjaWYgRU5BQkxFKFZJREVPKSB8
fCBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuaAppbmRleCBiNTI3ZTE1NWM5MGQ0NjY4ZTMxMjRjNWU5YjQ4YmZlMGQwZTM5NTcyLi5mNjVh
NzQxMzQ5ZmZjYTI5YjE5NTVjNjc0YWE0ODMzZDcyMzY1NzVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaApAQCAtMTM1LDggKzEzNSw2IEBAIHB1YmxpYzoKICAg
ICBzdGF0aWMgdm9pZCBzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxlZChib29sKTsKICAgICBz
dGF0aWMgdm9pZCBzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoYm9vbCk7CiAKLSAgICBzdGF0
aWMgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci0KICAgICB2b2lk
IHNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbCk7CiAgICAgCiAgICAgdm9pZCBz
ZXRTdG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChib29sKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCmluZGV4IDQxYTI3ZDYyZTI3NjQ2NGFh
ZTVlMTI4YjhlOWJlMWVjZjkxZmVkZmYuLjVjYzYyZjMyNWEyZjY4OTYwMGUzYmY4OGNlYTA1YzY1
NmZhZTRlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlk
bApAQCAtMTE3LDggKzExNyw2IEBAIGVudW0gRm9udExvYWRUaW1pbmdPdmVycmlkZSB7ICJCbG9j
ayIsICJTd2FwIiwgIkZhaWx1cmUiIH07CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmlu
ZWQgc2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoYm9vbGVhbiBzaG91bGQpOwog
ICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHNldEN1c3RvbVBhc3RlYm9hcmREYXRh
RW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9uc10gYm9vbGVhbiB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci0K
ICAgICB1bmRlZmluZWQgc2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vzc2lvbihib29sZWFuIHNo
b3VsZERlYWN0aXZhdGUpOwogICAgIAogICAgIHVuZGVmaW5lZCBzZXRTdG9yYWdlQWNjZXNzQVBJ
UGVyUGFnZVNjb3BlRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCmluZGV4IDFkMTRkNzBlZDhmMTJhMWU2ZDNkMGYyNTVjYjFiYTBmNTA3ODNl
OGMuLjdjNGRmMDNlNWUxODRiNWI1OWM5MGQ0NmY2NmVjZTEwNjhkNmZiNzYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJCYWNr
Rm9yd2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiQ1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCkBAIC0xMDY5LDkgKzEwNjgsNyBAQCBi
b29sIEludGVybmFsczo6YW5pbWF0aW9uV2l0aElkRXhpc3RzKGNvbnN0IFN0cmluZyYgaWQpIGNv
bnN0CiAKIHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29u
c3QKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmcmFt
ZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0ZvclRl
c3RpbmcoKTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkubnVtYmVyT2ZB
Y3RpdmVBbmltYXRpb25zKGZyYW1lKCktPmRvY3VtZW50KCkpOworICAgIHJldHVybiBmcmFtZSgp
LT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0ZvclRlc3Rp
bmcoKTsKIH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjphbmltYXRpb25zQXJlU3Vz
cGVuZGVkKCkgY29uc3QKQEAgLTEwODAsOSArMTA3Nyw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IElu
dGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVu
dCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuYW5pbWF0aW9u
c0FyZVN1c3BlbmRlZCgpOwotICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5p
bWF0aW9uKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAg
ICByZXR1cm4gZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5hbmltYXRpb25z
QXJlU3VzcGVuZGVkKCk7CiB9CiAKIGRvdWJsZSBJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZh
bCgpIGNvbnN0CkBAIC0xMDkxLDE1ICsxMDg2LDkgQEAgZG91YmxlIEludGVybmFsczo6YW5pbWF0
aW9uc0ludGVydmFsKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4g
SU5GSU5JVFk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYg
KGF1dG8gdGltZWxpbmUgPSBkb2N1bWVudC0+ZXhpc3RpbmdUaW1lbGluZSgpKQotICAgICAgICAg
ICAgcmV0dXJuIHRpbWVsaW5lLT5hbmltYXRpb25JbnRlcnZhbCgpLnNlY29uZHMoKTsKLSAgICAg
ICAgcmV0dXJuIElORklOSVRZOwotICAgIH0KLQotICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkp
Ci0gICAgICAgIHJldHVybiBJTkZJTklUWTsKLSAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1lKCkt
PmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGlvbkludGVydmFsKCkudmFsdWUoKTsKKyAgICBpZiAo
YXV0byB0aW1lbGluZSA9IGRvY3VtZW50LT5leGlzdGluZ1RpbWVsaW5lKCkpCisgICAgICAgIHJl
dHVybiB0aW1lbGluZS0+YW5pbWF0aW9uSW50ZXJ2YWwoKS5zZWNvbmRzKCk7CisgICAgcmV0dXJu
IElORklOSVRZOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1c3BlbmRBbmlt
YXRpb25zKCkgY29uc3QKQEAgLTExMDgsMTkgKzEwOTcsMTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAg
ICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25z
KCk7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25z
KCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+
bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7
Ci0KLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYg
KERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAg
IGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRv
Y3VtZW50KTsKLSAgICAgICAgfQorICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9s
bGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3Vt
ZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgp
KSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkK
KyAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVu
ZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTEzMiw3MyArMTEx
MiwxNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMoKSBj
b25zdAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRy
b2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0g
ZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VO
ZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9j
dW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJv
bGxlcigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAg
ICAgIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25z
Rm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5p
bWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQorICAgIGRvY3VtZW50LT5l
bnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5pbWF0aW9ucygpOworICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5l
c0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGlt
ZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUo
KS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgQXRvbVN0
cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8Ym9vbD4g
SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNv
bnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIGlmIChwc2V1
ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1cm4g
RXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBQc2V1ZG9FbGVtZW50KiBw
c2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVk
b0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1
ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRp
b25BdFRpbWUoKnBzZXVkb0VsZW1lbnQsIEF0b21TdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNl
VGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VU
aW1lLCBFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAg
ICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJuIGZy
YW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBw
cm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFs
czo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJv
cGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHNldWRvSWQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVm
b3JlIiAmJiBwc2V1ZG9JZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50
ID0gcHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6
IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBy
ZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKCpw
c2V1ZG9FbGVtZW50LCBwcm9wZXJ0eSwgcGF1c2VUaW1lKTsKLX0KLQogVmVjdG9yPEludGVybmFs
czo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25z
Rm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICghUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KICAgICBWZWN0b3I8SW50ZXJuYWxzOjpBY2Nl
bGVyYXRlZEFuaW1hdGlvbj4gYW5pbWF0aW9uczsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFuaW1h
dGlvbkFzUGFpciA6IGVsZW1lbnQuZG9jdW1lbnQoKS50aW1lbGluZSgpLmFjY2VsZXJhdGVkQW5p
bWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIGFuaW1hdGlvbnMuYXBwZW5kKHsg
YW5pbWF0aW9uQXNQYWlyLmZpcnN0LCBhbmltYXRpb25Bc1BhaXIuc2Vjb25kIH0pOwpAQCAtMTIw
Nyw5ICsxMTMxLDcgQEAgVmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IElu
dGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWUKIAogdW5zaWduZWQgSW50ZXJu
YWxzOjpudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9ucygpIGNvbnN0CiB7Ci0g
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9j
dW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9u
c0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1l
bnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9uc0Zv
clRlc3RpbmcoKTsKIH0KIAogZG91YmxlIEludGVybmFsczo6dGltZVRvTmV4dEFuaW1hdGlvblRp
Y2soV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuaAppbmRleCAzNzExNzZmNmMyYTNjNzg3ZTAzNmY1MjI2NjI1ODM1ZmRjMTNlZThhLi5kMTdj
ZGVkMWQyMTllNjUzOGNjMTQ4MTMzYzU2ZWZiMTJhYWM1YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKQEAgLTIzMywxNCArMjMzLDggQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9y
PGJvb2w+IGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBjb25zdDsKICAgICBFeGNlcHRpb25Pcjx2
b2lkPiBzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJl
c3VtZUFuaW1hdGlvbnMoKSBjb25zdDsKLSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBw
YXVzZVRpbWUsIEVsZW1lbnQmKTsKLSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZUFuaW1hdGlv
bkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJs
ZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKTsKICAgICBkb3Vi
bGUgYW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3Q7CiAKLSAgICAvLyBDU1MgVHJhbnNpdGlvbiB0
ZXN0aW5nLgotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxl
bWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVu
dCYpOwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRv
RWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50
JiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCk7Ci0KICAgICAvLyBXZWIgQW5pbWF0aW9ucyB0ZXN0
aW5nLgogICAgIHN0cnVjdCBBY2NlbGVyYXRlZEFuaW1hdGlvbiB7CiAgICAgICAgIFN0cmluZyBw
cm9wZXJ0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlk
bCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCA4ZDFhZDQyZmQ1
YTdiNTAwNGNiMDhmYTY2ZWVmNzRhYmM0NjQ4ZDQzLi5mZDY3ZTcxMjJhY2Q0MTZiY2RkNzA0ZWE1
ZDAwMzU1ZjljNjhiMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0z
MTUsMTQgKzMxNSw4IEBAIGVudW0gQ29udGVudFNpemVDYXRlZ29yeSB7CiAgICAgW01heVRocm93
RXhjZXB0aW9uXSB1bmRlZmluZWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICBbTWF5VGhyb3dF
eGNlcHRpb25dIHVuZGVmaW5lZCByZXN1bWVBbmltYXRpb25zKCk7CiAgICAgW01heVRocm93RXhj
ZXB0aW9uXSBib29sZWFuIGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsKLSAgICBbTWF5VGhyb3dF
eGNlcHRpb25dIGJvb2xlYW4gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoRE9NU3RyaW5n
IGFuaW1hdGlvbk5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVs
ZW1lbnQpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZUFuaW1hdGlvbkF0
VGltZU9uUHNldWRvRWxlbWVudChET01TdHJpbmcgYW5pbWF0aW9uTmFtZSwgdW5yZXN0cmljdGVk
IGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGFuaW1hdGlvbnNJbnRlcnZhbDsKIAotICAg
IC8vIENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29s
ZWFuIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChET01TdHJpbmcgcHJvcGVydHlOYW1l
LCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50KTsKLSAgICBb
TWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUs
IEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsKLQogICAgIC8vIFdlYiBBbmlt
YXRpb25zIHRlc3RpbmcuCiAgICAgc2VxdWVuY2U8QWNjZWxlcmF0ZWRBbmltYXRpb24+IGFjY2Vs
ZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKICAgICB1bnNpZ25l
ZCBsb25nIG51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dl
YktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCBhODE0MjJjOWIxZDcwZTAwY2Y1
YWYyMjdiM2JkN2EyYmY2Y2IzY2Q5Li5iZDExZmE2MWJlNGFjZmMxZWI3MmI4NGUxOWE3MWYwN2Jh
YTZkMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55
YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKQEAgLTE0
MDUsMjIgKzE0MDUsNiBAQCBDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkOgogICBodW1h
blJlYWRhYmxlRGVzY3JpcHRpb246ICJFbmFibGUgRE9NIEFQSSBhbmQgQ1NTIHByb3BlcnR5IGZv
ciAnc21vb3RoJyBzY3JvbGwgYmVoYXZpb3IiCiAgIGNhdGVnb3J5OiBleHBlcmltZW50YWwKIAot
V2ViQW5pbWF0aW9uc0VuYWJsZWQ6Ci0gIHR5cGU6IGJvb2wKLSAgZGVmYXVsdFZhbHVlOiB0cnVl
Ci0gIGh1bWFuUmVhZGFibGVOYW1lOiAiV2ViIEFuaW1hdGlvbnMiCi0gIGh1bWFuUmVhZGFibGVE
ZXNjcmlwdGlvbjogIldlYiBBbmltYXRpb25zIHByb3RvdHlwZSIKLSAgY2F0ZWdvcnk6IGV4cGVy
aW1lbnRhbAotICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwotCi1XZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOgotICB0eXBlOiBib29sCi0gIGRlZmF1bHRW
YWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxlTmFtZTogIkNTUyBBbmltYXRpb25zIHZpYSBXZWIg
QW5pbWF0aW9ucyIKLSAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRXhwb3NlIENTUyBBbmlt
YXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgdGhyb3VnaCBnZXRBbmltYXRpb25zKCkiCi0gIGNh
dGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXMKLQogV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOgogICB0eXBl
OiBib29sCiAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FWFBFUklNRU5UQUxfRkVBVFVSRVNfRU5B
QkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNw
cAppbmRleCBlYmMyZDI3YWY3NzRlODMyNWQ1YWRiM2E5NDQ2MDMxNjYzMTAwMDNlLi4xN2RjZjM4
M2U1NTA3ZTFiNzBkMGRlODMxMzE3ZGRkMWM3ZjljYWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAtNDg2LDI2ICs0ODYsNiBAQCBi
b29sIFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQogICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYp
LT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCgpOwogfQogCi12b2lkIFdLUHJlZmVyZW5jZXNT
ZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBi
b29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViQW5pbWF0aW9u
c0VuYWJsZWQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCi17Ci0gICAgcmV0dXJuIHRv
SW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlvbnNFbmFibGVkKCk7Ci19Ci0KLXZvaWQg
V0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVm
ZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewotICAgIHRvSW1wbChwcmVm
ZXJlbmNlc1JlZiktPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoZmxhZyk7
Ci19Ci0KLWJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKLXsKLSAgICByZXR1cm4gdG9J
bXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
OwotfQotCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhXS1By
ZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7CiAgICAgdG9JbXBsKHBy
ZWZlcmVuY2VzUmVmKS0+c2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoZmxhZyk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0
ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZh
dGUuaAppbmRleCA3ZTE0YTJhYzQ1Y2IxYmY1ZmFlMDM5MTRlYzkyOGI5MTMyZmJjNTYxLi4yMWRm
Mzc0ODY2Y2QyNTgyOTc5N2M3MjliMzgyNjFkNThmMGZiNjJmIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKQEAg
LTk3LDE0ICs5Nyw2IEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJHTEVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0QWNj
ZWxlcmF0ZWQyRENhbnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCk7CiBXS19FWFBP
UlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWQyRENhbnZhc0VuYWJsZWQoV0tQcmVm
ZXJlbmNlc1JlZik7CiAKLS8vIERlZmF1bHRzIHRvIGZhbHNlCi1XS19FWFBPUlQgdm9pZCBXS1By
ZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKTsKLVdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxl
ZChXS1ByZWZlcmVuY2VzUmVmKTsKLQotLy8gRGVmYXVsdHMgdG8gZmFsc2UKLVdLX0VYUE9SVCB2
b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFdL
UHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2Vz
R2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsK
LQogLy8gRGVmYXVsdHMgdG8gZmFsc2UuCiBXS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0
TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCk7CiBXS19FWFBP
UlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJl
bmNlc1JlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
ZWZlcmVuY2VzLm1tCmluZGV4IDEzYTg4MTBjM2FmNGI3M2ZlMmUwYjJiYmRkN2U4YjU3Njg2MTJk
YTYuLmRhZGE5MTMzZmNkOTczYmY1ZmI2NjAwMmI1MzkxOTk2ZTIwOWVjYTAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCkBAIC0x
NDMwLDE2ICsxNDMwLDYgQEAgLSAoQk9PTClfdmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29t
cG9zaXRpbmdFbmFibGVkCiAgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+dmlkZW9RdWFsaXR5SW5j
bHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkKCk7CiB9CiAKLS0gKHZvaWQpX3NldFdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxlZAotewotICAgIF9wcmVm
ZXJlbmNlcy0+c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsK
LX0KLQotLSAoQk9PTClfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZAotewotICAg
IHJldHVybiBfcHJlZmVyZW5jZXMtPndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KTsKLX0KLQogLSAodm9pZClfc2V0RGV2aWNlT3JpZW50YXRpb25FdmVudEVuYWJsZWQ6KEJPT0wp
ZW5hYmxlZAogewogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04pCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaCBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5o
CmluZGV4IGEzNDk4OTU2OTI2OTQ0Nzg1MzZjNGE0NDQ1ZTVhODBlNDQzZjE4NzIuLjU4NDA0YTY4
NDVkN2E0OWM4YTc2YWFlYWY4ODRkZjJhMGUzM2NkZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC0x
NTEsNyArMTUxLDYgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwgX1dLRWRpdGFibGVMaW5r
QmVoYXZpb3IpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldExvd1Bvd2VyVmlk
ZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOikgQk9PTCBfbG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVy
U2l6ZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNob3VsZElnbm9yZU1ldGFWaWV3cG9y
dDopIEJPT0wgX3Nob3VsZElnbm9yZU1ldGFWaWV3cG9ydCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0
VmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkOikgQk9PTCBfdmlk
ZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkgKG5vbmF0b21pYywgc2V0
dGVyPV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOikgQk9PTCBfd2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0
KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldERldmljZU9y
aWVudGF0aW9uRXZlbnRFbmFibGVkOikgQk9PTCBfZGV2aWNlT3JpZW50YXRpb25FdmVudEVuYWJs
ZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzOikgQk9PTCBf
bmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xMy40KSwg
aW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldEl0cERlYnVnTW9k
ZUVuYWJsZWQ6KSBCT09MIF9pdHBEZWJ1Z01vZGVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5LmgKaW5kZXggYjZlYzUyZGI4MjFkOTY1MWVhMjJkOGYwYzNlMmYzNTZjY2Fm
ZDU2YS4uZjVmY2M3ZmJiNTEzODY1OWNiZGU4NzAxZWJkMWJjM2JiYTJiMzVmMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJl
ZURyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVM
YXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCkBAIC00OCw3ICs0OCw2
IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0JiByZW1vdGVMYXllclRy
ZWVIb3N0KCkgY29uc3QgeyByZXR1cm4gKm1fcmVtb3RlTGF5ZXJUcmVlSG9zdDsgfQogICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVIb3N0PiBkZXRhY2hSZW1vdGVMYXllclRyZWVI
b3N0KCk7CiAKLSAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQodWludDY0X3Qg
bGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKTsKICAg
ICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQsIGNvbnN0
IFN0cmluZyYga2V5KTsKIAogICAgIFRyYW5zYWN0aW9uSUQgbmV4dExheWVyVHJlZVRyYW5zYWN0
aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdMYXllclRyZWVUcmFuc2FjdGlvbklELm5l
eHQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJU
cmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5t
bQppbmRleCA2NDlhMDg0ODBjYmM5ZjdkMTFkZjNiN2I2MzU0NmViZmZhZWQ2MDY4Li5jYTVmOWJk
YTIzMzFkNjI0ZTYzZmI0Zjk3ZWQxYWYyZTAwOGQ1YTJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVt
b3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQpAQCAtMjc1LDExICsyNzUsNiBAQCB2b2lk
IFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNvbW1pdExheWVyVHJlZShjb25zdCBS
ZW1vdGVMYXllclRyZWVUcmFucwogICAgIH0KIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3
aW5nQXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxheWVy
SUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBz
ZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydChs
YXllcklELCBrZXksIHN0YXJ0VGltZSkpOwotfQotCiB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhUHJveHk6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQs
IGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVhOjpB
Y2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZChsYXllcklELCBrZXkpKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlSG9zdC5oCmluZGV4IGU4YTMwNzhlNDgwZDIxMmQ0NmNkNjM4ZTI4ZGQ5NWQyNWY4ZjgyMWQu
LjYzZTJhYjc5NjQ2ZTIyNTVmNGZmMzJhZWE5MjdhYWRjODIzM2Y1Y2UgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZUhvc3QuaApAQCAtNjAsNyArNjAsNiBAQCBwdWJsaWM6CiAgICAgdHlwZWRlZiBIYXNo
TWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgUmV0YWluUHRyPFdL
QW5pbWF0aW9uRGVsZWdhdGU+PiBMYXllckFuaW1hdGlvbkRlbGVnYXRlTWFwOwogICAgIExheWVy
QW5pbWF0aW9uRGVsZWdhdGVNYXAmIGFuaW1hdGlvbkRlbGVnYXRlcygpIHsgcmV0dXJuIG1fYW5p
bWF0aW9uRGVsZWdhdGVzOyB9CiAKLSAgICB2b2lkIGFuaW1hdGlvbkRpZFN0YXJ0KFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRpb24gKiwgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQgYW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6OkdyYXBo
aWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRpb24gKik7CiAKICAgICB2b2lkIGRl
dGFjaEZyb21EcmF3aW5nQXJlYSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbQppbmRleCBl
MjRhOGZmZTRmMzA1YmNkNDA3MGEzMTZmMmVjYzljOTQ4NzhjNjEzLi4zNWMwM2M4NzZmNzkxNTk0
YTJiYmJjODM4YmJiNTQzYmE0ZGVjZWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbQorKysgYi9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5tbQpA
QCAtMTUzLDI3ICsxNTMsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmxheWVyV2lsbEJl
UmVtb3ZlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheQogICAgIG1fbm9kZXMu
cmVtb3ZlKGxheWVySUQpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6OmFuaW1hdGlv
bkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklE
LCBDQUFuaW1hdGlvbiAqYW5pbWF0aW9uLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAg
ICBpZiAoIW1fZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQotICAgIENBTGF5ZXIgKmxh
eWVyID0gbGF5ZXJGb3JJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVyKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBTdHJpbmcgYW5pbWF0aW9uS2V5OwotICAgIGZvciAoTlNTdHJpbmcgKmtleSBp
biBbbGF5ZXIgYW5pbWF0aW9uS2V5c10pIHsKLSAgICAgICAgaWYgKFtsYXllciBhbmltYXRpb25G
b3JLZXk6a2V5XSA9PSBhbmltYXRpb24pIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbktleSA9IGtl
eTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFhbmlt
YXRpb25LZXkuaXNFbXB0eSgpKQotICAgICAgICBtX2RyYXdpbmdBcmVhLT5hY2NlbGVyYXRlZEFu
aW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGFuaW1hdGlvbktleSwgc3RhcnRUaW1lKTsKLX0KLQog
dm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25EaWRFbmQoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIENBQW5pbWF0aW9uICphbmltYXRpb24p
CiB7CiAgICAgaWYgKCFtX2RyYXdpbmdBcmVhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcCBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKaW5kZXggNDE5
YzE1Zjk3MDE3ZGRiZDJkYjhiMzg3MDY4Mzc1MGFhMDM0ZWYxMS4uYmU1ZGVkNTc4MzcyMjA1NDBl
MDEzMmM3MmU4MmM2NDFmYWMzZmY5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCkBAIC0xODcsMTIg
KzE4Nyw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9vbFByZWZlcmVuY2VGb3JU
ZXN0UnVubmVyKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlCiAgICAgfQogI2VuZGlmCiAKLSAgICBp
ZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWQiKQotICAgICAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNF
bmFibGVkKGVuYWJsZWQpOwotCi0gICAgaWYgKHByZWZlcmVuY2UgPT0gIldlYktpdFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoZW5hYmxlZCk7Ci0KICAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0Q2FjaGVBUElFbmFi
bGVkIikKICAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5z
ZXRDYWNoZUFQSUVuYWJsZWQoZW5hYmxlZCk7CiAKQEAgLTU4OSwxNiArNTgzLDYgQEAgdm9pZCBJ
bmplY3RlZEJ1bmRsZTo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdlYlBhZ2UqIHBh
Z2UsIGJvb2wgZW5hYmxlZCkKICAgICBwYWdlLT5jb3JlUGFnZSgpLT5zZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMoZW5hYmxlZCk7CiB9CiAKLXZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFdl
YkFuaW1hdGlvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGVuYWJsZWQp
OwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoZW5h
YmxlZCk7Ci19Ci0KIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFjY2Vzc2liaWxpdHlJc29sYXRl
ZFRyZWVFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICNpZiBFTkFCTEUoQUNDRVNTSUJJTElUWV9J
U09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVj
dGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5q
ZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCAwOWExMjVjYTRjOTZjYzNhMDMyYWU1
OGE0ZWJiYzJiYzQzYzc1ZmJmLi5jMDFkZTgwZmNjYmNlM2QzNWJlMzJhZjdhMGRhNGIzYzNjMWRm
NjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtMTQyLDggKzE0Miw2IEBAIHB1YmxpYzoKIAogICAg
IHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdlYlBhZ2UqLCBib29sIGVuYWJs
ZWQpOwogICAgIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9pZCBz
ZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRBY2Nlc3NpYmlsaXR5SXNv
bGF0ZWRUcmVlRW5hYmxlZChib29sKTsKICAgICB2b2lkIGRpc3BhdGNoUGVuZGluZ0xvYWRSZXF1
ZXN0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9E
cmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaAppbmRleCBjZTc3NThkMGI5NDY4ZDliN2Y2Zjg0NWI0ZGVhZjU2NzEyNzRmZWNkLi5iMDkx
NzZmMjEyYmRhYjM2OThkMDY2YmYzY2YxMWZlMDEwZDA3MmJlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk1LDcgKzk1LDYgQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3RXhwb3NlZFJlY3QoT3B0aW9uYWw8V2ViQ29y
ZTo6RmxvYXRSZWN0PikgPSAwOwogICAgIHZpcnR1YWwgT3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRS
ZWN0PiB2aWV3RXhwb3NlZFJlY3QoKSBjb25zdCA9IDA7CiAKLSAgICB2aXJ0dWFsIHZvaWQgYWNj
ZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCAvKmxheWVySUQqLywgY29uc3QgU3Ry
aW5nJiAvKmtleSovLCBNb25vdG9uaWNUaW1lIC8qc3RhcnRUaW1lKi8pIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRfdCAvKmxheWVySUQqLywg
Y29uc3QgU3RyaW5nJiAvKmtleSovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWRkRmVuY2UoY29u
c3QgV1RGOjpNYWNoU2VuZFJpZ2h0JikgeyB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KaW5kZXggZjIwN2Ux
MDdlOTUyNzBhN2Y5MTg5Y2JhOWFiNjc3NTM0YWEyMjc5Mi4uMTNhNzNmZjA1ZjkwODQ5OGM4OTIz
ODhlYzIyY2NjNjNjM2UxY2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KQEAgLTM3LDcgKzM3LDYgQEAg
bWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgTm90UmVmQ291bnRlZCB7CiAgICAgQWRqdXN0VHJhbnNp
ZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKQogICAgIENv
bW1pdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9hdFBvaW50IG9yaWdp
bikKICAgICAKLSAgICBBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxheWVy
SUQsIFN0cmluZyBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQogICAgIEFjY2VsZXJhdGVk
QW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQsIFN0cmluZyBrZXkpCiAgICAgCiAgICAg
QWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpp
bmRleCBkZTdkNzI4MDI5MmQwNTBkNzJkMDZhYzk0YWI5MzFjZjIzZmE0ZThlLi5lZTM1NTI5MmE3
MzI1OWUzMTY0ZTdkNTU3NmI1MGU3MTNmOGY2ZDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpAQCAtNDEsMTEgKzQxLDYgQEAKICNp
bXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8d3RmL3RleHQvVGV4dFN0
cmVhbS5oPgogCi1zdGF0aWMgTW9ub3RvbmljVGltZSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKENG
VGltZUludGVydmFsIHQpCi17Ci0gICAgcmV0dXJuIFdURjo6TW9ub3RvbmljVGltZTo6bm93KCkg
KyBTZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0KIHN0YXRpYyBOU1N0cmlu
ZyAqIGNvbnN0IFdLRXhwbGljaXRCZWdpblRpbWVGbGFnID0gQCJXS1BsYXRmb3JtQ0FBbmltYXRp
b25FeHBsaWNpdEJlZ2luVGltZUZsYWciOwogCiBAaW50ZXJmYWNlIFdLQW5pbWF0aW9uRGVsZWdh
dGUgKCkgPENBQW5pbWF0aW9uRGVsZWdhdGU+CkBAIC02NywyNCArNjIsNiBAQCAtICh2b2lkKWlu
dmFsaWRhdGUKICAgICBfbGF5ZXJUcmVlSG9zdCA9IG51bGxwdHI7CiB9CiAKLS0gKHZvaWQpYW5p
bWF0aW9uRGlkU3RhcnQ6KENBQW5pbWF0aW9uICopYW5pbWF0aW9uCi17Ci0gICAgaWYgKCFfbGF5
ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBoYXNFeHBsaWNpdEJlZ2lu
VGltZSA9IFtbYW5pbWF0aW9uIHZhbHVlRm9yS2V5OldLRXhwbGljaXRCZWdpblRpbWVGbGFnXSBi
b29sVmFsdWVdOwotICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwotCi0gICAgaWYgKGhhc0V4
cGxpY2l0QmVnaW5UaW1lKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGtub3cgd2hhdCB0aW1lIENB
IHVzZWQgdG8gY29tbWl0IHRoZSBhbmltYXRpb24sIHNvIGp1c3QgdXNlIHRoZSBjdXJyZW50IHRp
bWUKLSAgICAgICAgLy8gKGV2ZW4gdGhvdWdoIHRoaXMgd2lsbCBiZSBzbGlnaHRseSBvZmYpLgot
ICAgICAgICBzdGFydFRpbWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKENBQ3VycmVudE1lZGlh
VGltZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RhcnRUaW1lID0gbWVkaWFUaW1lVG9DdXJy
ZW50VGltZShbYW5pbWF0aW9uIGJlZ2luVGltZV0pOwotCi0gICAgX2xheWVyVHJlZUhvc3QtPmFu
aW1hdGlvbkRpZFN0YXJ0KF9sYXllcklELCBhbmltYXRpb24sIHN0YXJ0VGltZSk7Ci19Ci0KIC0g
KHZvaWQpYW5pbWF0aW9uRGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmltYXRpb24gZmluaXNoZWQ6
KEJPT0wpZmluaXNoZWQKIHsKICAgICBpZiAoIV9sYXllclRyZWVIb3N0KQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3Jt
Q0FMYXllclJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRleCBhNTkxNzE5YmRhOTBh
MzljZGE0MGJhNDE5ODllZGEyZDRlMDYzMDQzLi4yMTBhNjY4MTU4ZTA0YjY5N2Y3YjJlMWU1MTI2
YmUyODQ2MDZmYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmNwcApAQCAtMzk2LDE2ICszOTYsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNFcXVp
dmFsZW50TGF5ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVyKiBsYXllciwgR3JhcGhpY3NMYXllcgog
ICAgIHJldHVybiBsYXllcklEID09IG5ld0xheWVySUQ7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjphbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNU
aW1lIGJlZ2luVGltZSkKLXsKLSAgICBhdXRvIGl0ID0gbV9hbmltYXRpb25zLmZpbmQoa2V5KTsK
LSAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zLmVuZCgpKQotICAgICAgICBkb3duY2FzdDxQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPigqaXQtPnZhbHVlKS5kaWRTdGFydChjdXJyZW50VGltZVRv
TWVkaWFUaW1lKGJlZ2luVGltZSkpOwotICAgIAotICAgIGlmIChtX293bmVyKQotICAgICAgICBt
X293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGtleSwgYmVnaW5UaW1lKTsK
LX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0
cmluZyYga2V5KQogewogICAgIGlmIChtX293bmVyKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90
ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZS5oCmluZGV4IDBjMGEwODJiZThmOWI4YmM3NWYwMzhiMDdlNzVk
OTlhOTNlYTI2OWQuLmVhYzdiN2M5MjA0NWYyYzNlMWE1ZWZjMmZlNmY5YjU2YzgyMmE0MjkgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKQEAgLTY3LDcg
KzY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmlu
ZyYga2V5LCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9p
ZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChjb25z
dCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBiZWdpblRpbWUpIG92ZXJyaWRlOwogICAgIHZv
aWQgYW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogCiAgICAgdm9p
ZCBzZXRNYXNrKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciopIG92ZXJyaWRlOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZUxheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKaW5kZXggNGY3Yjk4M2NkODBl
YTU1NzVkOGIzOTAzMzI1NmRjMDFhMTdjOWFlMC4uOGYwZDExMzdkNDE2MmNjMjdmMjZjZDQzNDIw
MGNiZDM2ZmZiMzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dC5oCkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGxheWVyUHJvcGVy
dHlDaGFuZ2VkV2hpbGVCdWlsZGluZ1RyYW5zYWN0aW9uKFBsYXRmb3JtQ0FMYXllclJlbW90ZSYp
OwogCiAgICAgLy8gRnJvbSB0aGUgVUkgcHJvY2VzcwotICAgIHZvaWQgYW5pbWF0aW9uRGlkU3Rh
cnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklELCBjb25zdCBTdHJpbmcm
IGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQgYW5pbWF0aW9uRGlkRW5k
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBr
ZXkpOwogCiAgICAgdm9pZCB3aWxsU3RhcnRBbmltYXRpb25PbkxheWVyKFBsYXRmb3JtQ0FMYXll
clJlbW90ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0gYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dC5tbQppbmRleCA1MjIwNTVlMmQ5NTY3YzZkZTMxNjg3MzVhYjM4N2IwNmZhZDU3MGQ2Li43NjNm
OTU0MmI4YTUwMjczMjFiYzI2ODdkN2EyZDA5ZTI3MGRiNWRlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtMTc0LDEzICsxNzQsNiBAQCB2
b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OndpbGxTdGFydEFuaW1hdGlvbk9uTGF5ZXIoUGxh
dGZvcm1DQUxheWVyUmVtb3RlJiBsYQogICAgIG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuYWRkKGxh
eWVyLmxheWVySUQoKSwgJmxheWVyKTsKIH0KIAotdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0
OjphbmltYXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVy
SUQgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQot
ewotICAgIGF1dG8gaXQgPSBtX2xheWVyc1dpdGhBbmltYXRpb25zLmZpbmQobGF5ZXJJRCk7Ci0g
ICAgaWYgKGl0ICE9IG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuZW5kKCkpCi0gICAgICAgIGl0LT52
YWx1ZS0+YW5pbWF0aW9uU3RhcnRlZChrZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dDo6YW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6
OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBhdXRv
IGl0ID0gbV9sYXllcnNXaXRoQW5pbWF0aW9ucy5maW5kKGxheWVySUQpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAppbmRleCBiNzBlZWUy
Y2Y2OTlmODRiYjFmN2NhNjYwOTVjMDExZmRlNjExMjM4Li5mZmMzZTZlN2IyY2M2MjA4YWJjNTBk
N2FlODEzNTAxMjdiYTRkNmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtOTIsNyArOTIsNiBAQCBwcml2YXRlOgogICAgIHZv
aWQgc2V0Vmlld0V4cG9zZWRSZWN0KE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4pIG92ZXJy
aWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4gdmlld0V4cG9zZWRSZWN0KCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWV3RXhwb3NlZFJlY3Q7IH0KIAotICAgIHZvaWQg
YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJp
bmcmIGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgYWNj
ZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBr
ZXkpIG92ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGV4cG9zZWRDb250ZW50UmVj
dCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDI2YzM3NDc2YzdiMDFkZWY4YjQ2ZjFjZGIxMDNm
Zjg1OWFkYWEzMWQuLmE1M2MyZTEzMDNmMmM0ZjA4NzY5YmYyN2I2NTI3MDNlYmZhMDQyOGUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
bW0KQEAgLTIyMiwxMSArMjIyLDYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6
Zm9yY2VSZXBhaW50KCkKICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKIH0KIAotdm9pZCBSZW1vdGVM
YXllclRyZWVEcmF3aW5nQXJlYTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRf
dCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpCi17
Ci0gICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5hbmltYXRpb25EaWRTdGFydChsYXllcklE
LCBrZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6
OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmlu
ZyYga2V5KQogewogICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YW5pbWF0aW9uRGlkRW5k
KGxheWVySUQsIGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCBlMjNiODQwNjhmMjQwY2Uy
MWJiYWQxNzA0YjllMzZjN2RhZTQxZGViLi4xYmNhN2JmYTg3YmNmMzkwOWE0Nzc2ZWY5NDk5NWYw
ZTE5YmEwMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTUyLDcgKzUyLDYgQEAKICNkZWZp
bmUgV2ViS2l0SmF2YUVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YUVuYWJsZWQiCiAj
ZGVmaW5lIFdlYktpdEphdmFTY3JpcHRFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEphdmFT
Y3JpcHRFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZFByZWZl
cmVuY2VLZXkgQCJXZWJLaXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZCIKLSNkZWZpbmUgV2ViS2l0
V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc0Vu
YWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5h
YmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9u
c0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5h
YmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0Vu
YWJsZWQiCiAjZGVmaW5lIFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVk
UHJlZmVyZW5jZUtleSBAIldlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVk
IgpAQCAtMjA1LDcgKzIwNCw2IEBACiAjZGVmaW5lIFdlYktpdENvbG9yRmlsdGVyRW5hYmxlZFBy
ZWZlcmVuY2VLZXkgQCJXZWJLaXRDb2xvckZpbHRlckVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFB1
bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGVQcmVmZXJlbmNlS2V5IEAiV2ViS2l0UHVu
Y2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIKICNkZWZpbmUgV2ViS2l0RmV0Y2hBUElL
ZWVwQWxpdmVFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEZldGNoQVBJS2VlcEFsaXZlRW5h
YmxlZCIKLSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFBy
ZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIgog
I2RlZmluZSBXZWJLaXRDU1NTaGFkb3dQYXJ0c0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0
Q1NTU2hhZG93UGFydHNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRMYXlvdXRGb3JtYXR0aW5nQ29u
dGV4dEludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRMYXlvdXRGb3JtYXR0
aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0V2ViU1FMRW5hYmxl
ZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJTUUxFbmFibGVkIgpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5kZXggNTdiNjQ4NmU5OTM3
ZmMxYmRhYmVhYmUzMGFjYTFiMjdhOTYwOWI1Yy4uYWRhZGU5NzAwNDE2N2E4NGZjNWVmMWU0ODg4
MDYwZDJlMTkzMmNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tCkBAIC02MzYsNyArNjM2LDYgQEAgKyAodm9pZClpbml0aWFsaXpl
CiAgICAgICAgIEBOTywgV2ViS2l0RGlhbG9nRWxlbWVudEVuYWJsZWRQcmVmZXJlbmNlS2V5LAog
ICAgICAgICBATk8sIFdlYktpdEhpZ2hsaWdodEFQSUVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAg
ICAgICBAWUVTLCBXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXks
Ci0gICAgICAgIEBZRVMsIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQ
cmVmZXJlbmNlS2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRMYXlvdXRGb3JtYXR0aW5nQ29udGV4
dEludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBFTkFCTEUoV0VCR0wyKQpA
QCAtNjU4LDcgKzY1Nyw2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBATk8sIFdlYktp
dERvd25sb2FkQXR0cmlidXRlRW5hYmxlZFByZWZlcmVuY2VLZXksCiAjZW5kaWYKICAgICAgICAg
QE5PLCBXZWJLaXREaXJlY3RvcnlVcGxvYWRFbmFibGVkUHJlZmVyZW5jZUtleSwKLSAgICAgICAg
QFlFUywgV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBA
WUVTLCBXZWJLaXRTeW50aGV0aWNFZGl0aW5nQ29tbWFuZHNFbmFibGVkUHJlZmVyZW5jZUtleSwK
IAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0zMTc2LDE2ICszMTc0LDYgQEAgLSAodm9p
ZClzZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkOihCT09MKWZsYWcKICAgICBbc2Vs
ZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdENTU09NVmlld1Ntb290aFNjcm9sbGlu
Z0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAotLSAoQk9PTCl3ZWJBbmltYXRpb25zRW5hYmxl
ZAotewotICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFdlYkFuaW1hdGlv
bnNFbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0Vu
YWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6
V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0KLQogLSAoQk9PTCl3
ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQKIHsKICAgICByZXR1cm4gW3Nl
bGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9u
c0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKQEAgLTMyNDYsMTYgKzMyMzQsNiBAQCAtICh2b2lkKXNl
dE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOihCT09MKWZsYWcKICAgICBbc2VsZiBfc2V0Qm9v
bFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkUHJlZmVy
ZW5jZUtleV07CiB9CiAKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZAotewotICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0KLQotLSAodm9pZClzZXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbc2Vs
ZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0KLQogLSAoQk9PTClpbnRlcnNlY3Rpb25PYnNl
cnZlckVuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRJ
bnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmggYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCmlu
ZGV4IDczMGViNmJmMWYyZDY3YmY0NzEyNzBjOTU5NWNiZDJkM2M5ODRkMDUuLmI5ODdjOWMyODhk
N2I1MzA3MzQ1MzYzYTljODI0ODlkYWNlMjEzNDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtNTY0LDkg
KzU2NCw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNDYWNoZU1vZGVsQ2hhbmdl
ZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAtICh2b2lkKXNldERpcmVjdG9yeVVw
bG9hZEVuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpZGlyZWN0b3J5VXBsb2FkRW5hYmxlZDsK
IAotLSAodm9pZClzZXRXZWJBbmltYXRpb25zRW5hYmxlZDooQk9PTClmbGFnOwotLSAoQk9PTCl3
ZWJBbmltYXRpb25zRW5hYmxlZDsKLQogLSAodm9pZClzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRl
T3BlcmF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpd2ViQW5pbWF0aW9uc0NvbXBv
c2l0ZU9wZXJhdGlvbnNFbmFibGVkOwogCkBAIC01ODUsOSArNTgyLDYgQEAgZXh0ZXJuIE5TU3Ry
aW5nICpXZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24g
V0VCS0lUX0RFUFIKIC0gKHZvaWQpc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ6KEJPT0wp
ZmxhZzsKIC0gKEJPT0wpbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ7CiAKLS0gKHZvaWQpc2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDooQk9PTClmbGFnOwotLSAoQk9PTCl3
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOwotCiAtICh2b2lkKXNldEludGVyc2Vj
dGlvbk9ic2VydmVyRW5hYmxlZDooQk9PTClmbGFnOwogLSAoQk9PTClpbnRlcnNlY3Rpb25PYnNl
cnZlckVuYWJsZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5t
bQppbmRleCA0ZWMwMjM3YTc0YzdjNDlkZGU4Mjg1OWNlNTg5ZTE3NGNkNWU5NDA1Li5jZTRjYjNk
NGMwNjgxMTg5NjI2MmNhODk1MjA2MzdkMTNlNTFlYTQ1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2Fj
eS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xMzIsNyArMTMyLDYgQEAKICNpbXBvcnQgPFdl
YkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmFja0Zv
cndhcmRDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZENvbnRyb2xsZXIuaD4K
LSNpbXBvcnQgPFdlYkNvcmUvQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9DYWNoZVN0b3JhZ2VQcm92aWRlci5oPgogI2ltcG9ydCA8V2ViQ29yZS9DaHJvbWUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KQEAgLTMzMzQsNyArMzMzMyw2IEBAIC0gKHZv
aWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogCiAg
ICAgc2V0dGluZ3Muc2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWQoW3NlbGYgaW50
ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKFtwcmVm
ZXJlbmNlcyBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZF0pOwotICAgIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZF0p
OwogCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRDYWNo
ZUFQSUVuYWJsZWQoW3ByZWZlcmVuY2VzIGNhY2hlQVBJRW5hYmxlZF0pOwogCkBAIC0zMzU4LDcg
KzMzNTYsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICop
cHJlZmVyZW5jZXMKICAgICBzZXR0aW5ncy5zZXREb3dubG9hZEF0dHJpYnV0ZUVuYWJsZWQoW3By
ZWZlcmVuY2VzIGRvd25sb2FkQXR0cmlidXRlRW5hYmxlZF0pOwogI2VuZGlmCiAKLSAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNFbmFi
bGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zRW5hYmxlZF0pOwogICAgIFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9w
ZXJhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0
aW9uc0VuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZChbcHJlZmVyZW5jZXMg
d2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkXSk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5p
ZGwgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1By
aXZhdGUuaWRsCmluZGV4IDlhODc1ZDQ3OWU3YmZhZDczNjFhNmYyZjhhNGQzMTkzMzdlZTU3ZjIu
LmIwYmQwNWYyNTA1ODJlMTQ3YTZhN2ZiZGEzYjZkYmY0YjZhYjYwODcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5p
ZGwKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmlkbApAQCAtMTgzLDE2ICsxODMsMTIgQEAgaW50ZXJmYWNlIElXZWJQcmVmZXJl
bmNlc1ByaXZhdGUzIDogSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTIKICAgICBIUkVTVUxUIHNldEN1
c3RvbUVsZW1lbnRzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7CiAgICAgSFJFU1VMVCBtb2Rl
cm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqIGVuYWJsZWQpOwogICAg
IEhSRVNVTFQgc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQp
OwotICAgIEhSRVNVTFQgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChbb3V0LCBy
ZXR2YWxdIEJPT0wqIGVuYWJsZWQpOwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7CiB9CiAKIFt1dWlkKEY5NTgyRDcy
LTYzNDgtNDVCMS1BQjA5LTM5RTMzNDU5QjVCOSldCiBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZTQgOiBJV2ViUHJlZmVyZW5jZXNQcml2YXRlMwogewogICAgIEhSRVNVTFQgc2V0QXBw
bGljYXRpb25JZChbaW5dIEJTVFIgYXBwbGljYXRpb25JZCk7Ci0gICAgSFJFU1VMVCB3ZWJBbmlt
YXRpb25zRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqKTsKLSAgICBIUkVTVUxUIHNldFdlYkFu
aW1hdGlvbnNFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKICAgICBIUkVTVUxUIHVzZXJUaW1p
bmdFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwogICAgIEhSRVNVTFQgc2V0VXNlclRpbWlu
Z0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQpOwogICAgIEhSRVNVTFQgcmVzb3VyY2VUaW1pbmdF
bmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCAyYTIxMjFhZGI5Njg2OTg0MTIx
YzBlNGJhOGRhZmZjYTdiY2M2Y2FiLi45MjE3Yjg1ZTQ5N2RhMTNkYTc2ODIyOTViMmRlNzYyYTJk
ZTcxNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNl
S2V5c1ByaXZhdGUuaApAQCAtMTg4LDE0ICsxODgsMTAgQEAKIAogI2RlZmluZSBXZWJLaXRNb2Rl
cm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdE1vZGVybk1lZGlhQ29u
dHJvbHNFbmFibGVkIgogCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVy
ZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWQiCi0KICNkZWZpbmUgV2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0
V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIgogCiAjZGVmaW5lIFdlYktp
dFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktp
dFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKIAotI2RlZmluZSBXZWJLaXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIKLQogI2RlZmluZSBXZWJLaXRDU1NDdXN0
b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdENTU0N1c3Rv
bVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkIgogCiAjZGVmaW5lIFdlYktpdFVzZXJUaW1pbmdF
bmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0VXNlclRpbWluZ0VuYWJsZWQiCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggOWQ5YjBkZmUxMTliY2YxOGJl
NDAzNTYxMjQ1NmViNmE4M2ViYWVjOC4uZjc0MjZhOTU2M2Q5ZmRiYmJhNTc2NGIxNjdjNWMwMWJh
ZDFiMzg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5j
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcApA
QCAtMzExLDE0ICszMTEsMTAgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1
bHRTZXR0aW5ncygpCiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIo
V2ViS2l0Q3VzdG9tRWxlbWVudHNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxz
ZSk7CiAKLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2Vi
QW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhblRydWUpOwotCiAgICAg
Q0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFdlYkFuaW1hdGlvbnND
b21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2Up
OwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFdlYkFu
aW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFu
RmFsc2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktp
dFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9v
bGVhbkZhbHNlKTsKLQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihX
ZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBr
Q0ZCb29sZWFuRmFsc2UpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENG
U1RSKFdlYktpdFVzZXJUaW1pbmdFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxz
ZSk7CkBAIC0yMTM4LDIwICsyMTM0LDYgQEAgSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6bW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKICAgICByZXR1cm4gU19P
SzsKIH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkKLSAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqZW5hYmxlZCA9IGJvb2xWYWx1ZUZvcktleShX
ZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSk7Ci0g
ICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoQk9PTCBlbmFibGVkKQotewotICAgIHNldEJvb2xW
YWx1ZShXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtl
eSwgZW5hYmxlZCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNVTFQgV2ViUHJlZmVyZW5j
ZXM6OmZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQogewogICAg
IGlmICghZW5hYmxlZCkKQEAgLTIzNDAsMjAgKzIzMjIsNiBAQCBIUkVTVUxUIFdlYlByZWZlcmVu
Y2VzOjpzZXRBcHBsaWNhdGlvbklkKEJTVFIgYXBwbGljYXRpb25JZCkKICAgICByZXR1cm4gU19P
SzsKIH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQo
Qk9PTCBlbmFibGVkKQotewotICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRpb25zRW5h
YmxlZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVT
VUxUIFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zRW5hYmxlZChfT3V0XyBCT09MKiBlbmFi
bGVkKQotewotICAgIGlmICghZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAg
ICAqZW5hYmxlZCA9IGJvb2xWYWx1ZUZvcktleShXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFBy
ZWZlcmVuY2VLZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVTVUxUIFdlYlByZWZlcmVu
Y2VzOjpzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoQk9PTCBlbmFi
bGVkKQogewogICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3Bl
cmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IDI0MzdiMGU3NjI4OTUwNmMyNjQwNDg4NmJkMmMw
M2Y1ODMyNTNjNTEuLjIxMjkwNWNiMWJhNjAwOTQwMzg2OTUzOTE3OGEzZmVhNzAzYTM4ZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmgKKysrIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaApAQCAtMjM2LDEzICsyMzYs
OSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldEN1
c3RvbUVsZW1lbnRzRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8gQk9PTCopOwogICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5h
YmxlZChCT09MKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChfT3V0XyBCT09MKik7Ci0gICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoQk9PTCk7CiAgICAgCiAgICAgLy8gSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTQKICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QXBwbGljYXRpb25JZChCU1RSKTsK
LSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViQW5pbWF0aW9uc0VuYWJs
ZWQoX091dF8gQk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBz
ZXRXZWJBbmltYXRpb25zRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVU
SE9EQ0FMTFRZUEUgdXNlclRpbWluZ0VuYWJsZWQoX091dF8gQk9PTCopOwogICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRVc2VyVGltaW5nRW5hYmxlZChCT09MKTsKICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVzb3VyY2VUaW1pbmdFbmFibGVk
KF9PdXRfIEJPT0wqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZp
ZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggYjZhMjgz
YzkzZTg4MmEzZTIxZDQxNjhjNGIzMWNiODQ5ZDE1ZDFhYy4uMmUyNWJlOTZiMmFkNDViNWY0ZTVl
MzE4OGQ2MmMxNGUwMmU5OWQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAg
LTUyNDQsMTEgKzUyNDQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hh
bmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybiBocjsK
ICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldE1vZGVybk1l
ZGlhQ29udHJvbHNFbmFibGVkKCEhZW5hYmxlZCk7CiAKLSAgICBociA9IHByZWZzUHJpdmF0ZS0+
d2ViQW5pbWF0aW9uc0VuYWJsZWQoJmVuYWJsZWQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAg
ICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZCghIWVuYWJsZWQpOwotCiAgICAgaHIgPSBwcmVm
c1ByaXZhdGUtPndlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCgmZW5hYmxl
ZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKQEAgLTUyNTksMTEg
KzUyNTQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChJV2Vi
Tm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybiBocjsKICAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNNdXRh
YmxlVGltZWxpbmVzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0gICAgaHIgPSBwcmVmc1ByaXZhdGUt
PndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoJmVuYWJsZWQpOwotICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCEhZW5hYmxlZCk7Ci0KICAgICBociA9IHByZWZzUHJpdmF0ZS0+Q1NTQ3VzdG9tUHJvcGVydGll
c0FuZFZhbHVlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAg
ICByZXR1cm4gaHI7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggNGZhNzA5NDdjMzgzODJmYzAzMGMyMWFlN2U2YmUyNWUxYjI2ZWUzZS4uODMzMDc1
MjFjODg0MmIyMDhlMjhkZmNlMzNjMjQzNWFmNmNiZWZjNiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0IEBACisyMDIwLTA5LTE2
ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0
aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICBTaW5jZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZSBhbmltYXRpb24gZW5n
aW5lLCB0aGUgcnVudGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1h
dGlvbnMgZW5naW5lIGFyZQorICAgICAgICBub3QgbmVlZGVkIGFueW1vcmUgYW5kIGFyZSBub3cg
cmVtb3ZlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcDoKKyAg
ICAgICAgKFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyk6CisgICAgICAgIChUZXN0T3B0aW9uczo6
d2ViVmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zIGNvbnN0KToKKyAgICAgICAgKiBEdW1wUmVu
ZGVyVHJlZS9UZXN0T3B0aW9ucy5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1w
UmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKToKKyAg
ICAgICAgKHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMpOgorICAgICAgICAqIER1bXBS
ZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChlbmFibGVFeHBlcmlt
ZW50YWxGZWF0dXJlcyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25z
KToKKwogMjAyMC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0ZsYXRwYWsgU0RLXSBDaGVycnktcGljayBNZXNhIHVzZS1hZnRlci1mcmVl
IGZpeGVzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKaW5kZXggMDY0NTdkZmRmZGVl
YTUwMzA0ZTMzMmQwYTMxODJmNWFiYTRhZjgwNS4uMGRiZmFjOWYzYzg3NDk0MmNkN2IxZGVmMTQw
ODg0ODQzMmU0MjY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcApAQCAtMTI2
LDggKzEyNiw2IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYg
cGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiAgICAgICAgICAgICBkdW1wSlND
b25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwog
ICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzIikKICAgICAgICAgICAgIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJj
ZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVl
KTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJp
ZXNFbmFibGVkIikKICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5k
YXJpZXMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKQEAgLTE2Nyw2ICsxNjUsNSBAQCBUZXN0
T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qg
c3RkOjpzdHJpbmcmIGFic29sdQogYm9vbCBUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJs
ZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1
cm4gb3RoZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2VkV2ViVmlldwotICAgICAg
ICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnMKLSAgICAgICAgJiYgb3RoZXIuZW5h
YmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uID09IGVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbjsKKyAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwog
fQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaCBiL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKaW5kZXggYzVjOGM4NTk5MmUxY2ZmMzc1MDgy
MWM4MWZmMjg0M2RkMDllYjk5Ny4uZDc2NjgxN2I3MDViNDYyNTBkMmVmZjU1MzM0NmE3ZGQ5Mzdl
YjM2NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAorKysg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCkBAIC0yOSw3ICsyOSw2IEBACiAK
IHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7
IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24geyB0
cnVlIH07CiAgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwogICAgIGJv
b2wgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9OwogICAgIGJvb2wgdXNlRXBo
ZW1lcmFsU2Vzc2lvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJl
ZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJl
bmRlclRyZWUubW0KaW5kZXggNDYzYzliOTJlZWI1ZWVlOTdhMWE3MjBkZWY4NWZjNjBkNDg3ODUz
Yy4uNjkxNTdjNDMwMDFjNTQ0MTQzMGIxMTE3Y2RhM2FjYzQ3MDI3NGU4OSAxMDA2NDQKLS0tIGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtODE0LDcgKzgxNCw2IEBAIHN0
YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFdlYlByZWZlcmVuY2VzKiBwcmVm
ZXJlbmNlcykKICAgICBbcHJlZmVyZW5jZXMgc2V0TWVkaWFQcmVsb2FkaW5nRW5hYmxlZDpZRVNd
OwogICAgIC8vIEZJWE1FOiBJbnB1dEV2ZW50cwogICAgIFtwcmVmZXJlbmNlcyBzZXRGZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQ6WUVTXTsKLSAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9u
c0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0
ZU9wZXJhdGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdlYkFuaW1hdGlv
bnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRDU1ND
dXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZDpZRVNdOwpAQCAtOTc5LDcgKzk3OCw2IEBA
IHN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmIG9wdGlvbnMpCiAgICAgcHJlZmVyZW5jZXMuaXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlSXNTZWN1cmVDb250ZXh0QXR0cmlidXRlOwogICAgIHBy
ZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUluc3Bl
Y3RvckFkZGl0aW9uczsKICAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3Vy
Y2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uOwogICAgIHByZWZlcmVuY2VzLmNvbG9yRmlsdGVyRW5hYmxlZCA9IG9wdGlvbnMuZW5h
YmxlQ29sb3JGaWx0ZXI7CiAgICAgcHJlZmVyZW5jZXMuc2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91
bmRhcmllc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5k
YXJpZXM7CiAgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlV2Vi
R1BVOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKaW5kZXgg
YTcyNzM0ZjZmNGZhZjZhZGU5NTdjYzNjYjM0M2Q1NjdlNDg3ZDMzZS4uZDc0NzEzMWY5MmJkZmRm
YmMzN2E5MWEzZjdlOGZiYjJmNDZiMTY1OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4v
RHVtcFJlbmRlclRyZWUuY3BwCkBAIC03OTYsNyArNzk2LDYgQEAgc3RhdGljIHZvaWQgZW5hYmxl
RXhwZXJpbWVudGFsRmVhdHVyZXMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcykKICAgICBw
cmVmc1ByaXZhdGUtPnNldFZpc3VhbFZpZXdwb3J0QVBJRW5hYmxlZChUUlVFKTsKICAgICBwcmVm
c1ByaXZhdGUtPnNldENTU09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQoVFJVRSk7CiAgICAgcHJl
ZnNQcml2YXRlLT5zZXRSZXNpemVPYnNlcnZlckVuYWJsZWQoVFJVRSk7Ci0gICAgcHJlZnNQcml2
YXRlLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNl
dFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChUUlVFKTsKICAgICBwcmVm
c1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZChUUlVFKTsK
ICAgICBwcmVmc1ByaXZhdGUtPnNldENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVk
KFRSVUUpOwpAQCAtOTA5LDcgKzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2Vz
Rm9yVGVzdE9wdGlvbnMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcywgY29uc3QKIHsKICAg
ICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTg+IHByZWZzUHJpdmF0ZSB7IFF1ZXJ5LCBw
cmVmZXJlbmNlcyB9OwogCi0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
KTsKICAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQob3B0aW9ucy5l
bmFibGVNZW51SXRlbUVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5Z2VuRWxlbWVu
dEVuYWJsZWQob3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKICAgICBwcmVmc1ByaXZhdGUt
PnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKG9wdGlvbnMuZW5hYmxlTW9kZXJuTWVkaWFD
b250cm9scyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggYTlhZWQ3NjQ5YjQ4ZDg5NGFmZmE5NGEwNWIyNGRiZDg4ODQyMWMx
YS4uNjIzMmVlMjU2MmYxZjliZjhlMjlmN2VmNTA5ZmQyMzlkNTc3N2E1OCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDkxIEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1vdmUgYW55IHVzZSBvZiBu
b3ctcmVtb3ZlZCB0ZXN0aW5nIG1ldGhvZHMgYW5kIHNvbWUgcnVudGltZSBmbGFncyBmcm9tIGxh
eW91dCB0ZXN0cy4KKworICAgICAgICAqIGFuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRpbWlu
Zy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIGFuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlv
bi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgIChwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dCk6CisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1u
b25lLWtleWZyYW1lLmh0bWw6CisgICAgICAgICogaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMv
cmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUtaW5u
ZXIuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0
aW9uLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvYmFja2dyb3VuZC10
cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0
aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlv
bi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25z
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbDoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sOgorICAgICAgICAqIHRyYW5zaXRp
b25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvZGVsYXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRp
b25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVyaW5nLXRyYW5z
aXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9u
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24u
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlh
bC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1sOgor
ICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9v
cGFjaXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvcmVz
b3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzOgorICAgICAgICAqIHRyYW5zaXRpb25z
L3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9z
aG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMv
c2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvc3RlcHMt
dGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10
cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRy
YW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRlcmluZy5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sOgorICAgICAgICAqIHRyYW5zaXRp
b25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3pl
cm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5odG1sOgorICAgICAgICAqIHdl
YmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5v
bmUuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1y
ZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWw6CisgICAgICAgICogd2ViYW5p
bWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5odG1sOgorICAgICAgICAq
IHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0
eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1h
ZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sOgorICAgICAgICAqIHdlYmFu
aW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0
aW9uLXRhcmdldC1yZW1vdmFsLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9jc3MtYW5p
bWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0
LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sOgorICAgICAgICAqIHdlYmFuaW1h
dGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy10
cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sOgorICAgICAgICAq
IHdlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWw6CisgICAgICAgICogd2Vi
YW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9w
ZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9u
LW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9u
cy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1j
bGVhcmluZy1lZmZlY3QuaHRtbDoKKwogMjAyMC0wOS0xNSAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2Fs
aWEuY29tPgogCiAgICAgICAgIEZpeCBsYXp5IGltYWdlIGxvYWQgcGFpbnRpbmcKZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlv
bi5odG1sIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1
bmN0aW9uLmh0bWwKaW5kZXggNDAyZjk4ZWEzMTE1YWExZDc3NmZhZjg4ZWVkYjkxYTI4NzUxZjk3
My4uMDhlYmM0NGM0ZDE2ZGE2OTI1ZDY1ZWRjMTMxOTRkOGFkMzI1NjQ3NSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1
bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD4gPCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD1mYWxzZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogICAgIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1h
dGlvbi10ZXN0LWhlbHBlcnMuanMgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL3Jlc291cmNlcy9h
bmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCmluZGV4IDE4YTVhMDEyOWZmN2YyYWUyNGJkMzNlMzE5
ZTYwNmY1NzlhYTQxOWUuLjZkZTA4ZDM4NTUxODQ0MzY3MTE3ZjAwNzIyNTcwOTAzZWFmNWJjZmUg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10
ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5p
bWF0aW9uLXRlc3QtaGVscGVycy5qcwpAQCAtNTE0LDExICs1MTQsNiBAQCBmdW5jdGlvbiBjaGVj
a0V4cGVjdGVkVmFsdWVDYWxsYmFjayhleHBlY3RlZCwgaW5kZXgpCiAKIGZ1bmN0aW9uIHBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnQpCiB7
Ci0gICAgLy8gSWYgd2UgaGF2ZW4ndCBvcHRlZCBpbnRvIENTUyBBbmltYXRpb25zIGFuZCBDU1Mg
VHJhbnNpdGlvbnMgYXMgV2ViIEFuaW1hdGlvbnMsIHVzZSB0aGUgaW50ZXJuYWwgQVBJLgotICAg
IGlmICgnaW50ZXJuYWxzJyBpbiB3aW5kb3cgJiYgIWludGVybmFscy5zZXR0aW5ncy53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbHMu
cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoYW5pbWF0aW9uTmFtZSwgdGltZSwgZWxlbWVu
dCk7Ci0KLSAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgV2ViIEFuaW1hdGlvbnMgQVBJLgogICAg
IGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnMoKTsKICAgICBmb3IgKGxl
dCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykgewogICAgICAgICBpZiAoYW5pbWF0aW9uIGluc3Rh
bmNlb2YgQ1NTQW5pbWF0aW9uICYmIGFuaW1hdGlvbi5hbmltYXRpb25OYW1lID09IGFuaW1hdGlv
bk5hbWUpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVu
c2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sIGIvTGF5b3V0VGVzdHMvaHR0cC90
ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWwKaW5k
ZXggYzFjNmZkNjcyYzRkMGVmNzlmOGJlN2JhODgxOTQ5ZmIyNmQ5NGM5OS4uYTVjZTM0MmQ1MmVi
ZmIwMDVmZDA0MWI3ODhmYmIxMTZiMTY3ZjZkZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxh
eS1ub25lLWtleWZyYW1lLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgSFRNTD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZUEUgSFRNTD4KIDxzY3JpcHQ+CiBpZiAo
d2luZG93LnRlc3RSdW5uZXIpIHsKICAgICB0ZXN0UnVubmVyLmR1bXBBc1RleHQoKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRpb25zL3Jlc291cmNlcy9v
cGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1lLWlubmVyLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0eS10
cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5odG1sCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBjYjQxY2JjOGJmYzc4NDNjM2JiOTg5MzJmYzllYzk5NzNiYzUw
NzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL0xheW91
dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRpb25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5z
Zm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1lLWlubmVyLmh0bWwKKysrIC9kZXYvbnVsbApA
QCAtMSw3NyArMCwwIEBACi08IURPQ1RZUEU+Ci08aHRtbD4KLTxoZWFkPgotPHN0eWxlPgotICAg
ICNiYWNrZ3JvdW5kIHsKLSAgICAgICAgd2lkdGg6IDIwMHB4OwotICAgICAgICBoZWlnaHQ6IDIw
MHB4OwotICAgICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjog
Z3JlZW47Ci0gICAgfQotICAgIC5vdmVybGF5IHsKLSAgICAgICAgd2lkdGg6IDUwcHg7Ci0gICAg
ICAgIGhlaWdodDogNTBweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1
NSwgMjU1LCAxKTsKLSAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBvcGFjaXR5IDFzOwotICAg
IH0KLQotICAgICNwb3B1cCB7Ci0gICAgICAgIHdpZHRoOiAyMHB4OwotICAgICAgICBoZWlnaHQ6
IDIwcHg7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKLSAgICAgICAgYm9yZGVyLXJh
ZGl1czogNnB4OwotICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13ZWJraXQtdHJhbnNmb3Jt
IDFzOwotICAgIH0KLQotICAgIC50cmFuc3BhcmVudCB7Ci0gICAgICAgIG9wYWNpdHk6IDA7Ci0g
ICAgfQotCi0gICAgW2hpZGRlbl0gewotICAgICAgICBkaXNwbGF5OiBub25lOwotICAgIH0KLQot
ICAgIC5vdmVybGF5LnRyYW5zcGFyZW50IC5wYWdlIHsKLSAgICAgICAgdHJhbnNmb3JtOiBzY2Fs
ZSgxKSB0cmFuc2xhdGVZKDBweCk7Ci0gICAgfQotCi08L3N0eWxlPgotPHNjcmlwdCB0eXBlPSJ0
ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KLSAgICBmdW5jdGlvbiBydW5UZXN0KCkK
LSAgICB7Ci0gICAgICAgIHZhciBzb2xpZF9jb2xvcl9vdmVybGF5ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoInNvbGlkX2NvbG9yX292ZXJsYXkiKTsKLSAgICAgICAgc29saWRfY29sb3Jfb3Zl
cmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwotCi0gICAgICAgIHZhciBwb3B1cCA9IGRv
Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cCIpOwotICAgICAgICBwb3B1cC5yZW1vdmVBdHRy
aWJ1dGUoJ2hpZGRlbicpOwotCi0gICAgICAgIC8vIE5PVEU6IFRoaXMgaXMgYSBoYWNreSB3YXkg
dG8gZm9yY2UgdGhlIGNvbnRhaW5lciB0byBsYXlvdXQgd2hpY2gKLSAgICAgICAgLy8gd2lsbCBh
bGxvdyB1cyB0byB0cmlnZ2VyIHRoZSB3ZWJraXQgdHJhbnNpdGlvbi4KLSAgICAgICAgLy8gU2Vl
IGNyYnVnLmNvbS8zMjQ2ODUKLSAgICAgICAgc29saWRfY29sb3Jfb3ZlcmxheS5zY3JvbGxUb3A7
Ci0gICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXkuY2xhc3NMaXN0LnJlbW92ZSgndHJhbnNwYXJl
bnQnKTsKLQotICAgICAgICAvLyBkdW1wIHRoZSBwaXhlbCBpbiB0aGUgbWlkZGxlIG9mIHRoZSB0
cmFuc2l0aW9uCi0gICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7Ci0gICAgICAgICAgICB3
aW5kb3cuaW50ZXJuYWxzLmZvcmNlQ29tcG9zaXRpbmdVcGRhdGUoZG9jdW1lbnQpOwotICAgICAg
ICAgICAgd2luZG93LmludGVybmFscy5wYXVzZUFuaW1hdGlvbnMoMC41KTsKLSAgICAgICAgfQot
ICAgICAgICB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCk7Ci0gICAgfQotCi0gICAgZnVuY3Rpb24gdHJp
Z2dlclBpeGVsUmVzdWx0cygpCi0gICAgewotICAgICAgICBwYXJlbnQucG9zdE1lc3NhZ2UoIlRy
aWdnZXJQaXhlbFJlc3VsdHMiLCAnKicpOwotICAgIH0KLQotICAgIHdpbmRvdy5hZGRFdmVudExp
c3RlbmVyKCdsb2FkJywgcnVuVGVzdCwgZmFsc2UpOwotPC9zY3JpcHQ+Ci08L2hlYWQ+Ci08Ym9k
eT4KLTxkaXYgaWQ9ImJhY2tncm91bmQiPgotICAgIDxkaXYgaWQ9InNvbGlkX2NvbG9yX292ZXJs
YXkiIGNsYXNzPSJvdmVybGF5IHRyYW5zcGFyZW50IiBoaWRkZW49dHJ1ZT4KLSAgICAgICAgPGRp
diBpZD0icG9wdXAiIGNsYXNzPSJwYWdlIiBoaWRkZW49dHJ1ZT48L2Rpdj4KLSAgICA8L2Rpdj4K
LTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1sCmluZGV4IDYw
MWNkNWE4N2YyMDQxMDYyZjFhOWQwOTgwMDljNTQ3ZjUyZjM0NWUuLmQ5MTRmY2JiZTgxZDQ3Y2Ri
YjFhZWViYWNiNzk1YTM3OTMxYTRhMWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9i
YWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYTgzN2UwNTdkYmMxMThjNzRhYmJiNjAz
ZWVjNTU2ZTdjODg3ZTVhOC4uYmE0MDBjYWM5ZWJmZTFjYTEwZTI5MGE3OThlOTlkNzJiMzQ4ODBi
YSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0
aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNp
dGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggODk3Y2I0Nzg5
MGVjZjQ4ZTFmZDAwNTg4ZDRiODhjOTE3MmIyNjEwMy4uYTViZmEyN2QzYWQzMjE5OTIwODkyMTYx
NTMwYjVkNzNlMTlkNTY5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxl
bmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxl
bmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10
cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRy
YW5zaXRpb24uaHRtbAppbmRleCBiOGEzZmI1M2U3YmQ2YmIwNmQxOTlkOTU1ZTQwM2M5MTM3MDdk
NTg5Li41NjNiYTljOGZmNGY4YWMyZGIzZDUxNGFiMWIzNjE2MjRjY2UzMzBjIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGZmMjNmYTA0
NTEyM2VkMzEwNTdlODI3ZDcxYWFkYzk4OGQyMTJkNzguLmMxZmFhNWNmNDIxMjE4MDM1YjQxMGUy
YWVjMmJkNjIzYjc0MGE3NmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Ns
aXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlw
LXBhdGgtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0
aC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGI1NWVkZmI3ZWE4NDU1NWQ4YWM0NGJjYWZmY2E4NDBj
NzU3OGVmNTYuLjVlNjY0NGE4ODRmY2NkNjA3YmI3NjBiMTk4ZDk5MGY3MWUyOWFmZGIgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0bWwKaW5kZXggM2M3ZTI5ZjE5NzAxMmRmZGVhNDMw
NDNjYzA0MmE3MjFkZTA4MTNlMS4uZmRlMWYxNzNhYmM5NmI5MWFhNDZiZWY5N2E4ZjkwOWVjZjdk
MDFiOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9u
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbCBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKaW5kZXggMzNjNTk4MGU2ODdh
YjNlMDJlN2UzZjI1Nzc2Yzg3M2ZkNWRlOGFiOS4uYTQ5MmU3MTMzOTQ0MDBjMjZkMzQ3ZTg4YWUx
ZDEzYzMxN2UzZGM3ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3It
dHJhbnNpdGlvbi1hbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10
cmFuc2l0aW9uLWFsbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRp
cGxpZWQuaHRtbAppbmRleCBjNzNmZDRhYTgzY2ZhZDk1YjUwYjZlNjM1OTFlOWFlNjc5ODk1NmRk
Li41N2M2M2VjOWE4YzFhZTA3ZGFkOGMzNzg1ZGYzYjgxNDRiOTI4ZjIwIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxpZWQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRp
cGxpZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0
bWwKaW5kZXggNmU3NTZiZjMzNzgzZmQ3MjFmMzNhNjdjOGZiZDZmMjhmMTU1ZTViMC4uY2FhYTEx
NTc5ZjliMGRmODZlMDgxOTRjMGQ5MGYxZGRmOGI1MDMxNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKaW5kZXggNzZlOWRiMjZhM2IxNGQ0
YTM4YTNjZGFmMDBlZjY2YmZmOGVkZGI2NC4uYjhkNzBhMjc5MzUxNTViZWFiMjhlNzg1Y2FlZjhm
MjUzOGRjOTU2YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFk
ZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jv
c3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1p
bWFnZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1h
Z2UuaHRtbAppbmRleCA0ZGJkZjdhNmIxM2Y4YWVlMDNhNzc4OWIzNjhjMTA4ZTNkMWE0ZGRmLi44
N2RjMDA3ZWRmNWZiNzZmZjE0NTFjYTlhZmY4Y2I5Y2FhYTQxODk1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCmluZGV4IGI3NmViNjVhZWQzM2M4
NDZjNGRjZWM0NWI5N2Q1NDFhMDM4Y2U3YmEuLjc0NzRmNjZkMTE2YzZmMmEyM2EyYWY2MzNhNTA0
NGUyOGMyYjc2NzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJl
emllci1vdmVyZmxvdy1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBl
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1s
PgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBDb2xv
cnM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6
aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCmluZGV4IDY2ZmViYWNmZjk3ZTQyYTY3M2IxZGE1
OWFhYzBmNjM3MWY5ZWM1YWQuLjFiNWRkYWZkZjY0OGQ5ZjEwZjBlYzhmMjBkOTQ5YmEzNjE2ZmU4
NGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVy
Zmxvdy1sZW5ndGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXpp
ZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxo
ZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IExlbmd0aHM8L3Rp
dGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92
ZXJmbG93LXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVy
LW92ZXJmbG93LXNoYWRvdy5odG1sCmluZGV4IGE5OWE0ZGJhNzM2YWZiMmY5NTgwNWFlODg4NWUw
MmJlMGMwYTczZjguLjBiY2NhODhlODcxN2RhZGY1OWUzY2ViZDA2OTE5Y2VhYzRhMmE3NmUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1z
aGFkb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3Zl
cmZsb3ctc2hhZG93Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgog
ICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFNoYWRvd3M8L3RpdGxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93
LXN2Zy1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1v
dmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKaW5kZXggNzIwMjQ2ODFiM2MzYTdjZGQxOWEyOGY0YzI4
MzhlNjA0YWQ1YjdjYi4uMzU1NTMwMzlmYzlkYThkYjZlZWEzMjk1NmQ5MWFjMWU2NDJjYTFkMyAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93
LXN2Zy1sZW5ndGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXpp
ZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgog
ICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBTVkcgTGVu
Z3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1i
ZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKaW5kZXggNjYwOTcyNTM0ZGM2NjJi
YzNiODBmZjc2NDkzNmZmYjRhZGE1ZjI2OC4uNjUyOTExMmIxMWQ2NGYxZWM0MGFiYWM1NzVhNjg2
ODE1NDA1ZDU3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6
aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
ZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+
CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxv
dzogVHJhbnNmb3JtczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
ZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA3OTgzZmRjZWQyMjYzNzBlMWEzNDQ5
MDEzZTBjOTg1ZTBkNmUyODZjLi4zNTA4N2MzNjRhM2YxYzk4ZTQ0MGQ5YTc5OWUwYmRkMGNiZjAw
MGFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1m
dW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5n
LWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbCBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKaW5kZXggOTljMzFlYTg3ZGEwOTFkNWQ2N2RhNTlmMTFi
M2YyNjkzYTBmZjRjMC4uM2EwMmI2Mjc5ODEwNWEzNmQ2MGVlYTE4MjFhZjcwMzgwZWNjZWEyZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbAppbmRleCA5ZmM0NjYwMzdh
NTM5NTJmZGI5MDBkYzBlOTYzZjQzNTJlOTE2OTQ1Li42MWY0NTZhY2U5MTczMGU3YjI0Y2ZmNmM1
NDE4ZjcyMDVkNzUzY2Q3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4
LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFu
c2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10cmFuc2l0aW9u
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNp
dGlvbi5odG1sCmluZGV4IGNkY2QyMGYxNTc0OTM3ZDlhYmNiNzY2ZjJlOTIwN2RjNzhmZGNjNzgu
LjAzZjk1MmRhMWI3MzNlODQ5NjkxNGM1YTE3NjlhODAxN2JjNmM4ZmYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVyaW5nLXRyYW5zaXRp
b24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXgg
MzBmZWNjNmQ1MWQ0YzA2ZTY0ZWM3YWVmMDAwOTg1MDQ2YmI1ZjA4YS4uZThiMTYyMTBlYTc2NTdl
NDcwYjBkYTI4MTQwMzlmODU1MjJhNDMwOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9pbnRl
cnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvaW50
ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbAppbmRleCA3ZDQ3M2U5MTIxNDY1ODNmODExMDkz
ZGUyOTdiZTNhYWY1MzhiYjQ4Li45ZTY2Y2Q0ZjkyNjE0ZTFlNTA3ZjJjZmE2NDIzZjdkMmU2MTAw
OWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwt
dHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ludGVycnVwdGVk
LWFsbC10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRo
YW5kLWluaXRpYWwuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNo
b3J0aGFuZC1pbml0aWFsLmh0bWwKaW5kZXggNjA5OTMzZjYwNGE3MTUyOGNlZjQzMWE3YmE0OTU4
YmE3MmU0Nzk1Zi4uMjAyZTY0ZDY0NGRmNWM4ZDVmNWU0Zjk5MTg3YjQ3N2EzYThmYmQxZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWlu
aXRpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9sb25naGFuZC12cy1zaG9y
dGhhbmQtaW5pdGlhbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCmluZGV4IGJjN2M3MTgzZWFm
M2Y5ZDliNGMwNjg3ZGJiOTc2NGQzYTk3MmY1MDguLjBjM2QzOWFiOWYyMWFkMWZiMDk3ODYyZjAz
ZWQxMmVlNWZjYTE2YjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2st
dHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5z
aXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlv
bnMuaHRtbAppbmRleCAxMjA0MTE3YmNjMzIwYzEyYTgxZWUyYmVlZTIyOGU0MTFmOTliOWM3Li45
ZGRmMzkzOGEyOWJmM2UxMGM4YzhiNmI3NDZlMzFiMDNkNzQyNjBiIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRyYW5z
aXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1s
CmluZGV4IGUyZTVjYjA3MjlkODEzZDk4NDYwYjg5ODRhNDEyMGI0ZmI5ZWRlMjcuLjg3MjNjMjc0
MTY4OGJlZDQ5MDNjNzhjODI5Njg0YjQ1ZDRjYzc2MDEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCmluZGV4IGNiNmQz
NGQ4NDc1YmZhNjExMzZiMzYzMzhiYmM3ODdlMGU4ZWM1MDguLjY4N2QxMGYxMjA4YTgzNWNkMjVm
ZTkwMDlkNDUzN2Q0YTA4YzY3MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAog
PGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVk
LXR5cGUuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbAppbmRl
eCAyNGZiMTFmZWY0ZTE4NzJmMTQyYjBmNTcyZGY1NTFjMDczOTNiMWJkLi4zMzMyMzY4ZDZlNDQ4
NTIwZmI4MTY4MzdkNDlmN2M5NzhlNDQ4OWZhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9taXhlZC10eXBlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWl4
ZWQtdHlwZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxzdHlsZT4KICNib3ggewogICAgIHdp
ZHRoOiAxMCU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVy
LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJh
bnNpdGlvbi5odG1sCmluZGV4IGNlZDJkNWEyMjIyODA3MDE3ZTUzNjlhZDAxZTEzZGI2MTVmM2U3
MmYuLmRjNDQ1OGYyZDUyNzY3NmM4Y2Q3MzJlMGUyYmVjOTYwZWQ4YjNiNmYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRp
b25zLmh0bWwKaW5kZXggMjEzZTIxYWRjZWQ2NmE3YWFkNjdlYzhiNWY5NTY4YzdmN2JlZmYyNC4u
MTRkNzUxYzY0OTczM2MxYzMwYTA3YmRjNGZmYjhlZTM2MWM1MjAyOSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRpb25z
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1z
aXplLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5zaXRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRy
YW5zaXRpb25zLmh0bWwKaW5kZXggYjI5ZWU3M2QzNTBkOTViMzdiNzIxNzE4NmVhYTliYzI5MzE4
MDZjNS4uNTAzMDY3YzE2NGNhNjA3OTU3YWQ1OGYzNjZkZmZkYTI3NGU3NTg1NyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9u
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQt
dHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbCBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbApp
bmRleCAzOTIzZDkzYzZkODQ1MzRlNWY3ZDc4ZWI5ZjNlMzZhZGE0ZmQzMDJjLi41Y2JlNjlmYzA0
NzU3MmVhYmU2MGEwNDg3ZjE1MzY1YTRjYTlhOTE5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVs
dGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9t
dWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAppbmRleCAzNGEwYWQyNjNjYTlmMTU4ZDc0
OTkwNWE0YzVkZmM2NTUxZTkzZWI2Li40YTlkNGVjNTY0ZjMzYzU1NDczMzE3ZTExOGY0ZjkwN2Vj
ZTc1MDg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFk
b3ctdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBs
ZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sCmluZGV4IGM3NWJlN2Yz
Y2M2ZDU5M2NmZDEwNjJhNzc1NjU3NmI1YmFhNmE2YjYuLmQzM2U0YjU3NjBmNTUzYzdjY2Q3MGI3
ZDRjN2Q4MzY2NTUzZDFmNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25l
Z2F0aXZlLWRlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUt
ZGVsYXkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24t
emluZGV4Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24t
emluZGV4Lmh0bWwKaW5kZXggZDg2MzcwNTllZjcwZmU3YTIyZWIwY2QyMDk1NmU3YWJkZDg3NzE4
ZS4uODYyYmEwMmIxNWY2MmViMzQyODdmYTU4ZjQ0Y2I1ZWI0N2Y5YzliNiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sCisr
KyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanMg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBl
cnMuanMKaW5kZXggN2U3OWQwYzllMWI0OWE4ZTc4MTY5M2U4NGJmZjQwOTE4MzI1YmZjNi4uZjM1
NzMxYjY1ZmE0Yzc1MmZkMTI2MDJkNzAxZmMwOWI4NjBkMDdlYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCisr
KyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVs
cGVycy5qcwpAQCAtMzgxLDE0ICszODEsOSBAQCBjb25zdCBwcm9wZXJ0aWVzUmVxdWlyaW5nUHJl
Zml4ID0gWyItd2Via2l0LXRleHQtc3Ryb2tlLWNvbG9yIiwgIi13ZWJraXQtdGV4dC1maQogCiBm
dW5jdGlvbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQodHJhbnNpdGlvblByb3BlcnR5
LCB0aW1lLCBlbGVtZW50KQogewotICAgIC8vIElmIHdlIGhhdmVuJ3Qgb3B0ZWQgaW50byBDU1Mg
QW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIGFzIFdlYiBBbmltYXRpb25zLCB1c2UgdGhl
IGludGVybmFsIEFQSS4KLSAgICBpZiAoJ2ludGVybmFscycgaW4gd2luZG93ICYmICFpbnRlcm5h
bHMuc2V0dGluZ3Mud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm4gaW50ZXJuYWxzLnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudCh0cmFuc2l0
aW9uUHJvcGVydHksIHRpbWUsIGVsZW1lbnQpOwotCiAgICAgaWYgKHRyYW5zaXRpb25Qcm9wZXJ0
eS5zdGFydHNXaXRoKHByZWZpeCkgJiYgIXByb3BlcnRpZXNSZXF1aXJpbmdQcmVmaXguaW5jbHVk
ZXModHJhbnNpdGlvblByb3BlcnR5KSkKICAgICAgICAgdHJhbnNpdGlvblByb3BlcnR5ID0gdHJh
bnNpdGlvblByb3BlcnR5LnN1YnN0cihwcmVmaXgubGVuZ3RoKTsKIAotICAgIC8vIE90aGVyd2lz
ZSwgdXNlIHRoZSBXZWIgQW5pbWF0aW9ucyBBUEkuCiAgICAgY29uc3QgYW5pbWF0aW9ucyA9IGVs
ZW1lbnQuZ2V0QW5pbWF0aW9ucygpOwogICAgIGZvciAobGV0IGFuaW1hdGlvbiBvZiBhbmltYXRp
b25zKSB7CiAgICAgICAgIGlmIChhbmltYXRpb24gaW5zdGFuY2VvZiBDU1NUcmFuc2l0aW9uICYm
IGFuaW1hdGlvbi50cmFuc2l0aW9uUHJvcGVydHkgPT0gdHJhbnNpdGlvblByb3BlcnR5KSB7CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRp
b25zLmh0bWwKaW5kZXggNzA4ODFmZTkwMjFjODk1MDExMDUzZjQyZjFjYmJhYWM0MzI4NjI0ZC4u
YWVmYzlhMDUzOGZlYjA0ZjgzYWUxNWU0OGIyNTIzOTlkZDgxNjVmMSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWwKaW5k
ZXggMzVjOWUzMjkxZmFhMTI2MjIyZDQ0MTBlMmEyZmUzZTc0NDllN2Y5Yy4uZmFhNzQ1YzFiMWU3
ZTFhMzkxZDYyNGNlYjFmNTE1NGMzZDAwODcyOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGQzMjJiNGUxZjQxYzU1ZTA0
ZDMwOTkzN2ZkZGNiYjExNjVmOTk3Y2MuLmI1NTFhMmNiYzc2NGJjZTJlY2ZkYjU3MTYyYjRhMTdh
MjRkMzE2ZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10
cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10
cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwK
aW5kZXggM2VlNTVlMDBhNGNjYzI3ZGE0Nzc5NTU3Y2EzZjk2ZmU3MGVjYmZlZi4uYmI5NjJiY2I5
NzA0MzIyOTYyOWI4NGE5MmU0YTBjZTA1ODAxNTQxZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1s
PgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmct
bGF5b3V0LXRyYW5zaXRpb24uaHRtbAppbmRleCAxNDVkODNhMDJiMDIyYzYxZTZmYTg4ZDk0Njcw
M2ZiYWE0YWExOTUxLi4wMDU4YWI1ZDE0MTZkYTRiN2NkZWJiZDJkMTRlYWQyODYwZjdiY2JlIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24u
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24u
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sCmluZGV4IDNmY2Fk
Mzg4MDZjYTYwMDdiYTc4ZjVmMGI0MjAyODAxNTQyM2E2NWYuLjU3OTdlNWVkZTNkZWFkZDcyZDNj
M2FhMzUxNTZhMTJhMTA0YzdhYWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiA8aHRtbD4KIDxoZWFkPgogICAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c3ZnLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggOGYzZDgyZjRlNzVkMzRkNWFiNmZiMzg3YjQzZWQ4
YjM1YjhlYzRjMS4uYWEzOTg4MDc4ZmM5ZWRjYTZlMjBlMjI1OGYxM2VjOWUxOWU5ZGU3NyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAg
PHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQt
dHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQtdHJh
bnNpdGlvbi5odG1sCmluZGV4IDQ3NDRiNTg1Y2VlZmI4MTQ1ZWIyZTQ5Yzc5NjAxYTYxOTMxZGQx
ZTEuLjE2ZjhhZjE4ODJhNWE3NmNhZDNjZjczNTQ0YWY1OTNhOWYyMDA3MWMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmlt
ZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURP
Q1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbAppbmRleCAwZjljNDg3MzRk
ZGZlZGNmNmZjZmZiN2UzOTc4OTA1OGFlYjgxNTQyLi4wZDNmMzNlZDE1Mjc5MzQwMzE1OWMzMjI2
MGQyYjJmZDgwMmQ2MzVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRt
bD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4K
IDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9w
LWxpc3Qtbm8tbWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW5vLW1hdGNoLmh0bWwKaW5kZXggODZkZWE3ZTBmYTVlYmQzNTY3YmMyMTQwOGMwNzdm
MmE0NzI4MmEyNy4uYmY2ZDMwZGQzZGE2YTI4Yzc4MTU4MGQ2NDFmN2JkMmMyZWMwYTk5ZSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0
Y2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1u
by1tYXRjaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRl
cmluZy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQt
cmVuZGVyaW5nLmh0bWwKaW5kZXggMDA3Y2U4ZGQwNTg1MzU2NzI3ZGU5MTY1MTVmYmIzY2M0Mjdi
MTdiZC4uOTU5YWZkNjBkMDliMDExYmNlM2FlMTA2ZDY3OWNhOWI2ZDBjM2E5ZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5n
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQt
cmVuZGVyaW5nLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFu
c2Zvcm0uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3Qt
dHJhbnNmb3JtLmh0bWwKaW5kZXggM2QzMjlmNDYwMjE5NmFhMWY0OTM0MDA4ODJjODg4MGNmNDU4
MjM3Yy4uZWY4MDZjNzExYTFlMTVhYmRkMzc5NmM1YTU4NzFiNjkxMmRjN2QzOCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0u
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0LXRy
YW5zZm9ybS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbCBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbAppbmRleCBk
OWRmODVjMTQ0N2YwOWFkZTUyYWFhNDJiMDFmMjIzOGNiY2JlM2M3Li44M2E2MGE2ZTJlNTUzZjM3
YTdmNTllNjcyMWI5ODViZWQ3M2EwMTY1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
aW4tZGVsYXktcGhhc2UuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
aW4tZGVsYXktcGhhc2UuaHRtbAppbmRleCA5M2UwNGYyYTMyOGZmMmNkYTE2NTZhNDM0OTEwNGYy
MTQyMTAzYWIwLi5mYzJjZTk5NTEwYWRlNzJkNmNlODE1NjkxNzQ1Yjk5MDA4MGE2ODJjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNl
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1w
aGFzZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisK
IDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRtbApp
bmRleCAxZjAzZWVhNzc0OTZmN2I3M2ZhZWE3ZjJjMGNjN2Q2N2Q4NGEyYmFiLi4zYzQ3Mjk0OTE2
N2Q2ODMyMmEyNzM3MWVhMDcxZjI3NjExZjY1MzY5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29udGVu
dC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwKaW5kZXggNjg3
MzIyOWQxNGQ3OTQ2M2NlMGY0NGRmNDQ5MGFiNDk4N2RjYmMzYy4uZGYwOTg5ZDlmNjRmYTdkZTRl
NGViMzUwODNhZThkNDQ5YmVmNDZmNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDkxMTc0OTJiMGJiM2ExMmI4
MTAzN2VkMjI5ZmM1OWUwYjZlY2ZkOTkuLjA1MGM1MmQzMTcxYzg2Mjk2ZmMyNzY1NWNiMTM0M2E1
NDRmMTliZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
dGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbAppbmRleCA0
ZTM3ZTE2N2Y0MWYxMjNiZWRlZGIwMjgwZTIxYjAwYzkxNmIwOGVmLi5kODQ1OWI3MWQ0YzgzYTlj
M2Q3ZTM2OTE1MzZmNThiYTY5MDk0YmE0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCmluZGV4IDE0ZTc4YzUwMTYxZGU4MjQy
NmRhYzJmNzlmNDY0NjhmMDQyNGVjZTAuLjYyOGNmMjY4NTJlYWE4ZjkzNTY2MjRkOTExOWM2ZTg3
OGViYWY3ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
dG8tZnJvbS11bmRlZmluZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1s
aW5rLWNvbG9yLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29s
b3IuaHRtbAppbmRleCAyZWE0NDZjNmIyZjk1YWEyY2YzZGVkMzY2NzYxZTQwNjU4MzYyYzJlLi5i
MTg3OGQzMTkwNTIxNzY4ZTYzYmE1ZTVhZDdjNmQ1MzJkZWU3M2UxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRt
bAppbmRleCBlNjZhZGYzYjE5MGM5ZTBkODVlYTc4MDJjMWQ5NzFkMzhhMWNmZTJkLi5iMmJjYmY1
MjU5N2RkYjNkNmVkZmU4OTBjZGQ2MDU2ZjUwZTJkN2RiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0
bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5o
dG1sCmluZGV4IDY2NjFmOTFhNDA5YTkxYWJkM2I5YzA1ZTE0YmE0NzQ0MTA1MzI0NTAuLjYwOGUw
MDNmNWMwZGU3ZjYzMDM1OGE2YjA0NzNhNDM1OTU0NWMyMjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24t
emVyby1kZWxheS1zdGFydC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5p
bWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUu
aHRtbAppbmRleCA5YzdhMTNiNDViNjQ1M2E4NDVkNThlMjA1YzliNGUzZWM4NTQ2NTRjLi5kMTE1
Yzk1MTE4NDdjYzViMWE4ZjY4ODQ5OTM1N2U2ZWIwYTIwMGJjIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlz
cGxheS1ub25lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRl
ZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlv
bi1jb21wbGV0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVk
LWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwKaW5kZXgg
YjM3NjY4MTdjZjQwZTNkOWRhZTY1ZTQzOWNhMmRmZjNjNjllNWJiNi4uYTFjODQ4YTNhMTU2YTBh
MDRjMDBkYjNkOTI3NjRiNGQwNzliNjEyMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29t
cGxldGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQt
YW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVu
c2lvbi5odG1sCmluZGV4IDA2NTRhNjk1ZjViMjRiYzQyZmNhN2YxZDIzODFkYTBmNzJhYjY4OGMu
LmVmYWE1NDM5ZDRmYjc0MGFiNWM3NDMxMGQxNDc2ODg4M2MzNjhmZWYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24u
aHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlv
bi1zdXNwZW5zaW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQt
dHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwK
aW5kZXggYmVmMDgwOGU5NDdjOTZhMDU0YzMxOGI5MWQ1OWE1MjQwMjFlM2IyNy4uZjM0MDFiNmNl
NjYwZmI2MjA3ZDhiOTFmM2M1MjZlYmY2YzZjMDdkNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0
aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGJvZHk+
CiA8c3R5bGU+CiAgICAgZGl2IHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVm
ZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10
aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWwKaW5kZXggYjYwNWMw
ODkxMWJhNjkzMWIwY2YzODM1Yjc5Y2NiMGM0ZmY1MzY3NC4uOWRkNTYxOGJiNjc1MDFlZjkwOWY2
MzcyZDFmMTE5MWY1YWVjOTI2NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZm
ZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVu
dC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBhY2Nlc3Npbmcg
YSBDU1NBbmltYXRpb24ncyBjdXJyZW50IHRpbWUgYWZ0ZXIgc2V0dGluZyBpdHMgZWZmZWN0IHRv
IG51bGw8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24t
dGFyZ2V0LXJlbW92YWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5n
LWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFs
Lmh0bWwKaW5kZXggNThmNmM0OWI5YzhjMDgyZGY4Y2U5MTZkOGM2MTY4YTBkODk4Y2UzZi4uNDMw
NmExOWViYmQzY2NmOGRlOTkxYjVjNTgzMmI0YjEzZjdkMGExYiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVk
LWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1h
dGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJz
ZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggYWNjZXNzaW5nIGEgQ1NTQW5pbWF0aW9uJ3MgY3VycmVu
dCB0aW1lIGFmdGVyIHJlbW92YWwgb2YgaXRzIHRhcmdldDwvdGl0bGU+CiA8c3R5bGU+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRh
cmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFu
aW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKaW5kZXggZDk4MGQzNTYyOGU0YWEzOWExODM0MDM1
ZDU3ZTQ3YWYwY2QxY2JiNy4uNjZmYmE1NTJmODVkZDNjMjgxN2Q3MjExOTgzNzU2MzJiOGQ2OTky
ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVm
ZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sCisrKyBi
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNo
YW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiA8Ym9keT4KIDxzdHlsZT4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNy
YXNoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0
LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRtbAppbmRleCA1NjA4NzIx
M2E0NWVkZDQ3NmEwOGVkOTM5Y2MxNmIwOGY1MTRjYzdiLi45ZTU1M2JkZmJhNGJmNmU1ZjExMTNl
ODE4OWZjMmEwMTM3NzQxODc2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jh
c2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZm
ZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9jc3MtYW5pbWF0aW9ucy5odG1sCmluZGV4IDgzZmU5NWNhN2RmMTY2M2FkNTkwOGFiZTA0YTM2
YmY1NzFhNTUxYWUuLmU1Zjk1MjAwMGM2YTRlZWU1ZWZkYjIxYWE2ZTdlNDc3ZDU5YmJhMGMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DU1MgQW5pbWF0aW9u
czwvdGl0bGU+CiA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQt
cmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3Nz
LXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwKaW5kZXggMzA3
ODNhOGJmZjBiYjAxYTRlZmI0MDU4YmFkYzcwOTE4YTJlOTcwZi4uMDRkYmFhNTNjYTFkMjM2ZmQ5
ODBiY2NkNzFjYThiOWEzYWY5Mjg3NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1y
ZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJz
ZXQ9InV0Zi04Ij4KIDx0aXRsZT5SZXZlcnNhbCBvZiBhY2NlbGVyYXRlZCBpbi1mbGlnaHQgQ1NT
IFRyYW5zaXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVl
biI+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1l
cy1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMt
Y3Jhc2guaHRtbAppbmRleCA2MGFjMzY1ZjMwNTY1NDNhM2YxODY1NGI5ZjdjMmYzZTEyNDdjNTYy
Li4wZjVmZmIzZjI3MDg2N2IzYTYzZWUwMzFhMzI1YmJhYmFhNDE3N2QzIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sCisrKyBi
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnkt
cmVtb3ZpbmctcHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5
LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAppbmRleCA0
ZGJmNzA2ZTQxNzRmMjlhYjE5NWI4ZTJmZjU2MmE5ZDA5MzdhZjdhLi5mYTNjODU1ZGJjYjI2ZThk
OTk3YzEyNTI0Mjg4MzJjOTExMTg3YzhmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmlt
YXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQt
dHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IDxib2R5PgogPHByZSBpZD0icmVzdWx0cyI+PC9wcmU+CiA8ZGl2IGlkPSJ0YXJnZXQiIHN0eWxl
PSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lkdGg6IDEwMHB4OyBoZWln
aHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsiPjwvZGl2PgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRl
ci1jbGVhcmluZy1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGlu
Zy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKaW5kZXggYmQy
NDA2OGJjYzQ1ZGMzODI5MDg4OWZkN2MzYTM0NjRjZjIwMTdlYi4uZjgwYjA0N2YyNjU2ZmU1OTE4
ODE1YjAzMmM4NzU1NDg2ZTA3YmZiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi1u
b25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRh
IGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENTUyBBbmltYXRpb24gdG8g
Im5vbmUiIGFmdGVyIHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90aXRsZT4KIDxzdHlsZT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0
aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmct
cHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCmluZGV4IDRiMTUw
NGFiY2FkM2U3ZGIwNDEzY2RkYmYzMzM2MWVhNDk0NTRhZjEuLjkzMmJjOTFhNzZlYTE1NWY5YWI4
NmQ4YzkwNGQ4ZmViNTM1Yzc3NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXIt
Y2xlYXJpbmctZWZmZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0
aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmlu
Zy1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04Pgog
PHRpdGxlPkNyYXNoIHNldHRpbmcgYSBDU1NBbmltYXRpb24ncyBwcm9wZXJ0eSB2aWEgc3R5bGUg
YWZ0ZXIgc2V0dGluZyBpdHMgZWZmZWN0IHRvIG51bGw8L3RpdGxlPgogPHN0eWxlPgo=
</data>
<flag name="commit-queue"
          id="424452"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408921</attachid>
            <date>2020-09-16 07:35:30 -0700</date>
            <delta_ts>2020-09-16 10:10:07 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916163528.patch</filename>
            <type>text/plain</type>
            <size>552744</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGZiODMxYjM1OTc3MTBiZmY4YWFkOGY4ZDI5ZTA5
ZDRkYTRiYzNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzLCBzb21lIFJlbmRl
ckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25z
IGFuZCBhCisgICAgICAgIG1lY2hhbmlzbSB0byBub3RpZnkgd2hlbiBhbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkbyBub3QgdXNl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsOgorICAgICAg
ICAqIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9u
UGxheWJhY2tFdmVudEluaXQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcik6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oLgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NUcmFu
c2l0aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGw6CisgICAgICAgICogYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0
aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzdW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBk
b20vUHNldWRvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50Ojpj
bGVhckhvc3RFbGVtZW50KToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJB
bmltYXRpb25TdGFydGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFUaW1lVG9DdXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFuaW1hdGlv
bkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbGVtZW50OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
UGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJl
bmRlcmVycyk6CisgICAgICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgICog
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRy
ZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0
aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAy
MC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl1bMS4xOF0gUmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmQ4OGQwOWM2MGQy
NjllYjhlYjkxZjgxMmMyMTJlNzc5OGNjMTM1OC4uZjIxNmYyOTRmODMxYmQxZDBlYTAwOWJjYWYz
ODFlZmI2NmZlNmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwg
dGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25z
IGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92
ZWQuCisKKyAgICAgICAgV2UgYWxzbyByZW1vdmUgdGhlIG1lY2hhbmlzbSB0byBub3RpZnkgd2hl
biBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9u
IGVuZ2luZSBkbyBub3QgdXNlLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAg
ICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
ZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1ByZWZlcmVu
Y2VzIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVI
b3N0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25E
aWRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpvdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0
YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAobWVkaWFUaW1lVG9DdXJy
ZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0
aW9uRGlkU3RhcnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KTog
RGVsZXRlZC4KKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlM
RUQgaW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3
NDYxM2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24g
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2lu
Y2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxh
Z3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAg
ICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVd
KToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgor
CiAyMDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQ
SQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcy
ZGQ0NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0w
OS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9u
IGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBB
bmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUg
bm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAq
IFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXpl
RGVmYXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBz
ZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAyMGY4YzQxMmFhMjMzNzU1NWIzN2Q1OTQxZTE4YjJlYWRmZDM3YmVmLi41OWY3
OTJhOTQ4N2ZhOThiODE2NTliYTEyMWEyMjBjYzJjMTA0OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vbWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVfRElS
fS9wYWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1NWExOGQzMjA0OGU3NmU2NTFlMDA2MDVmODBiMDVh
MzI3YTExZWUuLmNiNGE5ZGU5Mjc3YWZlOWI3NDRlY2ZlNTQzZDA1Y2RhYTU5YWE1MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtODg5LDkgKzg4OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAgcGFn
ZS9XaW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgK
LSAgICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQyZmEyMTQ2Y2ZiYTlk
OC4uMzg4MjdjNDNjMWM1MWVlMjhlODY5N2Y5Y2RkN2IxZmJhNjhmYmVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNwcAog
YW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmltYXRp
b24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5j
cHAKQEAgLTE2NzUsMTIgKzE2NzYsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5jcHAK
IHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRv
ci5jcHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1wYWdl
L2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAot
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuY3Bw
CiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjY1NTk4
ZjYzNTA0ZDgzNWQ0ZGRhNzNlMjY3ZTYyMjlkMDcxMzNkMi4uMjhlOWYyOTFiZjMwOTlkNmMyNTNi
ZmVmZWJmMGVkMmRmMTliM2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4MjJF
M0M0N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBGcmFt
ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUw
RjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmls
dGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURB
ODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87
IH07CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdFQzdD
NTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9s
bEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsg
fTsKIAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgxODAw
RDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05MTYsMTEgKzkxNSw2IEBACiAJCTMxNkRFNzAyMUU4M0FFMUQw
MDg0QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0
YUNoYW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyogSlND
U1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oICov
OyB9OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3MDBF
NkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZFMTEy
MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEw
QTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFEQTcw
MEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3Np
dGVBbmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxp
Y2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLzsg
fTsKLQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBFNkUx
REE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQxNjYz
NjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8q
IFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVyRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxN0Qz
RkYyMjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JGODkg
LyogSW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIxNTIs
NyBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0
MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1
QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIz
OEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1
MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJG
RjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIz
RUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZH
UHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThB
M0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2IEBA
CiAJCTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAxQjFF
RDcyMkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3N0Q1
MTAyNTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1NTAw
REE0Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQxMkY5
REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAwQzc3
QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJDNjE1
NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAyMTI2
NkUgLyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3NpdGlv
bkV2ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUYyRjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3
QTA5Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JEQiAv
KiBGaWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZp
bHRlcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBs
YXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VDN0M1
MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2VkQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIx
NSwxNiArNzIwOCw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZy
YW1lc1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlmcmFt
ZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NEN0Yw
MEJGNjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENT
U0tleWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDky
MEU2Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRp
b25CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4
IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZFMURB
NzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYw
ODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZy
YW1lQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtl
eWZyYW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUx
MTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2ludGVy
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk4ODMsNiArOTg2Niw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAyQjM4
OEYwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9u
RWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3
MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhU
b3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQ
b2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJB
MDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTk5MSw4ICs5OTc2LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2aWdh
dG9yQ3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZp
Z2F0b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VGNjJG
MTEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURCNzQw
MEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4
RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21w
b3NpdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q29tcG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5
MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0aW9u
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTIsMjYgKzE4Njk1
LDYgQEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKLQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2
MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4IC8q
IENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4
OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUxREE3
MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5MEYz
QUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAotCQkJ
CTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8s
Ci0JCQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
Ki8sCi0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNw
cCAqLywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24u
aCAqLywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24u
Y3BwICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlv
bi5oICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0aW9u
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQzMSw3
ICsyMTM5NCw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUxRDg0
MDBCRjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3OCAv
KiBjb2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAogCQkJ
CTE4QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3NCw2ICsyMTgzNiw4
IEBACiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAgKi8s
CiAJCQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAogCQkJ
CTcxQzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJCTcx
RjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCisJ
CQkJNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8s
CiAJCQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQuaCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5j
cHAgKi8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaCAq
LywKQEAgLTMwMzE1LDcgKzMwMjc5LDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAg
LyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIx
OUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25F
ZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4
IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjk4LDcgKzMwNjYxLDYg
QEAKIAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9z
ZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNB
NkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAvKiBD
b21wb3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3MTEw
MEVCN0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApAQCAt
MzA4MzgsOCArMzA4MDAsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBDcnlw
dG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0MUYz
Q0NFNjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEw
MTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDkwOCw3ICszMDg2OCw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVE
OEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5
MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcxMzQx
RkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzIsNyArMzE2OTIsNiBAQAogCQkJCTU1
QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMzOEMw
MEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzg2
MzNFOTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVudGlm
aWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA5LDcgKzMyNjY4LDYgQEAKIAkJCQk1MTdBNjND
NjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0UgLyog
S2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNCNDFG
OUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcx
MjQ3RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0NjQ3
MTAwMDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1NjIy
ZWNhZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJs
ZS5pZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvd2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1bCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBBbmlt
YXRhYmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dFeGNl
cHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0
PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5p
bWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRB
bmltYXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJkZjFm
ZTJjNjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlhM2M1
MTIzMjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvbkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0
UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3RvbVRv
SlNPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2OTFi
NDg1MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVlMWUw
ZTgzMmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsK
LSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3cs
CiBdIGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNvbnN0
cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5p
dCBldmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBlODIx
ZGI0N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFiYjI2
MDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5
YmFja0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blBsYXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rpb25h
cnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFyeSBB
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBjdXJy
ZW50VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4IDA0
ZmE5NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIxNDNl
ZmM4NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9F
WFBPUlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGltZWxp
bmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAxZTVi
ODg0YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5NmY5
YmU5NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5p
bWF0aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJp
bmc7CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
biwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2ViQW5p
bWF0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9uTmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZmYTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlB
bmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlB
bmltYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JCbGVu
ZGluZy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUgIkZv
bnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUgIklk
ZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVu
ZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dy
ZXNzKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20p
ICogcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jl
c3MpOworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVu
Z3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgp
IHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgo
KSwgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZy
b20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJu
IHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5k
RnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKworc3Rh
dGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisg
ICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsK
KyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jl
c3MpOworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRv
d1N0eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93
RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNv
bnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgpICE9
IHRvLT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8p
OworCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRp
b24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+cmFk
aXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5zcHJl
YWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmltLCBm
cm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5pc1dl
YmtpdEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3Io
KSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rp
b25MaXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRp
b25zKGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50
ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRl
cmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNT
aGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQ
YXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpT
aGFwZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNo
YXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUo
KTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0
aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5jYW5C
bGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBlQ2xp
cFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3Mp
KTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVl
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAg
IHJldHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6
U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAgICAg
cmV0dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKKyAg
ICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZy
b20tPnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUo
KTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICByZXR1
cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7CisgICAg
QVNTRVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBi
bGVuZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMg
YmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0Owor
ICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXpl
X3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0
ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwg
ZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygp
W2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9w
ID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dy
ZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVz
cywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9w
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0ZXJP
cGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0
eUZpbHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElmIHdl
IGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rp
b24gYW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIHN3
aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAgICAg
IGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAg
YnJlYWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJv
cEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAg
IGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0g
YW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0c01h
dGNoKQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwg
dG8sIHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5j
dGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBk
b24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAgIC8v
IEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9IHRv
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRy
PFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NF
UlQoaW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0
ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGltYWdl
VmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRlclZh
bHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVu
dFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFs
dWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9w
ZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0
eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55IG5v
bi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUu
IE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52aXNp
YmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBW
aXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFs
dWVzLgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRvOwor
ICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRV
bmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9m
ZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgp
LCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJsaW5l
T2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29y
YXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25U
aGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFs
dWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERlY29y
YXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVu
Z3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKK3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0
by50b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0s
IGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxl
ZnQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5l
IFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJv
bSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlu
bGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3Qg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBzaXpl
X3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNp
emUoKTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBm
cm9tIDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzID09
IDEgPyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7Cisg
ICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIo
c3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xl
bmd0aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwg
dG9MZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9t
TGVuZ3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVz
dWx0KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5n
dGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21b
aSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdl
KiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVzcyBp
cyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hv
dyB0aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhh
bmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNzKQor
ICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEpCisg
ICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICByZXR1
cm4gdG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8gdG9J
bWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBjcm9z
c2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VW
YWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsK
KyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRl
VmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20s
IFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0
bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2Uo
KTsKKyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRv
KQorICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdv
IGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAgICBp
ZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRl
ZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Cisg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlzPENT
U0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRl
ZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KKyAg
ICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0Zp
bHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIu
ZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNz
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdl
bmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAg
ICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9z
c2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1
ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQp
OworICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3Nz
ZmFkZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jv
c3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAg
fSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNo
ZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2Vu
ZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUo
KTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7
CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAoZnJv
bUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0byku
Y2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJv
bUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3Mp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVu
IGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2Fj
aGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8
U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVy
YXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRkIGlu
dGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAgfQor
CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5k
IGdlbmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBp
czxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQo
YW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2Fj
aGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkg
fHwgIXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1FICg3
NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0
IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmltYWdl
U2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRv
LmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5m
aWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9u
dGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCisg
ICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAx
LjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAgICAg
IHJldHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5j
KGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9t
LmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91
dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOworfQor
CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFyaWF0
aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUoKSAh
PSB0by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAg
ICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBmcm9t
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVtID0g
dG8uYXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCisg
ICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0
IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0u
dmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFn
KCksIGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vu
ZGlmCisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwg
Rm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20p
LCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5l
IE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAg
IHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZs
b2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dy
ZXNzKSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJvcChw
cm9wKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwg
ZG91YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHko
KSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBD
U1NQcm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
UHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkK
KyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgIH0K
KworICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwg
IiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIg
PDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2
YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJlbmRl
clN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+
OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVm
UHRyPFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0
dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0
ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dy
ZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3Nl
dHRlcikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAgICB9
CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChh
LT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYm
KTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9w
ZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVy
YXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBz
YW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBp
cyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0aE9w
ZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBhdGhP
cGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChjbGlw
UGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0
aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5n
cz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJp
YXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNl
dHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25T
ZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAg
cmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAgfQor
fTsKKyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHBy
b3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBp
ZiAoc2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHls
ZUltYWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBy
ZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQorfTsK
KworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xv
ciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJT
dHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9w
YWNpdHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJB
Y2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDogUHJv
cGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0s
IGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQor
ICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVy
dHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9u
SXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gcHJv
cGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIp
CisgICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25z
Jj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgIH0K
K307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0gMDsg
c2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRh
KiBvdGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4g
ZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1h
bCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hT
aGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hh
ZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsK
KworICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAgICBp
ZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAgICBy
ZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2Vi
S2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOwor
CisgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRX
ZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOworfQor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0
YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cwor
ICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3Rz
CisgICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hh
ZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dM
aXN0TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVu
Z3RoKHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChm
cm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3QtPipt
X3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywg
c2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMo
YW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwg
ZmFsc2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBi
ZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVh
bSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IG5ld1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOworCisg
ICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0Ip
OworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxl
bmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0
U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93
UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93
KQorICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQo
V1RGTW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVu
ZGVkU2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0Et
Pm5leHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5l
eHQoKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKKyAg
ICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hh
ZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVyc2Ug
dGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93
RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
ZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93c1tp
XSA9IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOworICAg
ICAgICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3Mo
dG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAgIHNo
YWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVuZ3Ro
ID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBm
cm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAgICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93
c1tpXSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNo
YWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9t
U2hhZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5k
ZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNz
KTsKKyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJl
c2VydmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZN
b3ZlKG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3Zl
KGJsZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0Rh
dGE7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNv
bnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9w
KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZh
bHVlKGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICByZXR1
cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAg
ICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8
PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENv
bG9yJik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRD
b2xvciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlx
dWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAg
LCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3As
IHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUlu
dmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCisg
ICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICB7
CisgICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyYXBw
ZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CisgICAg
fQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
UmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3dy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zpc2l0
ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBw
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1f
dmlzaXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1h
dGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAgICB9
CisgICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0g
ZGVmYXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19ESVNB
QkxFRAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Cisj
ZW5kaWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIg
OiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnBy
b3BlcnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisgICAg
ICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBGaWxs
TGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlciko
KSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChG
aWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdp
blNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKKyAg
ICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5H
ZXR0ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRl
cikKKyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRvTGVu
Z3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRl
cikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYm
IGZyb21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5
ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAgIExl
bmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVkZ2Ug
PSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdl
KSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisgICAg
ICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChm
cm9tTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsK
KyAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aCh0b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9t
RWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8g
dGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAo
ZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0
aCwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwg
IiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
KyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVu
Z3RoU2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVy
KSgpIGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsK
KyAgICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
RmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxM
YXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwg
Y29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAg
PDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUo
YSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNl
bmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0
dGVyKSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Cisg
ICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExh
eWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShi
KSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJz
KHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCit9
OworCitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0
ZXIpKCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVy
c0FjY2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3Nv
cikKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAg
ICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29y
KGFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5
V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHBy
b3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwg
JkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRY
T3JpZ2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxs
TGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdp
biwgRWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAg
ICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXll
clByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVM
ZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBtX2Zp
bGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpz
ZXRJbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byog
ZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5
ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxheWVy
ICYmIHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAg
ICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwor
ICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAgICAg
d2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmls
bExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOworICAg
ICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXllciA9
IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVy
c0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVy
KSgpOworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIp
KCk7CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAg
ICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwg
YUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+
bmV4dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAg
ICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXllcnNH
ZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3Nv
cjsKK307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJz
KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAg
ICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVy
IDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFs
cyhhLCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVy
cykKKyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3Mp
OworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRz
dCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChhdXRv
JiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+bG9n
QmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBW
ZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAgVmVj
dG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9
OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3co
KSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+
ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRG
dW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7CisgICAg
ICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBi
LT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9Cisj
ZW5kaWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwg
U1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29s
b3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09
IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBT
VkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBldmVy
eXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lz
ZQorICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2
ZXIuCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlw
ZTo6UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKwor
ICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7Cisg
ICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRvQ29s
b3IgPSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChiLT4q
bV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4K
KyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGlu
ZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1BhaW50
VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBDb2xv
ciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHls
ZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
Rm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9u
YWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHls
ZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZv
bnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50Owor
ICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAgICAg
ICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAgICAg
aWYgKGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8
IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKwor
ICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAgICAg
ICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8gYmxl
bmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250
SXRhbGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJ
dGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJv
Z3Jlc3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRz
dC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlv
biA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxp
YyhibGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4
aXMoYmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShj
dXJyZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5
YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJldHVy
biBtYXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAgIGlm
IChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1By
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQg
d3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAgICAg
aWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVy
c1t3cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAo
KTsKKyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisKKyAg
ICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlE
IC0gZmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworICAg
IHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4
ID0gVUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAvLyBi
dWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMg
YW5kIGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxl
OjpzZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKKyAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0
eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5k
ZXJTdHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
V2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWlu
V2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgp
LAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgs
ICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAorCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5k
ZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6
bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6
OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lk
dGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVm
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5U
b3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5C
b3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBh
ZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJT
dHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwK
KworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJv
cGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0
eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tn
cm91bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0
eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCisg
ICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1h
Z2UpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFu
dFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwg
JlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJ
bWFnZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAgICAg
IG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFn
ZVNvdXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1h
Z2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94
SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcgRmls
bExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3Jv
dW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxs
TGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5
ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRl
clN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorICAg
ICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVN
YXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5
bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwg
JlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAorICAg
ICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3Bl
cnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRD
b2x1bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBM
ZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0
eWxlOjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNo
b3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0
aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2
ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFj
aW5nKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4
LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZp
ZWRaSW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0
eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5z
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3Ms
ICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVPZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQs
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVj
dGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHls
ZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2lu
WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVj
dGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9y
bU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVu
ZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3Jp
Z2luWSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJh
bnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5
bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3Bl
cnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJU
b3BMZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxl
Ojpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJh
ZGl1cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNp
emU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRp
dXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXpl
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0
eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpYmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRS
ZXR1cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0
eWxlOjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRP
cGFjaXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9y
bSgpLAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9w
ZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVy
KSwKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2VuZGlm
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9y
RmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0
QXBwbGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRo
KENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQ
cm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVu
ZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBl
SW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCisK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3Bl
cnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRM
aW5rQ29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRB
ZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0
ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxs
Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdo
dENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJU
b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9y
ZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNv
bG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGlu
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKworICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAm
UmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJl
bmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAorCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5k
ZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNp
dHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQ
YWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRTdHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZS
ZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hB
cnJheSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ry
b2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5
bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRD
eCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJl
bmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHls
ZTo6c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlS
eCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJl
bmRlclN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQs
ICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJv
a2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJT
dHlsZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJT
dHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29k
Q29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENv
bG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0
b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0
b3BPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRp
bmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQs
ICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2Vs
aW5lU2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFs
dWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5
bGU6OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFy
aWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVu
ZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJv
cGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxl
OjpzZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUo
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4o
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVj
b3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NT
UHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVP
ZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZf
QVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisgICAg
c3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNb
XSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1j
b2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBm
b3IgZm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ss
IC8vIGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAgICAg
ICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRp
dXMsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3Ig
bGlzdC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAgQ1NT
UHJvcGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxl
LAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAgQ1NT
UHJvcGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVz
IHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgLy8K
KyAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgbV9w
cm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisgICAg
Q09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0
YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRh
YmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlXcmFw
cGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXND
b3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8gRmly
c3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1h
cCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4K
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0
aWVzQ291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3
cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAgICAg
bV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Qcm9w
ZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgewor
ICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJv
cGVydGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1dG8g
bG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRl
eCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdyYXBw
ZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVy
SW5kZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1f
cHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhh
bmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykp
KTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
ciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
cio+KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgewor
ICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwg
Y3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBw
cm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KGNvbnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkp
OworCisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5l
ZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENT
U1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKHBy
b3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRv
bigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAgICAg
ICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9HX0RJ
U0FCTEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwor
I2VuZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5
QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3Ap
OworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNB
Y2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2lu
Z2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVyID8g
d3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5vdGU6
IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRp
b25BdFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246
OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9w
ZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMp
OworCisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVy
dHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5J
bnRlcnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5SUQg
Q1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8
Ym9vbD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKwor
ICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAgIGlz
U2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJuIHdy
YXBwZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVt
UHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cDo6c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgwYzUz
ZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVy
dHlJRCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
Q1NTUHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAg
c3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBDU1NQ
cm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0
aGFuZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBz
dGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQcm9w
ZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFiNWFk
ZmQwNmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEzOWIw
NTlmMWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Ry
YW5zaXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9u
LmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwKICAg
ICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1hdGlv
biB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9wZXJ0
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlv
bnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwK
aW5kZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRlNDll
MjAyZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwog
CiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9u
cy10by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJB
bmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50ZXJm
YWNlIERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0
aW1lbGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1l
bnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4YTUz
NGMxZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0YTc4
ZWRlNTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9y
U2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8K
IAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lv
bnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAgIEVu
YWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBE
b2N1bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVudE9y
U2hhZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25zKCk7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxp
bmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCmlu
ZGV4IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEyNTQ0
MjU1ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAog
XSBpbnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAgICBb
Q2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxpbmVP
cHRpb25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5pZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4uZjBm
MzJiMGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVm
IFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNlYzNm
YTg0MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0ZThk
YTAwZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmlt
YXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRs
CkBAIC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwogICAg
IEFjdGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAg
ICAgSW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2Vi
QW5pbWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZjOWE2
ZDRhNTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiArNTAs
MTEgQEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAgfQog
fTsKIAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21wb3Np
dGUgICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAxCit9
OworCiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0aW9u
c01hcmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9IExp
c3RIYXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBhYzBk
ODA1YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uYTUxYjQzODE1NTUxMTFkMzc3NGFjMTM5N2UyOGY1
NDgyZTU1NzNjMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NT
Qm9yZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94Q29u
dGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRp
b24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEgKzIy
NDYsOSBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5
bGVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Nv
bXBvc2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVk
QW5pbWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgeworICAgIGlmIChyZW5kZXJlciAmJiBy
ZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlv
bk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKSB7CiAgICAgICAgIGlmIChhdXRv
IHRpbWVsaW5lID0gZWxlbWVudC5kb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAg
ICAgICAgIG93bmVkU3R5bGUgPSB0aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpy
ZW5kZXJlcik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJl
ci0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7
CiAgICAgICAgIGlmIChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICE9IFBzZXVkb0lkOjpOb25lICYm
ICFlbGVtZW50LmlzUHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBjYWNoZWQgcHNldWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhh
cyBiZWVuIHJ1biBhdCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUt
PmdldENhY2hlZFBzZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9E
b2N1bWVudC5jcHAKaW5kZXggOTA5NmYyNjQ2NzkxMzBhNzg0YTUxYTlhZGM4YmFkZWJlYzdjN2Fj
NC4uMjk0MGM1OGJmMTc4YzUyMGE2MDllYjFiNzM3NzM4ZWI2NjlmZGMwNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RG9jdW1lbnQuY3BwCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkJlZm9yZVVubG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5j
bHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rv
ci5oIgogI2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHls
ZVNoZWV0LmgiCkBAIC0xOTYyLDcgKzE5NjEsNiBAQCB2b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5
bGUoUmVzb2x2ZVN0eWxlVHlwZSB0eXBlKQogICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKFN0
eWxlUmVjYWxjU3RhcnQsIFN0eWxlUmVjYWxjRW5kKTsKIAogICAgIFJlbmRlclZpZXc6OlJlcGFp
bnRSZWdpb25BY2N1bXVsYXRvciByZXBhaW50UmVnaW9uQWNjdW11bGF0b3IocmVuZGVyVmlldygp
KTsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmbV9mcmFt
ZS0+bGVnYWN5QW5pbWF0aW9uKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoaXMgdXBkYXRlIHBl
ciB0cmVlIHNjb3BlLgogICAgIHsKQEAgLTI0MjIsMTkgKzI0MjAsMTMgQEAgdm9pZCBEb2N1bWVu
dDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSgpCiAgICAgLy8gYmUgb3V0IG9mIHN5
bmMgaWYgdGhlIERPTSBzdXNwZW5zaW9uIHN0YXRlIGNoYW5nZWQgd2hpbGUgdGhlIGRvY3VtZW50
IHdhcyBub3QgaW4gdGhlIGZyYW1lIChwb3NzaWJseSBpbiB0aGUKICAgICAvLyBiYWNrL2Zvcndh
cmQgY2FjaGUsIG9yIHNpbXBseSBuZXdseSBjcmVhdGVkKS4KICAgICBpZiAobV9mcmFtZS0+YWN0
aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnNTdXNwZW5kZWQoKSkgewotICAgICAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xs
ZXIpCi0gICAgICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1h
dGlvbigpLnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgICAgIGlmICht
X3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXIt
PnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAgIHN1c3BlbmRTY2hlZHVsZWRUYXNrcyhSZWFz
b25Gb3JTdXNwZW5zaW9uOjpQYWdlV2lsbEJlU3VzcGVuZGVkKTsKICAgICB9IGVsc2UgewogICAg
ICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlV2lsbEJl
U3VzcGVuZGVkKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAg
ICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIG1fdGltZWxp
bmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAg
ICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1
bWVudCh0aGlzKTsKKyAgICAgICAgaWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKKyAgICAgICAg
ICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgIH0KIH0K
IApAQCAtMjUyOCw5ICsyNTIwLDYgQEAgdm9pZCBEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21G
cmFtZSgpCiAgICAgaWYgKG1faGFzUHJlcGFyZWRGb3JEZXN0cnVjdGlvbikKICAgICAgICAgcmV0
dXJuOwogCi0gICAgaWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlv
bigpLmRldGFjaEZyb21Eb2N1bWVudCh0aGlzKTsKLQogI2lmIFVTRShMSUJXRUJSVEMpCiAgICAg
Ly8gRklYTUU6IFRoaXMgc2hvdWxkIGJlIG1vdmVkIHRvIE1vZHVsZXMvbWVkaWFzdHJlYW0uCiAg
ICAgaWYgKExpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKSkgewpAQCAtMzA2Niw4
ICszMDU1LDYgQEAgdm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgICAgIGlmIChh
dXRvKiBkb2N1bWVudExvYWRlciA9IGxvYWRlcigpKQogICAgICAgICAgICAgZG9jdW1lbnRMb2Fk
ZXItPnN0YXJ0SWNvbkxvYWRpbmcoKTsKIAotICAgICAgICBmLT5sZWdhY3lBbmltYXRpb24oKS5z
dGFydEFuaW1hdGlvbnNJZk5vdFN1c3BlbmRlZCh0aGlzKTsKLQogICAgICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGJlIGRpc3BhdGNoaW5nIHBlbmRpbmcgZXZlbnRzIGdsb2JhbGx5IG9uIGFs
bCBEb2N1bWVudHMgaGVyZS4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBkbyB0aGlzIHdoZW4g
dGhlcmUgaXMgYSBGcmFtZSwgb3RoZXJ3aXNlIHRoaXMgY291bGQgY2F1c2UgSlMgcmVlbnRyYW5j
eQogICAgICAgICAvLyBiZWxvdyBTVkcgZm9udCBwYXJzaW5nLCBmb3IgZXhhbXBsZS4gPGh0dHBz
Oi8vd2Via2l0Lm9yZy9iLzEzNjI2OT4KQEAgLTU0NTQsMTEgKzU0NDEsOCBAQCB2b2lkIERvY3Vt
ZW50OjpyZXN1bWUoUmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAKICAgICBBU1NFUlQobV9m
cmFtZSk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKG1f
dGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+
cmVzdW1lQW5pbWF0aW9ucygpOyAgCi0gICAgfSBlbHNlCi0gICAgICAgIG1fZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCh0aGlzKTsKKyAgICBpZiAo
bV90aW1lbGluZXNDb250cm9sbGVyKQorICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJl
c3VtZUFuaW1hdGlvbnMoKTsKIAogICAgIHJlc3VtZVNjaGVkdWxlZFRhc2tzKHJlYXNvbik7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2RvbS9FbGVtZW50LmNwcAppbmRleCA4Zjg2ZmY0MWE2NjQ2ODJjMmZjNjg3ZTNlYmE2ODNj
NTNmYzYzODZhLi5jNWIzMzE2Y2NmNjQyMTZmMjkxZTZiYTU2YWI4NzA4MTMwZjcxNDY4IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZG9tL0VsZW1lbnQuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQVhPYmplY3RD
YWNoZS5oIgogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGVDaGFuZ2VJbnZh
bGlkYXRpb24uaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVk
ZSAiQ1NTUGFyc2VyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xp
ZW50LmgiCkBAIC0xMTksNiArMTE4LDcgQEAKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgogI2lu
Y2x1ZGUgIlZvaWRDYWxsYmFjay5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlvbi5oIgorI2luY2x1
ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1
ZGUgIlhMaW5rTmFtZXMuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0yMjg4LDkgKzIy
ODgsNiBAQCB2b2lkIEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVt
b3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmIG9sZFBhcgogICAgIGlmIChhdXRvKiB0aW1lbGluZSA9
IGRvY3VtZW50KCkuZXhpc3RpbmdUaW1lbGluZSgpKQogICAgICAgICB0aW1lbGluZS0+ZWxlbWVu
dFdhc1JlbW92ZWQoKnRoaXMpOwogCi0gICAgaWYgKGZyYW1lKQotICAgICAgICBmcmFtZS0+bGVn
YWN5QW5pbWF0aW9uKCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICNpZiBFTkFCTEUoV0hF
RUxfRVZFTlRfTEFUQ0hJTkcpCiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkpIHsKICAg
ICAgICAgaWYgKGF1dG8qIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlciA9IGZyYW1lLT5wYWdlKCkt
PnNjcm9sbExhdGNoaW5nQ29udHJvbGxlcklmRXhpc3RzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5jcHAKaW5kZXggMTVkODFjMTA2ZDgwOTM1M2YyMWJlN2VjODQ4M2RkODhiNzYyOGIz
Ny4uZGFkMTU2NmNjMDZhM2QxNGQ2YmNiN2M1MDc2ZWNjMThiNmM3YTc2NyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2RvbS9Qc2V1ZG9FbGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZp
Zy5oIgogI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgogI2luY2x1ZGUgIkRvY3Vt
ZW50VGltZWxpbmUuaCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAg
LTkzLDkgKzkyLDYgQEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KCkKICAg
ICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAg
ICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNSZW1vdmVkKCp0aGlzKTsKICAgICAKLSAgICBpZiAo
YXV0byogZnJhbWUgPSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGZyYW1lLT5sZWdhY3lB
bmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0aGlzKTsKLQogICAgIG1faG9zdEVsZW1lbnQg
PSBudWxscHRyOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hl
ZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmluZGV4
IDQ2OTg1NzRkMzI1MDVlNmY5YzVjM2ExY2JhY2FiZmViMmQwZDQxZGMuLjhkZTI2ZTFiYzE1MzNm
ZDBiM2YwNzRmMDZiMWYzNGQzZTgwYjg5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2hp
c3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVk
RnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUuaCIKIAog
I2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNpbmNsdWRl
ICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0yNzMsOCArMjcyLDYg
QEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAKICAgICBGcmFtZTo6Y2xlYXJUaW1lcnMo
bV92aWV3LmdldCgpLCBtX2RvY3VtZW50LmdldCgpKTsKIAotICAgIG1fdmlldy0+ZnJhbWUoKS5s
ZWdhY3lBbmltYXRpb24oKS5kZXRhY2hGcm9tRG9jdW1lbnQobV9kb2N1bWVudC5nZXQoKSk7Ci0K
ICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCByZW1vdmVBbGxFdmVudExpc3Rl
bmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNrL2ZvcndhcmQgY2FjaGUsIHRo
aXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3YXksIGJlY2F1c2UgdGhlIGRv
Y3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01XaW5kb3cgb2JqZWN0IChkdWUg
dG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5yZW1vdmVBbGxFdmVudExpc3Rl
bmVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzYzVhZTQ1ODU0YzcyYmRmNmZiNzM2NWVm
NWYyN2ZhYTZmZGJlNWVjLi5iZDM0OTdjMWEyMjAwMTU2NTZlMDAyMDQ1ZTRlNjE3N2MzOTM5OGI1
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFwcGx5
U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRl
ICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5oIgpA
QCAtMTU2LDcgKzE1NSw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVPd25l
ckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25hdmln
YXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhpcykp
CiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdChtYWtl
VW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkKICAg
ICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAgLCBt
X3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV9ldmVu
dEhhbmRsZXIobWFrZVVuaXF1ZVJlZjxFdmVudEhhbmRsZXI+KCp0aGlzKSkKQEAgLTczNywxMSAr
NzM1LDggQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1bWVu
dCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+bGF5b3V0Q29u
dGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQtPnRpbWVs
aW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmlt
YXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS5sZWdh
Y3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAg
ICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LT50aW1lbGluZXNDb250cm9sbGVy
KCkpCisgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgICAg
IHZpZXctPmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcigpOwogICAg
IH0KIH0KQEAgLTEwMjksMTEgKzEwMjQsOCBAQCB2b2lkIEZyYW1lOjpyZXN1bWVBY3RpdmVET01P
YmplY3RzQW5kQW5pbWF0aW9ucygpCiAKICAgICAvLyBGcmFtZTo6Y2xlYXJUaW1lcnMoKSBzdXNw
ZW5kZWQgYW5pbWF0aW9ucyBhbmQgcGVuZGluZyByZWxheW91dHMuCiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IG1fZG9jLT50
aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1h
dGlvbnMoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5p
bWF0aW9uc0ZvckRvY3VtZW50KG1fZG9jLmdldCgpKTsKKyAgICBpZiAoYXV0byogdGltZWxpbmVz
ID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgdGltZWxpbmVzLT5yZXN1
bWVBbmltYXRpb25zKCk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlvdXRD
b250ZXh0KCkuc2NoZWR1bGVMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA2OGZkYzEx
NTVkOTEzZWVjZjI1NzA2YWQ5ODg5YjUwMjFmYWJmMmM0Li41MGM2NWY1ZTViMDc1M2MxZTZkMzA3
YjIxM2I1MjAwYzQ1MGFhMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC02Niw3ICs2Niw2IEBAIGNs
YXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xhc3MgRE9NV2luZG93OwogY2xhc3MgRG9j
dW1lbnQ7CkBAIC0xNzQsOCArMTczLDYgQEAgcHVibGljOgogICAgIEZyYW1lU2VsZWN0aW9uJiBz
ZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIGNvbnN0
IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgpLT5z
ZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwotICAgIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29u
dHJvbGxlcjsgfQotICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1h
dGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIFNjcmlw
dENvbnRyb2xsZXImIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAgICAgY29uc3QgU2Ny
aXB0Q29udHJvbGxlciYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KIApAQCAt
MzQ1LDcgKzM0Miw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsKIAog
ICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVSZWY8
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYgRU5B
QkxFKERBVEFfREVURUNUSU9OKQogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRlY3Rp
b25SZXN1bHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc1YjllMmJmYzllYWUz
ZTM1YmVlMThmZWJkNDkxZjQwZjM2N2M2MTYuLmQ0OTI0MWVmMDg4YjgzNzYyNTYwOWQyYzY1YWJm
MjgzNGRhNDE4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMwLDcgKzMwLDYg
QEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNo
ZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUg
IkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01ODYsOCAr
NTg1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKCkKIAogICAgIEFT
U0VSVCghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdwb3J0Q29uc3RyYWlu
ZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9zbG93UmVwYWludE9i
amVjdHMgfHwgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0KLSAgICBB
U1NFUlQoIWZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuaGFzQW5pbWF0aW9ucygpKTsKIH0KIAog
dm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpAQCAt
NDQxNyw4ICs0NDE0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZO
ZWVkZWRSZWN1cnNpdmUoKQogICAgIC8vIFN0eWxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgc2NyaXB0
LCB3aGljaCBjYW4gY2F1c2UgdGhpcyBGcmFtZVZpZXcgdG8gYmUgZGVzdHJveWVkLgogICAgIFJl
ZjxGcmFtZVZpZXc+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgQW5pbWF0aW9uVXBkYXRl
QmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkpOwot
CiAgICAgdXNpbmcgRGVzY2VuZGFudHNEZXF1ZSA9IERlcXVlPFJlZjxGcmFtZVZpZXc+LCAxNj47
CiAgICAgYXV0byBuZXh0UmVuZGVyZWREZXNjZW5kYW50ID0gW3RoaXNdIChEZXNjZW5kYW50c0Rl
cXVlJiBkZXNjZW5kYW50c0RlcXVlKSAtPiBSZWZQdHI8RnJhbWVWaWV3PiB7CiAgICAgICAgIGlm
IChkZXNjZW5kYW50c0RlcXVlLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDBjOGJlNzk0OTUxYjc4ZTE5Yjc1OTI4ODVi
YmY4MzVlYjFjOTUzYjEuLjlmYTUxNzBmYTE1MTVmM2FmYjY3Y2YzMTA3ZDk4Y2ZiOTVlYjJkNTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcApA
QCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1lVmll
d0xheW91dENvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIK
ICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAj
aW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0yMDQsNyArMjAzLDYgQEAgdm9pZCBGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQoKQogICAgIExheW91dFNjb3BlIGxheW91dFNjb3BlKCp0aGlz
KTsKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlvdXRTdGFydCwgTGF5b3V0RW5kKTsK
ICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZyYW1lKCkp
OwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZ2aWV3KCku
ZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7CiAgICAgV2Vha1B0cjxSZW5kZXJFbGVtZW50PiBs
YXlvdXRSb290OwogICAgIAogICAgIG1fbGF5b3V0VGltZXIuc3RvcCgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5j
cHAKaW5kZXggYTBhNzdkMjg4MzY0ODIxYzUxMGIyZDUxMmJhNzBlNzI5YzIxYjZkNS4uZjkyM2Jh
ODkyOTljMDA4ZTEwZjBkMjhlZTgwYTNmM2Y5N2JhYTk4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCkBA
IC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUg
IkJhY2tGb3J3YXJkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlU3Rv
cmFnZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNs
dWRlICJDaHJvbWUuaCIKQEAgLTE2NDgsOSArMTY0Nyw2IEBAIHZvaWQgUGFnZTo6aGFuZGxlTG93
TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogICAgIG1fdGhyb3R0
bGluZ1JlYXNvbnMgPSBtX3Rocm90dGxpbmdSZWFzb25zIF4gVGhyb3R0bGluZ1JlYXNvbjo6TG93
UG93ZXJNb2RlOwogICAgIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpLmFkanVzdFJlbmRlcmlu
Z1VwZGF0ZUZyZXF1ZW5jeSgpOwogCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAg
ICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0YXRl
KCk7Ci0KICAgICB1cGRhdGVET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiB9CiAKQEAgLTIx
ODUsMTMgKzIxODEsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlz
VmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPnNob3coKTsKIAogICAgICAgICBpZiAobV9zZXR0
aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKLSAgICAg
ICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVh
Y2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpCi0g
ICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAg
ICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1h
aW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICAgICAg
ICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIo
KSkKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRpb25zKCk7Cisg
ICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAo
RG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yMjA5LDEzICsyMjAyLDEwIEBAIHZvaWQgUGFnZTo6
c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAKICAgICBpZiAoIWlzVmlzaWJs
ZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3Bl
bnNpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkg
ewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50
KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50
aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMt
PnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9
IGVsc2UKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5zdXNw
ZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVu
dCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9j
dW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0aW1lbGlu
ZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAg
ICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yNTYw
LDIxICsyNTUwLDE0IEBAIHZvaWQgUGFnZTo6cmVzZXRTZWVuTWVkaWFFbmdpbmVzKCkKIHZvaWQg
UGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKQogewog
ICAgIGlmICghaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGltZWxp
bmVzQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldHRpbmdzLT5o
aWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmlt
YXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlv
blN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5
QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25z
KCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGlt
ZWxpbmVzQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhp
ZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAg
ICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDA4NDNlZDc2MGNkZWM3M2E5Y2IxYWZm
N2RhMjljY2E0MDI0YTZhNDMuLmU2NGIyZTYxOWIxYWQ0MDFlY2U5OGM3ZWE4NDA5ZWY1YTk5NmFh
ZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCkBA
IC03MCwxMiArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1NlY3VyZUNvbnRleHRBdHRy
aWJ1dGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5hYmxl
ZDsgfQogCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGFyZUVuYWJsZWQp
IHsgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KLSAgICBib29sIHdl
YkFuaW1hdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5h
YmxlZDsgfQotCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
ID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCAmJiBtX2lzV2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsgfQotCiAgICAgdm9pZCBzZXRXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7IG1fYXJl
V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkID0gYXJlRW5hYmxlZDsgfQog
ICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7IH0K
IApAQCAtMzAwLDggKzI5NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTWVudUl0ZW1FbGVt
ZW50RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGlyZWN0b3J5VXBsb2FkRW5hYmxl
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgeyB0cnVlIH07Ci0g
ICAgYm9vbCBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCB7IHRydWUgfTsK
ICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIHsg
ZmFsc2UgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFi
bGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbWFnZUJpdG1hcEVuYWJsZWQgeyB0cnVlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFlNzQzNTk3N2ZhOTI1MGVjMTBjMTczOTQx
NWRlNGNkNGY1NTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisrKyAv
ZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIw
MDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3Ig
dGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRv
cnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2Fy
ZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJ
U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2lu
Y2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgot
I2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0jaW5j
bHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVk
ZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJSZW5k
ZXJWaWV3LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4KLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNvbnN0
IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRp
b24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkKLSAgICAs
IG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2FuaW1h
dGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikpCi17Ci0gICAgLy8gQ29tcHV0
ZSB0aGUgdG90YWwgZHVyYXRpb24KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkgPiAwKQotICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotfQotCi1BbmltYXRpb25CYXNlOjp+
QW5pbWF0aW9uQmFzZSgpID0gZGVmYXVsdDsKLQotY29uc3QgUmVuZGVyU3R5bGUmIEFuaW1hdGlv
bkJhc2U6OmN1cnJlbnRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpOwotICAg
IHJldHVybiB1bmFuaW1hdGVkU3R5bGUoKTsKLX0KLQotUmVuZGVyRWxlbWVudCogQW5pbWF0aW9u
QmFzZTo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgPyBtX2VsZW1l
bnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmNsZWFy
KCkKLXsKLSAgICBlbmRBbmltYXRpb24oKTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRyOwotICAg
IG1fY29tcG9zaXRlQW5pbWF0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNl
OjpzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFlbGVt
ZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAg
IGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFzZTo6
ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsK
LX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6
UGxheWluZzsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2goY29uc3Qg
QW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5h
bmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXN0YXRp
YyBjb25zdCBjaGFyKiBuYW1lRm9yU3RhdGUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGUg
c3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6
QW5pbWF0aW9uU3RhdGU6Ok5ldzogcmV0dXJuICJOZXciOwotICAgIGNhc2UgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOiByZXR1cm4gIlN0YXJ0V2FpdFRpbWVy
IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZTogcmV0dXJuICJTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6IHJldHVybiAi
U3RhcnRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGU6Okxvb3Bpbmc6IHJldHVybiAiTG9vcGluZyI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZTo6RW5kaW5nOiByZXR1cm4gIkVuZGluZyI7Ci0gICAgY2FzZSBBbmltYXRp
b25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OiByZXR1cm4gIlBhdXNlZE5ldyI7Ci0g
ICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVyOiBy
ZXR1cm4gIlBhdXNlZFdhaXRUaW1lciI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlBhdXNlZFdhaXRTdHls
ZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1
c2VkV2FpdFJlc3BvbnNlOiByZXR1cm4gIlBhdXNlZFdhaXRSZXNwb25zZSI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOiByZXR1cm4gIlBhdXNlZFJ1
biI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RG9uZTogcmV0dXJu
ICJEb25lIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpGaWxsaW5n
Rm9yd2FyZHM6IHJldHVybiAiRmlsbGluZ0ZvcndhcmRzIjsKLSAgICB9Ci0gICAgcmV0dXJuICIi
OwotfQotI2VuZGlmCi0KLSNpZiAhRVJST1JfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFyKiBu
YW1lRm9yU3RhdGVJbnB1dChBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0
KQotewotICAgIHN3aXRjaCAoaW5wdXQpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXc6IHJldHVybiAiTWFrZU5ldyI7Ci0gICAgY2FzZSBBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbjogcmV0dXJuICJT
dGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlu
cHV0OjpSZXN0YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlJlc3RhcnRBbmltYXRpb24iOwotICAgIGNh
c2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkOiBy
ZXR1cm4gIlN0YXJ0VGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdHlsZUF2YWlsYWJsZSI7Ci0g
ICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQ6
IHJldHVybiAiU3RhcnRUaW1lU2V0IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlv
blN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkOiByZXR1cm4gIkxvb3BUaW1lckZpcmVkIjsKLSAg
ICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQ6
IHJldHVybiAiRW5kVGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlOiByZXR1cm4gIlBhdXNlT3ZlcnJpZGUiOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGU6
IHJldHVybiAiUmVzdW1lT3ZlcnJpZGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZzogcmV0dXJuICJQbGF5U3RhdGVSdW5uaW5n
IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0
ZVBhdXNlZDogcmV0dXJuICJQbGF5U3RhdGVQYXVzZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uOiByZXR1cm4gIkVuZEFuaW1hdGlv
biI7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLSNlbmRpZgotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3VibGUg
cGFyYW0pCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRp
b24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUuCi0g
ICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKLSAgICAgICAg
aWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0gICAg
ICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhpcywg
bmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25TdGF0
ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0gV1RGOjpudWxs
b3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgbV9yZXF1
ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9IFdU
Rjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAg
ICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1h
dGlvbikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlv
bi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgbV9zdGFy
dFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0
OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4dEl0ZXJh
dGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24oKTsKLQot
ICAgICAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0
aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAgIGVuZEFu
aW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ID09IEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0
aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlKSB7Ci0gICAgICAg
ICAgICAvLyBJZiB3ZSBhcmUgaW4gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlLCB0
aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKLSAgICAgICAgICAgIC8vIHdl
IGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAg
ZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSkgewotICAgICAgICBpZiAobV9hbmltYXRp
b25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyB8fCBtX2FuaW1hdGlvblN0YXRlID09
IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmlt
YXRpb24KLSAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIEV4ZWN1dGUgc3RhdGUgbWFjaGluZQotICAgIHN3aXRjaCAobV9h
bmltYXRpb25TdGF0ZSkgewotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpOZXc6Ci0gICAg
ICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRp
b24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8fCBp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0gICAgICAg
ICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24gfHwg
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewotICAgICAg
ICAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1l
KCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBTdGFydFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRl
KSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8g
V2UgYXJlIHBhdXNpbmcgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZC4KLSAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWROZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAg
ICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3Owot
ICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBs
YXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0g
Pj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRo
ZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFy
dCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlzLCBuYW1l
Rm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBtX2Fu
aW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOwot
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KLSAg
ICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rp
c3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQoIXBhdXNlZCgpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZv
ciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNlbCB0aGUg
dGltZXIsIHBhdXNlIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0
ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5
bGVBdmFpbGFibGU6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3R5bGVBdmFpbGFibGUgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxh
eVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIg
aGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRv
IHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSAodGltZSBpcyAlZiki
LCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3Bv
bnNlOwotCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG92ZXJy
aWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkgdG8gc3RhcnQg
YWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQKLSAgICAgICAg
ICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAg
ICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0
V2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAg
ICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gZmFs
c2U7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICAg
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9mZnNl
dCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBmb3IgJ2FuaW1hdGlv
bi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9uIGFwcGVhcnMgdG8gaGF2ZSBz
dGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb24t
PmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1tX2Fu
aW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3Rh
cnRBbmltYXRpb24odGltZU9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhlIHN0
eWxlIHRvIGJlIGF2YWlsYWJsZSBhbmQgd2UgZ290IGEgcGF1c2UuIFBhdXNlIGFuZCB3YWl0Ci0g
ICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsK
LSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlv
blN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0
YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6
Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRU
aW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCk7
Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRp
bWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPiAtMC4wMDEpOyAvLyBTb21l
dGltZXMgQ29yZSBBbmltYXRpb24gZ2l2ZXMgdXMgYSBiZWdpblRpbWUgc2xpZ2h0bHkgaW50byB0
aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9u
U3RhdGUgJXMgLT4gU3RhcnRUaW1lU2V0ICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0
ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8gV2UgaGF2
ZSBhIHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxyZWFkeSBz
ZXQKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2
YWx1ZSBmb3IgJ2FuaW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9u
IGFwcGVhcnMgdG8gaGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAg
bV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZSgpICsgbV9hbmltYXRpb24tPmRlbGF5KCk7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Uga25v
dyB0aGUgc3RhcnQgdGltZSwgZmlyZSB0aGUgc3RhcnQgZXZlbnQuCi0gICAgICAgICAgICAgICAg
b25BbmltYXRpb25TdGFydCgwKTsgLy8gVGhlIGVsYXBzZWRUaW1lIGlzIDAuCi0KLSAgICAgICAg
ICAgICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0
YXRlCi0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLQotICAg
ICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2UgY2FuIHN0
YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBl
bHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0aW5nIGZv
ciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4gV2hlbiAK
LSAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91Z2ggdGhl
IHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5pbWF0aW9u
KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0g
ICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQ
YXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmc6Ci0gICAgICAgICAgICBBU1NFUlQoaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQgfHwgaW5wdXQgPT0gQW5p
bWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlu
cHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkKSB7Ci0gICAgICAgICAg
ICAgICAgQVNTRVJUKHBhcmFtID49IDApOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTG9vcFRpbWVyRmlyZWQgKHRpbWUgaXMgJWYpIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KLSAgICAgICAg
ICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7Ci0KLSAgICAgICAgICAgICAgICAv
LyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRlCi0gICAg
ICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLSAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmluZy4g
Q2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGlt
ZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5p
bWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigw
KSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
UnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5p
bWF0aW9uU3RhdGU6OkVuZGluZzoKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgICAgIGlm
IChpbnB1dCAhPSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkICYmIGlucHV0ICE9
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAgICAgICBM
T0dfRVJST1IoIlN0YXRlIGlzIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcsIGJ1dCBpbnB1dCBpcyBu
b3QgQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCBvciBBbmltYXRpb25TdGF0ZUlu
cHV0OjpQbGF5U3RhdGVQYXVzZWQuIEl0IGlzICVzLiIsIG5hbWVGb3JTdGF0ZUlucHV0KGlucHV0
KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0
OjpFbmRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwot
ICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCi0gICAgICAgICAg
ICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lICh0aW1lIGlzICVmKSIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAgICAg
IG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEZpbGxpbmdGb3J3
YXJkcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkZpbGxpbmdG
b3J3YXJkczsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAg
ICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAgICAgICAgICAg
IC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZpbmFs
IHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFk
ZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcg
d2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAg
ICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAg
ICAgICAgIHBhdXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFy
dFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBB
bmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmlt
YXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRp
b25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gfHRoaXN8
IG1heSBiZSBkZWxldGVkIGhlcmUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFu
aW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyk7Ci0gICAgICAgICAgICBB
U1NFUlQocGF1c2VkKCkpOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwotICAgICAg
ICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5BbmltYXRp
b25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAgICAgbV9w
YXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgIC8vIHdlIHdlcmUgd2FpdGlu
ZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4KLSAg
ICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3Iiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgIG1fYW5p
bWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAwKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc6Ci0g
ICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZToKLSAgICAgICAg
Y2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOgotICAgICAgICBj
YXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46Ci0gICAgICAgICAgICAvLyBXZSB0cmVhdCB0
aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwgd2hl
biB3ZSBhcmUgaW4KLSAgICAgICAgICAgIC8vIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVz
cG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBzZW5kIDAg
dG8gc3RhcnRBbmltYXRpb24uCi0gICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVTZXQgY29tZXMgaW4gYW5kIHdlIHdlcmUgaW4gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZFJ1biwgd2Ugd2lsbCBub3RpY2UKLSAgICAgICAgICAgIC8vIHRoYXQgd2UgaGF2
ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAgICAgICAg
ICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQg
fHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8fCBpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0gQW5pbWF0
aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpOwotICAgICAgICAgICAgQVNTRVJUKHBhdXNl
ZCgpKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBs
YXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdl
IHdlcmUgcGF1c2VkIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQsIGFuZCBub3cgd2UncmUgc3VwcG9z
ZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RhcnQsIHNvIGp1bXAgYmFjayB0byB0aGUg
TmV3IHN0YXRlIGFuZCByZXNldC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6TmV3IiwgdGhpcywgbmFt
ZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbmlt
YXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICAgICAgICAgIG1f
cGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0
ZU1hY2hpbmUoaW5wdXQsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwotICAg
ICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVz
ZWRSdW4pCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWUudmFs
dWVPcigwKSArIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUudmFsdWVP
cigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRU
aW1lID0gMDsKLQotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0Owot
Ci0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAv
LyBXZSB3ZXJlIGVpdGhlciBydW5uaW5nIG9yIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGltZSByZXNw
b25zZSBmcm9tIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhlciB3
YXkgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhbmltYXRpb24gKHBvc3NpYmx5IHdpdGggYW4gb2Zm
c2V0IGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhZCBhbHJlYWR5IGJlZW4gcnVubmlu
ZykgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLQot
ICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChvdmVycmlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIFdl
IHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFyZSBvdmVy
cmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRo
ZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJv
b2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0g
bV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
fQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSk7Ci0gICAgICAgICAg
ICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2UgZ290IHRoZSBj
YWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9uIHN0
YXJ0ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBzdGFydCB0aW1lIGFuZCBq
dXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KLSAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biAodGltZSBpcyAl
ZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAg
ICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjsK
LSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAgICAgICBt
X3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gbV9wYXVz
ZVRpbWUudmFsdWVPcigwKSArIHBhcmFtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZTo6UGF1c2VkTmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBB
bmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpT
dHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0IHdlIGdv
dCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IHN0eWxlIGhhcyBiZWVuIHVwZGF0
ZWQuCi0gICAgICAgICAgICAvLyBXZSBtb3ZlIHRvIHRoZSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
V2FpdFJlc3BvbnNlIHN0YXRlCi0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1h
dGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZSht
X2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIG92ZXJyaWRlQW5pbWF0
aW9ucygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6
OkZpbGxpbmdGb3J3YXJkczoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RG9uZToKLSAg
ICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3ZSBhcmUg
ZGVsZXRlZAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0
ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcg
Zm9yIHRoZSBkZWxheSB0aW1lIHRvIGV4cGlyZSBhbmQgaXQgaGFzLCBnbyB0byB0aGUgbmV4dCBz
dGF0ZQotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRUaW1lciAmJiBtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpMb29waW5nICYm
IG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0byB0aGUg
dGhpcyBwb2ludGVyLCBiZWNhdXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAvLyBkdXJp
bmcgYW4gYW5pbWF0aW9uIGNhbGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4gU2luY2UgdGhl
IG93bmVyIGlzIGEgQ29tcG9zaXRlQW5pbWF0aW9uCi0gICAgLy8gYW5kIGl0IHJlZiBjb3VudHMg
dGhpcyBvYmplY3QsIHdlIHdpbGwga2VlcCBhIHJlZiB0byB0aGF0IGluc3RlYWQuIFRoYXQgd2F5
IHRoZSBBbmltYXRpb25CYXNlCi0gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGUgcmVzb3VyY2Vz
IG9mIGl0cyBDb21wb3NpdGVBbmltYXRpb24gYXMgbmVlZGVkLgotICAgIFJlZjxBbmltYXRpb25C
YXNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBSZWY8Q29tcG9zaXRlQW5pbWF0aW9uPiBw
cm90ZWN0Q29tcG9zaXRlQW5pbWF0aW9uKCptX2NvbXBvc2l0ZUFuaW1hdGlvbik7Ci0gICAgCi0g
ICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKLSAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIpIHsKLSAgICAgICAgaWYgKGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPj0gbV9hbmltYXRpb24t
PmRlbGF5KCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBlbnN1cmUg
dGhhdCBlbGFwc2VkRHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBzdWdnZXN0
cyB0aGF0Ci0gICAgLy8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJlZ2luQW5p
bWF0aW9uVXBkYXRlKCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCi0gICAgLy8gQWxzbyBjaGVjayBp
biBnZXRUaW1lVG9OZXh0RXZlbnQoKS4KLSAgICBlbGFwc2VkRHVyYXRpb24gPSBzdGQ6Om1heChl
bGFwc2VkRHVyYXRpb24sIDAuMCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGVuZCB0aW1lb3V0
Ci0gICAgaWYgKG1fdG90YWxEdXJhdGlvbiAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90b3RhbER1
cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGJlIGluIEFuaW1hdGlv
blN0YXRlOjpMb29waW5nIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2tpcCBhCi0gICAgICAgIC8vIHdo
b2xlIGl0ZXJhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQganVtcCB0byB0aGUgZW5kIHN0
YXRlLgotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEVu
ZGluZyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOwotCi0gICAgICAgIC8vIEZp
cmUgYW4gZW5kIGV2ZW50Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpFbmRUaW1lckZpcmVkLCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSk7Ci0gICAgfSBl
bHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlvbiB0aW1lb3V0Ci0gICAgICAgIGlm
ICghbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEhhc24ndCBiZWVu
IHNldCB5ZXQsIHNldCBpdAotICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5k
dXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNl
ZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBp
ZiAoZWxhcHNlZER1cmF0aW9uID49IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0gICAgICAg
ICAgICAvLyBTZXQgdG8gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICBkb3VibGUgcHJl
dmlvdXMgPSBtX25leHRJdGVyYXRpb25EdXJhdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAgZG91
YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2Vk
RHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0
ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBldmVudAotICAgICAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkLCBwcmV2aW91
cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlUGxh
eVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSBwbGF5U3RhdGUpCi17Ci0gICAgaWYgKCFtX2NvbXBv
c2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2hlbiB3ZSBnZXQgaGVy
ZSwgd2UgY2FuIGhhdmUgb25lIG9mIDQgZGVzaXJlZCBzdGF0ZXM6IHJ1bm5pbmcsIHBhdXNlZCwg
c3VzcGVuZGVkLCBwYXVzZWQgJiBzdXNwZW5kZWQuCi0gICAgLy8gVGhlIHN0YXRlIG1hY2hpbmUg
Y2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQuCi0gICAgLy8gU2V0
IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgIGJvb2wgcGF1c2Ug
PSBwbGF5U3RhdGUgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQgfHwgbV9jb21wb3NpdGVB
bmltYXRpb24tPmlzU3VzcGVuZGVkKCk7Ci0KLSAgICBpZiAocGF1c2UgPT0gcGF1c2VkKCkgJiYg
IWlzTmV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShwYXVz
ZSA/ICBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQgOiBBbmltYXRpb25TdGF0
ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nLCAtMSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IEFu
aW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICAvLyBSZXR1cm5zIHRoZSB0
aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1lYW5z
IG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJlcXVp
cmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNv
bmRzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkgfHwgcG9zdEFj
dGl2ZSgpIHx8IGZpbGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0
OwotICAgIAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRUaW1lcikgewotICAgICAgICBkb3VibGUgdGltZUZyb21Ob3cgPSBtX2FuaW1hdGlvbi0+
ZGVsYXkoKSAtIChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVkU3RhcnRU
aW1lKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KFNlY29uZHMgeyB0aW1lRnJvbU5vdyB9LCAw
X3MpOwotICAgIH0KLSAgICAKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLSAg
ICAgICAgCi0gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2UgcmlnaHQg
YXdheS4KLSAgICByZXR1cm4gMF9zOwotfQotCi0vLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFsIHRp
bWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotLy8gVGhlcmUgaXMgbm8gbmVlZCB0
byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZlCi0v
LyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lLgotCi1kb3VibGUgQW5pbWF0
aW9uQmFzZTo6ZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNlZFRpbWUs
IGRvdWJsZSBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gbV9h
bmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSkgOiAxOwotICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0aGUgY3Vy
cmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0aGUgZnJh
bWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIuIFNvIHdl
IG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3NzaWJsZQot
ICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3RpY2VhYmxl
LiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCi0gICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3Ci0gICAgLy8gQVNTRVJUKGZyYWN0
aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCi0gICAgICAgIGZy
YWN0aW9uYWxUaW1lID0gMDsKLQotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNfY2FzdDxp
bnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBjb25zdCBpbnQgaW50ZWdyYWxJdGVyYXRpb25Db3Vu
dCA9IHN0YXRpY19jYXN0PGludD4obV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpOwotICAg
IGNvbnN0IGJvb2wgaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsID0gbV9hbmltYXRpb24tPml0
ZXJhdGlvbkNvdW50KCkgLSBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50OwotICAgIGlmIChtX2FuaW1h
dGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5maW5p
dGUgJiYgIWl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCkKLSAgICAgICAgaW50ZWdyYWxUaW1l
ID0gc3RkOjptaW4oaW50ZWdyYWxUaW1lLCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50IC0gMSk7Ci0K
LSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0KLSAgICBpZiAoKChtX2FuaW1h
dGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5h
dGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgKChtX2FuaW1hdGlvbi0+ZGly
ZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZlcnNl
KSAmJiAhKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCBtX2FuaW1hdGlvbi0+ZGlyZWN0
aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAgICAgICBm
cmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2FsZSAhPSAx
IHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRpbWUgLSBv
ZmZzZXQpICogc2NhbGU7Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0KLWRvdWJs
ZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQsIGNv
bnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikgY29uc3QKLXsKLSAgICBpZiAocHJl
QWN0aXZlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUoKSkKLSAg
ICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGlt
ZSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7Ci0g
ICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKLSAgICAgICAgZHVyYXRp
b24gKj0gbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoZmlsbGluZ0Zv
cndhcmRzKCkpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gZHVyYXRpb247Ci0KLSAgICBkb3VibGUg
ZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZShzY2FsZSwgZWxhcHNlZFRpbWUs
IG9mZnNldCk7Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwICYm
IGVsYXBzZWRUaW1lID49IGR1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChXVEY6OmlzSW50ZWdyYWwo
ZnJhY3Rpb25hbFRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOwotICAg
IH0KLQotICAgIGlmICghdGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9uID0g
bV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gdGltaW5nRnVuY3Rp
b24tPnRyYW5zZm9ybVRpbWUoZnJhY3Rpb25hbFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigp
KTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoU2Vjb25kcyYg
dGltZSwgYm9vbCYgaXNMb29waW5nKSBjb25zdAotewotICAgIC8vIERlY2lkZSB3aGVuIHRoZSBl
bmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgY29uc3QgZG91YmxlIGVsYXBzZWRE
dXJhdGlvbiA9IHN0ZDo6bWF4KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRp
bWUudmFsdWVPcigwKSwgMC4wKTsKLSAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsKLSAgICBk
b3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb24udmFsdWVPcigwKTsKLQot
ICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90YWxEdXJh
dGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJh
dGlvbigpID4gMCA/IChtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1cmF0
aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkpIDogMDsKLSAgICAgICAgbmV4dEl0ZXJhdGlv
blRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgfQotICAgIAotICAg
IGlmICghbV90b3RhbER1cmF0aW9uIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3RhbER1cmF0
aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUgZW5kIHlldAotICAg
ICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKLSAgICAgICAgaXNMb29waW5nID0g
dHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZAotICAgICAg
ICBpc0xvb3BpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdGltZSA9IFNlY29uZHMgeyBk
dXJhdGlvbkxlZnQgfTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdPckxv
b3BpbmdTdGF0ZSgpCi17Ci0gICAgU2Vjb25kcyB0OwotICAgIGJvb2wgaXNMb29waW5nOwotICAg
IGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOwotICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gJXMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRp
b25TdGF0ZSksIGlzTG9vcGluZyA/ICJMb29waW5nIiA6ICJFbmRpbmciKTsKLSAgICBtX2FuaW1h
dGlvblN0YXRlID0gaXNMb29waW5nID8gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgOiBBbmltYXRp
b25TdGF0ZTo6RW5kaW5nOwotfQotICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZnJlZXplQXRUaW1l
KGRvdWJsZSB0KQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2ZW4n
dCBzdGFydGVkIHlldCwgbWFrZSBpdCBhcyBpZiB3ZSBzdGFydGVkLgotICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgb25Bbmlt
YXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAgICBB
U1NFUlQobV9zdGFydFRpbWUpOyAvLyBJZiBtX3N0YXJ0VGltZSBpcyB6ZXJvLCB3ZSBoYXZlbid0
IHN0YXJ0ZWQgeWV0LCBzbyB3ZSdsbCBnZXQgYSBiYWQgcGF1c2UgdGltZS4KLSAgICBpZiAodCA8
PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0VGlt
ZS52YWx1ZU9yKDApOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0VGlt
ZS52YWx1ZU9yKDApICsgdCAtIG1fYW5pbWF0aW9uLT5kZWxheSgpOwotCi0gICAgaWYgKGF1dG8q
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnN1c3BlbmRB
bmltYXRpb25zKE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKG1fcGF1c2VUaW1lLnZhbHVl
KCkpKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0
dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRy
b2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgpLnNl
Y29uZHMoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1lKCkgY29u
c3QKLXsKLSAgICBpZiAocGF1c2VkKCkpIHsKLSAgICAgICAgZG91YmxlIGRlbGF5T2Zmc2V0ID0g
KCFtX3N0YXJ0VGltZSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApID8gbV9hbmltYXRpb24t
PmRlbGF5KCkgOiAwOwotICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWUudmFsdWVPcigwKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCkgLSBkZWxheU9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAoIW1f
c3RhcnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZlKCkgfHwg
ZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBtX3RvdGFsRHVyYXRpb24udmFsdWVP
cigwKTsKLQotICAgIHJldHVybiBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRU
aW1lLnZhbHVlT3IoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0RWxhcHNlZFRpbWUo
ZG91YmxlIHRpbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAotICAg
IFVOVVNFRF9QQVJBTSh0aW1lKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwbGF5KCkKLXsK
LSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0KLXZvaWQgQW5pbWF0aW9u
QmFzZTo6cGF1c2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLX0K
LQotc3RhdGljIGJvb2wgY29udGFpbnNSb3RhdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPFRyYW5z
Zm9ybU9wZXJhdGlvbj4+JiBvcGVyYXRpb25zKQotewotICAgIGZvciAoY29uc3QgYXV0byYgb3Bl
cmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0g
VHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVU
cmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJl
ckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0
Ci17Ci0gICAgRmxvYXRSZWN0IGZsb2F0Qm91bmRzID0gYm91bmRzOwotICAgIEZsb2F0UG9pbnQg
dHJhbnNmb3JtT3JpZ2luOwotICAgIAotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1PcmlnaW4gPSBj
b250YWluc1JvdGF0aW9uKHN0eWxlLnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKSkgfHwgc3R5bGUu
dHJhbnNmb3JtKCkuYWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdpbigpOwotICAgIGlmIChhcHBseVRy
YW5zZm9ybU9yaWdpbikgewotICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSByZW5kZXJlckJveC5s
b2NhdGlvbigpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnRyYW5zZm9ybU9yaWdp
blhZKCksIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgIC8vIElnbm9yZSB0cmFuc2Zvcm1P
cmlnaW5aIGJlY2F1c2Ugd2UnbGwgYmFpbCBpZiB3ZSBlbmNvdW50ZXIgYW55IDNEIHRyYW5zZm9y
bXMuCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2luKTsKLSAgICB9
Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHN0eWxlLnRyYW5zZm9ybSgpLm9w
ZXJhdGlvbnMoKSkgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJhbnNmb3Jt
T3BlcmF0aW9uOjpST1RBVEUpIHsKLSAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3QgdHJlYXQg
dGhpcyBhcyBhIGZ1bGwgcm90YXRpb24uIFRoaXMgY291bGQgdGFrZSBhbmdsZSBpbnRvIGFjY291
bnQgdG8gcmVkdWNlIGluZmxhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gYm91bmRz
T2ZSb3RhdGluZ1JlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICAgICAgb3BlcmF0aW9u
LT5hcHBseSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgICAgICBpZiAo
IXRyYW5zZm9ybS5pc0FmZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYIHx8IG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFUUklY
XzNEKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQy
VHlwZSB0b0RlY29tcDsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZGVjb21wb3NlMih0b0Rl
Y29tcCk7Ci0gICAgICAgICAgICAgICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVzIGZyb20g
dXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgICAgICAgICAgICAgaWYg
KHRvRGVjb21wLmFuZ2xlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gdHJhbnNmb3JtLm1hcFJlY3Qo
ZmxvYXRCb3VuZHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFwcGx5VHJhbnNmb3Jt
T3JpZ2luKQotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkodHJhbnNmb3JtT3JpZ2luKTsKLQot
ICAgIGJvdW5kcyA9IExheW91dFJlY3QoZmxvYXRCb3VuZHMpOwotICAgIHJldHVybiB0cnVlOwot
fQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJp
eChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUs
IExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0
cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5kZXJlckJv
eCwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgIGlmICghdHJhbnNm
b3JtLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5cGUgZnJvbURlY29tcDsKLSAgICB0cmFuc2Zvcm0uZGVj
b21wb3NlMihmcm9tRGVjb21wKTsKLSAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMgdXMgZnJv
bSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICBpZiAoZnJvbURlY29t
cC5hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm91bmRzID0gTGF5b3V0UmVj
dCh0cmFuc2Zvcm0ubWFwUmVjdChib3VuZHMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLQotfQotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9B
bmltYXRpb25CYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQyMDRlZDc5
NmFlNTIxYWE4YjFjOGU0NzI4OTI0MDI0NTRhODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNs
dWRlICJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Lmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlQ29u
c3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlQW5pbWF0
aW9uOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheW91dFJlY3Q7
Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUaW1pbmdG
dW5jdGlvbjsKLQotZW51bSBjbGFzcyBBbmltYXRlQ2hhbmdlIHsKLSAgICBTdHlsZUJsZW5kZWQg
ICAgICAgICAgICA9IDEgPDwgMCwgLy8gU3R5bGUgd2FzIGNoYW5nZWQuCi0gICAgU3RhdGVDaGFu
Z2UgICAgICAgICAgICAgPSAxIDw8IDEsIC8vIEFuaW1hdGlvbiBzdGF0ZSgpIGNoYW5nZWQuCi0g
ICAgUnVubmluZ1N0YXRlQ2hhbmdlICAgICAgPSAxIDw8IDIsIC8vIEFuaW1hdGlvbiAicnVubmlu
ZyBvciBwYXVzZWQiIGNoYW5nZWQuCi19OwotCi1lbnVtIGNsYXNzIEFuaW1hdGlvbkltcGFjdCB7
Ci0gICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAgICAgPSAxIDw8IDAsCi0gICAgRm9yY2VzU3RhY2tp
bmdDb250ZXh0ICAgPSAxIDw8IDEKLX07Ci0KLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJsaWMg
UmVmQ291bnRlZDxBbmltYXRpb25CYXNlPgotICAgICwgcHVibGljIENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci0gICAgZnJp
ZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0
aW9uLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0gICAgdmlydHVhbCB+QW5pbWF0
aW9uQmFzZSgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZWxl
bWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IG92ZXJyaWRl
OwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uKCkgY29u
c3Q7Ci0KLSAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRoZSBz
dGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKLSAgICAvLyB0aGUg
YW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBkZWZlcnJl
ZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KLSAgICAvLyBJZiBzbywgd2Ugc3RheSBpbiB0
aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1cm5z
IHRoZSBzdGFydCB0aW1lKS4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3VycmVudCB0
aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byBBbmltYXRpb25TdGF0
ZTo6TG9vcGluZwotICAgIC8vIG9yIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcuCi0gICAgZW51bSBj
bGFzcyBBbmltYXRpb25TdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBOZXcsICAgICAgICAgICAg
ICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBydW5u
aW5nIHlldAotICAgICAgICBTdGFydFdhaXRUaW1lciwgICAgICAgICAgICAgLy8gc3RhcnQgdGlt
ZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBTdGFydFdhaXRTdHlsZUF2YWls
YWJsZSwgICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFuaW1h
dGlvbnMKLSAgICAgICAgU3RhcnRXYWl0UmVzcG9uc2UsICAgICAgICAgIC8vIGFuaW1hdGlvbiBz
dGFydGVkLCB3YWl0aW5nIGZvciByZXNwb25zZQotICAgICAgICBMb29waW5nLCAgICAgICAgICAg
ICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBsb29wIHRp
bWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgRW5kaW5nLCAgICAgICAgICAg
ICAgICAgICAgIC8vIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVyIHJ1bm5p
bmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgUGF1c2VkTmV3LCAgICAgICAgICAgICAgICAg
IC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24gd2FzIGNyZWF0ZWQKLSAgICAgICAgUGF1
c2VkV2FpdFRpbWVyLCAgICAgICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24g
c3RhcnRlZAotICAgICAgICBQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGUsICAgLy8gaW4gcGF1c2Ug
bW9kZSB3aGVuIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwCi0gICAgICAgIFBhdXNlZFdhaXRSZXNw
b25zZSwgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcgc3RhdGUK
LSAgICAgICAgUGF1c2VkUnVuLCAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQg
d2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQotICAgICAgICBEb25lLCAgICAgICAgICAg
ICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5kIHJl
bW92ZWQKLSAgICAgICAgRmlsbGluZ0ZvcndhcmRzICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBo
YXMgZW5kZWQgYW5kIGlzIHJldGFpbmluZyBpdHMgZmluYWwgdmFsdWUKLSAgICB9OwotCi0gICAg
ZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZUlucHV0IDogdWludDhfdCB7Ci0gICAgICAgIE1ha2VO
ZXcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0ZQotICAgICAg
ICBTdGFydEFuaW1hdGlvbiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQKLSAgICAg
ICAgUmVzdGFydEFuaW1hdGlvbiwgIC8vIGZvcmNlIGEgcmVzdGFydCBmcm9tIGFueSBzdGF0ZQot
ICAgICAgICBTdGFydFRpbWVyRmlyZWQsICAgLy8gc3RhcnQgdGltZXIgZmlyZWQKLSAgICAgICAg
U3R5bGVBdmFpbGFibGUsICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFydCBhbmlt
YXRpbmcKLSAgICAgICAgU3RhcnRUaW1lU2V0LCAgICAgIC8vIG1fc3RhcnRUaW1lIHdhcyBzZXQK
LSAgICAgICAgTG9vcFRpbWVyRmlyZWQsICAgIC8vIGxvb3AgdGltZXIgZmlyZWQKLSAgICAgICAg
RW5kVGltZXJGaXJlZCwgICAgIC8vIGVuZCB0aW1lciBmaXJlZAotICAgICAgICBQYXVzZU92ZXJy
aWRlLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQotICAgICAgICBS
ZXN1bWVPdmVycmlkZSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9uCi0gICAg
ICAgIFBsYXlTdGF0ZVJ1bm5pbmcsICAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5uaW5nCi0g
ICAgICAgIFBsYXlTdGF0ZVBhdXNlZCwgICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1c2Vk
Ci0gICAgICAgIEVuZEFuaW1hdGlvbiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBhbnkgc3Rh
dGUKLSAgICB9OwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIEFuaW1hdGlv
blN0YXRlOjpOZXcgdG8gc3RhcnQgYW5pbWF0aW9uCi0gICAgdm9pZCB1cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uU3RhdGVJbnB1dCwgZG91YmxlIHBhcmFtKTsKLQotICAgIC8vIEFuaW1hdGlv
biBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKLSAgICB2b2lkIG9uQW5pbWF0
aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLSAgICB7Ci0gICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIHN0
YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgfQotCi0gICAgLy8g
Q2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQotICAgIHZvaWQgdXBkYXRl
UGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSk7Ci0gICAgYm9vbCBwbGF5U3RhdGVQbGF5aW5n
KCkgY29uc3Q7Ci0KLSAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyIHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgcHJlQWN0aXZlKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGlt
ZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVB
dmFpbGFibGUgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
UmVzcG9uc2U7Ci0gICAgfQotCi0gICAgYm9vbCBwb3N0QWN0aXZlKCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotICAgIGJvb2wgZmls
bGluZ0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRp
b25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7IHJl
dHVybiAhcG9zdEFjdGl2ZSgpICYmICFwcmVBY3RpdmUoKTsgfQotICAgIGJvb2wgcnVubmluZygp
IGNvbnN0IHsgcmV0dXJuICFpc05ldygpICYmICFwb3N0QWN0aXZlKCk7IH0KLSAgICBib29sIHBh
dXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNQYXVzZWRT
dGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZE5ldyAmJiBzdGF0ZSA8PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOyB9Ci0g
ICAgc3RhdGljIGJvb2wgaXNSdW5uaW5nU3RhdGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUpIHsgcmV0
dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAmJiBz
dGF0ZSA8IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0KLSAgICBib29sIGluUGF1c2VkU3RhdGUo
KSBjb25zdCB7IHJldHVybiBpc1BhdXNlZFN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpOyB9Ci0gICAg
Ym9vbCBpblJ1bm5pbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUnVubmluZ1N0YXRlKG1fYW5p
bWF0aW9uU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
YXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0YXJ0VGlt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFJlc3BvbnNlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSBj
b25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRTdHlsZUF2YWlsYWJsZTsgfQotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9pc0FjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNjYWxl
ID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51bGxwdHIp
IGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKLQotICAgIHZpcnR1YWwg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0
ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0K
LSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBjb25zdDsKLQotICAg
IGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb247
IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbikgeyBt
X2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsgfQotCi0gICAg
Ly8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3aWxs
IG9ubHkgYmUgdGhlIGNhc2UgZm9yCi0gICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBpcyB1
c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKLSAgICAvLyBz
ZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3aWxs
IHByb2JhYmx5IG5vdCBnZXQKLSAgICAvLyBiYWNrIHRoZSBBbmltYXRpb25TdGF0ZUlucHV0OjpT
dGFydFRpbWVTZXQgaW5wdXQuCi0gICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25zdCB7
IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0aW9u
IGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PwotICAgIHZpcnR1YWwgYm9vbCBhZmZlY3RzUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCAvKnByb3BlcnR5Ki8pIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
Ym9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYWNjZWxlcmF0
ZWRPbmx5ICYmICFtX2lzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgaWYgKCFhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBpblJ1bm5pbmdTdGF0ZSgpIHx8IGluUGF1c2Vk
U3RhdGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoOyB9
Ci0gICAgYm9vbCBmaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2lmIEVOQUJMRShGSUxURVJTX0xF
VkVMXzIpCi0gICAgYm9vbCBiYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7IH0K
LSNlbmRpZgotICAgIGJvb2wgY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0KLSAg
ICAvLyBGcmVlemUgdGhlIGFuaW1hdGlvbjsgdXNlZCBieSBEdW1wUmVuZGVyVHJlZS4KLSAgICB2
b2lkIGZyZWV6ZUF0VGltZShkb3VibGUgdCk7Ci0KLSAgICAvLyBQbGF5IGFuZCBwYXVzZSBBUEkK
LSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0gICAgCi0gICAgZG91YmxlIGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIGNvbnN0OwotICAgIAotICAgIGRvdWJsZSBnZXRFbGFw
c2VkVGltZSgpIGNvbnN0OwotICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3aWxsIGFk
anVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KLSAgICB2b2lkIHNl
dEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0gICAgCi0gICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgpIAot
ICAgIHsKLSAgICAgICAgQVNTRVJUKHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKTsKLSAgICAg
ICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxl
LCAtMSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJyaWRlQW5p
bWF0aW9ucygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9u
cygpIHsgfQotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24oKSB7
IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgfQotCi0gICAgLy8gVGhlc2UgYXJlIGNhbGxl
ZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMgY2FuIGRv
IGFueSBleHRyYSB3b3JrCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91Ymxl
IC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0
aW9uKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1h
dGlvbkVuZChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICAKLSAgICAvLyB0aW1lT2Zm
c2V0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgd2hlbiB0aGUgYW5pbWF0aW9u
IHNob3VsZCBzdGFydC4gTmVnYXRpdmUgdmFsdWVzIGFyZSBPSy4KLSAgICAvLyBSZXR1cm4gdmFs
dWUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhwZWN0IGFuIGFzeW5jaHJvbm91cyBub3RpZnlBbmlt
YXRpb25TdGFydGVkKCkgY2FsbGJhY2suCi0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9u
KGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyB0aW1lT2Zm
c2V0IGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhbmltYXRpb24gaXMgYmVpbmcgcGF1c2VkLgot
ICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsg
fQotICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKmZpbGxpbmdGb3J3YXJkcyov
ID0gZmFsc2UpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRl
ZFN0eWxlKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0
ZSgpOwotCi0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1h
dGlvblN0YXRlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1l
bnQqKTsKLSAgICAKLSAgICB2b2lkIGdldFRpbWVUb05leHRFdmVudChTZWNvbmRzJiB0aW1lLCBi
b29sJiBpc0xvb3BpbmcpIGNvbnN0OwotCi0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lKGRvdWJs
ZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBkb3VibGUgb2Zmc2V0KSBjb25zdDsKLQotICAg
IC8vIFRoZXNlIHJldHVybiB0cnVlIGlmIHdlIGNhbiBlYXNpbHkgY29tcHV0ZSBhIGJvdW5kaW5n
IGJveCBieSBhcHBseWluZyB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gdG8gdGhlIGJvdW5kcyByZWN0
LgotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChjb25z
dCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJlY3Qm
IGJvdW5kcykgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRy
aXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBMYXlv
dXRSZWN0JiBib3VuZHMpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2lzQWNjZWxl
cmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2gg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxzZSB9
OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgYm9vbCBtX2JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFJl
ZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBDb21wb3NpdGVBbmlt
YXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAvLyBJZGVhbGx5IHRoaXMgd291bGQgYmUgYSBy
ZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xlYXJlZCBpZiBhbiBhbmltYXRpb24gaXMgZGVz
dHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFjay4KLSAgICBSZWY8QW5pbWF0aW9uPiBtX2Fu
aW1hdGlvbjsKLQotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV9zdGFydFRpbWU7Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRpbWUg
eyAwIH07Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3RvdGFsRHVyYXRpb247Ci0gICAgT3B0aW9u
YWw8ZG91YmxlPiBtX25leHRJdGVyYXRpb25EdXJhdGlvbjsKLQotICAgIEFuaW1hdGlvblN0YXRl
IG1fYW5pbWF0aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07Ci0gICAgYm9vbCBtX2Nv
bG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMmFjOWRhNzhkMzI2YzU4NDE1MmYyMzlmMjdkZTgzNDEyZjYxNzQuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4MDUg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkFu
aW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAi
RXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3Lmgi
Ci0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNpbmNs
dWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVHJhbnNpdGlvbkV2ZW50LmgiCi0jaW5jbHVk
ZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9uRXZl
bnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRo
YW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRl
Lgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9uVGltZXJEZWxheSB7IDE1X21zIH07Ci0v
LyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gMzBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBs
ZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9u
VGltZXJUaHJvdHRsZWREZWxheSB7IDMwX21zIH07Ci0KLWNsYXNzIEFuaW1hdGlvblByaXZhdGVV
cGRhdGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrKENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQotICAgICAg
ICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAgIHsKLSAg
ICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAg
fQotICAgIAotICAgIH5BbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2soKQotICAgIHsKLSAgICAg
ICAgbV9hbmltYXRpb25Db250cm9sbGVyLmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0KLSAg
ICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25Db250cm9s
bGVyOwotfTsKLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fYW5pbWF0aW9uVGltZXIoKnRo
aXMsICZDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZCkK
LSAgICAsIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKnRoaXMsICZDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCkK
LSAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQo
MCkKLSAgICAsIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24oZmFsc2UpCi0gICAg
LCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChmYWxzZSkKLXsKLX0KLQotQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSgpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBjb21wb3NpdGUg
YW5pbWF0aW9ucyBoZXJlIGJlY2F1c2UgdGhlCi0gICAgLy8gZGVzdHJ1Y3RvciBvZiBDb21wb3Np
dGVBbmltYXRpb24gd2lsbCBjYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBiYWNrLgotICAgIG1f
Y29tcG9zaXRlQW5pbWF0aW9ucy5jbGVhcigpOwotfQotCi1Db21wb3NpdGVBbmltYXRpb24mIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRpb24oRWxl
bWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnNldEhhc0NTU0FuaW1hdGlvbigpOwotCi0g
ICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJlKCZlbGVtZW50LCBb
Jl0gewotICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRoaXMpOwot
ICAgIH0pOwotCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudCgmZWxl
bWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3VzcGVu
ZEFuaW1hdGlvbnMoKTsKLQotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsKLX0K
LQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoRWxlbWVudCYgZWxl
bWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNDU1NBbmltYXRpb24oKSA9PSBtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuY29udGFpbnMoJmVsZW1lbnQpKTsKLQotICAgIGlmICghZWxlbWVudC5o
YXNDU1NBbmltYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1lbnQuY2xl
YXJIYXNDU1NBbmltYXRpb24oKTsKLQotICAgIGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMuZmluZCgmZWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5l
bmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAmZWxlbWVudCk7
Ci0KLSAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25zdCBF
dmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluZm8uZWxlbWVudC5wdHIo
KSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNo
LnJlbW92ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjdXJyZW50RWxlbWVudCkgewotICAgICAgICBy
ZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0gICAgCi0g
ICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUgc3Vz
cGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIGludmFsaWRhdGVTdHlsZUZv
clN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCi0gICAgLy8gRklYTUU6IFRoZSBjb2RlIGJlbG93
IGRvZXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cyByZWdhcmRp
bmcgc3VzcGVuZGVkIHN0YXRlLgotICAgIGF1dG8mIGFuaW1hdGlvbiA9ICppdC0+dmFsdWU7Ci0g
ICAgYm9vbCByZXN1bHQgPSBhbmltYXRpb24uaXNTdXNwZW5kZWQoKTsKLSAgICBhbmltYXRpb24u
Y2xlYXJFbGVtZW50KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMucmVtb3ZlKGl0KTsK
LQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNldENo
YW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBBbmltYXRpb25Qcml2YXRl
VXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotICAgIE9wdGlvbmFsPFNlY29uZHM+IHRp
bWVUb05leHRTZXJ2aWNlOwotICAgIGJvb2wgY2FsbGVkU2V0Q2hhbmdlZCA9IGZhbHNlOwotCi0g
ICAgZm9yIChhdXRvJiBjb21wb3NpdGVBbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMp
IHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqY29tcG9zaXRlQW5p
bWF0aW9uLnZhbHVlOwotICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpICYmIGFu
aW1hdGlvbi5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+
IHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlmICh0ICYm
ICghdGltZVRvTmV4dFNlcnZpY2UgfHwgdC52YWx1ZSgpIDwgdGltZVRvTmV4dFNlcnZpY2UudmFs
dWUoKSkpCi0gICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0LnZhbHVlKCk7Ci0g
ICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYgdGltZVRvTmV4dFNlcnZpY2UudmFs
dWUoKSA9PSAwX3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQgIT0gQ2Fs
bFNldENoYW5nZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9zaXRlQW5pbWF0aW9u
LmtleTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAg
ICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgICAgICAgICAg
Y2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICBpZiAoY2FsbGVkU2V0Q2hhbmdlZCkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdGltZVRvTmV4dFNlcnZpY2U7
Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlv
blRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotCi0gICAgY29uc3QgQ29tcG9zaXRlQW5pbWF0aW9uKiBj
b21wb3NpdGVBbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50KTsK
LSAgICBpZiAoIWNvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKSAmJiBjb21wb3NpdGVB
bmltYXRpb24tPmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSBj
b21wb3NpdGVBbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBpZiAoIXRpbWVU
b05leHRTZXJ2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hbmltYXRpb25UaW1l
ci5pc0FjdGl2ZSgpICYmIChtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfHwgbV9h
bmltYXRpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCkgPD0gdGltZVRvTmV4dFNlcnZpY2UudmFs
dWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25k
cz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFuZ2VkKTsK
LQotICAgIExPRyhBbmltYXRpb25zLCAidXBkYXRlQW5pbWF0aW9uVGltZXI6IHRpbWVUb05leHRT
ZXJ2aWNlIGlzICUuMmYiLCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZU9yKFNlY29uZHMgeyAtMSB9
KS52YWx1ZSgpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2VydmljZSwgd2Ugd2FudCB0
byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5nCi0gICAgaWYgKCF0aW1l
VG9OZXh0U2VydmljZSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgp
KQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3YW50IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdlIHN0YXJ0
IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRpbmcKLSAg
ICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byogcGFnZSA9
IG1fZnJhbWUucGFnZSgpOwotICAgICAgICBib29sIHNob3VsZFRocm90dGxlID0gcGFnZSAmJiBw
YWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgU2Vjb25kcyBkZWxheSA9IHNo
b3VsZFRocm90dGxlID8gYW5pbWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSA6IGFuaW1hdGlvblRp
bWVyRGVsYXk7Ci0KLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkgfHwg
bV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IGRlbGF5KQotICAgICAgICAgICAg
bV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhkZWxheSk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gc3RhcnQgYSBvbmUtc2hvdCB0
aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRPbmVT
aG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCkKLXsK
LSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKLXsKLSAgICAvLyBQ
cm90ZWN0IHRoZSBmcmFtZSBmcm9tIGdldHRpbmcgZGVzdHJveWVkIGluIHRoZSBldmVudCBoYW5k
bGVyCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICBib29sIHVwZGF0
ZVN0eWxlID0gIW1fZXZlbnRzVG9EaXNwYXRjaC5pc0VtcHR5KCkgfHwgIW1fZWxlbWVudENoYW5n
ZXNUb0Rpc3BhdGNoLmlzRW1wdHkoKTsKLQotICAgIC8vIGZpcmUgYWxsIHRoZSBldmVudHMKLSAg
ICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RGTW92ZShtX2V2
ZW50c1RvRGlzcGF0Y2gpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHNUb0Rpc3BhdGNo
KSB7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBldmVudC5lbGVtZW50OwotICAgICAgICBp
ZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQpCi0g
ICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50OjpjcmVhdGUo
ZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNldWRvRWxl
bWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgpKSwgV1RG
OjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1lbnQu
ZGlzcGF0Y2hFdmVudChBbmltYXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlwZSwgZXZl
bnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0VsZW1lbnRO
YW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6bnVsbG9wdCwgbnVsbHB0cikp
OwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hhbmdlc1RvRGlz
cGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBtX2VsZW1l
bnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwotCi0gICAgaWYgKHVwZGF0ZVN0eWxlKQotICAg
ICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVk
RGlzcGF0Y2hlcigpCi17Ci0gICAgaWYgKCFtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVy
LmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIuc3Rh
cnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBl
dmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAg
IG1fZXZlbnRzVG9EaXNwYXRjaC5hcHBlbmQoeyBlbGVtZW50LCBldmVudFR5cGUsIG5hbWUsIGVs
YXBzZWRUaW1lIH0pOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsK
LX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVudENoYW5n
ZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9E
aXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5nZXNUb0Rp
c3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1
bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVk
ZWREaXNwYXRjaGVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJlZCgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4g
dGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2VkKTsKLQot
ICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgpLT52
aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIC8vIFdlIG5lZWQgdG8g
a2VlcCB0aGUgZnJhbWUgYWxpdmUsIHNpbmNlIGl0IG93bnMgdXMuCi0gICAgUmVmPEZyYW1lPiBw
cm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICAvLyBUaGUgYW5pbWF0aW9uIHRpbWVyIG1pZ2h0IGZp
cmUgYmVmb3JlIHRoZSBsYXlvdXQgdGltZXIsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3ZSBtaWdo
dCBjcmVhdGUgc29tZSBhbmltYXRpb25zIHdpdGggaW5jb3JyZWN0Ci0gICAgLy8gdmFsdWVzIGlm
IHdlIGRvbid0IGxheW91dCBmaXJzdC4KLSAgICBpZiAobV9yZXF1aXJlc0xheW91dCkgewotICAg
ICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS5kb2N1bWVudCgpLT52aWV3KCkpIHsK
LSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAgICAg
ICAgZnJhbWVWaWV3LT5mb3JjZUxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVxdWly
ZXNMYXlvdXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYW5pbWF0aW9uVXBk
YXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBubwotICAg
IC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmltYXRpb25z
KQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0K
LSAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hhbmdl
ZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRvIGFu
IGltbWVkaWF0ZQotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQuIEl0IHdpbGwgdGhlbiBjYWxs
IGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0aW9uVGlt
ZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdheSwgdG8g
YXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlvbiBjb21w
bGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0gICAgZmly
ZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJl
ci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiBhbmltYXRpb24g
PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0gICAgaWYg
KCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYW5pbWF0aW9u
LT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSk7Ci19Ci0KLWJvb2wgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkg
Y29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVu
ZGVyZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHks
IHRydWUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVU
aHJvdHRsaW5nU3RhdGUoKQotewotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0KLSAgICBm
b3IgKGF1dG8qIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxk
RnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAg
ICAgICAgY2hpbGRGcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0YXRl
KCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlv
bkludGVydmFsKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBJTkZJTklUWSB9OwotCi0gICAgcmV0dXJuIFNl
Y29uZHMgeyBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfTsKLX0KLQotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQotewotICAg
IGlmIChpc1N1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdXNwZW5kQW5pbWF0
aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2ZXJzZSBz
dWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hp
bGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAg
ICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLQotICAgIG1f
aXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIWlzU3VzcGVuZGVkKCkpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2ZyYW1lLmRv
Y3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVzCi0gICAgZm9yIChGcmFtZSog
Y2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxk
LT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmxlZ2FjeUFuaW1hdGlvbigp
LnJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLX0KLQot
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uc0FyZVN1c3BlbmRl
ZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gaXNTdXNwZW5k
ZWQoKSB8fCBtX3N1c3BlbmRlZERvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7Ci19Ci0KLXZv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmRldGFjaEZyb21Eb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMucmVtb3ZlKGRvY3Vt
ZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFu
aW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKGFuaW1h
dGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci0KLSAgICBBbmltYXRp
b25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9yIChhdXRv
JiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZhbmlt
YXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5pbWF0aW9u
LnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3Vt
ZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFh
bmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBkZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgQW5pbWF0aW9u
UHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5pbWF0
aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1hdGlvbi52
YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1hdGlvblRp
bWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0QW5p
bWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAoIWFu
aW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkgfHwgYWxsb3dzTmV3QW5p
bWF0aW9uc1doaWxlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1
bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sIGFsbG93ZWQpCi17Ci0g
ICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBhbGxvd2VkOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGltZShF
bGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAg
ICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBvc2l0
ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNlQW5p
bWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxl
KCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVu
dCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAgQ29t
cG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVBbmlt
YXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRyYW5zaXRp
b25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQu
aW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3Bh
dGNoZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi1Nb25vdG9uaWNUaW1lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0aW9uVXBk
YXRlQ291bnQpOwotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpCi0gICAgICAg
IG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0KLSAg
ICByZXR1cm4gbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUudmFsdWUoKTsKLX0KLQotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5BbmltYXRpb25VcGRhdGUoKQotewot
ICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KQotICAgICAgICBtX2JlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICArK21fYmVnaW5BbmltYXRpb25V
cGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5k
QW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNv
dW50ID4gMCk7Ci0gICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCA9PSAxKSB7Ci0g
ICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgICAgIGlmICghbV93YWl0aW5nRm9yQXN5bmNT
dGFydE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICB9Ci0gICAgLS1tX2JlZ2luQW5pbWF0aW9uVXBkYXRl
Q291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlY2VpdmVk
U3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIExPRyhBbmltYXRp
b25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgcmVjZWl2ZWRTdGFydFRpbWVS
ZXNwb25zZSAlZiIsIHRoaXMsIHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwot
Ci0gICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotICAgIHN0
YXJ0VGltZVJlc3BvbnNlKHRpbWUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRlZFN0eWxlRm9yRWxlbWVudChF
bGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRpb25V
cGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBhdXRvIGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0aW9u
LT5nZXRBbmltYXRlZFN0eWxlKCk7Ci0gICAgaWYgKCFhbmltYXRpbmdTdHlsZSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFuaW1hdGluZ1N0eWxlOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRp
b24oRWxlbWVudCYgZWxlbWVudCwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIGF1
dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAg
IGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYW5pbWF0
aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBmYWxzZSkpCi0g
ICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbi0+Y29tcHV0ZUV4dGVu
dE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcyk7Ci19Ci0KLXVuc2lnbmVkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRv
Y3VtZW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAgICBmb3Ig
KGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBpZiAo
JmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBjb3Vu
dCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwotICAgIH0K
LQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1h
dGlvbikKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UucmVt
b3ZlKCZhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5hZGQoJmFu
aW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlbW92
ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvblRv
UmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFuaW1h
dGlvblRvUmVtb3ZlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
c3R5bGVBdmFpbGFibGUoKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFu
ZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3YWl0aW5nQW5p
bWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKQotICAgICAgICB3YWl0aW5nQW5p
bWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFk
ZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiBh
bmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQotewotICAgIC8vIElmIHdpbGxHZXRSZXNw
b25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3YWl0aW5n
IGZvciBhIHJlc3BvbnNlCi0gICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNhbGwgdG8g
bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgZG9uJ3Qg
bmVlZCB0byBhZGQgaXQgdG8gdGhpcyBsaXN0LiBXZSBqdXN0IHNldCBhIHdhaXRpbmdGb3JBUmVz
cG9uc2UgZmxhZyAKLSAgICAvLyB3aGljaCBzYXlzIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgcmVz
cG9uc2UuIElmIHdpbGxHZXRSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24gCi0gICAg
Ly8gaXMgbm90IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJhdGhlciBm
b3IgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCBmb3IgCi0gICAgLy8gYW5vdGhlciBhbmltYXRp
b24gdG8gd2hpY2ggaXQgd2lsbCBzeW5jLgotICAgIC8vCi0gICAgLy8gV2hlbiBlbmRBbmltYXRp
b25VcGRhdGUoKSBpcyBjYWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5nRm9yQVJl
c3BvbnNlIGZsYWcgaXMKLSAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4gYW5kIHdp
bGwgZG8gb3VyIHdvcmsgd2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwKLSAg
ICAvLyBjb21lcyBpbi4gSWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRpbmcgYSBu
b3RpZnlYWFhTdGFydGVkKCkgY2FsbCwgc28gd2Ugd2lsbAotICAgIC8vIGRvIG91ciB3b3JrIHJp
Z2h0IGF3YXkuIEluIGJvdGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFydFJlc3Bv
bnNlKCkgbWV0aG9kCi0gICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJzdCBjYXNl
IHdlIHNlbmQgaW4gdGhlIHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgpLgotICAg
IC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFuaW1hdGlv
blVwZGF0ZVRpbWUoKS4KLSAgICAvLwotICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBhbGwg
c29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2FtZSAK
LSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgotICAgIC8vCi0KLSAgICBpZiAod2ls
bEdldFJlc3BvbnNlKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9u
ID0gdHJ1ZTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5h
ZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlv
bkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JT
dGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICBpZiAobV9h
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKLSAgICAgICAg
bV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNU
aW1lIHRpbWUpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5kIHNlbmQg
dGhlbSBvbiB0aGVpciB3YXkKLQotICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uIDogbV9h
bmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKQotICAgICAgICBhbmltYXRpb24t
Pm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsKLSAgICAKLSAgICBtX2FuaW1hdGlvbnNX
YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKLSAgICBtX3dhaXRpbmdGb3JBc3lu
Y1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYgYW5pbWF0
aW9uKQotewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9uKTsKLQot
ICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7Ci0gICAg
cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5pbWF0aW9u
KTsKLQotICAgIGJvb2wgYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0gZmFsc2U7
Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRU
aW1lUmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+d2FpdGluZ0ZvclN0YXJ0VGlt
ZSgpICYmIGFuaW1hdGlvbi0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBhbnlBbmlt
YXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5bmNT
dGFydCkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNl
OwotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9sbGVyKEZy
YW1lJiBmcmFtZSkKLSAgICA6IG1fZGF0YShtYWtlVW5pcXVlPENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlPihmcmFtZSkpCi17Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6On5DU1NB
bmltYXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAoIW1f
ZGF0YS0+Y2xlYXIoZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlbGVtZW50
LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIHJldHVybjsK
LSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09
IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlKCk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0ZSBDU1NBbmltYXRpb25Db250cm9sbGVyOjp1
cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGJvb2wgaGFzT3JIYWRB
bmltYXRpb25zID0gKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zT3JUcmFuc2l0
aW9ucygpKSB8fCBuZXdTdHlsZS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpOwotICAgIGlm
ICghaGFzT3JIYWRBbmltYXRpb25zKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKGVs
ZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6Tm90
SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gRG9uJ3Qg
cnVuIHRyYW5zaXRpb25zIHdoZW4gcHJpbnRpbmcuCi0gICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQo
KS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAv
LyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEgaGFz
aHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQotICAgIC8vIGFnYWluc3QgdGhlIGFuaW1hdGlv
bnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gSWYgZGVzdGluYXRp
b24gdmFsdWVzCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0aW9uLiBX
ZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgotICAgIC8v
IGEgbmV3IHN0eWxlLgotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRp
b24gPSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBhdXRv
IHVwZGF0ZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9sZFN0eWxlLCBu
ZXdTdHlsZSk7Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKLSAg
ICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUuYW5pbWF0
aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewotICAgICAg
ICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICAgICAg
aWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkp
Ci0gICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAgIG1fZGF0
YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICBmcmFt
ZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXBkYXRlOwot
fQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
OmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKLXsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKLQotICAgIGlmIChyZW5kZXJl
ci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxlbWVu
dCgpKQotICAgICAgICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KCpy
ZW5kZXJlci5lbGVtZW50KCkpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3VsdCA9
IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLQotICAgIHJldHVybiBy
ZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y29tcHV0ZUV4dGVudE9m
QW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNv
bnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0cnVl
OwotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygp
KQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVFeHRl
bnRPZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIExPRyhBbmltYXRp
b25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlciAlcCBub3RpZnlBbmltYXRpb25TdGFydGVkIG9u
IHJlbmRlcmVyICVwLCB0aW1lPSVmIiwgdGhpcywgJnJlbmRlcmVyLCBzdGFydFRpbWUuc2Vjb25k
c1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7Ci0K
LSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAg
ICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRp
b25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9k
YXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBuYW1lLCB0KTsKLX0KLQotdW5zaWdu
ZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3Vt
ZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5udW1iZXJPZkFjdGl2
ZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25V
cGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9kYXRhLT5wYXVzZVRyYW5zaXRpb25BdFRp
bWUoZWxlbWVudCwgcHJvcGVydHksIHQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5zdHls
ZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVy
LCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNSdW5uaW5n
QWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuc3R5bGUo
KS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVy
KHJlbmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6
aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmlzU3VzcGVuZGVkKCk7
Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMoKQot
ewotICAgIExPRyhBbmltYXRpb25zLCAiY29udHJvbGxlciBpcyBzdXNwZW5kaW5nIGFuaW1hdGlv
bnMiKTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFuaW1hdGlv
bnMsICJjb250cm9sbGVyIGlzIHJlc3VtaW5nIGFuaW1hdGlvbnMiKTsKLSAgICBtX2RhdGEtPnJl
c3VtZUFuaW1hdGlvbnMoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjphbGxv
d3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2Rh
dGEtPmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi12b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChi
b29sIGFsbG93ZWQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVT
dXNwZW5kZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c2Vy
dmljZUFuaW1hdGlvbnMoKQotewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxsYmFja0Zp
cmVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwotfQotCi1T
ZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbkludGVydmFsKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25JbnRlcnZhbCgpOwotfQotCi1ib29sIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9uc0FyZVN1
c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJl
dHVybiBtX2RhdGEtPmRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJzdXNwZW5kaW5nIGFuaW1hdGlv
bnMgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1h
dGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsK
LSAgICBMT0coQW5pbWF0aW9ucywgInJlc3VtaW5nIGFuaW1hdGlvbnMgZm9yIGRvY3VtZW50ICVw
IiwgZG9jdW1lbnQpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJs
b2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3Vt
ZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlvbnNJ
Zk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMs
ICJhbmltYXRpb25zIG1heSBzdGFydCBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0KLSAg
ICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICBt
X2RhdGEtPnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKGRvY3VtZW50KTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAg
bV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5lbmRBbmltYXRp
b25VcGRhdGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0Fj
Y2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewot
ICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNj
ZWxlcmF0ZWQocHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Omhh
c0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmhhc0FuaW1hdGlvbnMo
KTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCBlY2Q2MDU4NDUzOThhYThlNzVhOWE1MjY1ZTAwZWY2NGQ2MjIyODEw
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5o
IgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJFbGVtZW50LmgiCi0j
aW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOwot
Y2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIExheW91dFJlY3Q7Ci1jbGFzcyBS
ZW5kZXJFbGVtZW50OwotCi1zdHJ1Y3QgQW5pbWF0aW9uVXBkYXRlIHsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBhY3Q+
IGltcGFjdDsKLQotfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcihGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7Ci0KLSAg
ICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYpOwotICAgIEFuaW1hdGlvblVwZGF0ZSB1
cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwotCi0gICAgLy8g
SWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5zZm9ybSBh
bmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCi0gICAgLy8gdXNpbmcgdGhlIGdpdmVuIHJl
Y3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBSZXR1cm4gZmFsc2UgaWYgdGhl
cmUgaXMgc29tZQotICAgIC8vIHRyYW5zZm9ybSBhbmltYXRpb24gYnV0IHdlIHdlcmUgdW5hYmxl
IHRvIGNoZWFwbHkgY29tcHV0ZSBpdHMgYWZmZWN0IG9uIHRoZSBleHRlbnQuCi0gICAgYm9vbCBj
b21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25z
dDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
IG9yIHRyYW5zaXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgdG8gYW5pbWF0ZS4KLSAgICB2b2lk
IG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYsIE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUo
RWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUgdXNl
ZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5zaXRp
b25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsgLy8g
VG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWduZWQg
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJlIHVzZWQg
b25seSBmb3IgdGVzdGluZwotICAgIAotICAgIC8vICJSdW5uaW5nIiBoZXJlIG1lYW5zIHRoZSBh
bmltYXRpb24gaXMgcnVubmluZyBvciBwYXVzZWQuCi0gICAgYm9vbCBpc1J1bm5pbmdBbmltYXRp
b25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLSAgICBi
b29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50
JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlzU3Vz
cGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHZv
aWQgc2VydmljZUFuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGluZ1N0YXRl
KCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBhbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0
OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50
KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRpb25zRm9y
RG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFuaW1hdGlvbnNB
cmVTdXNwZW5kZWRGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1c3BlbmRl
ZChEb2N1bWVudCopOwotCi0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAgIHZv
aWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFsbG93
c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwotICAgIAot
ICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KENT
U1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3Q7Ci0KLXByaXZh
dGU6Ci0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlPiBtX2RhdGE7Ci19OwotCi1jbGFzcyBBbmltYXRpb25VcGRhdGVCbG9jayB7Ci1wdWJsaWM6
Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlciogYW5pbWF0
aW9uQ29udHJvbGxlcikKLSAgICAgICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9u
Q29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xsZXIpCi0g
ICAgICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7
Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25VcGRhdGVCbG9jaygpCi0gICAgewotICAgICAg
ICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICAgICAgbV9hbmltYXRpb25Db250
cm9sbGVyLT5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250cm9sbGVyOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGQzMjAzNzdkZWNjOWM1MzRkZWViN2I0ZTk1Y2UwZWQyZDg1YWVkYjEuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgL2Rldi9u
dWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5o
IgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRl
IDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBEb2N1bWVudDsKLWNs
YXNzIEZyYW1lOwotCi1lbnVtIFNldENoYW5nZWQgeyBEb05vdENhbGxTZXRDaGFuZ2VkLCBDYWxs
U2V0Q2hhbmdlZCB9OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgdW50aWwgdGhlIG5leHQg
YW5pbWF0aW9uIG5lZWRzIHRvIGJlIHNlcnZpY2VkLCBvciAtMSBpZiB0aGVyZSBhcmUgbm9uZS4K
LSAgICBPcHRpb25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNl
dENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsK
LQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKEVsZW1l
bnQmKTsKLSAgICBib29sIGNsZWFyKEVsZW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRlU3R5bGVJ
Zk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnRVcGRhdGVTdHlsZUlmTmVl
ZGVkRGlzcGF0Y2hlcigpOwotICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1lbnQmLCBj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVs
YXBzZWRUaW1lKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKEVsZW1lbnQm
KTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2NvbXBvc2l0
ZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzU3VzcGVuZGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsK
LSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1lQ2Fs
bGJhY2tGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLSAgICBT
ZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN1c3BlbmRBbmlt
YXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnNG
b3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZv
ckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1c3Bl
bmRlZChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50Kik7
Ci0KLSAgICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYs
IENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmlt
YXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLQot
ICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50
JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwotICAgIHVuc2lnbmVkIG51bWJl
ck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OwotCi0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yRWxlbWVudChFbGVtZW50Jik7Ci0KLSAg
ICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVjdCYpIGNv
bnN0OwotCi0gICAgTW9ub3RvbmljVGltZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAg
ICAKLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRBbmltYXRp
b25VcGRhdGUoKTsKLSAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3Rvbmlj
VGltZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5p
bWF0aW9uQmFzZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3BvbnNlKTsK
LSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
KEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmlt
YXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChF
bGVtZW50Jik7Ci0KLSAgICBib29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9Ci0g
ICAgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7Ci0KLSAg
ICB2b2lkIHNldFJlcXVpcmVzTGF5b3V0KCkgeyBtX3JlcXVpcmVzTGF5b3V0ID0gdHJ1ZTsgfQot
Ci1wcml2YXRlOgotICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9pZCBz
dHlsZUF2YWlsYWJsZSgpOwotICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci0g
ICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLQotICAgIEhhc2hNYXA8
UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3NpdGVB
bmltYXRpb25zOwotICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7Ci0gICAgVGltZXIgbV91cGRh
dGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKLSAgICBGcmFtZSYgbV9mcmFtZTsKLQotICAgIHN0
cnVjdCBFdmVudFRvRGlzcGF0Y2ggewotICAgICAgICBSZWY8RWxlbWVudD4gZWxlbWVudDsKLSAg
ICAgICAgQXRvbVN0cmluZyBldmVudFR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAgICAg
ICBkb3VibGUgZWxhcHNlZFRpbWU7Ci0gICAgfTsKLSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNo
PiBtX2V2ZW50c1RvRGlzcGF0Y2g7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9lbGVtZW50
Q2hhbmdlc1RvRGlzcGF0Y2g7Ci0gICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3VzcGVuZGVkRG9j
dW1lbnRzOwotCi0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gbV9iZWdpbkFuaW1hdGlvblVw
ZGF0ZVRpbWU7Ci0KLSAgICB1c2luZyBBbmltYXRpb25zU2V0ID0gSGFzaFNldDxSZWZQdHI8QW5p
bWF0aW9uQmFzZT4+OwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0
eWxlOwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlOwotCi0gICAgaW50IG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLQotICAgIGJv
b2wgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbjsKLSAgICBib29sIG1faXNTdXNw
ZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZXF1aXJlc0xheW91dCB7IGZhbHNlIH07Ci0K
LSAgICAvLyBVc2VkIHRvIGZsYWcgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHByZXZpb3Vz
IGJ1Z2d5Ci0gICAgLy8gYmVoYXZpb3Igb2YgYWxsb3dpbmcgbmV3IHRyYW5zaXRpb25zIGFuZCBh
bmltYXRpb25zIHRvCi0gICAgLy8gcnVuIGV2ZW4gd2hlbiB0aGlzIG9iamVjdCBpcyBzdXNwZW5k
ZWQuCi0gICAgYm9vbCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMWJlNzU5YjA4MTYwOWJmNTMzMzQwZDMwYTAyNjE0NzM3NjUwNTAwNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwxODcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIw
MTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0IChD
KSAyMDEyLCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAq
IDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBs
ZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9y
cyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICog
ICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVy
bWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAq
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9S
IElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
Ci0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFO
WSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2lu
Y2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0KLSNp
bmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NDcm9z
c2ZhZGVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgot
I2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJD
YWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRlICJD
bGlwUGF0aE9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKLSNpbmNsdWRl
ICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1ZGUg
IkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKLSNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3Mu
aCIKLSNpbmNsdWRlICJHYXBMZW5ndGguaCIKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9w
ZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYXRyaXgzRFRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgot
I2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVk
ZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIK
LSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5jbHVk
ZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KLSNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBhcmlz
b24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1Rl
eHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGludCBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9tLCBpbnQg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dy
ZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
LCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBu
YXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKLX0K
LQotc3RhdGljIGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3RhdGlj
IGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05vcm1hbCgp
KSA/IHRvIDogYmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNzKTsKLX0K
LQotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBMZW5ndGhT
aXplJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiB7IGJsZW5kRnVuYyhhbmlt
LCBmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJvbS5o
ZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU2hhZG93
U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFNo
YWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAg
aWYgKGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGRvdWJsZSBmcm9tVmFs
ID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91YmxlIHRvVmFs
ID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSByZXN1bHQg
PSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICByZXR1cm4g
cmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dEYXRhKiBm
cm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VS
VChmcm9tICYmIHRvKTsKLSAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUoKSkKLSAg
ICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKLQotICAgIHJldHVybiBt
YWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5sb2NhdGlv
bigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFkaXVz
KCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5zcHJlYWQo
KSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUoKSwgdG8t
PnN0eWxlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFkb3coKSwK
LSAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNzKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRp
b25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNz
KQotewotICAgIGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKQot
ICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBwcm9ncmVz
cyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJvbSwg
cHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25jYXN0
PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUo
KSA6IExheW91dFNpemUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3Bl
cmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENsaXBQ
YXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVz
cykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAv
LyBPdGhlciBjbGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBub3QgYmUg
YW5pbWF0ZWQuCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hh
cGUgfHwgdG8tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCi0gICAgICAgIHJl
dHVybiB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25jYXN0PFNo
YXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7Ci0gICAgY29uc3QgQmFz
aWNTaGFwZSYgdG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCp0byku
YmFzaWNTaGFwZSgpOwotCi0gICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFwZSkpCi0g
ICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpj
cmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAg
ICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRvLT50eXBl
KCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAg
IGlmIChmcm9tLT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCi0gICAgICAgIHJldHVybiB0bzsK
LQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgpOwotICAg
IGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0KLSAgICBpZiAoIWZy
b21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgcmV0
dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3Mp
LCB0by0+Y3NzQm94KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJPcGVyYXRp
b24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsdGVyT3Bl
cmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBi
b29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQotewotICAgIEFTU0VSVCh0b09wKTsKLSAg
ICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJvdWdo
KTsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3BlcmF0
aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLSAgICBzaXplX3QgZnJvbVNp
emUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvU2l6ZSA9IHRvLm9w
ZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9tU2l6ZSwg
dG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAgICAg
ICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZyb20u
b3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlv
bj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0g
ICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1
bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9wID8g
YmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDogMCk7Ci0g
ICAgICAgIGlmIChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFw
cGVuZChibGVuZGVkT3ApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gaWRlbnRp
dHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAgICAg
IGlmIChwcm9ncmVzcyA+IDAuNSkKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygp
LmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICAgICAg
ZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcCA/
IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVz
cywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCi17Ci0gICAg
RmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGZ1
bmN0aW9uIGxpc3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlvbi4KLSAg
ICAKLSAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHByb3BlcnR5SUQp
IHsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5p
bS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmls
dGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxp
c3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3BlcnR5
QXBwbGVDb2xvckZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9yRmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0gICAg
ICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdHNNYXRjaCkKLSAgICAgICAgcmVz
dWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7Ci0g
ICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMgZG9uJ3Qg
bWF0Y2gsIHdlIGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhhdmUgYSB3
YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4gQ1NTLgotICAgICAgICAvLyBGb3Igbm93IHdlJ2xsIGp1
c3QgZmFpbCB0byBhbmltYXRlLgotICAgICAgICByZXN1bHQgPSB0bzsKLSAgICB9Ci0KLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVu
ZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNoZWRJbWFn
ZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAgICBG
aWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmlt
LCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotCi0gICAgYXV0byBpbWFnZVZhbHVlID0gQ1NTSW1hZ2VW
YWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1dGVkU3R5
bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBmaWx0ZXJS
ZXN1bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwotCi0gICAgYXV0byByZXN1bHQgPSBDU1NG
aWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92ZShmaWx0
ZXJWYWx1ZSkpOwotICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZpbHRlclJl
c3VsdCk7Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHJl
c3VsdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0
eSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEFueSBub24temVybyByZXN1bHQgbWVh
bnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8gd2Ug
Y29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQotICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlzaWJs
ZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29sbGFw
c2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KLSAgICBkb3VibGUg
ZnJvbVZhbCA9IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAgZG91
YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAgaWYg
KGZyb21WYWwgPT0gdG9WYWwpCi0gICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUgcmVzdWx0
ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJu
IHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5OjpW
aXNpYmxlID8gdG8gOiBmcm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zm
c2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25z
dCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiB0
bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhM
ZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3RoVmFsdWUo
KSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0
aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgVGV4dERl
Y29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiB0
bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNM
ZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVX
aXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0aFZh
bHVlKCksIHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpj
cmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoQm94JiBm
cm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgTGVuZ3Ro
Qm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNz
KSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0KCksIHRv
LnJpZ2h0KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmlt
LCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAg
ICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dyZXNzKSk7
Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTVkdMZW5ndGhWYWx1ZSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNWR0xlbmd0
aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
LXsKLSAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9yPFNWR0xl
bmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNv
bnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhW
YWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgc2l6ZV90IGZyb21MZW5ndGggPSBm
cm9tLnNpemUoKTsKLSAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7Ci0gICAgaWYgKCFm
cm9tTGVuZ3RoKQotICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOwotICAgIGlm
ICghdG9MZW5ndGgpCi0gICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6IHRvOwot
ICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOwotICAgIGlmIChmcm9tTGVuZ3Ro
ICE9IHRvTGVuZ3RoKSB7Ci0gICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZyb21MZW5n
dGgsIHRvTGVuZ3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKLSAgICAgICAg
ICAgIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsKLSAgICAg
ICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRvTGVuZ3Ro
OwotICAgIH0KLSAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgp
OwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0gICAgICAg
IHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwg
dG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOwotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGNy
b3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNhY2hl
ZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBk
b3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9mIHRoZSBl
eHRyZW1lcywgd2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdlLAotICAg
IC8vIG5vdCBhIGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25lIG9mIHRo
ZSBleGlzdGluZyBpbWFnZXMuCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0dXJuIGZy
b21TdHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4gdG9T
dHlsZUltYWdlOwotICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgfHwgIXRv
U3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvU3R5bGVJbWFnZTsK
LQotICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmZyb21T
dHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9IENTU0lt
YWdlVmFsdWU6OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRv
IHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENT
U1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUgPSBDU1ND
cm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZNb3ZlKHRv
SW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7Ci0gICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdlKiB0bywg
ZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJldHVy
biB0bzsKLQotICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7Ci0gICAgdG8gPSB0by0+
c2VsZWN0ZWRJbWFnZSgpOwotCi0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0dXJu
IHRvOyAgICAKLQotICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQgaW1hZ2Vz
LiBDcm9zcyBmYWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gICAgaWYgKGlzPFN0eWxlR2VuZXJh
dGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Ci0gICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHls
ZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykuaW1hZ2VWYWx1ZSgpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkp
IHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1c3QgcG9z
c2libGUgaWYgaW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KLSAgICAgICAgICAgIC8vIE90aGVyd2lz
ZSBmYWxsIGJhY2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCi0gICAgICAgICAgICBDU1NGaWx0
ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
ZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRl
ciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZyb21GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5p
bSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMo
KSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENT
U0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFk
ZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21H
ZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRlID0g
ZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIGlm
IChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7Ci0gICAgICAg
ICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVuZChmcm9t
Q3Jvc3NmYWRlLCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW9uIGJl
dHdlZW4gdHdvICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgotICAgIH0gZWxzZSBpZiAoaXM8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykpIHsK
LSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25jYXN0
PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlmIChp
czxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewotICAgICAgICAgICAgQ1NT
RmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFs
dWU+KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1h
Z2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdlKCkgPT0g
ZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZp
bHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3Bl
cmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAgfQotICAg
ICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRlIGFuZCBp
bWFnZSBzb3VyY2UuCi0gICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkg
JiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFnZUdlbmVy
YXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0
bykuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9H
ZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9
IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAgICAg
IGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+
KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZEltYWdlKCks
IEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVz
cyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdl
ZW4gaW1hZ2Ugc291cmNlIGFuZCBjcm9zcy1mYWRlLgotICAgIH0KLQotICAgIC8vIEZJWE1FOiBB
ZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQgaW1hZ2Vz
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI5Mwot
ICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJbWFn
ZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25jYXN0PFN0
eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0byksIHBy
b2dyZXNzKTsKLQotICAgIHJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSBOaW5lUGllY2VJ
bWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29u
c3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywgZG91Ymxl
IHByb2dyZXNzKQotewotICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgp
KQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBwb3J0IHRy
YW5zaXRpb25pbmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkgbW9yZSB0
aGFuIGltYWdlIGNvbnRlbnQuCi0KLSAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9IHRvLmlt
YWdlU2xpY2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGljZXMoKSB8
fCBmcm9tLm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRvLmZpbGwo
KSB8fCBmcm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8fCBmcm9t
LnZlcnRpY2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQotICAgICAgICByZXR1cm4gdG87
Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7Ci0gICAgICAg
IGlmIChmcm9tLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5pbWFnZSgp
LT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkpCi0gICAgICAgICAgICByZXR1cm4gdG87Ci0gICAg
fQotCi0gICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9tLmltYWdl
KCksIHRvLmltYWdlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS5pbWFnZVNsaWNlcygpLCBm
cm9tLmZpbGwoKSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJvbS5ob3Jp
em9udGFsUnVsZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKLX0KLQotI2lmIEVOQUJMRShWQVJJ
QVRJT05fRk9OVFMpCi0KLXN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBGb250VmFy
aWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgpKQotICAg
ICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgRm9udFZhcmlhdGlvblNl
dHRpbmdzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7Ci0gICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBhdXRvJiBmcm9tSXRl
bSA9IGZyb20uYXQoaSk7Ci0gICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOwotICAgICAg
ICBpZiAoZnJvbUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQotICAgICAgICAgICAgcmV0dXJu
IEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBpbnRlcnBvbGF0ZWQgPSBi
bGVuZEZ1bmMoYW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHByb2dyZXNz
KTsKLSAgICAgICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBvbGF0ZWQg
fSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMgaW5s
aW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25WYWx1
ZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUo
YmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8Zmxv
YXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxGb250U2Vs
ZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRTZWxl
Y3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9udFNlbGVj
dGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1ZSgp
KSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotfQotCi1jbGFz
cyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKLSAgICB7Ci0gICAg
fQotICAgIHZpcnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1bHQ7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4g
ZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRl
cnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyBy
ZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0gICAgCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29uc3QgPSAw
OwotI2VuZGlmCi0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJRCBtX3By
b3A7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5V3JhcHBlckdl
dHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoQ1NT
UHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKLSAgICAg
ICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9nZXR0
ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICgh
YSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChhLT4q
bV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNv
bnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9n
ZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJT
dHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwg
Z2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIg
dG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0g
ICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBUIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVy
KSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9wZXJ0eVdy
YXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihwcm9w
LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRl
clN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1f
c2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1f
Z2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipt
X3NldHRlcikoVCk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6KmdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAg
ICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmlt
LCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3Bl
cnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQot
cHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0cjxUPiYm
KTsKLX07Ci0KLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3As
IGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIHJldHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7Ci0gICAgfQotCi0gICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+Ojpt
X2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1f
Z2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJl
bmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFt
ZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoVCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAg
ewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVk
OgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Ci19OwotCi1jbGFzcyBQ
cm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PENsaXBQYXRoT3BlcmF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9wLCBDbGlw
UGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAgICAgICAg
OiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9wLCBnZXR0
ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVy
IGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZh
bHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikK
LSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQYXRo
QSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlwUGF0
aEIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNsaXBQYXRo
QikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWNsaXBQYXRoQSB8fCAh
Y2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gKmNs
aXBQYXRoQSA9PSAqY2xpcFBhdGhCOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoVkFSSUFUSU9O
X0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzIDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0
aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGluZ3MgKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
Rm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZh
cmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJz
IGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJ
ZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4g
dHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAoYS0+Km1f
Z2V0dGVyKSgpOwotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlv
blNldHRpbmdzQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiB2YXJpYXRpb25T
ZXR0aW5nc0EgPT0gdmFyaWF0aW9uU2V0dGluZ3NCOwotICAgIH0KLX07Ci0jZW5kaWYKLQotY2xh
c3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBl
cjxTaGFwZVZhbHVlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3Jh
cHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJz
IGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJ
ZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4g
dHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
U2hhcGVWYWx1ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU2hhcGVWYWx1
ZSogc2hhcGVCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKHNoYXBlQSA9PSBzaGFw
ZUIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaGFwZUEgfHwgIXNo
YXBlQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpzaGFwZUEg
PT0gKnNoYXBlQjsKLSAgICB9Ci19OwotCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJbWFn
ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihw
cm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5
bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU3R5bGVJbWFnZSog
aW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9F
cXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5V3Jh
cHBlckNvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBw
ZXJDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYp
KQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHByb3AsIGdl
dHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZv
aWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5
bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0
ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xv
ciY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3Im
Pjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9p
ZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFBy
b3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9w
ZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6c2V0T3BhY2l0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0T3BhY2l0
eShibGVuZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dyZXNzKSk7
Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0g
OiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPiB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVy
QWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6
dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4g
dHJ1ZTsgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0oKSwgYi0+
dHJhbnNmb3JtKCksIHByb2dyZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFw
cGVyRmlsdGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25z
Jj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5
V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdy
YXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwgc2V0dGVy
KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NTUHJvcGVy
dHlGaWx0ZXIKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAgfHwgcHJv
cGVydHkoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCi0jZW5kaWYKLSAgICAg
ICAgICAgIDsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlcikoKSwgKGIt
PipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRl
cikoKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgaW5saW5l
IHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKLXsKLSAg
ICBzaXplX3QgY291bnQ7Ci0gICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93ID0gc2hh
ZG93LT5uZXh0KCkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50OwotfQotCi1z
dGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNvbnN0IFNo
YWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cpCi17Ci0g
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dEYXRhKExh
eW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xvcjo6dHJh
bnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRl
ZmF1bHRJbnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Oklu
c2V0LCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBOZXZlckRl
c3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2lu
dCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRC
bGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJbnNl
dFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Oklu
c2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0KLSAgICBpZiAoc3JjU2hhZG93
KQotICAgICAgICByZXR1cm4gc3JjU2hhZG93OwotCi0gICAgaWYgKG90aGVyU2hhZG93LT5zdHls
ZSgpID09IFNoYWRvd1N0eWxlOjpJbnNldCkKLSAgICAgICAgcmV0dXJuIG90aGVyU2hhZG93LT5p
c1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEuZ2V0
KCkgOiAmZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKLQotICAgIHJldHVybiBvdGhlclNo
YWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YS5n
ZXQoKSA6ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKLX0KLQotY2xhc3MgUHJvcGVydHlXcmFw
cGVyU2hhZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNoYWRv
dyhDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiwgYm9vbCkpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFh
IHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAodHJ1ZSkg
ewotICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKLSAgICAgICAgICAgIGlmICghc2hh
ZG93QSAmJiAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAg
ICAgICAgLy8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cwotICAgICAgICAgICAgaWYgKCFz
aGFkb3dBIHx8ICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICAgICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAg
ICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIp
KCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgp
OwotCi0gICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dBKTsK
LSAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsKLQotICAg
ICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAxICYmIHRv
TGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kU2ltcGxl
T3JNYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IpLCBm
YWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFk
b3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKLSAgICB9Ci0KLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgU2hh
ZG93RGF0YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKLSAgICB7
Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwotICAg
ICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKLQotICAgICAgICB3aGlsZSAoc2hhZG93
QSB8fCBzaGFkb3dCKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cg
PSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKLSAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRv
d0EpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNo
YWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOwot
ICAgICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFkb3cu
Z2V0KCk7Ci0KLSAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKLSAgICAgICAgICAgICAgICBu
ZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRlZFNoYWRv
dykpOwotCi0gICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsKLQotICAg
ICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOwotICAgICAg
ICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOwotICAgICAgICB9
Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hhZG93
RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21MZW5ndGgs
IGludCB0b0xlbmd0aCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3dzIGluIFNo
YWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1hdGluZyBt
aXNtYXRjaGVkIGxpc3RzLAotICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNoIGZyb20g
dGhlIGVuZC4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9tU2hhZG93
cyhmcm9tTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAxOyBpID49
IDA7IC0taSkgewotICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOwotICAgICAg
ICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIFZl
Y3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAgIHRv
U2hhZG93c1tpXSA9IHNoYWRvd0I7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93Qi0+bmV4
dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5l
d1NoYWRvd0RhdGE7Ci0KLSAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5n
dGgsIHRvTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7ICsr
aSkgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkgPCBmcm9t
TGVuZ3RoID8gZnJvbVNoYWRvd3NbaV0gOiAwOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0
YSogdG9TaGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOwotCi0gICAgICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhmcm9t
U2hhZG93LCB0b1NoYWRvdyk7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBkc3RTaGFk
b3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7Ci0KLSAgICAgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5j
KGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICAvLyBJ
bnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRlci4KLSAg
ICAgICAgICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dEYXRhKSk7
Ci0gICAgICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQotICAgIGNv
bnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAgIHZv
aWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiwg
Ym9vbCk7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6IHB1
YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAg
ICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX2dldHRl
cihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29s
b3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQo
KSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBh
LT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAg
dG9Db2xvciA9IGItPmNvbG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0Nv
bG9yOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3IgdG9Db2xv
ciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9D
b2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKLSAg
ICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5j
b2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tQ29s
b3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgdmFsdWUoY29uc3Qg
UmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRl
cikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxl
KiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIC8v
IEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlv
bnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgp
KSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAi
IDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykg
PDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotCi1lbnVt
IE1heWJlSW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNzIFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwg
Y29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9yJiAoUmVu
ZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnZp
c2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5
V3JhcHBlckNvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92aXNpdGVk
V3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNpdGVkR2V0
dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFByb3BlcnR5V3JhcHBlclZp
c2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlkQ29sb3JU
YWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBDb2xvciYg
KFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9w
ZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQotICAg
ICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0gICAgewot
ICAgIH0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbV93cmFwcGVy
LT5lcXVhbHMoYSwgYikgJiYgbV92aXNpdGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOwotICAgIH0K
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV93cmFw
cGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVk
V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0JsZW5kKGEs
IGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVu
ZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93cmFwcGVy
OwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3Zp
c2l0ZWRXcmFwcGVyOwotfTsKLQotLy8gV3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBhbmltYXRh
YmxlIHByb3BlcnR5IGluIGEgRmlsbExheWVyCi1jbGFzcyBGaWxsTGF5ZXJBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5SUQg
cHJvcGVydHkpCi0gICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICB7Ci0gICAgfQot
ICAgIHZpcnR1YWwgfkZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wZXJ0eTsgfQotCi0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqLCBj
b25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIq
LCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLQotI2lmICFMT0dfRElTQUJM
RUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOwotI2Vu
ZGlmCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLX07Ci0KLXRlbXBs
YXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyIDog
cHVibGljIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcik7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKEZpbGxMYXllcjo6KmdldHRlciko
KSBjb25zdCkKLSAgICAgICAgOiBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KHByb3BlcnR5KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsK
LSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0Ci0gICAg
ewotICAgICAgICByZXR1cm4gKGxheWVyLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxP
R19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNv
bnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywg
c3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8
ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwg
VGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAi
IC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAg
ICBUIChGaWxsTGF5ZXI6OiptX2dldHRlcikoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9n
cmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXll
ciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9H
X1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFBy
b3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojpwcm9w
ZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBG
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQotICAgICAg
ICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6
Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwotfTsKLQotY2xhc3MgRmlsbExh
eWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRnZSAoRmls
bExheWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipvcmlnaW5T
ZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIpCi0gICAg
ICAgICwgbV9sZW5ndGhTZXR0ZXIobGVuZ3RoU2V0dGVyKQotICAgICAgICAsIG1fb3JpZ2luR2V0
dGVyKG9yaWdpbkdldHRlcikKLSAgICAgICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5TZXR0ZXIp
Ci0gICAgICAgICwgbV9mYXJFZGdlKGZhckVkZ2UpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0b0xlbmd0
aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+Ojpt
X2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+Km1fb3Jp
Z2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5HZXR0ZXIp
KCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCAmJiBm
cm9tRWRnZSA9PSB0b0VkZ2U7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICBMZW5n
dGggdG9MZW5ndGggPSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBM
ZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdlID0g
KGEtPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3Jp
Z2luR2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyb21FZGdlICE9IHRvRWRnZSkg
ewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBjYWxjIGV4
cHJlc3Npb24sCi0gICAgICAgICAgICBpZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQotICAgICAg
ICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgoZnJv
bUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdlKSB7Ci0g
ICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgo
dG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChkc3QtPiptX29yaWdpblNldHRlcikoZnJvbUVk
Z2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZlIHRvIHRo
ZSBsZWZ0L3RvcCBlZGdlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgKGRz
dC0+Km1fbGVuZ3RoU2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9MZW5ndGgs
IHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwg
Z2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIg
dG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVz
cGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0g
ICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX2xlbmd0
aFNldHRlcikoTGVuZ3RoKTsKLSAgICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdldHRlciko
KSBjb25zdDsKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRnZSk7Ci0g
ICAgRWRnZSBtX2ZhckVkZ2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEZp
bGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBUKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5
ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNv
bnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmlt
YXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAgICAgIDw8
ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGEp
Ci0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQqPjo6dmFsdWUoYikKLSAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3Jt
YXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5k
aWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShSZWZQdHI8
VD4mJik7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJbWFnZSog
KEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVyKShS
ZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogRmlsbExheWVyUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewot
ICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlciko
KTsKLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAg
ICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0K
LQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9w
ZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwg
IiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9n
cmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotfTsKLQot
Y2xhc3MgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICB0eXBlZGVmIGNvbnN0IEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0dGVyKSgp
IGNvbnN0OwotICAgIHR5cGVkZWYgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNBY2Nl
c3NvcikoKTsKLQotICAgIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgTGF5ZXJzR2V0dGVyIGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNzb3IpCi0g
ICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAgICAg
LCBtX2xheWVyc0dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9sYXllcnNBY2Nlc3NvcihhY2Nl
c3NvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsKLSAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25YOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eSwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZGaWxs
TGF5ZXI6OmJhY2tncm91bmRYT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWE9yaWdp
biwgRWRnZTo6UmlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
TWFza1Bvc2l0aW9uWToKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0g
bWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZG
aWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExheWVy
OjpiYWNrZ3JvdW5kWU9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmlnaW4sIEVk
Z2U6OkJvdHRvbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eUJhY2tncm91bmRTaXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3Vu
ZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICAgICAg
ICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXplTGVuZ3Ro
LCAmRmlsbExheWVyOjpzZXRTaXplTGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgICAgICAgICAgbV9maWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0
eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6c2V0SW1h
Z2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFh
IHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIGZyb21M
YXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVyID0g
JihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0
b0xheWVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5l
cXVhbHMoZnJvbUxheWVyLCB0b0xheWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwotICAgICAgICAg
ICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAg
ICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8q
IGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgICAgIHdoaWxl
IChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2ZpbGxMYXll
clByb3BlcnR5V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxheWVyLCBw
cm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAgICAgICAg
ICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0TGF5ZXIgPSBkc3RM
YXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxl
KiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBm
aW5hbAotICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0
ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlcikoKTsK
LSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVyKSgpOwot
Ci0gICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAg
ICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIsIGFMYXll
ciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQo
KTsKLSAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0
TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyOwotCi0gICAgTGF5ZXJzR2V0dGVy
IG1fbGF5ZXJzR2V0dGVyOwotICAgIExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNzb3I7Ci19
OwotCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFZl
Y3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVycykKLSAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAgICAgICAs
IG1fcHJvcGVydHlXcmFwcGVycyhXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09
IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1f
cHJvcGVydHlXcmFwcGVycykgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwg
YikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCi0g
ICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAg
ICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBkc3QsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgd3Jh
cHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5k
KGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29uc3QgVmVjdG9y
PEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygpIGNvbnN0
IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQotCi1wcml2YXRlOgotICAgIFZlY3RvcjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwotfTsKLQot
Y2xhc3MgUHJvcGVydHlXcmFwcGVyRmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9w
ZXJ0eVdyYXBwZXJGbGV4KCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KENTU1Byb3BlcnR5RmxleCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAg
ICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0
dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkgPT0g
Yi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygpOwotICAg
IH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBk
c3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGItPmZsZXhC
YXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5kRnVuYyhh
bmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAgICAgICBk
c3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwgYi0+Zmxl
eFNocmluaygpLCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0cmVhbTo6
Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQotI2VuZGlm
Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3AsIFNWR1Bh
aW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENvbG9yIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQotICAgICAgICAsIG1fcGFpbnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikKLSAgICAg
ICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsK
LSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlciko
KSAhPSAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotCi0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFp
bnRzIHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgotICAgICAgICAvLyBGb3IgZXZlcnl0aGlu
ZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKLSAg
ICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgot
ICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJH
QkNvbG9yKSB7Ci0gICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgp
OwotICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAg
ICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJvbUNvbG9y
LmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAg
ICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICB0b0NvbG9yID0g
Q29sb3IoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRl
cikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCi0gICAgICAgICAgICB8fCAoYi0+Km1fcGFp
bnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKLSAg
ICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJl
dHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBm
cm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgU1ZH
UGFpbnQgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMo
cHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTVkdQYWludFR5cGUg
KFJlbmRlclN0eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29sb3IgKFJl
bmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipt
X3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRT
dHlsZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVl
Pj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5
V3JhcHBlckZvbnRTdHlsZSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFsPEZv
bnRTZWxlY3Rpb25WYWx1ZT4+KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5bGU6OmZv
bnRJdGFsaWMsICZSZW5kZXJTdHlsZTo6c2V0Rm9udEl0YWxpYykKLSAgICB7Ci0gICAgfQotCi0g
ICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZyb20t
PmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNjcmlwdGlv
bigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5mb250RGVz
Y3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAgICB9
Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJT
dHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGF1dG8gZGlzY3JldGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCi0gICAgICAgIGF1
dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAgIGlmIChk
aXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3MgPCAwLjUg
PyBmcm9tIDogdG8pLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7Ci0KLSAgICAg
ICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKLSAgICAgICAgYXV0
byB0b0ZvbnRJdGFsaWMgPSB0by0+Zm9udEl0YWxpYygpOwotICAgICAgICBhdXRvIGJsZW5kZWRG
b250SXRhbGljID0gcHJvZ3Jlc3MgPCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0YWxp
YzsKLSAgICAgICAgaWYgKCFkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRGb250SXRhbGlj
ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHByb2dyZXNz
KTsKLQotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkc3QtPmZv
bnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBk
c3QtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoYmxl
bmRlZEZvbnRJdGFsaWMpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKGJs
ZW5kZWRTdHlsZUF4aXMpOwotICAgICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3Zl
KGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVu
dEZvbnRTZWxlY3Rvcik7Ci0gICAgfQotfTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb25X
cmFwcGVyTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQotICAgIHsK
LSAgICAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJlIHdl
IHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NBbmltYXRp
b25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVk
PENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD4gbWFwOwotICAgICAgICByZXR1cm4gbWFw
OwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi0gICAgewotICAgICAgICBpZiAocHJv
cGVydHlJRCA8IGZpcnN0Q1NTUHJvcGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQcm9wZXJ0
eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVuc2lnbmVkIHdyYXBw
ZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCk7Ci0gICAgICAgIGlmICh3
cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnNbd3Jh
cHBlckluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBBU1NF
UlQoaW5kZXggPCBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJuIG1f
cHJvcGVydHlXcmFwcGVyc1tpbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQgc2l6
ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKTsKLSAg
ICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCk7Ci0g
ICAgfkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOwotCi0gICAgdW5z
aWduZWQgY2hhciYgaW5kZXhGcm9tUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQp
Ci0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJRCAtIGZp
cnN0Q1NTUHJvcGVydHldOwotICAgIH0KLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKLSAgICB1bnNp
Z25lZCBjaGFyIG1fcHJvcGVydHlUb0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOwotCi0gICAgc3Rh
dGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9IFVD
SEFSX01BWDsKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcD47Ci19OwotCi1DU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBw
ZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCi17Ci0gICAgLy8gYnVpbGQg
dGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25zIGFuZCBi
bGVuZHMKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxlTG9uZ2hh
bmRQcm9wZXJ0eVdyYXBwZXJzW10gPSB7Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0
TGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSaWdo
dCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6
dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVyU3R5
bGU6OnNldEJvdHRvbSksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdpZHRo
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbldpZHRo
LCAmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRoKSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCAmUmVu
ZGVyU3R5bGU6Om1heFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKLQotICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1pbkhl
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRNaW5IZWlnaHQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1heEhlaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJGbGV4KCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCAm
UmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFdp
ZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3Jk
ZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZS
ZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5SaWdodCwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAm
UmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2luQm90dG9t
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRkaW5n
TGVmdCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6cGFk
ZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6
OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5
bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSksCi0KLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENh
cmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6
Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKLQotICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5k
Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExp
bmtCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5k
Q29sb3IpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZEltYWdlLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5k
ZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBTdHlsZUltYWdl
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6
bGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAotICAgICAg
ICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFn
ZSwgJlJlbmRlclN0eWxlOjptYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdlKSwK
LQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlckltYWdlU291cmNlKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VT
bGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhC
b3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFn
ZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgpLAotICAgICAgICBuZXcg
TGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVy
SW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHls
ZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5
bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VTb3Vy
Y2UpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUltYWdlJj4o
Q1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdl
LCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZSksCi0KLSAgICAgICAgbmV3IEZpbGxMYXll
cnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAmUmVuZGVy
U3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExh
eWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uWSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgRmlsbExheWVy
c1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyks
Ci0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0
QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0
eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLQotICAgICAgICBuZXcgRmlsbExheWVyc1By
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5kZXJTdHls
ZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAgICAgICAg
bmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRp
b25ZLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFza0xh
eWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza1NpemUsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjpl
bnN1cmVNYXNrTGF5ZXJzKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUsICZSZW5k
ZXJTdHlsZTo6c2V0Rm9udFNpemUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2ln
bmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKLSAgICAgICAg
bmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9wZXJ0eUNv
bHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1u
R2FwKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3Ro
PihDU1NQcm9wZXJ0eVJvd0dhcCwgJlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJTdHlsZTo6
c2V0Um93R2FwKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4o
Q1NTUHJvcGVydHlDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRl
clN0eWxlOjpzZXRDb2x1bW5Db3VudCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6b250
YWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVydGlj
YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRleCwgJlJl
bmRlclN0eWxlOjpzcGVjaWZpZWRaSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lmaWVkWklu
ZGV4KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlPcnBo
YW5zLCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFucyksCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dzLCAmUmVu
ZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0eWxl
OjpzcGVjaWZpZWRMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQs
ICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zm
c2V0KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPdXRs
aW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5
bGU6OnNldExldHRlclNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50LCAmUmVu
ZGVyU3R5bGU6OnNldFRleHRJbmRlbnQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5UGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmUs
ICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmUpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnBl
cnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblgpLAot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVP
cmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpz
ZXRQZXJzcGVjdGl2ZU9yaWdpblkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1Pcmln
aW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0
eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblkp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRyYW5zZm9y
bU9yaWdpblosICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjpz
ZXRUcmFuc2Zvcm1PcmlnaW5aKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdy
YXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVy
U3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wTGVm
dFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMp
LAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90
dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKSwK
LSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0
b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlWaXNp
YmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0VmlzaWJp
bGl0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Wm9v
bSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0UmV0dXJu
VmFsdWUpLAotCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJTdHlsZTo6
c2V0Q2xpcCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0
eSgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKSwK
LSAgICAgICAgCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlG
aWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlciksCi0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZp
bHRlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmJhY2tk
cm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKLSNlbmRpZgotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRl
ciwgJlJlbmRlclN0eWxlOjphcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEFwcGxl
Q29sb3JGaWx0ZXIpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQ
cm9wZXJ0eUNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNl
dENsaXBQYXRoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVy
dHlTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6
OnNldFNoYXBlT3V0c2lkZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0
eWxlOjpzZXRTaGFwZU1hcmdpbiksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5U2hhcGVJbWFnZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFwZUltYWdl
VGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAotCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNv
bHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVs
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Nv
bHVtblJ1bGVDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0
ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZhbGlkQ29s
b3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRT
dHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciksCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRG
aWxsQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RmlsbENvbG9y
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpi
b3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAmUmVuZGVy
U3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0
ZWRMaW5rQm9yZGVyTGVmdENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0
ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJbnZhbGlk
Q29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3Jk
ZXJUb3BDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRl
ZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclRv
cENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciksCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwg
TWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxpbmVDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciksCi0KLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJlbmRlclN0
eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgJlJlbmRl
clN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5kZXJT
dHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVuZGVyU3R5
bGU6OmZpbGxQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0RmlsbFBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFjaXR5LCAm
UmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRU
eXBlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0U3Ry
b2tlUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAmUmVuZGVy
U3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFZl
Y3RvcjxTVkdMZW5ndGhWYWx1ZT4+KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAmUmVuZGVy
U3R5bGU6OnN0cm9rZURhc2hBcnJheSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNoQXJyYXkp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0cm9rZU1p
dGVybGltaXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0eWxlOjpz
ZXRTdHJva2VNaXRlckxpbWl0KSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5Q3gsICZSZW5kZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0Q3gpLAot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZSZW5kZXJT
dHlsZTo6Y3ksICZSZW5kZXJTdHlsZTo6c2V0Q3kpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5bGU6OnNl
dFIpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UngsICZS
ZW5kZXJTdHlsZTo6cngsICZSZW5kZXJTdHlsZTo6c2V0UngpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZSZW5kZXJT
dHlsZTo6c2V0UnkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5U3Ryb2tlRGFzaG9mZnNldCwgJlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0LCAmUmVu
ZGVyU3R5bGU6OnNldFN0cm9rZURhc2hPZmZzZXQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ryb2tlV2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVyU3R5bGU6
OnNldFgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WSwg
JlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5bGU6OnNldFkpLAotCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6
OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9vZENvbG9y
LCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RDb2xvciks
Ci0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdG9wT3Bh
Y2l0eSwgJlJlbmRlclN0eWxlOjpzdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRTdG9wT3Bh
Y2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQ
cm9wZXJ0eVN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0U3RvcENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlk
Q29sb3IoQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0aW5nQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0TGlnaHRpbmdDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0LCAmUmVu
ZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNlbGluZVNo
aWZ0VmFsdWUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihD
U1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0eWxlOjpz
ZXRLZXJuaW5nKSwKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZhcmlhdGlv
blNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJlbmRlclN0
eWxlOjpzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MpLAotI2VuZGlmCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICZS
ZW5kZXJTdHlsZTo6Zm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0KSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5
Rm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6c2V0
Rm9udFN0cmV0Y2gpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCksCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+KENTU1By
b3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERlY29yYXRp
b25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25lc3MpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENTU1Byb3Bl
cnR5VGV4dFVuZGVybGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5lT2Zmc2V0
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRVbmRlcmxpbmVPZmZzZXQpLAotICAgIH07Ci0gICAgY29u
c3QgdW5zaWduZWQgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZ
X0xFTkdUSChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKLQotICAgIHN0YXRp
YyBjb25zdCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzW10gPSB7
Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQtY29sb3Is
IGJhY2tncm91bmQtcG9zaXRpb24sIGJhY2tncm91bmQtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8gZm9yIGZv
bnQtc2l6ZSwgZm9udC13ZWlnaHQKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrLCAvLyBm
b3IgbWFzay1wb3NpdGlvbgotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwK
LSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQsIENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCi0gICAgICAgIENT
U1Byb3BlcnR5Qm9yZGVyQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzLAot
ICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRl
ciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwKLSAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJTcGFjaW5nLAotICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9yIGxpc3Qt
c3R5bGUtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCi0gICAgICAgIENTU1Byb3Bl
cnR5T3V0bGluZSwKLSAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAotICAgICAgICBDU1NQcm9w
ZXJ0eVdlYmtpdFRleHRTdHJva2UsCi0gICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVsZSwKLSAg
ICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxlU2hvcnRo
YW5kUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUT0RPOgotICAgIC8vCi0gICAgLy8gIENTU1Byb3Bl
cnR5VmVydGljYWxBbGlnbgotICAgIC8vCi0gICAgLy8gQ29tcG91bmQgcHJvcGVydGllcyB0aGF0
IGhhdmUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBhbmltYXRhYmxlOgotICAgIC8vCi0gICAg
Ly8gIENTU1Byb3BlcnR5Q29sdW1ucwotICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxl
Y3QKLQotICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0gICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1fcHJvcGVy
dHlUb0lkTWFwW2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKLQotICAgIENPTVBJ
TEVfQVNTRVJUKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0YWJsZVBy
b3BlcnRpZXNNdXN0QmVMZXNzVGhhblVDaGFyTWF4KTsKLSAgICBtX3Byb3BlcnR5V3JhcHBlcnMu
cmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQg
KyBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50KTsKLQotICAgIC8vIEZpcnN0IHdl
IHB1dCB0aGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBtYXAsIHNv
IHRoZSBzaG9ydGhhbmQtYnVpbGRpbmcKLSAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0uCi0KLSAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0Nv
dW50OyArK2kpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ciA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbaV07Ci0gICAgICAgIG1fcHJv
cGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2U+KHdyYXBwZXIpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJ
RCh3cmFwcGVyLT5wcm9wZXJ0eSgpKSA9IGk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsKLSAgICAg
ICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRp
ZXNbaV07Ci0gICAgICAgIGF1dG8gc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJv
cGVydHlJRCk7Ci0gICAgICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKQotICAgICAgICAgICAg
Y29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uq
PiBsb25naGFuZFdyYXBwZXJzOwotICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoc2hvcnRoYW5kLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChhdXRvIGxvbmdo
YW5kIDogc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5kZXggPSBp
bmRleEZyb21Qcm9wZXJ0eUlEKGxvbmdoYW5kKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVySW5k
ZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4
XSk7Ci0gICAgICAgICAgICBsb25naGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtX3Byb3Bl
cnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAgICBt
X3Byb3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJv
cGVydHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7Ci0g
ICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hh
bmRQcm9wZXJ0aWVzQ291bnQgKyBpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZ2F0aGVyRW5j
bG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBw
cm9wZXJ0eVNldCkKLXsKLSAgICBpZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqIHNo
b3J0aGFuZFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqPih3
cmFwcGVyKTsKLSAgICBib29sIGNvbnRhaW5lZCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYgY3Vy
cldyYXBwZXIgOiBzaG9ydGhhbmRXcmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsKLSAgICAg
ICAgaWYgKGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHksIGN1cnJX
cmFwcGVyLCBwcm9wZXJ0eVNldCkgfHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCi0gICAgICAgICAgICBjb250YWluZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChjb250
YWluZWQpCi0gICAgICAgIHByb3BlcnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgpKTsKLQot
ICAgIHJldHVybiBjb250YWluZWQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIHRv
IHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5k
UHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDU1NQcm9w
ZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChwcm9wICE9
IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53
cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAgICAgd3Jh
cHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0jaWYgIUxPR19ESVNBQkxF
RAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsKLSNlbmRp
ZgotICAgIH0KLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0eUFuaW1h
dGFibGUoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLX0K
LQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxl
cmF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRv
bigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBw
ZXItPmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwotfQotCi0vLyBOb3RlOiB0aGlz
IGlzIGluZWZmaWNpZW50LiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0aW9uQXRU
aW1lKCkuCi1IYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmlt
YXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkp
Ci17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgSGFzaFNldDxDU1NQcm9w
ZXJ0eUlEPiBmb3VuZFByb3BlcnRpZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1h
cC5zaXplKCk7ICsraSkKLSAgICAgICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGll
cyhwcm9wZXJ0eSwgbWFwLndyYXBwZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVzKTsKLQot
ICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRp
b246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0gICAgICAg
IHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJv
b2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJv
cGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
Ci17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHBy
b3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2FuSW50ZXJw
b2xhdGUoYSwgYik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DU1NQcm9wZXJ0eUlEIENTU1By
b3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFsPGJvb2w+
JiBpc1Nob3J0aGFuZCkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1h
cCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0KLSAgICBp
ZiAoaSA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkpCi0gICAg
ICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKiB3cmFwcGVyID0gbWFwLndyYXBwZXJGb3JJbmRleChpKTsKLSAgICBpc1Nob3J0
aGFuZCA9IHdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpOwotICAgIHJldHVybiB3cmFwcGVy
LT5wcm9wZXJ0eSgpOwotfQotCi1pbnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVByb3Bl
cnRpZXMoKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLnNpemUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDU0
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVk
ZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENTU1Byb3Bl
cnR5QW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5QW5pbWF0
YWJsZShDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlByb3BlcnR5
SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVz
RXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1By
b3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7Ci0g
ICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0aW9uYWw8
Ym9vbD4mIGlzU2hvcnRoYW5kKTsKLSAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMoKTsK
LQotICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9ydGhhbmRz
QWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBp
ZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKLSAgICBzdGF0aWMg
dm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENT
U1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M0OWJjZjZk
OTFmNGRjZGY1NDY3MTRhNTQzNjgzZTEyZDQ3OTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJB
cHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1
c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0
aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAK
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJ
QlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
IEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29u
ZmlnLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0
aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkltcGxpY2l0
QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJM
b2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclN0
eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICA6IG1fYW5p
bWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotewotICAgIG1fc3VzcGVuZGVk
ID0gbV9hbmltYXRpb25Db250cm9sbGVyLmlzU3VzcGVuZGVkKCkgJiYgIW1fYW5pbWF0aW9uQ29u
dHJvbGxlci5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQotQ29tcG9z
aXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUb3NzIHRoZSBy
ZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZyb20K
LSAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KLQotICAgIGNsZWFyRWxlbWVudCgpOwot
ICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jbGVh
cigpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkKLXsKLSAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENsZWFyIHRoZSBy
ZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBpbiB0
aGUgbWlkZGxlIG9mCi0gICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAgZm9yIChh
dXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5zaXRpb24p
OwotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLSAg
ICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZy
YW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5p
bWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwot
ICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12
b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYgZWxlbWVu
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlKQotewotICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJlIGFy
ZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNraXAgaXQKLSAgICBpZiAoIWN1cnJl
bnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0aW9ucy5p
c0VtcHR5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGFsbCBleGlzdGluZyB0
cmFuc2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0aWxsIGFj
dGl2ZSBvbmVzCi0gICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRoZSBvbmVz
IHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90
cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0aXZlKGZhbHNl
KTsKLSAgICAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmllZEN1
cnJlbnRTdHlsZTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1cGRh
dGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwotICAgIGlmICh0YXJnZXRTdHlsZS50cmFuc2l0aW9u
cygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUudHJhbnNp
dGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRh
cmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAgICAgIGJvb2wg
aXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9uLmRl
bGF5KCkgPiAwOwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVydHko
KS5tb2RlOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9k
ZTo6Tm9uZSB8fCBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlVua25vd25Qcm9w
ZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NTUHJvcGVy
dHlJRCBwcm9wID0gYW5pbWF0aW9uLnByb3BlcnR5KCkuaWQ7Ci0KLSAgICAgICAgICAgIGJvb2wg
YWxsID0gbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGw7Ci0KLSAgICAgICAg
ICAgIC8vIEhhbmRsZSBib3RoIHRoZSAnYWxsJyBhbmQgc2luZ2xlIHByb3BlcnR5IGNhc2VzLiBG
b3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UsIHdlIG1ha2Ugb25seSBvbmUgcGFzcwotICAgICAgICAg
ICAgLy8gdGhyb3VnaCB0aGUgbG9vcC4KLSAgICAgICAgICAgIGZvciAoaW50IHByb3BlcnR5SW5k
ZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVByb3Bl
cnRpZXMoKTsgKytwcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbCkgewot
ICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2ggaXMgbm90
IGEgc2hvcnRoYW5kLgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBpc1Nob3J0
aGFuZDsKLSAgICAgICAgICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpn
ZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAgICAg
ICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQotICAgICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAg
ICAgaWYgKHByb3AgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlmICghYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgICAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNoZWQgYnkg
YWN0dWFsIHByb3BlcnRpZXMsIG5ldmVyIGFuaW1hdGVBbGwuCi0gICAgICAgICAgICAgICAgQVNT
RVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9wIDwgKGZpcnN0Q1NTUHJvcGVydHkg
KyBudW1DU1NQcm9wZXJ0aWVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBh
IHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlvbiBpcyBv
dmVycmlkZGVuCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1bmFu
aW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0aGUgdGVzdAotICAgICAgICAg
ICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJvdmVy
cmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCi0gICAgICAgICAgICAgICAgYXV0byoga2V5ZnJh
bWVBbmltYXRpb24gPSBhbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAgICAg
ICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW1hdGlvbiA/ICZrZXlmcmFtZUFuaW1hdGlv
bi0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7Ci0KLSAgICAgICAgICAgICAgICAv
LyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJvcAotICAg
ICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlvbnMu
Z2V0KHByb3ApOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWwgPSB0cnVlOwotCi0gICAgICAg
ICAgICAgICAgaWYgKGltcGxBbmltKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdlIGFy
ZSBwb3N0IGFjdGl2ZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUgYWN0aXZlIGZsYWcuIFRoaXMg
d2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFuaW1hdGlvbiB0byBnZXQg
cmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAgICAg
IGlmICghaW1wbEFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGlt
cGxBbmltLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAgICAg
ICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiB0aGF0IGlzIGp1c3QgZmlu
aXNoaW5nLiBUaGF0IHdvdWxkIGJlIHRoZSBjYXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGlm
IGl0IHdlcmUgcG9zdEFjdGl2ZS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIGVxdWFs
aXR5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUganVzdCBmaW5p
c2hpbmcgQU5EIGNoYW5naW5nIHRvIGEgbmV3IGdvYWwgc3RhdGUuCi0gICAgICAgICAgICAgICAg
ICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbEFuaW0gbWlnaHQgYWxzbyBu
b3QgYmUgYW4gYWxyZWFkeSBydW5uaW5nIHRyYW5zaXRpb24uIEl0IG1pZ2h0IGJlCi0gICAgICAg
ICAgICAgICAgICAgIC8vIG5ld2x5IGFkZGVkIHRvIHRoZSBsaXN0IGluIGEgcHJldmlvdXMgaXRl
cmF0aW9uLiBUaGlzIHdvdWxkIGhhcHBlbiBpZgotICAgICAgICAgICAgICAgICAgICAvLyB5b3Ug
aGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkgYW5kICdhbGwnIGluIHRo
ZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwgdGhlIGxh
dHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UKLSAgICAgICAgICAgICAg
ICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRpb24gYmVp
bmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1wbEFuaW0tPmlzVGFyZ2V0
UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVkIHRvIHJldHVybiBhIG5l
dyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNpdGlvbnMg
dXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAgICAg
aWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRl
ZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFtb2RpZmllZEN1cnJlbnRTdHlsZSkKLSAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKmN1cnJlbnRTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBsQW5p
bS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRTdHlsZS5n
ZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0aW9uICVw
IGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkpOwotICAg
ICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoKmltcGxBbmltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlv
bnMucmVtb3ZlKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxzZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2l0aW9uIGlmIGl0IGlzIGFj
dGl2ZSBhbmQgdGhlIHByb3BlcnRpZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAgICAg
ZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9w
ZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpIHx8ICFDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wLCBmcm9tU3R5bGUsICZ0
YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
Y2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFpc0FjdGl2
ZVRyYW5zaXRpb24pLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gdGhhdCB0byBj
aGVjayB0byBzZWUgaWYgd2UgYXJlIGNhbmNlbGluZyBhIHRyYW5zaXRpb24uIEJ1dCB3ZSBkb24n
dCB3YW50IHRvCi0gICAgICAgICAgICAgICAgLy8gc3RhcnQgb25lIG9mIHRoZSBpbmFjdGl2ZSB0
cmFuc2l0aW9ucy4gU28gc2hvcnQgY2lyY3VpdCB0aGF0IGhlcmUuIChTZWUKLSAgICAgICAgICAg
ICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0Nzg3Pgot
ICAgICAgICAgICAgICAgIGlmICghZXF1YWwgJiYgaXNBY3RpdmVUcmFuc2l0aW9uKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAgICAgICAgICAg
ICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxpY2l0QW5pbWF0aW9uOjpjcmVhdGUo
YW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9kaWZpZWRDdXJyZW50U3R5bGUgPyAq
bW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsKLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9uLT5oYXNTdHlsZSgpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmlt
YXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICJDcmVhdGVkIEltcGxpY2l0QW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgZm9yIHBy
b3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxpY2l0QW5pbWF0aW9uLnB0
cigpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmltYXRpb24uZHVyYXRpb24o
KSwgYW5pbWF0aW9uLmRlbGF5KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25z
LnNldChwcm9wLCBXVEZNb3ZlKGltcGxpY2l0QW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBwYXNzIGZvciB0aGUgc2lu
Z2xlIHByb3AgY2FzZQotICAgICAgICAgICAgICAgIGlmICghYWxsKQotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE1h
a2UgYSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHJlbW92ZWQKLSAgICBWZWN0b3I8aW50PiB0
b0JlUmVtb3ZlZDsKLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZh
bHVlcygpKSB7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFuc2l0
aW9uKTsKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5hbmltYXRp
bmdQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgSW1w
bGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyIsIHRyYW5z
aXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+YW5pbWF0
aW5nUHJvcGVydHkoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHJlbW92ZSB0
aGUgdHJhbnNpdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoYXV0byBwcm9wZXJ0eVRvUmVt
b3ZlIDogdG9CZVJlbW92ZWQpCi0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3BlcnR5
VG9SZW1vdmUpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJhbWVB
bmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBOb3RoaW5nIHRv
IGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2ZSBhbnkg
YmVmb3JlCi0gICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFyZ2V0
U3R5bGUuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgCi0gICAgaWYgKGN1cnJlbnRTdHls
ZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5oYXNBbmlt
YXRpb25zKCkgJiYgKihjdXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJnZXRTdHls
ZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBbmltYXRpb25OYW1lTWFw
IG5ld0FuaW1hdGlvbnM7Ci0KLSAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFwLgot
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwotCi0gICAgc3RhdGljIE1h
aW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBub25lKCJub25lIiwgQXRv
bVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAotICAgIC8vIE5vdyBtYXJrIGFu
eSBzdGlsbCBhY3RpdmUgYW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFuaW1h
dGlvbnMuCi0gICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgewotICAgICAgICBpbnQg
bnVtQW5pbXMgPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKLSAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbmlt
YXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAg
ICAgIEF0b21TdHJpbmcgYW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKLQotICAgICAg
ICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUgaXMg
YSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhpcyBuYW1lLgotICAgICAgICAgICAgUmVmUHRyPEtl
eWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQo
YW5pbWF0aW9uTmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewot
ICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKGtleWZyYW1lQW5pbS0+bmFtZSgpLmlt
cGwoKSwga2V5ZnJhbWVBbmltKTsKLQotICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0t
PnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
ICAgICAgICAvLyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRpZmZlci4g
VXBkYXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVwZGF0ZVBs
YXlTdGF0ZShhbmltYXRpb24ucGxheVN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAgLy8gU2V0
IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2UgdGhlIHBs
YXkgc3RhdGUgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT5zZXRB
bmltYXRpb24oYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW1hdGlvbi5k
dXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpKSAmJiBhbmltYXRpb24uaXRlcmF0aW9uQ291
bnQoKSAmJiBhbmltYXRpb25OYW1lICE9IG5vbmUpIHsKLSAgICAgICAgICAgICAgICBrZXlmcmFt
ZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVudCwgKnRo
aXMsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0
aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFtZXMgJXMs
IGR1cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1lQW5p
bS5nZXQoKSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5pbWF0
aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9uQ291
bnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKLSAgICAgICAgICAg
ICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRl
OjpQYXVzZWQpOwotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAgKGNyZWF0
ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgICAgICB9Ci0jaWYg
IUxPR19ESVNBQkxFRAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDoga2V5
ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5wcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAgICAgICAg
IExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3BlcnR5TmFtZShwcm9wZXJ0
eUlEKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuc2V0KGtleWZy
YW1lQW5pbS0+bmFtZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gdGhlIGFuaW1hdGlvbiBvcmRl
ciBtYXAuCi0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAgICAgICAgICAgICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1w
bCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgbGlzdCBvZiBhbmlt
YXRpb25zIHRvIGJlIHJlbW92ZWQuCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZy
YW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMuY29u
dGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0aW9u
Q29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0gICAgICAg
ICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJl
bW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1hdGlvbi5n
ZXQoKSwgJmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c3dhcChu
ZXdBbmltYXRpb25zLCBtX2tleWZyYW1lQW5pbWF0aW9ucyk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0
ZSBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQot
ewotICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZlIGEg
Y3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucyhlbGVtZW50
LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFtZUFuaW1hdGlv
bnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGlvbklt
cGFjdD4gaW1hcGN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRl
ZFN0eWxlOwotCi0gICAgaWYgKGN1cnJlbnRTdHlsZSkgewotICAgICAgICAvLyBOb3cgdGhhdCB3
ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUg
bmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAgICAgLy8gdG8gZmlsbCBpbiBhIFJl
bmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgICAgIGJvb2wgY2hlY2tGb3JTdGFja2lu
Z0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFu
c2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0gdHJhbnNpdGlv
bi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAgICAgICAg
ICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSkKLSAg
ICAgICAgICAgICAgICBjaGVja0ZvclN0YWNraW5nQ29udGV4dCB8PSBXaWxsQ2hhbmdlRGF0YTo6
cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3Bl
cnR5KCkpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hhbmdl
OjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIHRyYW5zaXRpb24tPmFmZmVjdHNBY2NlbGVyYXRlZFBy
b3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OlJl
cXVpcmVzUmVjb21wb3NpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFuaW1hdGVkU3R5
bGUgJiYgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIE5vdGUgdGhh
dCB0aGlzIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdCgpIGJ1
dCBvbmx5IG5lZWRzIHRvIGNvbnN1bHQKLSAgICAgICAgICAgIC8vIGFuaW1hdGFibGUgcHJvcGVy
dGllcyB0aGF0IGNhbiB0cmlnZ2VyIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICBpZiAo
YW5pbWF0ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICAgICAgICAgIHx8IGFuaW1h
dGVkU3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAgICAgICAg
fHwgYW5pbWF0ZWRTdHlsZS0+aGFzTWFzaygpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRT
dHlsZS0+Y2xpcFBhdGgoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmJveFJl
ZmxlY3QoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0ZpbHRlcigpCi0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0
eWxlLT5oYXNCYWNrZHJvcEZpbHRlcigpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICApCi0gICAg
ICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdDb250ZXh0
KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0aW9u
IG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRlLiAg
V2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBu
ZWVkZWQuCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFw
KSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKSB7
Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSBrZXlmcmFtZUFuaW0tPmFuaW1hdGUoKnRoaXMs
IHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGFuZ2VzLmNv
bnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYga2V5ZnJhbWVBbmlt
LT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGltYXBjdC5h
ZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1aXJlc1JlY29tcG9zaXRlKTsKLQotICAgICAgICAgICAg
aWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSAmJiBrZXlm
cmFtZUFuaW0tPnRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAgaW1h
cGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7Ci0KLSAgICAg
ICAgICAgIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCB8PSBrZXlmcmFtZUFuaW0t
PmRlcGVuZHNPbkxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgV1RG
TW92ZShhbmltYXRlZFN0eWxlKSwgaW1hcGN0IH07Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29uc3QKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwotICAgIGZvciAo
YXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRyYW5z
aXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotCi0gICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1h
dGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZSk7
Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKLSAgICAgICAgICAgIGtleWZyYW1lQW5p
bWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLSAgICB9Ci0gICAgCi0gICAg
cmV0dXJuIHJlc3VsdFN0eWxlOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDb21wb3NpdGVBbmlt
YXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm5zIHRoZSB0
aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1lYW5z
IG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJlcXVp
cmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBzZWNv
bmRzIGluIHRoZSBmdXR1cmUuCi0gICAgT3B0aW9uYWw8U2Vjb25kcz4gbWluVDsKLSAgICAKLSAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFs
PFNlY29uZHM+IHQgPSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAgICAg
ICAgaWYgKCF0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFt
aW5UIHx8IHQudmFsdWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtaW5UID0g
dC52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1fa2V5ZnJh
bWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
aGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlm
cmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29uZHM+
IHQgPSBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAoIXQp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQgfHwgdC52
YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQgPSB0LnZhbHVlKCk7
Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pblQ7Ci19Ci0KLUtl
eWZyYW1lQW5pbWF0aW9uKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGlvbkZvclByb3BlcnR5
KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgS2V5ZnJhbWVBbmltYXRpb24q
IHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNlbmQgYmFjayB0aGUgbGFz
dCBhbmltYXRpb24gd2l0aCB0aGUgcHJvcGVydHkgaWYgdGhlcmUgYXJlIG11bHRpcGxlcy4KLSAg
ICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9ucwotICAgIGlm
ICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVB
bmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRp
b24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGFu
aW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAg
ICAgIHJlc3VsdCA9IGFuaW1hdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50
T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIC8v
IElmIG1vcmUgdGhhbiBvbmUgdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0cmFuc2Zv
cm0sIGdpdmUgdXAuCi0gICAgYm9vbCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7Ci0g
ICAgCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHko
Q1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAg
aWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgaWYgKCFh
bmltYXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMpKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJhbnNpdGlv
biA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFu
aW1hdGluZ1Byb3BlcnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5zaXRpb24t
Pmhhc1N0eWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc2VlblRy
YW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBp
ZiAoIXRyYW5zaXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkKLXsK
LSAgICBpZiAobV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VzcGVuZGVk
ID0gdHJ1ZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAg
Zm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkKLSAg
ICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6
UGF1c2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsK
LSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQotICAgICAgICAgICAgICAg
IHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7
Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVB
bmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc3VzcGVuZGVkKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9u
cy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0
ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRp
b25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5wbGF5U3RhdGVQbGF5
aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0
aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV90
cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmhh
c1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFu
aW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQg
Q29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbih0cnVlKTsKLSAg
ICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92ZXJy
aWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBp
ZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNp
dGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0
aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAgICAgIHRy
YW5zaXRpb24tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotfQotCi1i
b29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLXsKLSAgICBpZiAoIW1fa2V5
ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltYXRpb24t
PmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1f
dHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5pc0Fu
aW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IEF0
b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJh
bWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICBpZiAo
IWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGtleWZyYW1lQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIGlmICgocHJvcGVy
dHkgPCBmaXJzdENTU1Byb3BlcnR5KSB8fCAocHJvcGVydHkgPj0gZmlyc3RDU1NQcm9wZXJ0eSAr
IG51bUNTU1Byb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbXBsaWNp
dEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wZXJ0eSk7Ci0gICAg
aWYgKCFpbXBsQW5pbSkgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBwcm9wZXJ0
eSBpcyBiZWluZyBhbmltYXRlZCB2aWEgYSBzaG9ydGhhbmQuCi0gICAgICAgIC8vIFRoaXMgY29k
ZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcsIHNvIHBlcmZvcm1hbmNlIGlzIG5vdCBjcml0aWNh
bCBoZXJlLgotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IHNob3J0aGFuZFByb3BlcnRp
ZXMgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQ
cm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgYW55UGF1c2VkID0gZmFsc2U7Ci0gICAg
ICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgewotICAgICAg
ICAgICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKLSAgICAgICAg
ICAgICAgICBhbnlQYXVzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBhbnlQ
YXVzZWQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbXBsQW5pbS0+cnVubmluZygpKQotICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKHQgPj0gMC4wKSAmJiAodCA8PSBpbXBsQW5pbS0+ZHVy
YXRpb24oKSkpIHsKLSAgICAgICAgaW1wbEFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25lZCBD
b21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0g
ICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNo
ZWNrQ29uc2lzdGVuY3koKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVB
bmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPnJ1bm5pbmcoKSkK
LSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9u
IDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlvbi0+cnVu
bmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIGNv
dW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA5NDIyNjkyMzk2ZDJmYmE2ODgwZDFjZDlmOWM4ZDY5YjgyZTdiMGM1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgi
Ci0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFuaW1h
dGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQXRv
bVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBDb21wb3NpdGVBbmltYXRp
b24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0IGFyZSBydW5uaW5n
Ci0vLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEgbnVtYmVyIG9mIHByb3Bl
cnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgotY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uIDog
cHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmltYXRpb24+
IGNyZWF0ZShDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxl
cikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFuaW1hdGlv
bihhbmltYXRpb25Db250cm9sbGVyKSk7Ci0gICAgfTsKLQotICAgIH5Db21wb3NpdGVBbmltYXRp
b24oKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwotCi0gICAgQW5pbWF0aW9uVXBk
YXRlIGFuaW1hdGUoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlRXh0ZW50
T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgT3B0aW9uYWw8
U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKLSAgICAKLSAgICBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0dXJu
IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygp
OwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBj
b25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotICAgIAotICAgIGJvb2wgaGFzQW5pbWF0aW9u
cygpIGNvbnN0ICB7IHJldHVybiAhbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkgfHwgIW1fa2V5ZnJh
bWVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQsIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdDsKLQotICAgIEtleWZy
YW1lQW5pbWF0aW9uKiBhbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdDsK
LQotICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCk7Ci0g
ICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQp
OwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9tU3RyaW5nJiBuYW1l
LCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJvcGVydHlJ
RCwgZG91YmxlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25z
dDsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpIGNvbnN0IHsg
cmV0dXJuIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dDsgfQotCi1wcml2YXRlOgot
ICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYpOwot
Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICB2b2lk
IHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1
cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICAKLSAgICB0
eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQcm9wZXJ0
eVRyYW5zaXRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCosIFJl
ZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7Ci0KLSAgICBib29sIG1f
c3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNP
bkxheW91dCB7IGZhbHNlIH07Ci0KLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYg
bV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXAgbV90
cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRpb25zOwot
ICAgIFZlY3RvcjxBdG9tU3RyaW5nSW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggNDUzOWY2YTUzZWM1MTUwYzkwNzM3ZDIwZTFiYjJhNWJiNDBhMDlhOC4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSwz
NzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIK
LQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAi
Q1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkNvbnRlbnRDaGFuZ2VPYnNlcnZl
ci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5
VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRlICJS
ZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24oY29u
c3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5
LCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlv
biwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UodHJh
bnNpdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9mcm9tU3R5bGUo
UmVuZGVyU3R5bGU6OmNsb25lUHRyKGZyb21TdHlsZSkpCi0gICAgLCBtX3RyYW5zaXRpb25Qcm9w
ZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkuaWQpCi0gICAgLCBtX2FuaW1hdGluZ1Byb3BlcnR5
KGFuaW1hdGluZ1Byb3BlcnR5KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgZWxl
bWVudC5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEFkZFRyYW5zaXRpb24o
ZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYW5pbWF0aW5nUHJvcGVy
dHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLX0KLQotSW1wbGljaXRBbmltYXRpb246On5JbXBs
aWNpdEFuaW1hdGlvbigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0
byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQo
KS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVtZW50LCBt
X2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIC8vIC8vIE1ha2Ugc3VyZSB0byB0ZWxs
IHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1cmUgYW55
IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0QWN0aXZl
KCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9u
OjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGluTGlz
dGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCkuaGFz
TGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1hdGVDaGFu
Z2U+IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9z
aXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UgZ2V0IHRo
aXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmlu
ZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIFNvIGp1c3QgcmV0dXJuLiBF
dmVyeXRoaW5nIGlzIGFscmVhZHkgYWxsIGNsZWFuZWQgdXAuCi0gICAgaWYgKHBvc3RBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0YXRlID0g
c3RhdGUoKTsKLQotICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdlIGFy
ZSBuZXcKLSAgICBpZiAoaXNOZXcoKSkKLSAgICAgICAgcmVzZXQodGFyZ2V0U3R5bGUsIGNvbXBv
c2l0ZUFuaW1hdGlvbik7Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCi0gICAg
Ly8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBp
ZiBuZWVkZWQKLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUg
PSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgQ1NTUHJvcGVydHlB
bmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmlt
YXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9n
cmVzcygpKTsKLSAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNlcyB3aGVy
ZSB3ZSBoYXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCi0gICAgLy8g
c3VjaCBhcyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0KLSAgICAvLyBGaXJlIHRoZSBz
dGFydCB0aW1lb3V0IGlmIG5lZWRlZAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgp
OwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hhbmdlOjpT
dHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAgICBjaGFu
Z2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQYXVzZWRT
dGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQYXVzZWRT
dGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAgIGNoYW5n
ZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJldHVybiBj
aGFuZ2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBpZiAoIWFu
aW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQ
dHIoKm1fdG9TdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0
aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIG1fZnJv
bVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotfQotCi1ib29sIElt
cGxpY2l0QW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0
UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChoYXNTdHlsZSgpKTsKLQotICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIE5v
bi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBBU1NFUlQobV9hbmltYXRpbmdQ
cm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0KLSAgICBSZW5kZXJCb3gmIGJveCA9
IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UmVjdCByZW5kZXJl
ckJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRv
Y3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHN0YXJ0Qm91
bmRzID0gYm91bmRzOwotICAgIExheW91dFJlY3QgZW5kQm91bmRzID0gYm91bmRzOwotCi0gICAg
aWYgKHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKSB7Ci0gICAgICAgIGlmICghY29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKm1fZnJvbVN0
eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
aWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVyQm94
LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4
KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1h
dHJpeChyZW5kZXJlckJveCwgKm1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSB1bmlvblJlY3Qoc3RhcnRCb3VuZHMs
IGVuZEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRp
b246OmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4gQ1NT
UHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1fYW5p
bWF0aW5nUHJvcGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFuaW1h
dGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0VHJhbnNpdGlvbih0
aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0
eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRp
b246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFuc2l0aW9u
UGF1c2VkKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotICAgIC8vIFJlc3RvcmUg
dGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6Y2xlYXIoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGF1
dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50
KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxlbWVudCwg
bV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICBBbmltYXRpb25CYXNlOjpjbGVhcigp
OwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkKLXsKLSAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJl
ci0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi12b2lkIElt
cGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVs
ZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2
ZXIoKS5kaWRGaW5pc2hUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsK
LSNlbmRpZgotICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24gdGhpcyBw
cm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBrZXlmcmFt
ZQotICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNhc2UgYSB0
cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCi0gICAgLy8g
cnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQsIHdlIG5l
ZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3Ci0gICAgLy8gZGVzdGluYXRpb24u
IElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5rIGEgdHJh
bnNpdGlvbiBoYWQgc3RhcnRlZAotICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFuaW1hdGVk
IHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbikuCi0gICAg
aWYgKGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Gb3JQ
cm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KSkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRVbmFu
aW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCptX3RvU3R5bGUpKTsKLQotICAgIHNl
bmRUcmFuc2l0aW9uRXZlbnQoZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCwgZWxhcHNl
ZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9u
OjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgZG91Ymxl
IGVsYXBzZWRUaW1lKQotewotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5z
aXRpb25lbmRFdmVudCkgewotICAgICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVy
VHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwotCi0gICAgICAgIGlmIChz
aG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAgICAgICBT
dHJpbmcgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKG1fYW5pbWF0aW5nUHJv
cGVydHkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2
ZW50Ci0gICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVsZW1lbnQo
KSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVudCgp
LmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2Fj
aGUpOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAgICAgICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRXZlbnRU
b0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRpbWUp
OwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5
bGUKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25l
bmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVlOyAv
LyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBm
YWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJiBj
b21wb3NpdGVBbmltYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKLQotICAgIG1f
dG9TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0byk7Ci0KLSAgICBpZiAoZWxlbWVudCgp
KQotICAgICAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKm1fdG9TdHlsZSwgZWxlbWVu
dCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkpOwotCi0gICAgLy8gUmVzdGFydCB0aGUgdHJhbnNp
dGlvbi4KLSAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlICYmICFjb21wb3NpdGVBbmlt
YXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24sIC0xKTsKLQotICAgIC8vIFNldCB0aGUgdHJh
bnNmb3JtIGFuaW1hdGlvbiBsaXN0LgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0
KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFC
TEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1
bmN0aW9uTGlzdHMoKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJpZGRl
bihib29sIGIpCi17Ci0gICAgaWYgKGIgPT0gbV9vdmVycmlkZGVuKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX292ZXJyaWRkZW4gPSBiOwotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShtX292ZXJy
aWRkZW4gPyBBbmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlIDogQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUsIC0xKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlv
bjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IHByb3BlcnR5KTsKLX0KLQotYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwg
Y29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIC8vIFdlIGNhbiBnZXQgaGVy
ZSBmb3IgYSB0cmFuc2l0aW9uIHRoYXQgaGFzIG5vdCBzdGFydGVkIHlldC4gVGhpcyB3b3VsZCBt
YWtlIG1fdG9TdHlsZSB1bnNldCBhbmQgbnVsbC4gCi0gICAgLy8gU28gd2UgY2hlY2sgdGhhdCBo
ZXJlIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjcwNj4p
Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4g
Q1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5bGUuZ2V0
KCksIHRhcmdldFN0eWxlKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YmxlbmRQcm9w
ZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFkZCBhIHRyYW5zaXRpb24gd2l0aCBh
IDAgZHVyYXRpb24gYW5kIGRlbGF5LiBCdXQgaWYgd2UgZXZlciBkaWQKLSAgICAvLyBpdCB3b3Vs
ZCBoYXZlIGEgbnVsbCB0b1N0eWxlLiBTbyBqdXN0IGluIGNhc2UsIGxldCdzIGNoZWNrIHRoYXQg
aGVyZS4gKFNlZQotICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjQ3ODc+Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAg
Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wLCBj
dXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNz
KCkpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0
aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsK
LSAgICAKLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVy
bjsKLSAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJm1fZnJv
bVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0b1Zh
bCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0aW9ucygp
LmlzRW1wdHkoKSkKLSAgICAgICAgdmFsID0gdG9WYWw7Ci0KLSAgICBpZiAodmFsLT5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEFuIGVt
cHR5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55dGhpbmcuCi0gICAgaWYgKHZhbCAhPSB0b1Zh
bCAmJiAhdG9WYWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIXZhbC0+b3BlcmF0aW9uc01h
dGNoKCp0b1ZhbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyYW5zZm9ybSBsaXN0cyBt
YXRjaC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19Ci0KLXN0
YXRpYyBib29sIGZpbHRlck9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRpb25zKiBm
cm9tT3BlcmF0aW9ucywgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG9PcGVyYXRpb25zKQotewot
ICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAg
ZnJvbU9wZXJhdGlvbnMgPSAmdG9PcGVyYXRpb25zOwotCi0gICAgaWYgKGZyb21PcGVyYXRpb25z
LT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBp
ZiAoZnJvbU9wZXJhdGlvbnMgIT0gJnRvT3BlcmF0aW9ucyAmJiAhdG9PcGVyYXRpb25zLm9wZXJh
dGlvbnMoKS5pc0VtcHR5KCkgJiYgIWZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zTWF0Y2godG9P
cGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlv
bkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotCi0g
ICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRjaCgmbV9m
cm9tU3R5bGUtPmZpbHRlcigpLCBtX3RvU3R5bGUtPmZpbHRlcigpKTsKLX0KLQotI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1hdGNo
aW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFt
X3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlv
bkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJvbVN0eWxlLT5iYWNrZHJv
cEZpbHRlcigpLCBtX3RvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpOwotfQotI2VuZGlmCi0KLXZv
aWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9u
TGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAg
ICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAg
IG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2go
Jm1fZnJvbVN0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCksIG1fdG9TdHlsZS0+YXBwbGVDb2xvckZp
bHRlcigpKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gSW1wbGljaXRBbmltYXRpb246OnRpbWVU
b05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0ID0gQW5pbWF0aW9uQmFz
ZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAoIXQgfHwgdC52YWx1ZSgpICE9IDBfcyB8
fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBfTVNDX1ZFUiA+PSAxOTIwCi0g
ICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHQ7Ci0jZW5k
aWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2aWNlLiBC
dXQgaWYgdGhpcyBpcyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gd2UgCi0gICAgLy8gb25seSBu
ZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi4KLSAgICBpZiAoQ1NTUHJv
cGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1fYW5pbWF0
aW5nUHJvcGVydHkpICYmIGlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICBib29sIGlzTG9vcGlu
ZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI4NGFkY2VjZjkyOGQ4NGUxNWE0MGM1Yzg4NTc2MDVm
M2U2NDYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysrIC9kZXYv
bnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2Uu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotCi0vLyBBbiBJ
bXBsaWNpdEFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGEgdHJhbnNpdGlvbiBvZiBhIHNw
ZWNpZmljIENTUyBwcm9wZXJ0eQotLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCi1jbGFz
cyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBh
bmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1l
bnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJT
dHlsZSYgZnJvbVN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgSW1w
bGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVudCwgY29t
cG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKLSAgICB9OwotICAgIAotICAgIENTU1Byb3Bl
cnR5SUQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9uUHJv
cGVydHk7IH0KLSAgICBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpbmdQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChk
b3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91
YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91Ymxl
IHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGlu
Z0ZvcndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFu
Z2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdl
dFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsKLSAg
ICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5p
bWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHlsZSYg
dG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFu
c2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBh
ZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRPdmVycmlk
ZGVuKGJvb2wpOwotICAgIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJu
IG1fb3ZlcnJpZGRlbjsgfQotCi0gICAgYm9vbCBhZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyByZXR1cm4g
bV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Ci0KLSAgICBib29sIGlzVGFyZ2V0UHJvcGVydHlF
cXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9pZCBibGVu
ZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKik7Ci0KLSAg
ICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwotICAgIAot
ICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KLSAgICB2b2lkIHNl
dEFjdGl2ZShib29sIGIpIHsgbV9hY3RpdmUgPSBiOyB9Ci0KLSAgICBjb25zdCBSZW5kZXJTdHls
ZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fZnJvbVN0eWxl
OyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBib29s
IHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUpIGNvbnN0
OyAgICAKLSAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYsIGRv
dWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25M
aXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
I2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQmFj
a2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNrRm9yTWF0
Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBJbXBsaWNp
dEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBFbGVtZW50JiwgQ29t
cG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2aXJ0dWFsIH5JbXBs
aWNpdEFuaW1hdGlvbigpOwotCi0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUgYmxl
bmRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHlsZTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKLQotICAgIENTU1Byb3Bl
cnR5SUQgbV90cmFuc2l0aW9uUHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkgYXMgc3Bl
Y2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5pbWF0aW5n
UHJvcGVydHk7IC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5pbWF0aW9u
Ci0KLSAgICBib29sIG1fYWN0aXZlIHsgdHJ1ZSB9OyAvLyBVc2VkIGZvciBjdWxsaW5nIHRoZSBs
aXN0IG9mIHRyYW5zaXRpb25zLgotICAgIGJvb2wgbV9vdmVycmlkZGVuIHsgZmFsc2UgfTsgLy8g
VHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJpZGVzIHRo
ZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5j
cHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjU3MTUwNzcyMzg3N2I1ZWJmMzMy
YmIwOGM4NTA5Nzc3OTg4YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0j
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGll
cy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0j
aW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBB
bmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUp
Ci0gICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0
aW9uKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUoKSkKLSAgICAsIG1fdW5hbmlt
YXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cih1bmFuaW1hdGVkU3R5bGUpKQotewotICAg
IHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBtX3RyYW5zZm9y
bUZ1bmN0aW9uTGlzdFZhbGlkIGZsYWcgYmFzZWQgb24gd2hldGhlciB0aGUgZnVuY3Rpb24gbGlz
dHMgaW4gdGhlIGtleWZyYW1lcyBtYXRjaC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9u
TGlzdCgpOwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYg
RU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0
ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0
ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJh
bWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoV2lsbENoYW5nZURhdGE6OnByb3BlcnR5
Q3JlYXRlc1N0YWNraW5nQ29udGV4dChwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIG1fdHJpZ2dl
cnNTdGFja2luZ0NvbnRleHQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0eUlE
KSkKLSAgICAgICAgICAgIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSA9IHRydWU7Ci0gICAgICAg
IAotICAgICAgICBpZiAobV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCAmJiBtX2hhc0FjY2VsZXJh
dGVkUHJvcGVydHkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb21wdXRlTGF5
b3V0RGVwZW5kZW5jeSgpOwotfQotCi1LZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1lQW5pbWF0
aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0aGUgcmVuZGVyZXIgdGhhdCB3ZSBh
cmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBhY2NlbGVyYXRlZCBhbmltYXRpb25z
IGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgpKQotICAgICAgICBlbmRBbmltYXRp
b24oKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUxheW91dERlcGVuZGVu
Y3koKQotewotICAgIGlmICghbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1LZXlmcmFtZXMg
PSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlm
cmFtZXM7IGkrKykgewotICAgICAgICBhdXRvKiBrZXlmcmFtZVN0eWxlID0gbV9rZXlmcmFtZXNb
aV0uc3R5bGUoKTsKLSAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKSB7Ci0gICAgICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9Ci0g
ICAgICAgIGlmIChrZXlmcmFtZVN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAgICAgICAg
YXV0byYgdHJhbnNmb3JtT3BlcmF0aW9ucyA9IGtleWZyYW1lU3R5bGUtPnRyYW5zZm9ybSgpOwot
ICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiB0cmFuc2Zvcm1PcGVyYXRp
b25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24tPmlzVHJh
bnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGF1
dG8gdHJhbnNsYXRpb24gPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+KG9w
ZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbi0+eCgp
LmlzUGVyY2VudCgpIHx8IHRyYW5zbGF0aW9uLT55KCkuaXNQZXJjZW50KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fZGVwZW5kc09uTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKLXsKLSAgICBzaXplX3QgbnVtS2V5ZnJh
bWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKLSAgICBkb3VibGUgZWxhcHNl
ZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwotICAgIGlmIChtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KSAmJiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlv
bkNvdW50SW5maW5pdGUpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gc3RkOjptaW4oZWxhcHNlZFRp
bWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkpOwotCi0gICAgY29uc3QgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJhY3Rpb25h
bFRpbWUoMSwgZWxhcHNlZFRpbWUsIDApOwotICAgIEFTU0VSVCghbV9rZXlmcmFtZXNbMF0ua2V5
KCkpOwotICAgIEFTU0VSVChtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkgLSAxXS5rZXko
KSA9PSAxKTsKLQotICAgIGludCBwcmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dEluZGV4ID0g
LTE7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIgc2VhcmNo
IHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFs
dWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotCi0gICAgICAgIGlmICghY3Vycktl
eUZyYW1lLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29udGludWU7
Ci0KLSAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleUZyYW1lLmtleSgpKSB7Ci0g
ICAgICAgICAgICBuZXh0SW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
LSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAocHJldkluZGV4ID09IC0x
KQotICAgICAgICBwcmV2SW5kZXggPSAwOwotICAgIGlmIChuZXh0SW5kZXggPT0gLTEpCi0gICAg
ICAgIG5leHRJbmRleCA9IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7Ci0KLSAgICBjb25zdCBLZXlm
cmFtZVZhbHVlJiBwcmV2S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1twcmV2SW5kZXhdOwotICAgIGNv
bnN0IEtleWZyYW1lVmFsdWUmIG5leHRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW25leHRJbmRleF07
Ci0KLSAgICBmcm9tU3R5bGUgPSBwcmV2S2V5ZnJhbWUuc3R5bGUoKTsKLSAgICB0b1N0eWxlID0g
bmV4dEtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICBkb3VibGUgb2Zmc2V0ID0gcHJldktleWZyYW1l
LmtleSgpOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMCAvIChuZXh0SW5kZXggPT0gcHJldkluZGV4
ID8gIDEgOiAobmV4dEtleWZyYW1lLmtleSgpIC0gcHJldktleWZyYW1lLmtleSgpKSk7Ci0KLSAg
ICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWluZ0Z1bmN0
aW9uKCkpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gS2V5ZnJhbWVBbmltYXRpb246
OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJl
bmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5p
bWF0ZWRTdHlsZSkKLXsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0YXRlKCk7Ci0K
LSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVk
IChGSVhNRTogdGhpcyBmdW5jdGlvbiBuZWVkcyBhIGJldHRlciBuYW1lKS4KLSAgICBmaXJlQW5p
bWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBzdGFy
dGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBzdGFydCB0
aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KLSAgICBpZiAoaXNOZXcoKSkgewotICAgICAgICBpZiAo
bV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyAm
JiAhY29tcG9zaXRlQW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0xKTsKLSAg
ICAgICAgZWxzZSBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlT
dGF0ZTo6UGF1c2VkKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCwgLTEpOwotICAgIH0KLQotICAgIC8vIElmIHdlIGdl
dCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xl
YW5pbmcgdXAgYSBqdXN0LWZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBzbywgd2UgbmVl
ZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZlKCkpIHsK
LSAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICAgICAgYW5pbWF0ZWRTdHlsZSA9
IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVybiB7IH07
Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciwg
d2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldC4KLSAgICAvLyBTcGVjaWFsIGNh
c2UgMSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBzZXQgdGhl
IGZpcnN0IGZyYW1lIG9mIHRoZQotICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBUaGlzIGF2
b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCi0gICAgLy8gU3BlY2lhbCBj
YXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUsIHRoZW4gd2Ugd2FudCB0
byBjb250aW51ZQotICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJsZW5kIHNvIHRoYXQgd2Ug
Z2V0IHRoZSBmcm9tU3R5bGUuCi0gICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9hbmltYXRp
b24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1lcywgZG9u
J3QgYW5pbWF0ZS4KLSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewotICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uLCAtMSk7Ci0g
ICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0
aW9uLgotICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28g
bWFrZSBvbmUgaWYgbmVlZGVkLgotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgYW5p
bWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0KLSAgICAv
LyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmluZyB3
aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgotICAgIC8vIFdlIHNob3Vs
ZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGF1dG8gcHJvcGVy
dHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBHZXQgdGhlIGZy
b20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCi0gICAgICAgIGNvbnN0IFJlbmRlclN0
eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9T
dHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAgIGZl
dGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBmcm9tU3R5bGUsIHRv
U3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHls
ZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIE9wdGlvblNldDxBbmltYXRlQ2hh
bmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKTsKLSAgICBpZiAoc3RhdGUo
KSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpTdGF0ZUNo
YW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3RhdGUob2xkU3RhdGUpIHx8IGlzUnVubmluZ1N0
YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3RhdGUoc3RhdGUoKSkgfHwgaXNSdW5uaW5nU3Rh
dGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdT
dGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hhbmdlOwotfQotCi12b2lkIEtleWZyYW1lQW5p
bWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFu
aW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UncmUgZG9uZSwgb3IgaW4gdGhlIGRlbGF5IHBo
YXNlIGFuZCB3ZSdyZSBub3QgYmFja3dhcmRzIGZpbGxpbmcsIHRlbGwgdGhlIGNhbGxlciB0byB1
c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8fCAod2FpdGluZ1Rv
U3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9uLT5maWxs
c0JhY2t3YXJkcygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2tleWZyYW1lcy5z
aXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAg
ICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlcigpLT5zdHls
ZSgpKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGll
cygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNzIGJl
dHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxwdHI7Ci0g
ICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgZG91
YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3Bl
cnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0gICAgICAg
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVydHlJRCwg
YW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0gICAg
fQotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1B
bmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChtX2tleWZy
YW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSk7Ci0KLSAgICBpZiAo
IWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBOb24t
Ym94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgYXV0byYgYm94ID0gZG93bmNhc3Q8
UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZW5kZXJlckJveCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGN1bXVsYXRpdmVCb3VuZHM7Ci0KLSAg
ICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKLSAgICAg
ICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBrZXlmcmFtZS5zdHlsZSgpOwot
Ci0gICAgICAgIGlmICgha2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBrZXlmcmFtZSBpcyBtaXNzaW5n
IHRyYW5zZm9ybSBzdHlsZSwgdXNlIHRoZSBjdXJyZW50IHN0eWxlLgotICAgICAgICAgICAgaWYg
KCFrZXlmcmFtZS5rZXkoKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVN0eWxlID0gJmJveC5z
dHlsZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAg
ICAgICB9Ci0KLSAgICAgICAgYXV0byBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKLSAgICAgICAg
Ci0gICAgICAgIGJvb2wgY2FuQ29tcHV0ZTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUZ1bmN0aW9u
TGlzdHNNYXRjaCgpKQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFuc2Zvcm1l
ZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxlLCBrZXlm
cmFtZUJvdW5kcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21w
dXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxl
LCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNhbkNvbXB1dGUpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBjdW11bGF0aXZlQm91
bmRzLnVuaXRlKGtleWZyYW1lQm91bmRzKTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBjdW11bGF0
aXZlQm91bmRzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9u
OjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAot
ewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KTsKLX0K
LQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1hdGlv
biwgbV9rZXlmcmFtZXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKCFl
bGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25QYXVzZWQodGltZU9m
ZnNldCwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhl
IG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0gICAgICAg
IHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRzKQotewotICAgIGlmICghZWxl
bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uRmluaXNoZWQobV9rZXlm
cmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1
bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghZmlsbGluZ0ZvcndhcmRzICYmICFwYXVzZWQoKSkK
LSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVu
ZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5kb2N1
bWVudCgpLmhhc0xpc3RlbmVyVHlwZShsaXN0ZW5lclR5cGUpOwotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBz
ZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQsIGVsYXBz
ZWRUaW1lKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25JdGVyYXRp
b24oZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5h
bWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKLX0KLQotdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQotewot
ICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQsIGVs
YXBzZWRUaW1lKTsKLSAgICBlbmRBbmltYXRpb24obV9hbmltYXRpb24tPmZpbGxzRm9yd2FyZHMo
KSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVudChjb25z
dCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBEb2N1
bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCB8fCBldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50KQotICAgICAgICBsaXN0ZW5lclR5
cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9OX0xJU1RFTkVSOwotICAgIGVsc2UgaWYg
KGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQgfHwgZXZl
bnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKLSAgICAgICAgbGlzdGVu
ZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsKLSAgICBlbHNlIHsKLSAg
ICAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uU3Rh
cnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQp
OwotICAgICAgICBpZiAobV9zdGFydEV2ZW50RGlzcGF0Y2hlZCkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0gICAgICAg
IGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFSVF9MSVNURU5FUjsKLSAgICB9
Ci0KLSAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewot
ICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgYXV0byBlbGVtZW50ID0gbWFr
ZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwotCi0gICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBl
bGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAg
ICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFdmVu
dFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFt
ZSgpLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVu
YW5pbWF0ZWQpIHN0eWxlCi0gICAgICAgIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53
ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1h
dGlvbmVuZEV2ZW50KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
RGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBEaWQg
bm90IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om92ZXJy
aWRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGltcGxpY2l0IGFu
aW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUgYW5pbWF0
aW9uCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkp
Ci0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5pbWF0aW9u
cyhwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJp
ZGRlbkFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgb3ZlcnJpZGRlbiBp
bXBsaWNpdCBhbmltYXRpb25zCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1l
cy5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1bWVPdmVy
cmlkZGVuSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi1ib29sIEtleWZyYW1l
QW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSk7Ci19
Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc29sdmVLZXlmcmFtZVN0eWxlcygpCi17Ci0g
ICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiBzdHls
ZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKCplbGVtZW50KCksIG1fYW5pbWF0aW9u
LT5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHN0eWxlU2NvcGUtPnJlc29sdmVy
KCkua2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oKmVsZW1lbnQoKSwgbV91bmFuaW1hdGVkU3R5
bGUuZ2V0KCksIG1fa2V5ZnJhbWVzKTsKLQotICAgIC8vIEVuc3VyZSByZXNvdXJjZSBsb2FkcyBm
b3IgYWxsIHRoZSBmcmFtZXMuCi0gICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5ZnJhbWVz
LmtleWZyYW1lcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGNvbnN0X2Nhc3Q8UmVu
ZGVyU3R5bGUqPihrZXlmcmFtZS5zdHlsZSgpKSkKLSAgICAgICAgICAgIFN0eWxlOjpsb2FkUGVu
ZGluZ1Jlc291cmNlcygqc3R5bGUsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgZWxlbWVudCgpKTsK
LSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3JtRnVu
Y3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNl
OwotICAgIAotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1lcy5j
b250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmly
c3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJh
bWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5VHJhbnNm
b3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYg
Y3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50S2V5
ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSkgewotICAgICAg
ICAgICAgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9uRW1wdHlU
cmFuc2Zvcm1LZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0dXJuOwot
ICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZtX2tl
eWZyYW1lc1tmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleF0uc3R5bGUoKS0+dHJh
bnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlkCi0g
ICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ICsg
MTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUm
IGN1cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zKiB2YWwgPSAmY3VycmVudEtleWZyYW1lLnN0eWxlKCktPnRyYW5zZm9ybSgp
OwotICAgICAgICAKLSAgICAgICAgLy8gQW4gZW10cHkgdHJhbnNmb3JtIGxpc3QgbWF0Y2hlcyBh
bnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmaXJzdFZhbC0+b3BlcmF0
aW9uc01hdGNoKCp2YWwpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1fdHJh
bnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1h
dGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChj
b25zdCBSZW5kZXJTdHlsZSYpPiYgZmlsdGVyc0dldHRlcikgY29uc3QKLXsKLSAgICBpZiAobV9r
ZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9w
ZXJ0eUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW1wdHkgZmlsdGVycyBt
YXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSBy
ZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwot
ICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQot
ICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAg
aWYgKGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ldLnN0eWxlKCkpLm9wZXJhdGlvbnMoKS5z
aXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0gaTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJzdE5v
bkVtcHR5S2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgIGF1dG8mIGZpcnN0VmFsID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNbZmly
c3ROb25FbXB0eUtleWZyYW1lSW5kZXhdLnN0eWxlKCkpOwotICAgIAotICAgIGZvciAoc2l6ZV90
IGkgPSBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7ICsr
aSkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ld
LnN0eWxlKCkpOwotCi0gICAgICAgIC8vIEFuIGVtdHB5IGZpbHRlciBsaXN0IG1hdGNoZXMgYW55
dGhpbmcuCi0gICAgICAgIGlmICh2YWx1ZS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFmaXJzdFZhbC5vcGVyYXRpb25zTWF0Y2go
dmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmlsdGVy
RnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBjaGVj
a0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUZpbHRlciwgW10gKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAg
ICAgICByZXR1cm4gc3R5bGUuZmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBFTkFCTEUoRklM
VEVSU19MRVZFTF8yKQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0Jh
Y2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRlckZ1bmN0
aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENTU1By
b3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUp
IC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlLmJhY2tk
cm9wRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9j
b2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5j
dGlvbkxpc3RzKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgW10gKGNvbnN0IFJlbmRlclN0
eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICByZXR1cm4g
c3R5bGUuYXBwbGVDb2xvckZpbHRlcigpOwotICAgIH0pOwotfQotCi1PcHRpb25hbDxTZWNvbmRz
PiBLZXlmcmFtZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9wdGlvbmFs
PFNlY29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwotICAgIGlm
ICghdCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJTEVSKE1T
VkMpICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7Ci0jZWxz
ZQotICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFsdWUgb2Yg
MCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgYWNjZWxlcmF0ZWQg
YW5pbWF0aW9ucyB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9mIHRo
ZSB0cmFuc2l0aW9uLgotICAgIGJvb2wgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IHRydWU7
Ci0gICAgCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVz
KCkpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9w
ZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkgewotICAg
ICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRQcm9wZXJ0aWVz
T25seSkgewotICAgICAgICBib29sIGlzTG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2
ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0KLQot
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ5
MmUzOTE1NWM0YTliNzhjMWM2ZDZmZWUxYzJlZTNlMGJiNmJmMzguLjAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEg
b25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50Lmgi
Ci0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xh
c3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIEtleWZyYW1l
QW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0aW9uIGZvciBh
IHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gZmluYWwgOiBw
dWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxLZXlmcmFtZUFu
aW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVt
ZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigq
bmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0
aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKLSAgICB9Ci0gICAgCi0gICAgT3B0aW9uU2V0PEFuaW1h
dGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRp
b24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgS2V5ZnJhbWVMaXN0
JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotCi0gICAgY29uc3Qg
QXRvbVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5h
bWUoKTsgfQotCi0gICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
KSBjb25zdDsKLQotICAgIGJvb2wgdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7IHJl
dHVybiBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0OyB9Ci0gICAgYm9vbCBkZXBlbmRzT25MYXlv
dXQoKSBjb25zdCB7IHJldHVybiBtX2RlcGVuZHNPbkxheW91dDsgfQotICAgIGJvb2wgYWZmZWN0
c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJhdGVkUHJv
cGVydHk7IH0KLQotICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBXVEZNb3ZlKHN0eWxlKTsg
fQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAqbV91bmFuaW1hdGVkU3R5bGU7IH0KLQotICAgIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgS2V5ZnJhbWVB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1hdGlvbiYs
IGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1YWwgfktleWZy
YW1lQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVsYXBz
ZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJsZSBl
bGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRz
ID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgb3ZlcnJpZGU7Ci0K
LSAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5
cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0OwotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2ZW50KGNv
bnN0IEF0b21TdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotCi0gICAgYm9vbCBhZmZlY3Rz
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNvbXB1
dGVFeHRlbnRPZkFuaW1hdGlvbkZvck1hdHJpeEFuaW1hdGlvbihjb25zdCBGbG9hdFJlY3QmIHJl
bmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIGNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbkZvck1hdGNoaW5nVHJhbnNmb3JtTGlzdHMoY29uc3QgRmxvYXRSZWN0JiByZW5k
ZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgdm9pZCBjb21wdXRlTGF5b3V0RGVw
ZW5kZW5jeSgpOwotICAgIHZvaWQgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0gICAgdm9pZCB2
YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGlu
Z0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAg
IHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2Vu
ZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7
Ci0gICAgYm9vbCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0
eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChjb25zdCBS
ZW5kZXJTdHlsZSYpPiYpIGNvbnN0OwotICAgIAotICAgIC8vIEdldCB0aGUgc3R5bGVzIGZvciB0
aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRpbWUg
YW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCi0gICAgdm9pZCBmZXRjaEludGVydmFsRW5k
cG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqJiBmcm9t
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVzcykgY29u
c3Q7Ci0KLSAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsgLy8gVGhlIHN0eWxlIGp1c3QgYmVmb3Jl
IHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0KLSAgICBib29sIG1fc3RhcnRFdmVudERpc3BhdGNoZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCB7IGZhbHNlIH07
Ci0gICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgeyBmYWxzZSB9OwotICAgIGJvb2wg
bV9kZXBlbmRzT25MYXlvdXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5o
CmluZGV4IDdlNGZlM2ZkMDBjYTU5ZDliNzgyYThhMDQwZjRkNWI3OTE4MDlmZTYuLmVlMzQ3YmE4
NTMyNjFjOTYyZWE5OTQyYjY4M2YyYTJkYTkxMmFkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTQ3NCw5ICs0NzQsNyBAQCBw
dWJsaWM6CiAgICAgLy8gVHJhbnNpdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBzcGVjaWFsIGFu
aW1hdGlvbiBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXlmcmFtZSBpZGVudGlmaWVy
LgogICAgIHN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQ
cm9wZXJ0eUlEKTsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMgaGFu
ZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLiBJZiB0aGlzIHJldHVybnMKLSAgICAvLyBm
YWxzZSwgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHJ1biBieSBDU1NBbmltYXRpb25Db250cm9sbGVy
LgotICAgIC8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIGJvdGggdHJhbnNpdGlvbnMgYW5kIGtleWZy
YW1lIGFuaW1hdGlvbnMuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBo
YW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBib29sIGFkZEFu
aW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYgLypib3hT
aXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8s
IGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVhbCB2
b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRvdWJs
ZSAvKnRpbWVPZmZzZXQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlvbihj
b25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAppbmRleCA3OWEz
ZjUzOTYzYmY0N2I2MDE0ODAwYTc1MzIzNGQ2YTFkMTNhMWQ0Li41NjQ4NThlMmFhYTkxYTVlZWI3
ZjhhMjQ1OWIxNmEwMDNiOGY0ZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCkBAIC05Myw3ICs5Myw2IEBAIHB1
YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGNvbnN0IEdy
YXBoaWNzTGF5ZXIqLCBib29sIC8qdXNpbmdUaWxlZEJhY2tpbmcqLykgeyB9CiAgICAgCiAgICAg
Ly8gQ2FsbGJhY2sgZm9yIHdoZW4gaGFyZHdhcmUtYWNjZWxlcmF0ZWQgYW5pbWF0aW9uIHN0YXJ0
ZWQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhp
Y3NMYXllciosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25LZXkqLywgTW9ub3RvbmljVGltZSAv
KnRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkVuZGVkKGNvbnN0
IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uS2V5Ki8pIHsgfQogCiAg
ICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgYSBsYXllciBwcm9wZXJ0eSBjaGFuZ2VkIHRoYXQgcmVx
dWlyZXMgYSBzdWJzZXF1ZW50IGNhbGwgdG8gZmx1c2hDb21wb3NpdGluZ1N0YXRlKCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVy
Q0EuY3BwCmluZGV4IDQ3MjBlMTI5OWVhNjRiNGNiYmRmOWZlMGVjMmI0M2RmY2U1YjRiMWUuLmZl
NzgzZmFhNzMxOWY5MjBjMTZjMzMzZWM5NjgyMDYzNTZmMmU1NzUgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApA
QCAtMTEwOCwxMiArMTEwOCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZW1vdmVBbmltYXRp
b24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG5vdGVMYXllclByb3BlcnR5Q2hh
bmdlZChBbmltYXRpb25DaGFuZ2VkIHwgQ292ZXJhZ2VSZWN0Q2hhbmdlZCk7CiB9CiAKLXZvaWQg
R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGNvbnN0IFN0
cmluZyYgYW5pbWF0aW9uS2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJHcmFwaGljc0xheWVyQ0EgIiA8PCB0
aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxheWVyQW5p
bWF0aW9uU3RhcnRlZCAiIDw8IGFuaW1hdGlvbktleSk7Ci0gICAgY2xpZW50KCkubm90aWZ5QW5p
bWF0aW9uU3RhcnRlZCh0aGlzLCBhbmltYXRpb25LZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQg
R3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbktleSkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3Ry
ZWFtIDw8ICJHcmFwaGljc0xheWVyQ0EgIiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5
ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uRW5kZWQgIiA8PCBhbmltYXRpb25L
ZXkpOwpAQCAtMzA0MCw5ICszMDM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNv
bnRlbnRzTmVlZHNEaXNwbGF5KCkKIAogc3RhdGljIGJvb2wgaXNLZXlmcmFtZShjb25zdCBLZXlm
cmFtZVZhbHVlTGlzdCYgbGlzdCkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDE7Ci0gICAgcmV0dXJuIGxpc3Quc2l6ZSgpID4g
MjsKKyAgICByZXR1cm4gbGlzdC5zaXplKCkgPiAxOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmlt
YXRpb25OYW1lLCBTZWNvbmRzIHRpbWVPZmZzZXQpCkBAIC0zMjkzLDM5ICszMjg1LDI5IEBAIHZv
aWQgR3JhcGhpY3NMYXllckNBOjpzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBw
cm9wZXJ0eUFuaW0sIGNvbnN0IEFuCiAgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2ZShhZGRp
dGl2ZSk7CiAgICAgcHJvcGVydHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7CiAKLSAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgLy8gQSBDU1MgVHJh
bnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkg
d2lsbCBoYXZlCi0gICAgICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4g
dGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCi0gICAgICAgIC8vIHRp
bWluZyBmdW5jdGlvbiB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24u
Ci0gICAgICAgIGlmIChhbmltLT5wcm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpUcmFuc2l0
aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkpCi0gICAgICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRp
bWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgIH0KKyAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAorICAgIC8v
IEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpw
cm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0
eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCisgICAgLy8g
dGltaW5nIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRhdGlv
bi4KKyAgICBpZiAoYW5pbS0+cHJvcGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJhbnNpdGlv
bk1vZGU6OlNpbmdsZVByb3BlcnR5KQorICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRpbWluZ0Z1
bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwogfQogCiBjb25zdCBUaW1pbmdGdW5jdGlv
biYgR3JhcGhpY3NMYXllckNBOjp0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0
IEFuaW1hdGlvblZhbHVlJiBhbmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbSkKIHsKLSAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGFuaW0ucHJvcGVydHko
KS5tb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5ICYmIGFu
aW0udGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgICAgIC8vIEEgQ1NT
IFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0
eSgpIHdpbGwgaGF2ZQotICAgICAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmdsZVByb3Bl
cnR5LiBJbiB0aGlzIGNhc2UsIHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQotICAgICAgICAg
ICAgLy8gYW5pbWF0aW9uLXdpZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQgb24gdGhl
IHNpbmdsZSBrZXlmcmFtZSBpbnRlcnZhbAotICAgICAgICAgICAgLy8gdG8gd29yayBhcm91bmQg
YSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgotICAgICAgICAgICAgcmV0dXJuICphbmltLnRp
bWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFuaW1WYWx1ZS50aW1pbmdG
dW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVuY3Rpb24o
KTsKLSAgICAgICAgaWYgKGFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkp
Ci0gICAgICAgICAgICByZXR1cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJh
bWVzKCk7Ci0gICAgICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVkTGluZWFy
VGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0gQW5pbWF0
aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdGdW5jdGlv
bigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE1OTE4CisgICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkg
c2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgICAgICAv
LyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgY2hvc2Ug
bm90IHRvIHNldCBzZXQgdGhlCisgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRpbWluZyBmdW5j
dGlvbiwgc28gd2Ugc2V0IGl0IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2YWwKKyAgICAg
ICAgLy8gdG8gd29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgorICAgICAg
ICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKICAgICB9Ci0KICAgICBpZiAoYW5pbVZh
bHVlLnRpbWluZ0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAqYW5pbVZhbHVlLnRpbWluZ0Z1
bmN0aW9uKCk7Ci0gICAgaWYgKGFuaW0uaXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAgICAgICBy
ZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gQ3ViaWNCZXppZXJUaW1p
bmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0uZGVmYXVs
dFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiAqYW5pbS5kZWZh
dWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKTsKKyAgICByZXR1cm4gTGluZWFyVGltaW5n
RnVuY3Rpb246OnNoYXJlZExpbmVhclRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKIGJvb2wgR3JhcGhp
Y3NMYXllckNBOjpzZXRBbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3Qm
IHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FBbmltYXRp
b24qIGJhc2ljQW5pbSkKQEAgLTMzNDYsMTEgKzMzMjgsNiBAQCBib29sIEdyYXBoaWNzTGF5ZXJD
QTo6c2V0QW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxp
c3QsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNl
ZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4g
dGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZl
cnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGlt
aW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJh
c2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFs
dWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIHJldHVy
biB0cnVlOwogfQogCkBAIC0zNDQwLDExICszNDE3LDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6
OnNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmEKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3Ig
Mi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0
YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcg
YW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1
bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5p
bS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFs
dWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIGF1dG8gdmFsdWVG
dW5jdGlvbiA9IGdldFZhbHVlRnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5z
Zm9ybU9wVHlwZSk7CiAgICAgaWYgKHZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFuaW1hdGlv
bjo6Tm9WYWx1ZUZ1bmN0aW9uKQogICAgICAgICBiYXNpY0FuaW0tPnNldFZhbHVlRnVuY3Rpb24o
dmFsdWVGdW5jdGlvbik7CkBAIC0zNTUxLDExICszNTIzLDYgQEAgYm9vbCBHcmFwaGljc0xheWVy
Q0E6OnNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYg
dmFsdWUKICAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0aW9uLCBpbnRlcm5h
bEZpbHRlclByb3BlcnR5SW5kZXgpOwogICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b09wZXJh
dGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKIAotICAgIC8vIFRoaXMgY29kZXBh
dGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRv
IGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGlu
IHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRl
cyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0g
ICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5p
bWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQog
ICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGZlN2RjNTZhNDdmM2ZiZTc4ZDEz
MWFhYTZkYzI5NjQ2ZTBlYzMyYmQuLmYyNmU1MWFkZmNmZjZiMzZmODg4M2Q0ZjY2NGNjNzU2N2Fi
YmYxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dy
YXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xOTUsNyArMTk1LDYgQEAgcHJpdmF0ZToKICAgICBib29s
IHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gZmFsc2U7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXll
ckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CiAKLSAg
ICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1RpbWUgYmVnaW5UaW1lKSBvdmVycmlk
ZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvbkVuZGVk
KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KSBvdmVycmlkZTsKICAgICBDb21wb3NpdGluZ0Nv
b3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRhdGlvbigp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQogICAgIFdF
QkNPUkVfRVhQT1JUIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0Zm9ybUNB
TGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXAsIEdyYXBoaWNz
TGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggNTA0YjAxYzI0NDRl
OWU5NTljMThjMzQ2Y2I1ZWI3YmVjYTBkNjM3NC4uMzZiYmMyMGE4NDFkMjlmMzc3NmM1MzY1NTFm
ZDA2ZGQwZGRmYTJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTEwMyw3ICsxMDMsNiBAQCBwdWJsaWM6CiAg
ICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1fb3duZXI7
IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
cikgeyBtX293bmVyID0gb3duZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25TdGFy
dGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkgPSAwOwogICAg
IHZpcnR1YWwgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgPSAwOwogCiAg
ICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgKaW5kZXggNjc3OGRlNzE5YzUwZTFhNDVmYzgyNDZkNzNhOTA4YWJmYmFkMTMwNi4uNGNkMDg0
M2I1ZWQ5YTY0ZGNiZDcwZGEyZGE0Y2IyZWFmZDEwODNlZSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50
LmgKQEAgLTQwLDcgKzQwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3Jt
Q0FMYXllckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgeyB9CiAKLSAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJp
bmcmIC8qYW5pbWF0aW9uS2V5Ki8sIE1vbm90b25pY1RpbWUpIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9u
S2V5Ki8pIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdDb29yZGlu
YXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24oKSBjb25z
dCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRp
b246OlRvcERvd247IH0KICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250
ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3Qm
IGluQ2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpID0gMDsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9y
bUNBTGF5ZXJDb2NvYS5oCmluZGV4IDk5MjJmNDhmYjcwZDA5Y2UwOGY2MmY0ZDFhMzdiMzg0OTU5
MThlZjIuLjViMjE2M2VjMDI5NzdkZDk0NmMxNzAyNmVlMTJmNGEzYzAxZmZlYTggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FM
YXllckNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6CiAgICAg
dm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmlt
YXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhbmlt
YXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkg
b3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3Zl
cnJpZGU7CiAKICAgICB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IDI4ODQ2ZjZiOTE1NjExYjkyZWY3
NDBkOTNhOTgxZDAwMDNhNWI2OWMuLjU5NTQxZjg3NzRmODMyZmE3Y2RlNjA5MDdjMWRlYmNjNTk1
NTU5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2Nv
Y29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC05OSw1NiArOTks
MTggQEAgUmVmPFBsYXRmb3JtQ0FMYXllckNvY29hPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3Jl
YXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXQKICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQ
bGF0Zm9ybUNBTGF5ZXJDb2NvYSgoX19icmlkZ2UgQ0FMYXllciAqKXBsYXRmb3JtTGF5ZXIsIG93
bmVyKSk7CiB9CiAKLXN0YXRpYyBNb25vdG9uaWNUaW1lIG1lZGlhVGltZVRvQ3VycmVudFRpbWUo
Q0ZUaW1lSW50ZXJ2YWwgdCkKLXsKLSAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93KCkgKyBT
ZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKIAotLy8gRGVsZWdhdGUgZm9yIGFuaW1hdGlvbkRpZFN0YXJ0IGNhbGxiYWNrCiBAaW50
ZXJmYWNlIFdlYkFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgewogICAgIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllciogbV9vd25lcjsKIH0KIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDoo
Q0FBbmltYXRpb24gKilhbmltOwogLSAodm9pZClzZXRPd25lcjooV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyKilvd25lcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0aW9uRGVs
ZWdhdGUKIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilhbmltYXRp
b24KLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNpZiBQTEFURk9STShJT1NfRkFN
SUxZKQotICAgIFdlYlRocmVhZExvY2soKTsKLSNlbmRpZgotICAgIGlmICghbV9vd25lcikKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7Ci0gICAgaWYgKGhh
c0V4cGxpY2l0QmVnaW5UaW1lKGFuaW1hdGlvbikpIHsKLSAgICAgICAgLy8gV2UgZG9uJ3Qga25v
dyB3aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1hdGlvbiwgc28ganVzdCB1c2Ug
dGhlIGN1cnJlbnQgdGltZQotICAgICAgICAvLyAoZXZlbiB0aG91Z2ggdGhpcyB3aWxsIGJlIHNs
aWdodGx5IG9mZikuCi0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUo
Q0FDdXJyZW50TWVkaWFUaW1lKCkpOwotICAgIH0gZWxzZQotICAgICAgICBzdGFydFRpbWUgPSBt
ZWRpYVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5UaW1lXSk7Ci0KLSAgICBDQUxh
eWVyICpsYXllciA9IG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIFN0cmluZyBhbmlt
YXRpb25LZXk7Ci0gICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlz
XSkgewotICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlv
bikgewotICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCi0g
ICAgICAgIG1fb3duZXItPmFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBzdGFydFRpbWUp
OwotfQotCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5pbWF0aW9u
IGZpbmlzaGVkOihCT09MKWZpbmlzaGVkCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7
CkBAIC0zOTMsMTIgKzM1NSw2IEBAIFBsYXRmb3JtQ0FMYXllckNvY29hOjp+UGxhdGZvcm1DQUxh
eWVyQ29jb2EoKQogICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5ZXIgKj4o
bV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyQ29j
b2E6OmFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25p
Y1RpbWUgYmVnaW5UaW1lKQotewotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293bmVyLT5w
bGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGFuaW1hdGlvbktleSwgYmVnaW5UaW1lKTsK
LX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRW5kZWQoY29uc3QgU3Ry
aW5nJiBhbmltYXRpb25LZXkpCiB7CiAgICAgaWYgKG1fb3duZXIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBo
aWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBiNzI0M2U5OTRjMDA0ZDIyMTVkY2I5NGMx
ZTRlZWJkYTBlOTI1NDA4Li5hODM5NDliNGU5NDMyMTY2ZTdlMjE3ODNhNGYzMGNjZWFiNTQ1ODBj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3Jh
cGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTQ2Nyw5
ICs0NjcsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjb21taXRMYXllckNo
YW5nZXMoKQogICAgIGlmIChtX2NoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpCiAgICAgICAg
IG1fbGF5ZXIuc2V0QW5pbWF0aW9ucyhtX2FuaW1hdGlvbnMpOwogCi0gICAgaWYgKG1fY2hhbmdl
TWFzayAmIEFuaW1hdGlvblN0YXJ0ZWQpCi0gICAgICAgIGNsaWVudCgpLm5vdGlmeUFuaW1hdGlv
blN0YXJ0ZWQodGhpcywgIiIsIG1fYW5pbWF0aW9uU3RhcnRUaW1lKTsKLQogICAgIG1fY2hhbmdl
TWFzayA9IE5vQ2hhbmdlczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQv
Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBlMjg3MjI4NGRkNGVhYjkxY2RkZmU2
ZjVkOGE1ODkzM2FmZGMwMDQyLi42ZGZlYjIxNjY1NTY4YmEyYmYyNzNhMWFmOGYyNjQ0NDQzZjM2
ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
Y29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmNwcApAQCAtMTM5LDcgKzEzOSw2IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKFR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xheWVy
CiAgICAgLCBtX3Nob3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2Nvb3Jk
aW5hdG9yKDApCiAgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQotICAgICwgbV9h
bmltYXRpb25TdGFydGVkVGltZXIoKnRoaXMsICZDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6OmFu
aW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQogICAgICwgbV9yZXF1ZXN0UGVuZGluZ1RpbGVDcmVh
dGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cjo6cmVxdWVzdFBlbmRpbmdUaWxlQ3JlYXRpb25UaW1lckZpcmVkKQogewogICAgIHN0YXRpYyBO
aWNvc2lhOjpQbGF0Zm9ybUxheWVyOjpMYXllcklEIG5leHRMYXllcklEID0gMTsKQEAgLTEzODgs
NyArMTM4Nyw2IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRpb24o
Y29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKIAogICAgIG1fbGFzdEFuaW1hdGlv
blN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gU2Vjb25kcyhkZWxheUFzTmVnYXRp
dmVUaW1lT2Zmc2V0KTsKICAgICBtX2FuaW1hdGlvbnMuYWRkKE5pY29zaWE6OkFuaW1hdGlvbihr
ZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBtX2xh
c3RBbmltYXRpb25TdGFydFRpbWUsIDBfcywgTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRpb25T
dGF0ZTo6UGxheWluZykpOwotICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25lU2hv
dCgwX3MpOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
QEAgLTE0MTcsMTEgKzE0MTUsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6cmVz
dW1lQW5pbWF0aW9ucygpCiAgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwogfQogCi12b2lkIENv
b3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoKQotewot
ICAgIGNsaWVudCgpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgIiIsIG1fbGFzdEFuaW1h
dGlvblN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXF1
ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyRmlyZWQoKQogewogICAgIG5vdGlmeUZsdXNoUmVx
dWlyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3Rl
eG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBo
aWNzTGF5ZXIuaAppbmRleCBlZThmNTc4NzlhZGE2YzkxZjAzOTkxOTJlZjk1YzkyNGVjZTEzZTQx
Li5kOTI2YzcwMjM1NTQ4MWQ3YTFjNzE2MGM0YjQ4MTk0MTQyODY5MjM4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0xOTEs
NyArMTkxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVSZWN0
KCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwogCi0gICAgdm9pZCBhbmlt
YXRpb25TdGFydGVkVGltZXJGaXJlZCgpOwogICAgIHZvaWQgcmVxdWVzdFBlbmRpbmdUaWxlQ3Jl
YXRpb25UaW1lckZpcmVkKCk7CiAKICAgICBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQoY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYpIGNvbnN0OwpAQCAtMjI1LDcgKzIyNCw2IEBAIHByaXZhdGU6
CiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAgICBOYXRpdmVJbWFnZVB0
ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKIAotICAgIFRpbWVyIG1fYW5pbWF0aW9uU3Rh
cnRlZFRpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcj4g
bV9yZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyOwogICAgIE5pY29zaWE6OkFuaW1hdGlv
bnMgbV9hbmltYXRpb25zOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0QW5pbWF0aW9uU3RhcnRU
aW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggZTBhNjJk
MGVlMjYwYzc0ODQzZDBlOWUxNGYyZjJmMzdiMzJkNDgyYy4uMDc3YjczMmViZGU5YjA1YTU1ZjA5
M2U4YTM1NWFiMjA3NThmMTc5NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckVsZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5oCkBAIC0yMjYsMTAgKzIyNiw2IEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmplY3QqIGF0
dGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQsIFJlbmRl
ck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGRldGFj
aFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyT2JqZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJvb2wgc3Rh
cnRUcmFuc2l0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQcm9wZXJ0eUlELCBjb25z
dCBSZW5kZXJTdHlsZSogLyogZnJvbVN0eWxlICovLCBjb25zdCBSZW5kZXJTdHlsZSogLyogdG9T
dHlsZSAqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblBh
dXNlZChkb3VibGUgLyogdGltZU9mZnNldCAqLywgQ1NTUHJvcGVydHlJRCkgeyB9Ci0gICAgdmly
dHVhbCB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKSB7IH0KLQogICAgIHZp
cnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLyogdGltZU9mZnNldCAqLywgY29uc3Qg
QW5pbWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0JikgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2
aXJ0dWFsIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBjb25z
dCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25GaW5p
c2hlZChjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggN2QwN2NkYmQ4NDk3MDI4NTNlMWI5MjVhMGJiYzk4ZDdk
ZGFmYTc2Ni4uMDIxYzFjMmNmMDY1ODA2ODg1NmYzMWVjMWE2OWI2ZmEyYTcwNDkwNSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCi0jaW5jbHVk
ZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTEzMjcs
MjEgKzEzMjYsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OmN1cnJlbnRU
cmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKIAogICAgIGF1dG8mIHJlbmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIo
KS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+aXNSdW5u
aW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5
VHJhbnNmb3JtKSkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJU
cmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBz
dHlsZSA9IHRpbWVsaW5lLT5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NC
b3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0o
Y3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmlnaW4pOwotICAg
ICAgICAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRl
cjNEVHJhbnNmb3JtcygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25S
ZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKKyAgICBpZiAoYXV0
byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgeworICAgICAgICBp
ZiAodGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5k
ZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRlZFN0
eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IHN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihy
ZW5kZXJlcigpKTsKICAgICAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0
ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9y
bUJveFRvQ1NTQm94VHlwZShzdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRvY3Vt
ZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBzdHlsZS0+YXBwbHlUcmFu
c2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmlnaW4p
OwogICAgICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVu
ZGVyM0RUcmFuc2Zvcm1zKCkpOwpAQCAtMTM0OSwxNyArMTMzNyw2IEBAIFRyYW5zZm9ybWF0aW9u
TWF0cml4IFJlbmRlckxheWVyOjpjdXJyZW50VHJhbnNmb3JtKFJlbmRlclN0eWxlOjpBcHBseVRy
YW5zZm9ybU9yCiAgICAgICAgIH0KICAgICB9CiAKLQotICAgIC8vIG1fdHJhbnNmb3JtIGluY2x1
ZGVzIHRyYW5zZm9ybS1vcmlnaW4sIHNvIHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSB0cmFuc2Zv
cm0gaGVyZS4KLSAgICBpZiAoYXBwbHlPcmlnaW4gPT0gUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFu
c2Zvcm1PcmlnaW4pIHsKLSAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9y
bTsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVy
KCkubGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkp
OwotICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9E
ZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5
cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOwotICAgICAgICByZW5kZXJCb3guc3R5bGUoKS5hcHBseVRyYW5zZm9ybShj
dXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBSZW5kZXJTdHlsZTo6RXhjbHVk
ZVRyYW5zZm9ybU9yaWdpbik7Ci0gICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFu
c2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKLSAgICAgICAgcmV0dXJuIGN1cnJUcmFu
c2Zvcm07Ci0gICAgfQotCiAgICAgcmV0dXJuICptX3RyYW5zZm9ybTsKIH0KIApAQCAtNjE2NSwy
MCArNjE0MiwxMyBAQCBib29sIFJlbmRlckxheWVyOjpnZXRPdmVybGFwQm91bmRzSW5jbHVkaW5n
Q2hpbGRyZW5BY2NvdW50aW5nRm9yVHJhbnNmb3JtQW5pbWF0aQogICAgIGJvdW5kcyA9IGNhbGN1
bGF0ZUxheWVyQm91bmRzKHRoaXMsIExheW91dFNpemUoKSwgYm91bmRzRmxhZ3MpOwogICAgIAog
ICAgIExheW91dFJlY3QgYW5pbWF0ZWRCb3VuZHMgPSBib3VuZHM7Ci0gICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCku
ZG9jdW1lbnRUaW1lbGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGltZWxpbmUtPmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbihyZW5kZXJlcigpLCBhbmltYXRlZEJvdW5kcykpIHsKLSAgICAgICAg
ICAgICAgICBib3VuZHMgPSBhbmltYXRlZEJvdW5kczsKLSAgICAgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlm
IChyZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihy
ZW5kZXJlcigpLCBhbmltYXRlZEJvdW5kcykpIHsKKyAgICBpZiAoYXV0byogdGltZWxpbmUgPSBy
ZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgeworICAgICAgICBpZiAodGltZWxpbmUtPmNv
bXB1dGVFeHRlbnRPZkFuaW1hdGlvbihyZW5kZXJlcigpLCBhbmltYXRlZEJvdW5kcykpIHsKICAg
ICAgICAgICAgIGJvdW5kcyA9IGFuaW1hdGVkQm91bmRzOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXgg
NGQ1NDdjNGI3ZmRkMWFlNDA5YTZjZTZmODI5MmY2YTZjZDMwMzI2Zi4uYjczODBmZWRmNzkwM2Iw
YTdmMGYxMTRlOGIyMTY1YmNmNDhjMzU1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJS
ZW5kZXJMYXllckJhY2tpbmcuaCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVk
ZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0Nv
bnRleHQuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKQEAgLTEyNTEsMTEgKzEyNTAsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6
dXBkYXRlR2VvbWV0cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAg
ICBjb25zdCBhdXRvIGRldmljZVNjYWxlRmFjdG9yID0gdGhpcy0+ZGV2aWNlU2NhbGVGYWN0b3Io
KTsKIAogICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSBm
YWxzZTsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpCi0gICAgICAgICAgICBp
c1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5lLT5pc1J1bm5p
bmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlU
cmFuc2Zvcm0pOwotICAgIH0gZWxzZQotICAgICAgICBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5z
Zm9ybUFuaW1hdGlvbiA9IHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5uaW5nQWNj
ZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNm
b3JtKTsKKyAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxp
bmUoKSkKKyAgICAgICAgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSB0
aW1lbGluZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVy
KCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKIAogICAgIHVwZGF0ZVRyYW5zZm9ybShzdHlsZSk7
CiAgICAgdXBkYXRlT3BhY2l0eShzdHlsZSk7CkBAIC0zNjQ4LDk5ICszNjQ0LDYgQEAgdm9pZCBS
ZW5kZXJMYXllckJhY2tpbmc6OmFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0
aW9uTmFtZSkKICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVw
ZGF0ZSgpOwogfQogCi1ib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRUcmFuc2l0aW9uKGRv
dWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSkKLXsKLSAgICBib29sIGRp
ZEFuaW1hdGUgPSBmYWxzZTsKLQotICAgIEFTU0VSVChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eUlu
dmFsaWQpOwotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5T3BhY2l0eSkgewotICAg
ICAgICBjb25zdCBBbmltYXRpb24qIG9wYWNpdHlBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZv
clByb3BlcnR5KENTU1Byb3BlcnR5T3BhY2l0eSk7Ci0gICAgICAgIGlmIChvcGFjaXR5QW5pbSAm
JiAhb3BhY2l0eUFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBL
ZXlmcmFtZVZhbHVlTGlzdCBvcGFjaXR5VmVjdG9yKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsK
LSAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRp
b25WYWx1ZT4oMCwgY29tcG9zaXRpbmdPcGFjaXR5KGZyb21TdHlsZS0+b3BhY2l0eSgpKSkpOwot
ICAgICAgICAgICAgb3BhY2l0eVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlv
blZhbHVlPigxLCBjb21wb3NpdGluZ09wYWNpdHkodG9TdHlsZS0+b3BhY2l0eSgpKSkpOwotICAg
ICAgICAgICAgLy8gVGhlIGJveFNpemUgcGFyYW0gaXMgb25seSB1c2VkIGZvciB0cmFuc2Zvcm0g
YW5pbWF0aW9ucyAod2hpY2ggY2FuIG9ubHkgcnVuIG9uIFJlbmRlckJveGVzKSwgc28gd2UgcGFz
cyBhbiBlbXB0eSBzaXplIGhlcmUuCi0gICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5h
ZGRBbmltYXRpb24ob3BhY2l0eVZlY3RvciwgRmxvYXRTaXplKCksIG9wYWNpdHlBbmltLCBHcmFw
aGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5T3Bh
Y2l0eSksIHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQg
dGhlIGNvcnJlY3Qgb3BhY2l0eSBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBh
bHNvIHNldCB0aGUgZmluYWwgb3BhY2l0eS4KLSAgICAgICAgICAgICAgICB1cGRhdGVPcGFjaXR5
KCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eVRyYW5zZm9ybSAmJiBtX293bmluZ0xheWVyLmhhc1RyYW5zZm9ybSgpKSB7Ci0gICAgICAgIGNv
bnN0IEFuaW1hdGlvbiogdHJhbnNmb3JtQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1BbmltICYm
ICF0cmFuc2Zvcm1BbmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAg
S2V5ZnJhbWVWYWx1ZUxpc3QgdHJhbnNmb3JtVmVjdG9yKEFuaW1hdGVkUHJvcGVydHlUcmFuc2Zv
cm0pOwotICAgICAgICAgICAgdHJhbnNmb3JtVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPFRyYW5z
Zm9ybUFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5bGUtPnRyYW5zZm9ybSgpKSk7Ci0gICAgICAg
ICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9u
VmFsdWU+KDEsIHRvU3R5bGUtPnRyYW5zZm9ybSgpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aGljc0xheWVyLT5hZGRBbmltYXRpb24odHJhbnNmb3JtVmVjdG9yLCBzbmFwcGVkSW50UmVjdChy
ZW5kZXJCb3goKS0+Ym9yZGVyQm94UmVjdCgpKS5zaXplKCksIHRyYW5zZm9ybUFuaW0sIEdyYXBo
aWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlUcmFu
c2Zvcm0pLCB0aW1lT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0
IHRoZSBjb3JyZWN0IHRyYW5zZm9ybSBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRz
LCBhbHNvIHNldCB0aGUgZmluYWwgdHJhbnNmb3JtLgotICAgICAgICAgICAgICAgIHVwZGF0ZVRy
YW5zZm9ybSgqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gQ1NT
UHJvcGVydHlGaWx0ZXIgJiYgbV9vd25pbmdMYXllci5oYXNGaWx0ZXIoKSkgewotICAgICAgICBj
b25zdCBBbmltYXRpb24qIGZpbHRlckFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVy
dHkoQ1NTUHJvcGVydHlGaWx0ZXIpOwotICAgICAgICBpZiAoZmlsdGVyQW5pbSAmJiAhZmlsdGVy
QW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFs
dWVMaXN0IGZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5RmlsdGVyKTsKLSAgICAgICAgICAg
IGZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGaWx0ZXJBbmltYXRpb25WYWx1ZT4oMCwg
ZnJvbVN0eWxlLT5maWx0ZXIoKSkpOwotICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmluc2VydCht
YWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigxLCB0b1N0eWxlLT5maWx0ZXIoKSkpOwot
ICAgICAgICAgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKGZpbHRlclZlY3Rv
ciwgRmxvYXRTaXplKCksIGZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVG
b3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlGaWx0ZXIpLCB0aW1lT2Zmc2V0KSkgewotICAg
ICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGZpbHRlciBpcyB2aXNp
YmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0aGUgZmluYWwgZmlsdGVyLgot
ICAgICAgICAgICAgICAgIHVwZGF0ZUZpbHRlcnMoKnRvU3R5bGUpOwotICAgICAgICAgICAgICAg
IGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZHJvcEZpbHRlciAmJiBtX293bmluZ0xheWVyLmhhc0JhY2tkcm9wRmlsdGVy
KCkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBiYWNrZHJvcEZpbHRlckFuaW0gPSB0b1N0
eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRl
cik7Ci0gICAgICAgIGlmIChiYWNrZHJvcEZpbHRlckFuaW0gJiYgIWJhY2tkcm9wRmlsdGVyQW5p
bS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFsdWVM
aXN0IGJhY2tkcm9wRmlsdGVyVmVjdG9yKEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZp
bHRlcik7Ci0gICAgICAgICAgICBiYWNrZHJvcEZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1
ZTxGaWx0ZXJBbmltYXRpb25WYWx1ZT4oMCwgZnJvbVN0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7
Ci0gICAgICAgICAgICBiYWNrZHJvcEZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGaWx0
ZXJBbmltYXRpb25WYWx1ZT4oMSwgdG9TdHlsZS0+YmFja2Ryb3BGaWx0ZXIoKSkpOwotICAgICAg
ICAgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKGJhY2tkcm9wRmlsdGVyVmVj
dG9yLCBGbG9hdFNpemUoKSwgYmFja2Ryb3BGaWx0ZXJBbmltLCBHcmFwaGljc0xheWVyOjphbmlt
YXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0
ZXIpLCB0aW1lT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRo
ZSBjb3JyZWN0IGJhY2tkcm9wIGZpbHRlciBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBl
bmRzLCBhbHNvIHNldCB0aGUgZmluYWwgYmFja2Ryb3AgZmlsdGVyLgotICAgICAgICAgICAgICAg
IHVwZGF0ZUJhY2tkcm9wRmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5p
bWF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQot
ICAgIGlmIChkaWRBbmltYXRlKQotICAgICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzUG9zdExh
eW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0KLSAgICByZXR1cm4gZGlkQW5pbWF0ZTsKLX0KLQot
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnRyYW5zaXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZz
ZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi17Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIGFu
aW1hdGVkUHJvcGVydHkgPSBjc3NUb0dyYXBoaWNzTGF5ZXJQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0g
ICAgaWYgKGFuaW1hdGVkUHJvcGVydHkgIT0gQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCi0gICAg
ICAgIG1fZ3JhcGhpY3NMYXllci0+cGF1c2VBbmltYXRpb24oR3JhcGhpY3NMYXllcjo6YW5pbWF0
aW9uTmFtZUZvclRyYW5zaXRpb24oYW5pbWF0ZWRQcm9wZXJ0eSksIHRpbWVPZmZzZXQpOwotfQot
Ci12b2lkIFJlbmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5
SUQgcHJvcGVydHkpCi17Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIGFuaW1hdGVkUHJvcGVydHkg
PSBjc3NUb0dyYXBoaWNzTGF5ZXJQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKGFuaW1hdGVk
UHJvcGVydHkgIT0gQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpIHsKLSAgICAgICAgbV9ncmFwaGlj
c0xheWVyLT5yZW1vdmVBbmltYXRpb24oR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRy
YW5zaXRpb24oYW5pbWF0ZWRQcm9wZXJ0eSkpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldE5l
ZWRzUG9zdExheW91dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVy
KiwgY29uc3QgU3RyaW5nJiwgTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIGlmICghUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkubm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5kZXJlcigpLCB0aW1lKTsKLX0KLQogdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6Om5vdGlmeUZsdXNoUmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCiB7
CiAgICAgaWYgKHJlbmRlcmVyKCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKaW5kZXggOWM3NjQ3YmIy
Njc2YjNmYzFmOTI2ZmFkOTI4NDdkOGY4ZWE3YzBmMC4uODNhMmE5NTE4ZjZmMzZjYjdiMGQ4NGQ2
Mjg2ZjM3ZTkwMDAyOGUxNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuaApAQCAtMTg0LDExICsxODQsNyBAQCBwdWJsaWM6CiAgICAgLy8gTm90aWZp
Y2F0aW9uIGZyb20gdGhlIHJlbmRlcmVyIHRoYXQgaXRzIGNvbnRlbnQgY2hhbmdlZC4KICAgICB2
b2lkIGNvbnRlbnRDaGFuZ2VkKENvbnRlbnRDaGFuZ2VUeXBlKTsKIAotICAgIC8vIEludGVyZmFj
ZSB0byBzdGFydCwgZmluaXNoLCBzdXNwZW5kIGFuZCByZXN1bWUgYW5pbWF0aW9ucyBhbmQgdHJh
bnNpdGlvbnMKLSAgICBib29sIHN0YXJ0VHJhbnNpdGlvbihkb3VibGUsIENTU1Byb3BlcnR5SUQs
IGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxl
KTsKLSAgICB2b2lkIHRyYW5zaXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3Bl
cnR5SUQpOwotICAgIHZvaWQgdHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpOwotCisg
ICAgLy8gSW50ZXJmYWNlIHRvIHN0YXJ0LCBmaW5pc2gsIHN1c3BlbmQgYW5kIHJlc3VtZSBhbmlt
YXRpb25zCiAgICAgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3Qg
QW5pbWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0Jik7CiAgICAgdm9pZCBhbmltYXRpb25QYXVz
ZWQoZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdm9pZCBhbmlt
YXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIG5hbWUpOwpAQCAtMjI2LDcgKzIyMiw2IEBAIHB1
YmxpYzoKIAogICAgIC8vIEdyYXBoaWNzTGF5ZXJDbGllbnQgaW50ZXJmYWNlCiAgICAgdm9pZCB0
aWxlZEJhY2tpbmdVc2FnZUNoYW5nZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGJvb2wgLyp1c2lu
Z1RpbGVkQmFja2luZyovKSBvdmVycmlkZTsKLSAgICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5LCBNb25v
dG9uaWNUaW1lIHN0YXJ0VGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBub3RpZnlGbHVzaFJlcXVp
cmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBvdmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNo
QmVmb3JlRGlzcGxheVJlZnJlc2goY29uc3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CmluZGV4IDE4NDFmOTZmMGI2Mjk4Y2E1MjNlZDdmMWU2OTg5ZjJjMjc2ZGRkNzUuLmYyMzljNGE0
NDgwYWVlNzJhMzkyYjM2YzUyNDViN2NkNDFkNjJkMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwCkBAIC0yOCw3ICsyOCw2IEBA
CiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAKICNpbmNsdWRlICJBc3luY1Nj
cm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJp
bmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01NjAsOSArNTU5LDYgQEAgdm9p
ZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyhib29sIGlz
Rmx1c2hSb290KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byYgZnJhbWVWaWV3
ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFu
aW1hdGlvblVwZGF0ZUJsb2NrKCZmcmFtZVZpZXcuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7
Ci0KICAgICBBU1NFUlQoIW1fZmx1c2hpbmdMYXllcnMpOwogICAgIHsKICAgICAgICAgU2V0Rm9y
U2NvcGU8Ym9vbD4gZmx1c2hpbmdMYXllcnNTY29wZShtX2ZsdXNoaW5nTGF5ZXJzLCB0cnVlKTsK
QEAgLTgxOSw4ICs4MTUsNiBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29t
cG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVwZGF0ZQogCiAgICAgKyttX2Nv
bXBvc2l0aW5nVXBkYXRlQ291bnQ7CiAKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRp
b25VcGRhdGVCbG9jaygmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpLmZyYW1lKCkubGVnYWN5QW5p
bWF0aW9uKCkpOwotCiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gcG9zdExheW91dENoYW5nZShtX2lu
UG9zdExheW91dFVwZGF0ZSwgdHJ1ZSk7CiAKICNpZiAhTE9HX0RJU0FCTEVECkBAIC0yOTc3LDE3
ICsyOTcxLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9zaXRp
bmdGb3JBbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamUKICAgICAgICAgfQogICAgIH0KIAot
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgYXV0byYgYW5pbUNvbnRyb2xsZXIgPSByZW5kZXJlci5sZWdhY3lBbmltYXRpb24oKTsKLSAg
ICByZXR1cm4gKGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVu
ZGVyZXIsIENTU1Byb3BlcnR5T3BhY2l0eSkKLSAgICAgICAgJiYgKHVzZXNDb21wb3NpdGluZygp
IHx8IChtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGllbnQ6OkFuaW1hdGVkT3BhY2l0
eVRyaWdnZXIpKSkKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9u
T25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlGaWx0ZXIpCi0jaWYgRU5BQkxFKEZJTFRF
UlNfTEVWRUxfMikKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9u
T25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcikKLSNl
bmRpZgotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CisgICAgcmV0dXJuIGZhbHNlOwog
fQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvclRy
YW5zZm9ybShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJlcikgY29uc3QKQEAgLTM1MTUs
MTAgKzM0OTksNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNSdW5uaW5nVHJhbnNm
b3JtQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAgICAgICAgICAgICByZXR1cm4g
ZWZmZWN0c1N0YWNrLT5pc0N1cnJlbnRseUFmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJh
bnNmb3JtKTsKICAgICB9CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZW5kZXJlci5sZWdhY3lBbmltYXRpb24oKS5p
c1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVRyYW5zZm9y
bSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBJZiBhbiBlbGVtZW50IGhhcyBjb21wb3Np
dGVkIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4sIHRob3NlIGNoaWxkcmVuIHJlbmRlciBpbiBm
cm9udCBvZiB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmNwcAppbmRleCBjZmVjYWU0NGQzZGQ4ODZhZDY0NzQ5N2I5YTExYjg0MGU0
ZDE1ZDZiLi5jYWU4ZjcyZjM2Y2Q4NTMyYTI1OThiNDhiNmJlYmY4MzUzOGY0NDc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3Bw
CkBAIC0yNTAsMjcgKzI1MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6Y29tcHV0
ZVJlcGFpbnRMYXlvdXRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1vZGVsT2JqCiAgICAgICAgIHNl
dFJlcGFpbnRMYXlvdXRSZWN0cyhSZXBhaW50TGF5b3V0UmVjdHMoKnRoaXMsIHJlcGFpbnRDb250
YWluZXIsIGdlb21ldHJ5TWFwKSk7CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6
c3RhcnRUcmFuc2l0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SWQsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0
eWxlKQotewotICAgIGlmICghbGF5ZXIoKSB8fCAhbGF5ZXIoKS0+YmFja2luZygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGxheWVyKCktPmJhY2tpbmcoKS0+c3RhcnRUcmFu
c2l0aW9uKHRpbWVPZmZzZXQsIHByb3BlcnR5SWQsIGZyb21TdHlsZSwgdG9TdHlsZSk7Ci19Ci0K
LXZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGlt
ZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQotewotICAgIGlmICghbGF5ZXIoKSB8
fCAhbGF5ZXIoKS0+YmFja2luZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIoKS0+YmFj
a2luZygpLT50cmFuc2l0aW9uUGF1c2VkKHRpbWVPZmZzZXQsIHByb3BlcnR5SWQpOwotfQotCi12
b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5n
KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBsYXllcigpLT5iYWNraW5nKCktPnRyYW5zaXRpb25G
aW5pc2hlZChwcm9wZXJ0eUlkKTsKLX0KLQogYm9vbCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpz
dGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRp
b24sIGNvbnN0IEtleWZyYW1lTGlzdCYga2V5ZnJhbWVzKQogewogICAgIGlmICghbGF5ZXIoKSB8
fCAhbGF5ZXIoKS0+YmFja2luZygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKaW5kZXggYTNiM2RjYWRjYTZkNTA0Mzc3MTNkYjcyZWEy
MmI2MzFmZmUyZGJhNy4uZDk3ODFjZWNjODk3YzM1ODY5YTc3MjliYTFjZDBlNzZlMTk0MWYwYSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmpl
Y3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVj
dC5oCkBAIC02OSwxMCArNjksNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRSZXBhaW50TGF5b3V0
UmVjdHMoY29uc3QgUmVwYWludExheW91dFJlY3RzJik7CiAgICAgdm9pZCBjbGVhclJlcGFpbnRM
YXlvdXRSZWN0cygpOwogCi0gICAgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNvbnN0IFJl
bmRlclN0eWxlKiB0b1N0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHRyYW5zaXRpb25QYXVzZWQo
ZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJh
bnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpIG92ZXJyaWRlOwotCiAgICAgYm9vbCBzdGFy
dEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uJiwgY29uc3QgS2V5
ZnJhbWVMaXN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25QYXVzZWQoZG91YmxlIHRp
bWVPZmZzZXQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRp
b25GaW5pc2hlZChjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDE5MTI1ZmVmNzlmZmUyNjAwNGZmZTk5ODdlMWZm
MGIzNDBkZGY5YWQuLjUwMDlhZDE3YmE5Y2I3YjYyMzBmYzFjM2RmZTRjNmRmMGFmNzcyODQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKQEAgLTQ2LDcgKzQ2LDYgQEAg
Y2xhc3MgVGV4dFN0cmVhbTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQWZmaW5lVHJh
bnNmb3JtOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xh
c3MgQ3Vyc29yOwogY2xhc3MgRG9jdW1lbnQ7CkBAIC03MDYsNyArNzA1LDYgQEAgcHVibGljOgog
ICAgIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29uc3QgSW50UmVjdCogPSBudWxs
cHRyKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VDaGFuZ2VkKFdyYXBwZWRJbWFn
ZVB0ciwgY29uc3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KIAotICAgIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIGNvbnN0OwogICAgIERvY3VtZW50VGltZWxpbmUq
IGRvY3VtZW50VGltZWxpbmUoKSBjb25zdDsKIAogICAgIC8vIE1hcCBwb2ludHMgYW5kIHF1YWRz
IHRocm91Z2ggZWxlbWVudHMsIHBvdGVudGlhbGx5IHZpYSAzZCB0cmFuc2Zvcm1zLiBZb3Ugc2hv
dWxkIG5ldmVyIG5lZWQgdG8gY2FsbCB0aGVzZSBkaXJlY3RseTsgdXNlCkBAIC05NzMsMTEgKzk3
MSw2IEBAIGlubGluZSBQYWdlJiBSZW5kZXJPYmplY3Q6OnBhZ2UoKSBjb25zdAogICAgIHJldHVy
biAqZnJhbWUoKS5wYWdlKCk7CiB9CiAKLWlubGluZSBDU1NBbmltYXRpb25Db250cm9sbGVyJiBS
ZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGZyYW1l
KCkubGVnYWN5QW5pbWF0aW9uKCk7Ci19Ci0KIGlubGluZSBEb2N1bWVudFRpbWVsaW5lKiBSZW5k
ZXJPYmplY3Q6OmRvY3VtZW50VGltZWxpbmUoKSBjb25zdAogewogICAgIHJldHVybiBkb2N1bWVu
dCgpLmV4aXN0aW5nVGltZWxpbmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRl
cmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCmluZGV4IDhhN2ZkNjU4YjJkZDk5
MDcwOTcwNTJkMTEzYmRjZjg3ZGQ4MThkODYuLmIxMzI4YWE5OTk5OTYzZmMyNGZjNTllZWViOGZj
ZDVhZGUyZGZlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGlu
Zy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUg
IlJlbmRlclRyZWVVcGRhdGVyLmgiCiAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCi0jaW5j
bHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUFu
Y2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVJdGVyYXRvci5oIgogI2lu
Y2x1ZGUgIkRvY3VtZW50LmgiCkBAIC01NTYsNyArNTU1LDYgQEAgdm9pZCBSZW5kZXJUcmVlVXBk
YXRlcjo6dGVhckRvd25SZW5kZXJlcnMoRWxlbWVudCYgcm9vdCwgVGVhcmRvd25UeXBlIHRlYXJk
b3duVHkKIAogICAgIGF1dG8mIGRvY3VtZW50ID0gcm9vdC5kb2N1bWVudCgpOwogICAgIGF1dG8q
IHRpbWVsaW5lID0gZG9jdW1lbnQuZXhpc3RpbmdUaW1lbGluZSgpOwotICAgIGF1dG8mIGFuaW1h
dGlvbkNvbnRyb2xsZXIgPSBkb2N1bWVudC5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKTsgICAg
CiAKICAgICBhdXRvIHBvcCA9IFsmXSAodW5zaWduZWQgZGVwdGgpIHsKICAgICAgICAgd2hpbGUg
KHRlYXJkb3duU3RhY2suc2l6ZSgpID4gZGVwdGgpIHsKQEAgLTU3NSw3ICs1NzMsNiBAQCB2b2lk
IFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVycyhFbGVtZW50JiByb290LCBUZWFy
ZG93blR5cGUgdGVhcmRvd25UeQogICAgICAgICAgICAgICAgICAgICBlbHNlIGlmICh0ZWFyZG93
blR5cGUgPT0gVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZUNhbmNlbGluZ0FuaW1hdGlvbnMp
CiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS0+Y2FuY2VsRGVjbGFyYXRpdmVBbmlt
YXRpb25zRm9yRWxlbWVudChlbGVtZW50LCBXZWJBbmltYXRpb246OlNpbGVudGx5OjpObyk7CiAg
ICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIuY2Fu
Y2VsQW5pbWF0aW9ucyhlbGVtZW50KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIGNhc2UgVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZToKICAgICAgICAgICAgICAgICBp
ZiAodGltZWxpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVz
dGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCmluZGV4IDhj
ZTA3NTJhNjM2NmQ4MzMwMDI2MmIwMmVlMDgzZWU1OWZjMTA3MzguLmEzZWJmNmZiNjdmMWZhNjEy
YmYwNjQ2N2E3ZDU4ZDg5YTNlYjk5YTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxl
L1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0
ZXIuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAi
U3R5bGVBZGp1c3Rlci5oIgogCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgogI2luY2x1ZGUg
IkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgogI2luY2x1ZGUgIkVs
ZW1lbnQuaCIKQEAgLTU3LDYgKzU2LDcgQEAKICNpbmNsdWRlICJTVkdVUklSZWZlcmVuY2UuaCIK
ICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJXZWJB
bmltYXRpb25UeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBuYW1lc3BhY2UgU3R5bGUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCmluZGV4IGI4NWNm
NDY2YzE3M2I4ODAzZjc1ZTM3NjI1YmYwMjU4NmVmOTBhZTUuLmY3ZmZkNDRmOWFhNGI5NzFkZDlm
MWI2NmFjNTJlMDMzZWY2N2ZmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVS
ZXNvbHZlci5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJTdHlsZVRyZWVSZXNvbHZlci5oIgogCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkNvbXBvc2Vk
VHJlZUFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb21wb3NlZFRyZWVJdGVyYXRvci5o
IgpAQCAtNTQsNiArNTMsNyBAQAogI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKICNpbmNsdWRl
ICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldlYkFuaW1hdGlv
blR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAtMzEyLDI2ICszMTIsMjMgQEAg
RWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3QKIAogICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBhY3Q+
IGFuaW1hdGlvbkltcGFjdDsKIAotICAgIC8vIE5ldyBjb2RlIHBhdGggZm9yIENTUyBBbmltYXRp
b25zIGFuZCBDU1MgVHJhbnNpdGlvbnMuCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGFueSBuZXcgQ1NT
IGFuaW1hdGlvbiBvY2N1cmluZyBvbiB0aGlzIGVsZW1lbnQgaGFzIGEgbWF0Y2hpbmcgV2ViQW5p
bWF0aW9uCi0gICAgICAgIC8vIG9uIHRoZSBkb2N1bWVudCB0aW1lbGluZS4gTm90ZSB0aGF0IHdl
IGdldCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVudCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCBhIHRp
bWVsaW5lIGNyZWF0ZWQKLSAgICAgICAgLy8gaW4gY2FzZSBubyBXZWIgQW5pbWF0aW9ucyBoYXZl
IGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBBUEkuCi0gICAgICAgIGlmIChlbGVtZW50LmRv
Y3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0Zv
cndhcmRDYWNoZSAmJiAhZWxlbWVudC5kb2N1bWVudCgpLnJlbmRlclZpZXcoKS0+cHJpbnRpbmco
KSkgewotICAgICAgICAgICAgaWYgKG9sZFN0eWxlICYmIChvbGRTdHlsZS0+aGFzVHJhbnNpdGlv
bnMoKSB8fCBuZXdTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSkpCi0gICAgICAgICAgICAgICAgbV9k
b2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudChlbGVtZW50
LCAqb2xkU3R5bGUsICpuZXdTdHlsZSk7Ci0KLSAgICAgICAgICAgIC8vIFRoZSBvcmRlciBpbiB3
aGljaCBDU1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25zIGFyZSB1cGRhdGVkIG1hdHRl
cnMgc2luY2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlCi0g
ICAgICAgICAgICAvLyB0byB1c2UgQ1NTIEFuaW1hdGlvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcHJl
dmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LiBBcyBzdWNoLCB3ZSB1cGRhdGUgQ1NTIEFuaW1hdGlv
bnMgYWZ0ZXIgQ1NTIFRyYW5zaXRpb25zCi0gICAgICAgICAgICAvLyBzdWNoIHRoYXQgd2hlbiBD
U1MgVHJhbnNpdGlvbnMgYXJlIHVwZGF0ZWQgdGhlIENTUyBBbmltYXRpb25zIGRhdGEgaXMgdGhl
IHNhbWUgYXMgZHVyaW5nIHRoZSBwcmV2aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuCi0gICAgICAg
ICAgICBpZiAoKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zKCkpIHx8IG5ld1N0
eWxlLT5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3Zl
IHRoaXMgaGFjayBhbmQgcGFzcyB0aGUgcGFyZW50IHN0eWxlIHZpYSB1cGRhdGVDU1NBbmltYXRp
b25zRm9yRWxlbWVudC4KLSAgICAgICAgICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVu
dEVsZW1lbnRTdHlsZUZvcktleWZyYW1lcygmcGFyZW50KCkuc3R5bGUpOwotCi0gICAgICAgICAg
ICAgICAgbV9kb2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50
KGVsZW1lbnQsIG9sZFN0eWxlLCAqbmV3U3R5bGUpOwotCi0gICAgICAgICAgICAgICAgc2NvcGUo
KS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMobnVsbHB0cik7Ci0g
ICAgICAgICAgICB9CisgICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55
IG5ldyBDU1MgYW5pbWF0aW9uIG9jY3VyaW5nIG9uIHRoaXMgZWxlbWVudCBoYXMgYSBtYXRjaGlu
ZyBXZWJBbmltYXRpb24KKyAgICAvLyBvbiB0aGUgZG9jdW1lbnQgdGltZWxpbmUuIE5vdGUgdGhh
dCB3ZSBnZXQgdGltZWxpbmUoKSBvbiB0aGUgRG9jdW1lbnQgaGVyZSBiZWNhdXNlIHdlIG5lZWQg
YSB0aW1lbGluZSBjcmVhdGVkCisgICAgLy8gaW4gY2FzZSBubyBXZWIgQW5pbWF0aW9ucyBoYXZl
IGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBBUEkuCisgICAgaWYgKGVsZW1lbnQuZG9jdW1l
bnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2Fy
ZENhY2hlICYmICFlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmlldygpLT5wcmludGluZygpKSB7
CisgICAgICAgIGlmIChvbGRTdHlsZSAmJiAob2xkU3R5bGUtPmhhc1RyYW5zaXRpb25zKCkgfHwg
bmV3U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkpKQorICAgICAgICAgICAgbV9kb2N1bWVudC50aW1l
bGluZSgpLnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudChlbGVtZW50LCAqb2xkU3R5bGUs
ICpuZXdTdHlsZSk7CisKKyAgICAgICAgLy8gVGhlIG9yZGVyIGluIHdoaWNoIENTUyBUcmFuc2l0
aW9ucyBhbmQgQ1NTIEFuaW1hdGlvbnMgYXJlIHVwZGF0ZWQgbWF0dGVycyBzaW5jZSBDU1MgVHJh
bnNpdGlvbnMgZGVmaW5lIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUKKyAgICAgICAgLy8gdG8gdXNl
IENTUyBBbmltYXRpb25zIGFzIGRlZmluZWQgaW4gdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBl
dmVudC4gQXMgc3VjaCwgd2UgdXBkYXRlIENTUyBBbmltYXRpb25zIGFmdGVyIENTUyBUcmFuc2l0
aW9ucworICAgICAgICAvLyBzdWNoIHRoYXQgd2hlbiBDU1MgVHJhbnNpdGlvbnMgYXJlIHVwZGF0
ZWQgdGhlIENTUyBBbmltYXRpb25zIGRhdGEgaXMgdGhlIHNhbWUgYXMgZHVyaW5nIHRoZSBwcmV2
aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuCisgICAgICAgIGlmICgob2xkU3R5bGUgJiYgb2xkU3R5
bGUtPmhhc0FuaW1hdGlvbnMoKSkgfHwgbmV3U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgeworICAg
ICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgYW5kIHBhc3MgdGhlIHBhcmVudCBz
dHlsZSB2aWEgdXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQuCisgICAgICAgICAgICBzY29w
ZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktleWZyYW1lcygmcGFyZW50KCku
c3R5bGUpOworCisgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTQW5p
bWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgb2xkU3R5bGUsICpuZXdTdHlsZSk7CisKKyAgICAg
ICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVz
KG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDcsMTcgKzM0NCw2IEBAIEVsZW1l
bnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXRlZEVsZW1lbnRVcGRhdGUoc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0CiAgICAgfSBlbHNlCiAgICAgICAgIGVsZW1lbnQuc2V0TGFzdFN0
eWxlQ2hhbmdlRXZlbnRTdHlsZShudWxscHRyKTsKIAotICAgIC8vIE9sZCBjb2RlIHBhdGggZm9y
IENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMuCi0gICAgaWYgKCFSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkgewotICAgICAgICBhdXRvJiBhbmltYXRpb25Db250cm9sbGVyID0gbV9kb2N1
bWVudC5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKTsKLQotICAgICAgICBhdXRvIGFuaW1hdGlv
blVwZGF0ZSA9IGFuaW1hdGlvbkNvbnRyb2xsZXIudXBkYXRlQW5pbWF0aW9ucyhlbGVtZW50LCAq
bmV3U3R5bGUsIG9sZFN0eWxlKTsKLSAgICAgICAgYW5pbWF0aW9uSW1wYWN0LmFkZChhbmltYXRp
b25VcGRhdGUuaW1wYWN0KTsKLQotICAgICAgICBpZiAoYW5pbWF0aW9uVXBkYXRlLnN0eWxlKQot
ICAgICAgICAgICAgbmV3U3R5bGUgPSBXVEZNb3ZlKGFuaW1hdGlvblVwZGF0ZS5zdHlsZSk7Ci0g
ICAgfQotCiAgICAgaWYgKGFuaW1hdGlvbkltcGFjdCkKICAgICAgICAgQWRqdXN0ZXI6OmFkanVz
dEFuaW1hdGVkU3R5bGUoKm5ld1N0eWxlLCBwYXJlbnRCb3hTdHlsZSgpLCBhbmltYXRpb25JbXBh
Y3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAppbmRl
eCBiMzc2YmY2YzE3NWQ1NDU5YTRlMGI0NjNjYTQ4YjliZjBjYTY2Nzk5Li42YTViNmY0YWU0MjAy
OWNlNjYwOGMwNGJjOTI2NGZkMDM2ZmVkOGQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5jcHAKQEAgLTEwMjksMTEgKzEwMjksNiBAQCB2b2lkIEludGVybmFs
U2V0dGluZ3M6OnNldEZvcmNlZFN1cHBvcnRzSGlnaER5bmFtaWNSYW5nZVZhbHVlKEludGVybmFs
U2V0dGluZ3M6OgogICAgIHNldHRpbmdzKCkuc2V0Rm9yY2VkU3VwcG9ydHNIaWdoRHluYW1pY1Jh
bmdlVmFsdWUoaW50ZXJuYWxTZXR0aW5nc1RvU2V0dGluZ3NWYWx1ZSh2YWx1ZSkpOwogfQogCi1i
b29sIEludGVybmFsU2V0dGluZ3M6OndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KQotewotICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogdm9pZCBJbnRlcm5h
bFNldHRpbmdzOjpzZXRTaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9uKGJvb2wgc2hvdWxkKQog
ewogI2lmIEVOQUJMRShWSURFTykgfHwgRU5BQkxFKFdFQl9BVURJTykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgKaW5kZXggYjUyN2UxNTVjOTBkNDY2OGUzMTI0YzVl
OWI0OGJmZTBkMGUzOTU3Mi4uZjY1YTc0MTM0OWZmY2EyOWIxOTU1YzY3NGFhNDgzM2Q3MjM2NTc1
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgKQEAgLTEzNSw4
ICsxMzUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0UGljdHVyZUluUGljdHVyZUFQ
SUVuYWJsZWQoYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgc2V0RmV0Y2hBUElLZWVwQWxpdmVFbmFi
bGVkKGJvb2wpOwogCi0gICAgc3RhdGljIGJvb2wgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpOwotCiAgICAgdm9pZCBzZXRTaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9uKGJv
b2wpOwogICAgIAogICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc0FQSVBlclBhZ2VTY29wZUVuYWJs
ZWQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbApp
bmRleCA0MWEyN2Q2MmUyNzY0NjRhYWU1ZTEyOGI4ZTliZTFlY2Y5MWZlZGZmLi41Y2M2MmYzMjVh
MmY2ODk2MDBlM2JmODhjZWEwNWM2NTZmYWU0ZWYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKQEAgLTExNyw4ICsxMTcsNiBAQCBlbnVtIEZvbnRMb2Fk
VGltaW5nT3ZlcnJpZGUgeyAiQmxvY2siLCAiU3dhcCIsICJGYWlsdXJlIiB9OwogICAgIFtNYXlU
aHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHNldFNob3VsZE1hbmFnZUF1ZGlvU2Vzc2lvbkNhdGVn
b3J5KGJvb2xlYW4gc2hvdWxkKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBz
ZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoYm9vbGVhbiBlbmFibGVkKTsKIAotICAgIFtF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNdIGJvb2xlYW4gd2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZCgpOwotCiAgICAgdW5kZWZpbmVkIHNldFNob3VsZERlYWN0aXZhdGVB
dWRpb1Nlc3Npb24oYm9vbGVhbiBzaG91bGREZWFjdGl2YXRlKTsKICAgICAKICAgICB1bmRlZmlu
ZWQgc2V0U3RvcmFnZUFjY2Vzc0FQSVBlclBhZ2VTY29wZUVuYWJsZWQoYm9vbGVhbiBlbmFibGVk
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxZDE0ZDcwZWQ4ZjEyYTFl
NmQzZDBmMjU1Y2IxYmEwZjUwNzgzZThjLi43YzRkZjAzZTVlMTg0YjViNTljOTBkNDZmNjZlY2Ux
MDY4ZDZmYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC0zNyw3ICsz
Nyw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3
YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ1NT
QW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0tleWZyYW1lc1J1bGUuaCIKICNp
bmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBhcnNlci5oIgpA
QCAtMTA2OSw5ICsxMDY4LDcgQEAgYm9vbCBJbnRlcm5hbHM6OmFuaW1hdGlvbldpdGhJZEV4aXN0
cyhjb25zdCBTdHJpbmcmIGlkKSBjb25zdAogCiB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnNGb3JUZXN0aW5nKCk7Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2Fj
eUFuaW1hdGlvbigpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhmcmFtZSgpLT5kb2N1bWVudCgp
KTsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnNGb3JUZXN0aW5nKCk7CiB9CiAKIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVy
bmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpIGNvbnN0CkBAIC0xMDgwLDkgKzEwNzcsNyBA
QCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBj
b25zdAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVz
Q29udHJvbGxlcigpLmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsKLSAgICByZXR1cm4gZG9jdW1l
bnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudChkb2N1bWVudCk7CisgICAgcmV0dXJuIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXND
b250cm9sbGVyKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwogfQogCiBkb3VibGUgSW50ZXJu
YWxzOjphbmltYXRpb25zSW50ZXJ2YWwoKSBjb25zdApAQCAtMTA5MSwxNSArMTA4Niw5IEBAIGRv
dWJsZSBJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCgpIGNvbnN0CiAgICAgaWYgKCFkb2N1
bWVudCkKICAgICAgICAgcmV0dXJuIElORklOSVRZOwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRpbWVsaW5lID0gZG9jdW1lbnQtPmV4aXN0aW5n
VGltZWxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lbGluZS0+YW5pbWF0aW9uSW50ZXJ2
YWwoKS5zZWNvbmRzKCk7Ci0gICAgICAgIHJldHVybiBJTkZJTklUWTsKLSAgICB9Ci0KLSAgICBp
ZiAoIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4gSU5GSU5JVFk7Ci0gICAgcmV0
dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRpb25JbnRlcnZh
bCgpLnZhbHVlKCk7CisgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBkb2N1bWVudC0+ZXhpc3RpbmdU
aW1lbGluZSgpKQorICAgICAgICByZXR1cm4gdGltZWxpbmUtPmFuaW1hdGlvbkludGVydmFsKCku
c2Vjb25kcygpOworICAgIHJldHVybiBJTkZJTklUWTsKIH0KIAogRXhjZXB0aW9uT3I8dm9pZD4g
SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0CkBAIC0xMTA4LDE5ICsxMDk3LDEw
IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25z
dAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xs
ZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3Vt
ZW50KCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xs
ZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAg
ICAgZG9jdW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25z
Rm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9j
dW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0
KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1l
bnQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFu
aW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci0gICAgICAgIH0KKyAgICBkb2N1bWVudC0+
ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50
ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxp
bmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgfQogCiAgICAgcmV0dXJu
IHsgfTsKQEAgLTExMzIsNzMgKzExMTIsMTcgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxz
OjpyZXN1bWVBbmltYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVu
dC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50
LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAg
ICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBm
cmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQq
IGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQt
PmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgICAg
IH0KLSAgICB9IGVsc2UgewotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0
aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLQotICAgICAgICBm
b3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFt
ZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRv
Y3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci0gICAg
ICAgIH0KKyAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFu
aW1hdGlvbnMoKTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRv
Y3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5pbWF0aW9ucygpOwog
ICAgIH0KIAogICAgIHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFs
czo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25O
YW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmIChwYXVz
ZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
IH07Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9u
QXRUaW1lKGVsZW1lbnQsIEF0b21TdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7Ci19
Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPblBz
ZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1l
LCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQotewotICAgIGlmIChw
YXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07Ci0KLSAgICBpZiAocHNldWRvSWQgIT0gImJlZm9yZSIgJiYgcHNldWRvSWQgIT0gImFm
dGVyIikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owot
Ci0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUi
ID8gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBlbGVtZW50LmFmdGVyUHNldWRvRWxl
bWVudCgpOwotICAgIGlmICghcHNldWRvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotCi0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFu
aW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKCpwc2V1ZG9FbGVtZW50LCBBdG9tU3RyaW5n
KGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOwotfQotCi1FeGNlcHRpb25Pcjxib29sPiBJbnRl
cm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3Bl
cnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAo
cGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NF
cnJvciB9OwotICAgIHJldHVybiBmcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5wYXVzZVRyYW5z
aXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBwYXVzZVRpbWUpOwotfQotCi1FeGNl
cHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxl
bWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBl
bGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQotewotICAgIGlmIChwYXVzZVRpbWUgPCAw
KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAg
ICBpZiAocHNldWRvSWQgIT0gImJlZm9yZSIgJiYgcHNldWRvSWQgIT0gImFmdGVyIikKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotCi0gICAgUHNldWRv
RWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC5i
ZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBlbGVtZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwotICAg
IGlmICghcHNldWRvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwotCi0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnBh
dXNlVHJhbnNpdGlvbkF0VGltZSgqcHNldWRvRWxlbWVudCwgcHJvcGVydHksIHBhdXNlVGltZSk7
Ci19Ci0KIFZlY3RvcjxJbnRlcm5hbHM6OkFjY2VsZXJhdGVkQW5pbWF0aW9uPiBJbnRlcm5hbHM6
OmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKIHsKLSAg
ICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4geyB9OwotCiAgICAg
VmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IGFuaW1hdGlvbnM7CiAgICAg
Zm9yIChjb25zdCBhdXRvJiBhbmltYXRpb25Bc1BhaXIgOiBlbGVtZW50LmRvY3VtZW50KCkudGlt
ZWxpbmUoKS5hY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQpKQogICAgICAg
ICBhbmltYXRpb25zLmFwcGVuZCh7IGFuaW1hdGlvbkFzUGFpci5maXJzdCwgYW5pbWF0aW9uQXNQ
YWlyLnNlY29uZCB9KTsKQEAgLTEyMDcsOSArMTEzMSw3IEBAIFZlY3RvcjxJbnRlcm5hbHM6OkFj
Y2VsZXJhdGVkQW5pbWF0aW9uPiBJbnRlcm5hbHM6OmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVs
ZW1lCiAKIHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZBbmltYXRpb25UaW1lbGluZUludmFs
aWRhdGlvbnMoKSBjb25zdAogewotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRpbWVsaW5lKCkubnVtYmVyT2ZBbmltYXRp
b25UaW1lbGluZUludmFsaWRhdGlvbnNGb3JUZXN0aW5nKCk7Ci0gICAgcmV0dXJuIDA7CisgICAg
cmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRpbWVsaW5lKCkubnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnNGb3JUZXN0aW5nKCk7CiB9CiAKIGRvdWJsZSBJbnRlcm5hbHM6
OnRpbWVUb05leHRBbmltYXRpb25UaWNrKFdlYkFuaW1hdGlvbiYgYW5pbWF0aW9uKSBjb25zdApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaCBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggMzcxMTc2ZjZjMmEzYzc4N2UwMzZmNTIy
NjYyNTgzNWZkYzEzZWU4YS4uZDE3Y2RlZDFkMjE5ZTY1MzhjYzE0ODEzM2M1NmVmYjEyYWFjNWFl
MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0yMzMsMTQgKzIzMyw4IEBAIHB1
YmxpYzoKICAgICBFeGNlcHRpb25Pcjxib29sPiBhbmltYXRpb25zQXJlU3VzcGVuZGVkKCkgY29u
c3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdDsKICAg
ICBFeGNlcHRpb25Pcjx2b2lkPiByZXN1bWVBbmltYXRpb25zKCkgY29uc3Q7Ci0gICAgRXhjZXB0
aW9uT3I8Ym9vbD4gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBh
bmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50Jik7Ci0gICAgRXhjZXB0aW9u
T3I8Ym9vbD4gcGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiwgY29uc3QgU3RyaW5n
JiBwc2V1ZG9JZCk7CiAgICAgZG91YmxlIGFuaW1hdGlvbnNJbnRlcnZhbCgpIGNvbnN0OwogCi0g
ICAgLy8gQ1NTIFRyYW5zaXRpb24gdGVzdGluZy4KLSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVz
ZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmKTsKLSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZVRy
YW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91
YmxlIHBhdXNlVGltZSwgRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpOwotCiAgICAg
Ly8gV2ViIEFuaW1hdGlvbnMgdGVzdGluZy4KICAgICBzdHJ1Y3QgQWNjZWxlcmF0ZWRBbmltYXRp
b24gewogICAgICAgICBTdHJpbmcgcHJvcGVydHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5pZGwKaW5kZXggOGQxYWQ0MmZkNWE3YjUwMDRjYjA4ZmE2NmVlZjc0YWJjNDY0OGQ0My4uZmQ2
N2U3MTIyYWNkNDE2YmNkZDcwNGVhNWQwMDM1NWY5YzY4YjA0MiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbApAQCAtMzE1LDE0ICszMTUsOCBAQCBlbnVtIENvbnRlbnRTaXplQ2F0
ZWdvcnkgewogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHN1c3BlbmRBbmltYXRp
b25zKCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgcmVzdW1lQW5pbWF0aW9u
cygpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBhbmltYXRpb25zQXJlU3VzcGVu
ZGVkKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlQW5pbWF0aW9uQXRU
aW1lT25FbGVtZW50KERPTVN0cmluZyBhbmltYXRpb25OYW1lLCB1bnJlc3RyaWN0ZWQgZG91Ymxl
IHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJv
b2xlYW4gcGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoRE9NU3RyaW5nIGFuaW1h
dGlvbk5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQs
IERPTVN0cmluZyBwc2V1ZG9JZCk7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIGRvdWJsZSBhbmlt
YXRpb25zSW50ZXJ2YWw7CiAKLSAgICAvLyBDU1MgVHJhbnNpdGlvbiB0ZXN0aW5nLgotICAgIFtN
YXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQo
RE9NU3RyaW5nIHByb3BlcnR5TmFtZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQgZWxlbWVudCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlVHJh
bnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChET01TdHJpbmcgcHJvcGVydHksIHVucmVzdHJp
Y3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQsIERPTVN0cmluZyBwc2V1ZG9J
ZCk7Ci0KICAgICAvLyBXZWIgQW5pbWF0aW9ucyB0ZXN0aW5nLgogICAgIHNlcXVlbmNlPEFjY2Vs
ZXJhdGVkQW5pbWF0aW9uPiBhY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JFbGVtZW50KEVsZW1lbnQg
ZWxlbWVudCk7CiAgICAgdW5zaWduZWQgbG9uZyBudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52
YWxpZGF0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVy
ZW5jZXMueWFtbCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKaW5k
ZXggYTgxNDIyYzliMWQ3MGUwMGNmNWFmMjI3YjNiZDdhMmJmNmNiM2NkOS4uYmQxMWZhNjFiZTRh
Y2ZjMWViNzJiODRlMTlhNzFmMDdiYWE2ZDJjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
cmVmZXJlbmNlcy55YW1sCkBAIC0xNDA1LDIyICsxNDA1LDYgQEAgQ1NTT01WaWV3U21vb3RoU2Ny
b2xsaW5nRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxlIERPTSBB
UEkgYW5kIENTUyBwcm9wZXJ0eSBmb3IgJ3Ntb290aCcgc2Nyb2xsIGJlaGF2aW9yIgogICBjYXRl
Z29yeTogZXhwZXJpbWVudGFsCiAKLVdlYkFuaW1hdGlvbnNFbmFibGVkOgotICB0eXBlOiBib29s
Ci0gIGRlZmF1bHRWYWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxlTmFtZTogIldlYiBBbmltYXRp
b25zIgotICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJXZWIgQW5pbWF0aW9ucyBwcm90b3R5
cGUiCi0gIGNhdGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29yZUJpbmRpbmc6IFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXMKLQotV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDoKLSAg
dHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJsZU5hbWU6ICJD
U1MgQW5pbWF0aW9ucyB2aWEgV2ViIEFuaW1hdGlvbnMiCi0gIGh1bWFuUmVhZGFibGVEZXNjcmlw
dGlvbjogIkV4cG9zZSBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIHRocm91Z2gg
Z2V0QW5pbWF0aW9ucygpIgotICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCi0gIHdlYmNvcmVCaW5k
aW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KIFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVy
YXRpb25zRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBkZWZhdWx0VmFsdWU6IERFRkFVTFRfRVhQ
RVJJTUVOVEFMX0ZFQVRVUkVTX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWJjMmQyN2FmNzc0ZTgzMjVkNWFkYjNhOTQ0
NjAzMTY2MzEwMDAzZS4uMTdkY2YzODNlNTUwN2UxYjcwZDBkZTgzMTMxN2RkZDFjN2Y5Y2FmMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAK
QEAgLTQ4NiwyNiArNDg2LDYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWQyRENh
bnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKICAgICByZXR1cm4g
dG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKTsKIH0K
IAotdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNl
c1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewotICAgIHRvSW1wbChwcmVmZXJlbmNl
c1JlZiktPnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJlZmVy
ZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2Vz
UmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBbmltYXRpb25z
RW5hYmxlZCgpOwotfQotCi12b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxh
ZykKLXsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TmVlZHNT
aXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBm
bGFnKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKaW5kZXggN2UxNGEyYWM0NWNiMWJmNWZhZTAzOTE0
ZWM5MjhiOTEzMmZiYzU2MS4uMjFkZjM3NDg2NmNkMjU4Mjk3OTdjNzI5YjM4MjYxZDU4ZjBmYjYy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
c1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oCkBAIC05NywxNCArOTcsNiBAQCBXS19FWFBPUlQgYm9vbCBXS1By
ZWZlcmVuY2VzR2V0V2ViR0xFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogV0tfRVhQT1JUIHZv
aWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFjY2VsZXJhdGVk
MkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogCi0vLyBEZWZhdWx0cyB0byBmYWxz
ZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKFdL
UHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2Vz
R2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KLS8vIERlZmF1bHRz
IHRvIGZhbHNlCi1XS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwotV0tfRVhQ
T1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KIC8vIERlZmF1bHRzIHRvIGZhbHNlLgogV0tfRVhQT1JU
IHZvaWQgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5j
ZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldE5lZWRzU2l0ZVNw
ZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQppbmRleCAxM2E4ODEwYzNhZjRiNzNm
ZTJlMGIyYmJkZDdlOGI1NzY4NjEyZGE2Li5kYWRhOTEzM2ZjZDk3M2JmNWZiNjYwMDJiNTM5MTk5
NmUyMDllY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcmVmZXJlbmNlcy5tbQpAQCAtMTQzMCwxNiArMTQzMCw2IEBAIC0gKEJPT0wpX3ZpZGVvUXVh
bGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZAogICAgIHJldHVybiBfcHJlZmVy
ZW5jZXMtPnZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZCgpOwog
fQogCi0tICh2b2lkKV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOihCT09M
KWVuYWJsZWQKLXsKLSAgICBfcHJlZmVyZW5jZXMtPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLS0gKEJPT0wpX3dlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIC0gKHZvaWQpX3NldERldmljZU9yaWVudGF0
aW9uRXZlbnRFbmFibGVkOihCT09MKWVuYWJsZWQKIHsKICNpZiBFTkFCTEUoREVWSUNFX09SSUVO
VEFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJlZmVyZW5jZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2Ev
V0tQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBhMzQ5ODk1NjkyNjk0NDc4NTM2YzRhNDQ0NWU1
YTgwZTQ0M2YxODcyLi41ODQwNGE2ODQ1ZDdhNDljOGE3NmFhZWFmODg0ZGYyYTBlMzNjZGRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVm
ZXJlbmNlc1ByaXZhdGUuaApAQCAtMTUxLDcgKzE1MSw2IEBAIHR5cGVkZWYgTlNfRU5VTShOU0lu
dGVnZXIsIF9XS0VkaXRhYmxlTGlua0JlaGF2aW9yKSB7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
c2V0dGVyPV9zZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZDopIEJPT0wgX2xv
d1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3Mo
MTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRT
aG91bGRJZ25vcmVNZXRhVmlld3BvcnQ6KSBCT09MIF9zaG91bGRJZ25vcmVNZXRhVmlld3BvcnQg
V0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAo
bm9uYXRvbWljLCBzZXR0ZXI9X3NldFZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0
aW5nRW5hYmxlZDopIEJPT0wgX3ZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5n
RW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwotQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZDopIEJPT0wgX3dlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgV0tfQVBJ
X0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXREZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZDopIEJPT0wgX2Rldmlj
ZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCks
IGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXROZWVkc1NpdGVT
cGVjaWZpY1F1aXJrczopIEJPT0wgX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIFdLX0FQSV9BVkFJ
TEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
c2V0dGVyPV9zZXRJdHBEZWJ1Z01vZGVFbmFibGVkOikgQk9PTCBfaXRwRGVidWdNb2RlRW5hYmxl
ZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCmluZGV4IGI2ZWM1MmRiODIxZDk2
NTFlYTIyZDhmMGMzZTJmMzU2Y2NhZmQ1NmEuLmY1ZmNjN2ZiYjUxMzg2NTljYmRlODcwMWViZDFi
YzNiYmEyYjM1ZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKKysrIGIvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVh
UHJveHkuaApAQCAtNDgsNyArNDgsNiBAQCBwdWJsaWM6CiAgICAgY29uc3QgUmVtb3RlTGF5ZXJU
cmVlSG9zdCYgcmVtb3RlTGF5ZXJUcmVlSG9zdCgpIGNvbnN0IHsgcmV0dXJuICptX3JlbW90ZUxh
eWVyVHJlZUhvc3Q7IH0KICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVtb3RlTGF5ZXJUcmVlSG9zdD4g
ZGV0YWNoUmVtb3RlTGF5ZXJUcmVlSG9zdCgpOwogCi0gICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1h
dGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9u
aWNUaW1lIHN0YXJ0VGltZSk7CiAgICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1
aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSk7CiAKICAgICBUcmFuc2FjdGlvbklE
IG5leHRMYXllclRyZWVUcmFuc2FjdGlvbklEKCkgY29uc3QgeyByZXR1cm4gbV9wZW5kaW5nTGF5
ZXJUcmVlVHJhbnNhY3Rpb25JRC5uZXh0KCk7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5
Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhUHJveHkubW0KaW5kZXggNjQ5YTA4NDgwY2JjOWY3ZDExZGYzYjdiNjM1
NDZlYmZmYWVkNjA2OC4uY2E1ZjliZGEyMzMxZDYyNGU2M2ZiNGY5N2VkMWFmMmUwMDhkNWEyYyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0KQEAg
LTI3NSwxMSArMjc1LDYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Ojpj
b21taXRMYXllclRyZWUoY29uc3QgUmVtb3RlTGF5ZXJUcmVlVHJhbnMKICAgICB9CiB9CiAKLXZv
aWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25E
aWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGlt
ZSBzdGFydFRpbWUpCi17Ci0gICAgc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkFjY2VsZXJh
dGVkQW5pbWF0aW9uRGlkU3RhcnQobGF5ZXJJRCwga2V5LCBzdGFydFRpbWUpKTsKLX0KLQogdm9p
ZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRp
ZEVuZCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBzZW5kKE1l
c3NhZ2VzOjpEcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQobGF5ZXJJRCwg
a2V5KSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QuaAppbmRleCBlOGEzMDc4ZTQ4MGQyMTJkNDZj
ZDYzOGUyOGRkOTVkMjVmOGY4MjFkLi42M2UyYWI3OTY0NmUyMjU1ZjRmZjMyYWVhOTI3YWFkYzgy
MzNmNWNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0LmgKQEAgLTYwLDcgKzYwLDYgQEAgcHVi
bGljOgogICAgIHR5cGVkZWYgSGFzaE1hcDxXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9y
bUxheWVySUQsIFJldGFpblB0cjxXS0FuaW1hdGlvbkRlbGVnYXRlPj4gTGF5ZXJBbmltYXRpb25E
ZWxlZ2F0ZU1hcDsKICAgICBMYXllckFuaW1hdGlvbkRlbGVnYXRlTWFwJiBhbmltYXRpb25EZWxl
Z2F0ZXMoKSB7IHJldHVybiBtX2FuaW1hdGlvbkRlbGVnYXRlczsgfQogCi0gICAgdm9pZCBhbmlt
YXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIENB
QW5pbWF0aW9uICosIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKTsKICAgICB2b2lkIGFuaW1hdGlv
bkRpZEVuZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQsIENBQW5pbWF0
aW9uICopOwogCiAgICAgdm9pZCBkZXRhY2hGcm9tRHJhd2luZ0FyZWEoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVI
b3N0Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxh
eWVyVHJlZUhvc3QubW0KaW5kZXggZTI0YThmZmU0ZjMwNWJjZDQwNzBhMzE2ZjJlY2M5Yzk0ODc4
YzYxMy4uMzVjMDNjODc2Zjc5MTU5NGEyYmJiYzgzOGJiYjU0M2JhNGRlY2ViYyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJl
ZUhvc3QubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1Jl
bW90ZUxheWVyVHJlZUhvc3QubW0KQEAgLTE1MywyNyArMTUzLDYgQEAgdm9pZCBSZW1vdGVMYXll
clRyZWVIb3N0OjpsYXllcldpbGxCZVJlbW92ZWQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxh
dGZvcm1MYXkKICAgICBtX25vZGVzLnJlbW92ZShsYXllcklEKTsKIH0KIAotdm9pZCBSZW1vdGVM
YXllclRyZWVIb3N0OjphbmltYXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQ
bGF0Zm9ybUxheWVySUQgbGF5ZXJJRCwgQ0FBbmltYXRpb24gKmFuaW1hdGlvbiwgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWUpCi17Ci0gICAgaWYgKCFtX2RyYXdpbmdBcmVhKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBDQUxheWVyICpsYXllciA9IGxheWVyRm9ySUQobGF5ZXJJRCk7Ci0gICAgaWYg
KCFsYXllcikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgU3RyaW5nIGFuaW1hdGlvbktleTsKLSAg
ICBmb3IgKE5TU3RyaW5nICprZXkgaW4gW2xheWVyIGFuaW1hdGlvbktleXNdKSB7Ci0gICAgICAg
IGlmIChbbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0gPT0gYW5pbWF0aW9uKSB7Ci0gICAgICAg
ICAgICBhbmltYXRpb25LZXkgPSBrZXk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghYW5pbWF0aW9uS2V5LmlzRW1wdHkoKSkKLSAgICAgICAgbV9kcmF3
aW5nQXJlYS0+YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydChsYXllcklELCBhbmltYXRpb25L
ZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9u
RGlkRW5kKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBD
QUFuaW1hdGlvbiAqYW5pbWF0aW9uKQogewogICAgIGlmICghbV9kcmF3aW5nQXJlYSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCmluZGV4IDQxOWMxNWY5NzAxN2RkYmQyZGI4YjM4NzA2ODM3NTBhYTAzNGVm
MTEuLmJlNWRlZDU3ODM3MjIwNTQwZTAxMzJjNzJlODJjNjQxZmFjM2ZmOTQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5j
cHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcApAQCAtMTg3LDEyICsxODcsNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpvdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihXZWJQYWdlR3JvdXBQcm94eSogcGFnZQog
ICAgIH0KICNlbmRpZgogCi0gICAgaWYgKHByZWZlcmVuY2UgPT0gIldlYktpdFdlYkFuaW1hdGlv
bnNFbmFibGVkIikKLSAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChlbmFibGVkKTsKLQotICAgIGlmIChwcmVmZXJl
bmNlID09ICJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIikKLSAgICAg
ICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotCiAgICAgaWYgKHByZWZlcmVuY2Ug
PT0gIldlYktpdENhY2hlQVBJRW5hYmxlZCIpCiAgICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKGVuYWJsZWQpOwogCkBAIC01
ODksMTYgKzU4Myw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFRhYktleUN5Y2xlc1Rocm91
Z2hFbGVtZW50cyhXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJsZWQpCiAgICAgcGFnZS0+Y29yZVBh
Z2UoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGVuYWJsZWQpOwogfQogCi12b2lk
IEluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGVuYWJsZWQpCi17
Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmlt
YXRpb25zRW5hYmxlZChlbmFibGVkKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCiB2b2lkIEluamVjdGVkQnVuZGxlOjpz
ZXRBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAjaWYg
RU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXgg
MDlhMTI1Y2E0Yzk2Y2MzYTAzMmFlNThhNGViYmMyYmM0M2M3NWZiZi4uYzAxZGU4MGZjY2JjZTNk
MzViZTMyYWY3YTBkYTRiM2MzYzFkZjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAgLTE0Miw4ICsx
NDIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50
cyhXZWJQYWdlKiwgYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFi
bGVkKGJvb2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9vbCk7Ci0gICAg
dm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGJvb2wpOwogICAgIHZv
aWQgc2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBk
aXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKaW5kZXggY2U3NzU4ZDBiOTQ2OGQ5YjdmNmY4NDVi
NGRlYWY1NjcxMjc0ZmVjZC4uYjA5MTc2ZjIxMmJkYWIzNjk4ZDA2NmJmM2NmMTFmZTAxMGQwNzJi
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0Fy
ZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5o
CkBAIC05NSw3ICs5NSw2IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0Vmlld0V4cG9z
ZWRSZWN0KE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4pID0gMDsKICAgICB2aXJ0dWFsIE9w
dGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4gdmlld0V4cG9zZWRSZWN0KCkgY29uc3QgPSAwOwog
Ci0gICAgdmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQodWludDY0X3Qg
LypsYXllcklEKi8sIGNvbnN0IFN0cmluZyYgLyprZXkqLywgTW9ub3RvbmljVGltZSAvKnN0YXJ0
VGltZSovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQo
dWludDY0X3QgLypsYXllcklEKi8sIGNvbnN0IFN0cmluZyYgLyprZXkqLykgeyB9CiAgICAgdmly
dHVhbCB2b2lkIGFkZEZlbmNlKGNvbnN0IFdURjo6TWFjaFNlbmRSaWdodCYpIHsgfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNz
YWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1l
c3NhZ2VzLmluCmluZGV4IGYyMDdlMTA3ZTk1MjcwYTdmOTE4OWNiYTlhYjY3NzUzNGFhMjI3OTIu
LjEzYTczZmYwNWY5MDg0OThjODkyMzg4ZWMyMmNjYzYzYzNlMWNkODUgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmluCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2Vz
LmluCkBAIC0zNyw3ICszNyw2IEBAIG1lc3NhZ2VzIC0+IERyYXdpbmdBcmVhIE5vdFJlZkNvdW50
ZWQgewogICAgIEFkanVzdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpGbG9h
dFBvaW50IG9yaWdpbikKICAgICBDb21taXRUcmFuc2llbnRab29tKGRvdWJsZSBzY2FsZSwgV2Vi
Q29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCiAgICAgCi0gICAgQWNjZWxlcmF0ZWRBbmltYXRpb25E
aWRTdGFydCh1aW50NjRfdCBsYXllcklELCBTdHJpbmcga2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZSkKICAgICBBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRfdCBsYXllcklELCBT
dHJpbmcga2V5KQogICAgIAogICAgIEFkZFRyYW5zYWN0aW9uQ2FsbGJhY2tJRChXZWJLaXQ6OkNh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGUubW0KaW5kZXggZGU3ZDcyODAyOTJkMDUwZDcyZDA2YWM5NGFiOTMx
Y2YyM2ZhNGU4ZS4uZWUzNTUyOTJhNzMyNTllMzE2NGU3ZDU1NzZiNTBlNzEzZjhmNmQ4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0K
QEAgLTQxLDExICs0MSw2IEBACiAjaW1wb3J0IDx3dGYvY29jb2EvVmVjdG9yQ29jb2EuaD4KICNp
bXBvcnQgPHd0Zi90ZXh0L1RleHRTdHJlYW0uaD4KIAotc3RhdGljIE1vbm90b25pY1RpbWUgbWVk
aWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQotewotICAgIHJldHVybiBXVEY6
Ok1vbm90b25pY1RpbWU6Om5vdygpICsgU2Vjb25kcyh0IC0gQ0FDdXJyZW50TWVkaWFUaW1lKCkp
OwotfQotCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBXS0V4cGxpY2l0QmVnaW5UaW1lRmxhZyA9
IEAiV0tQbGF0Zm9ybUNBQW5pbWF0aW9uRXhwbGljaXRCZWdpblRpbWVGbGFnIjsKIAogQGludGVy
ZmFjZSBXS0FuaW1hdGlvbkRlbGVnYXRlICgpIDxDQUFuaW1hdGlvbkRlbGVnYXRlPgpAQCAtNjcs
MjQgKzYyLDYgQEAgLSAodm9pZClpbnZhbGlkYXRlCiAgICAgX2xheWVyVHJlZUhvc3QgPSBudWxs
cHRyOwogfQogCi0tICh2b2lkKWFuaW1hdGlvbkRpZFN0YXJ0OihDQUFuaW1hdGlvbiAqKWFuaW1h
dGlvbgotewotICAgIGlmICghX2xheWVyVHJlZUhvc3QpCi0gICAgICAgIHJldHVybjsKLQotICAg
IGJvb2wgaGFzRXhwbGljaXRCZWdpblRpbWUgPSBbW2FuaW1hdGlvbiB2YWx1ZUZvcktleTpXS0V4
cGxpY2l0QmVnaW5UaW1lRmxhZ10gYm9vbFZhbHVlXTsKLSAgICBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZTsKLQotICAgIGlmIChoYXNFeHBsaWNpdEJlZ2luVGltZSkgewotICAgICAgICAvLyBXZSBk
b24ndCBrbm93IHdoYXQgdGltZSBDQSB1c2VkIHRvIGNvbW1pdCB0aGUgYW5pbWF0aW9uLCBzbyBq
dXN0IHVzZSB0aGUgY3VycmVudCB0aW1lCi0gICAgICAgIC8vIChldmVuIHRob3VnaCB0aGlzIHdp
bGwgYmUgc2xpZ2h0bHkgb2ZmKS4KLSAgICAgICAgc3RhcnRUaW1lID0gbWVkaWFUaW1lVG9DdXJy
ZW50VGltZShDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHN0YXJ0
VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUoW2FuaW1hdGlvbiBiZWdpblRpbWVdKTsKLQot
ICAgIF9sYXllclRyZWVIb3N0LT5hbmltYXRpb25EaWRTdGFydChfbGF5ZXJJRCwgYW5pbWF0aW9u
LCBzdGFydFRpbWUpOwotfQotCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9u
ICopYW5pbWF0aW9uIGZpbmlzaGVkOihCT09MKWZpbmlzaGVkCiB7CiAgICAgaWYgKCFfbGF5ZXJU
cmVlSG9zdCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5j
cHAKaW5kZXggYTU5MTcxOWJkYTkwYTM5Y2RhNDBiYTQxOTg5ZWRhMmQ0ZTA2MzA0My4uMjEwYTY2
ODE1OGUwNGI2OTdmN2IyZTFlNTEyNmJlMjg0NjA2ZmM4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJl
bW90ZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKQEAgLTM5NiwxNiArMzk2LDYgQEAgc3Rh
dGljIGlubGluZSBib29sIGlzRXF1aXZhbGVudExheWVyKGNvbnN0IFBsYXRmb3JtQ0FMYXllciog
bGF5ZXIsIEdyYXBoaWNzTGF5ZXIKICAgICByZXR1cm4gbGF5ZXJJRCA9PSBuZXdMYXllcklEOwog
fQogCi12b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YW5pbWF0aW9uU3RhcnRlZChjb25zdCBT
dHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBiZWdpblRpbWUpCi17Ci0gICAgYXV0byBpdCA9IG1f
YW5pbWF0aW9ucy5maW5kKGtleSk7Ci0gICAgaWYgKGl0ICE9IG1fYW5pbWF0aW9ucy5lbmQoKSkK
LSAgICAgICAgZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4oKml0LT52YWx1ZSku
ZGlkU3RhcnQoY3VycmVudFRpbWVUb01lZGlhVGltZShiZWdpblRpbWUpKTsKLSAgICAKLSAgICBp
ZiAobV9vd25lcikKLSAgICAgICAgbV9vd25lci0+cGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3Rh
cnRlZChrZXksIGJlZ2luVGltZSk7Ci19Ci0KIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjph
bmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBpZiAobV9vd25lcikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAppbmRleCAwYzBhMDgy
YmU4ZjliOGJjNzVmMDM4YjA3ZTc1ZDk5YTkzZWEyNjlkLi5lYWM3YjdjOTIwNDVmMmMzZTFhNWVm
YzJmZTZmOWI1NmM4MjJhNDI5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FM
YXllclJlbW90ZS5oCkBAIC02Nyw3ICs2Nyw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZEFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlv
biYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmlu
ZyYga2V5KSBvdmVycmlkZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlv
bj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICB2b2lk
IGFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUgYmVnaW5U
aW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TWFzayhXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIq
KSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dC5oCmluZGV4IDRmN2I5ODNjZDgwZWE1NTc1ZDhiMzkwMzMyNTZkYzAxYTE3YzlhZTAuLjhmMGQx
MTM3ZDQxNjJjYzI3ZjI2Y2Q0MzQyMDBjYmQzNmZmYjM2NTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVD
b250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaApAQCAtNjYsNyArNjYsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBsYXllclByb3BlcnR5Q2hhbmdlZFdoaWxlQnVpbGRpbmdUcmFuc2FjdGlvbihQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUmKTsKIAogICAgIC8vIEZyb20gdGhlIFVJIHByb2Nlc3MKLSAg
ICB2b2lkIGFuaW1hdGlvbkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKTsKICAg
ICB2b2lkIGFuaW1hdGlvbkRpZEVuZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eWVySUQsIGNvbnN0IFN0cmluZyYga2V5KTsKIAogICAgIHZvaWQgd2lsbFN0YXJ0QW5pbWF0aW9u
T25MYXllcihQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250
ZXh0Lm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KaW5kZXggNTIyMDU1ZTJkOTU2N2M2ZGUzMTY4NzM1
YWIzODdiMDZmYWQ1NzBkNi4uNzYzZjk1NDJiOGE1MDI3MzIxYmMyNjg3ZDdhMmQwOWUyNzBkYjVk
ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0K
QEAgLTE3NCwxMyArMTc0LDYgQEAgdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0Ojp3aWxsU3Rh
cnRBbmltYXRpb25PbkxheWVyKFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgbGEKICAgICBtX2xheWVy
c1dpdGhBbmltYXRpb25zLmFkZChsYXllci5sYXllcklEKCksICZsYXllcik7CiB9CiAKLXZvaWQg
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25v
dG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBhdXRvIGl0ID0gbV9sYXllcnNXaXRoQW5pbWF0
aW9ucy5maW5kKGxheWVySUQpOwotICAgIGlmIChpdCAhPSBtX2xheWVyc1dpdGhBbmltYXRpb25z
LmVuZCgpKQotICAgICAgICBpdC0+dmFsdWUtPmFuaW1hdGlvblN0YXJ0ZWQoa2V5LCBzdGFydFRp
bWUpOwotfQotCiB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmFuaW1hdGlvbkRpZEVuZChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRCwgY29uc3QgU3Ry
aW5nJiBrZXkpCiB7CiAgICAgYXV0byBpdCA9IG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuZmluZChs
YXllcklEKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdp
bmdBcmVhLmgKaW5kZXggYjcwZWVlMmNmNjk5Zjg0YmIxZjdjYTY2MDk1YzAxMWZkZTYxMTIzOC4u
ZmZjM2U2ZTdiMmNjNjIwOGFiYzUwZDdhZTgxMzUwMTI3YmE0ZDZmOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVy
VHJlZURyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmgKQEAgLTkyLDcgKzky
LDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFZpZXdFeHBvc2VkUmVjdChPcHRpb25hbDxXZWJD
b3JlOjpGbG9hdFJlY3Q+KSBvdmVycmlkZTsKICAgICBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJl
Y3Q+IHZpZXdFeHBvc2VkUmVjdCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdmlld0V4cG9z
ZWRSZWN0OyB9CiAKLSAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQodWludDY0
X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKSBv
dmVycmlkZTsKICAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxh
eWVySUQsIGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKIAogICAgIFdlYkNvcmU6OkZsb2F0
UmVjdCBleHBvc2VkQ29udGVudFJlY3QoKSBjb25zdCBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQppbmRleCAyNmMzNzQ3
NmM3YjAxZGVmOGI0NmYxY2RiMTAzZmY4NTlhZGFhMzFkLi5hNTNjMmUxMzAzZjJjNGYwODc2OWJm
MjdiNjUyNzAzZWJmYTA0MjhlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KKysr
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCkBAIC0yMjIsMTEgKzIyMiw2IEBAIHZvaWQgUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmZvcmNlUmVwYWludCgpCiAgICAgdXBkYXRlUmVuZGVyaW5n
KCk7CiB9CiAKLXZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWE6OmFjY2VsZXJhdGVkQW5p
bWF0aW9uRGlkU3RhcnQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90
b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+YW5p
bWF0aW9uRGlkU3RhcnQobGF5ZXJJRCwga2V5LCBzdGFydFRpbWUpOwotfQotCiB2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRf
dCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBtX3JlbW90ZUxheWVyVHJlZUNv
bnRleHQtPmFuaW1hdGlvbkRpZEVuZChsYXllcklELCBrZXkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgK
aW5kZXggZTIzYjg0MDY4ZjI0MGNlMjFiYmFkMTcwNGI5ZTM2YzdkYWU0MWRlYi4uMWJjYTdiZmE4
N2JjZjM5MDlhNDc3NmVmOTQ5OTVmMGUxOWJhMDAyMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBA
IC01Miw3ICs1Miw2IEBACiAjZGVmaW5lIFdlYktpdEphdmFFbmFibGVkUHJlZmVyZW5jZUtleSBA
IldlYktpdEphdmFFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZFByZWZl
cmVuY2VLZXkgQCJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SmF2YVNj
cmlwdE1hcmt1cEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdE1hcmt1cEVu
YWJsZWQiCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSBA
IldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25z
Q29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0
aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRp
b25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0
aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRDU1NDdXN0b21Qcm9w
ZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NDdXN0b21Qcm9w
ZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCIKQEAgLTIwNSw3ICsyMDQsNiBAQAogI2RlZmluZSBXZWJL
aXRDb2xvckZpbHRlckVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q29sb3JGaWx0ZXJFbmFi
bGVkIgogI2RlZmluZSBXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlUHJl
ZmVyZW5jZUtleSBAIldlYktpdFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiCiAj
ZGVmaW5lIFdlYktpdEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJL
aXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQiCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0Q1NTU2hhZG93UGFydHNFbmFibGVk
UHJlZmVyZW5jZUtleSBAIldlYktpdENTU1NoYWRvd1BhcnRzRW5hYmxlZCIKICNkZWZpbmUgV2Vi
S2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5
IEAiV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQiCiAjZGVm
aW5lIFdlYktpdFdlYlNRTEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViU1FMRW5hYmxl
ZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVy
ZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2Vz
Lm1tCmluZGV4IDU3YjY0ODZlOTkzN2ZjMWJkYWJlYWJlMzBhY2ExYjI3YTk2MDliNWMuLmFkYWRl
OTcwMDQxNjdhODRmYzVlZjFlNDg4ODA2MGQyZTE5MzJjZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtNjM2LDcgKzYzNiw2
IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBATk8sIFdlYktpdERpYWxvZ0VsZW1lbnRF
bmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQE5PLCBXZWJLaXRIaWdobGlnaHRBUElFbmFi
bGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0TW9kZXJuTWVkaWFDb250cm9s
c0VuYWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVTLCBXZWJLaXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0
TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5LAog
CiAjaWYgRU5BQkxFKFdFQkdMMikKQEAgLTY1OCw3ICs2NTcsNiBAQCArICh2b2lkKWluaXRpYWxp
emUKICAgICAgICAgQE5PLCBXZWJLaXREb3dubG9hZEF0dHJpYnV0ZUVuYWJsZWRQcmVmZXJlbmNl
S2V5LAogI2VuZGlmCiAgICAgICAgIEBOTywgV2ViS2l0RGlyZWN0b3J5VXBsb2FkRW5hYmxlZFBy
ZWZlcmVuY2VLZXksCi0gICAgICAgIEBZRVMsIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJl
ZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0U3ludGhldGljRWRpdGluZ0NvbW1hbmRz
RW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpAQCAtMzE3
NiwxNiArMzE3NCw2IEBAIC0gKHZvaWQpc2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxl
ZDooQk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRD
U1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9CiAKLS0gKEJP
T0wpd2ViQW5pbWF0aW9uc0VuYWJsZWQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZv
cktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXldOwotfQotCi0tICh2
b2lkKXNldFdlYkFuaW1hdGlvbnNFbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbc2VsZiBfc2V0
Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5j
ZUtleV07Ci19Ci0KIC0gKEJPT0wpd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFi
bGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0
aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleV07CkBAIC0zMjQ2LDE2
ICszMjM0LDYgQEAgLSAodm9pZClzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZDooQk9PTClm
bGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRNb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQogCi0tIChCT09MKXdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZv
cktleTpXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtl
eV07Ci19Ci0KLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDoo
Qk9PTClmbGFnCi17Ci0gICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KIC0g
KEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9i
b29sVmFsdWVGb3JLZXk6V2ViS2l0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkUHJlZmVyZW5j
ZUtleV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCA3MzBlYjZiZjFmMmQ2N2JmNDcxMjcwYzk1OTVjYmQy
ZDNjOTg0ZDA1Li5iOTg3YzljMjg4ZDdiNTMwNzM0NTM2M2E5YzgyNDg5ZGFjZTIxMzQ5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmgKQEAgLTU2NCw5ICs1NjQsNiBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZl
cmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBXRUJLSVRfREVQUgog
LSAodm9pZClzZXREaXJlY3RvcnlVcGxvYWRFbmFibGVkOihCT09MKWZsYWc7CiAtIChCT09MKWRp
cmVjdG9yeVVwbG9hZEVuYWJsZWQ7CiAKLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6
KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0VuYWJsZWQ7Ci0KIC0gKHZvaWQpc2V0
V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOihCT09MKWZsYWc7CiAtIChC
T09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDsKIApAQCAtNTg1LDkg
KzU4Miw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNDYWNoZU1vZGVsQ2hhbmdl
ZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAtICh2b2lkKXNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkOihCT09MKWZsYWc7CiAtIChCT09MKW1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ6
KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsK
LQogLSAodm9pZClzZXRJbnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQ6KEJPT0wpZmxhZzsKIC0g
KEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNGVjMDIzN2E3NGM3YzQ5ZGRlODI4NTljZTU4
OWUxNzRjZDVlOTQwNS4uY2U0Y2IzZDRjMDY4MTE4OTYyNjJjYTg5NTIwNjM3ZDEzZTUxZWE0NSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCisr
KyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAtMTMyLDcg
KzEzMiw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdlLmg+CiAj
aW1wb3J0IDxXZWJDb3JlL0JhY2tGb3J3YXJkQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQmFj
a0ZvcndhcmRDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NTU0FuaW1hdGlvbkNvbnRy
b2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVTdG9yYWdlUHJvdmlkZXIuaD4KICNpbXBv
cnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+CkBAIC0z
MzM0LDcgKzMzMzMsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlByZWZlcmVu
Y2VzICopcHJlZmVyZW5jZXMKIAogICAgIHNldHRpbmdzLnNldEludGVyYWN0aXZlRm9ybVZhbGlk
YXRpb25FbmFibGVkKFtzZWxmIGludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkXSk7CiAg
ICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRNb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZChbcHJlZmVyZW5jZXMgbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRd
KTsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWRdKTsKIAogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKFtwcmVmZXJlbmNlcyBjYWNoZUFQSUVu
YWJsZWRdKTsKIApAQCAtMzM1OCw3ICszMzU2LDYgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFu
Z2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAgICAgc2V0dGluZ3Muc2V0RG93bmxv
YWRBdHRyaWJ1dGVFbmFibGVkKFtwcmVmZXJlbmNlcyBkb3dubG9hZEF0dHJpYnV0ZUVuYWJsZWRd
KTsKICNlbmRpZgogCi0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJs
ZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChbcHJlZmVyZW5jZXMgd2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkXSk7CiAgICAgUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5l
c0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxl
ZF0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJm
YWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAppbmRleCA5YTg3NWQ0NzllN2JmYWQ3MzYx
YTZmMmY4YTRkMzE5MzM3ZWU1N2YyLi5iMGJkMDVmMjUwNTgyZTE0N2E2YTdmYmRhM2I2ZGJmNGI2
YWI2MDg3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0lu
dGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwKQEAgLTE4MywxNiArMTgzLDEyIEBA
IGludGVyZmFjZSBJV2ViUHJlZmVyZW5jZXNQcml2YXRlMyA6IElXZWJQcmVmZXJlbmNlc1ByaXZh
dGUyCiAgICAgSFJFU1VMVCBzZXRDdXN0b21FbGVtZW50c0VuYWJsZWQoW2luXSBCT09MIGVuYWJs
ZWQpOwogICAgIEhSRVNVTFQgbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW291dCwgcmV0dmFs
XSBCT09MKiBlbmFibGVkKTsKICAgICBIUkVTVUxUIHNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFi
bGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKLSAgICBIUkVTVUxUIHdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoW291dCwgcmV0dmFsXSBCT09MKiBlbmFibGVkKTsKLSAgICBIUkVTVUxU
IHNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQp
OwogfQogCiBbdXVpZChGOTU4MkQ3Mi02MzQ4LTQ1QjEtQUIwOS0zOUUzMzQ1OUI1QjkpXQogaW50
ZXJmYWNlIElXZWJQcmVmZXJlbmNlc1ByaXZhdGU0IDogSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTMK
IHsKICAgICBIUkVTVUxUIHNldEFwcGxpY2F0aW9uSWQoW2luXSBCU1RSIGFwcGxpY2F0aW9uSWQp
OwotICAgIEhSRVNVTFQgd2ViQW5pbWF0aW9uc0VuYWJsZWQoW291dCwgcmV0dmFsXSBCT09MKik7
Ci0gICAgSFJFU1VMVCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7
CiAgICAgSFJFU1VMVCB1c2VyVGltaW5nRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqKTsKICAg
ICBIUkVTVUxUIHNldFVzZXJUaW1pbmdFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKICAgICBI
UkVTVUxUIHJlc291cmNlVGltaW5nRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKaW5k
ZXggMmEyMTIxYWRiOTY4Njk4NDEyMWMwZTRiYThkYWZmY2E3YmNjNmNhYi4uOTIxN2I4NWU0OTdk
YTEzZGE3NjgyMjk1YjJkZTc2MmEyZGU3MTY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTE4OCwxNCArMTg4LDEwIEBA
CiAKICNkZWZpbmUgV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5
ICJXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIKIAotI2RlZmluZSBXZWJLaXRXZWJB
bmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVk
IgotCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxl
ZFByZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5h
YmxlZCIKIAogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJs
ZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJs
ZWQiCiAKLSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFBy
ZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiCi0K
ICNkZWZpbmUgV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJl
bmNlS2V5ICJXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCIKIAogI2Rl
ZmluZSBXZWJLaXRVc2VyVGltaW5nRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdFVzZXJUaW1p
bmdFbmFibGVkIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVy
ZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCmlu
ZGV4IDlkOWIwZGZlMTE5YmNmMThiZTQwMzU2MTI0NTZlYjZhODNlYmFlYzguLmY3NDI2YTk1NjNk
OWZkYmJiYTU3NjRiMTY3YzVjMDFiYWQxYjM4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTMxMSwxNCArMzExLDEwIEBAIHZvaWQgV2ViUHJlZmVy
ZW5jZXM6OmluaXRpYWxpemVEZWZhdWx0U2V0dGluZ3MoKQogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdEN1c3RvbUVsZW1lbnRzRW5hYmxlZFByZWZlcmVu
Y2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVm
YXVsdHMsIENGU1RSKFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtD
RkJvb2xlYW5UcnVlKTsKLQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNU
UihXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNl
S2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1
bHRzLCBDRlNUUihXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWRQcmVm
ZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAotICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KGRlZmF1bHRzLCBDRlNUUihXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
UHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7Ci0KICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0Vu
YWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAogICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRVc2VyVGltaW5nRW5hYmxlZFByZWZlcmVu
Y2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwpAQCAtMjEzOCwyMCArMjEzNCw2IEBAIEhSRVNVTFQg
V2ViUHJlZmVyZW5jZXM6Om1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKF9PdXRfIEJPT0wqIGVu
YWJsZWQpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6Ondl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKLXsK
LSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmVuYWJs
ZWQgPSBib29sVmFsdWVGb3JLZXkoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZFByZWZlcmVuY2VLZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFdlYlBy
ZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKEJPT0wgZW5h
YmxlZCkKLXsKLSAgICBzZXRCb29sVmFsdWUoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBTX09LOwotfQot
CiBIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpmZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoX091dF8g
Qk9PTCogZW5hYmxlZCkKIHsKICAgICBpZiAoIWVuYWJsZWQpCkBAIC0yMzQwLDIwICsyMzIyLDYg
QEAgSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0QXBwbGljYXRpb25JZChCU1RSIGFwcGxpY2F0
aW9uSWQpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKEJPT0wgZW5hYmxlZCkKLXsKLSAgICBzZXRCb29sVmFsdWUo
V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKLSAgICBy
ZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAg
IHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmVuYWJsZWQgPSBib29sVmFsdWVGb3JLZXkoV2ViS2l0
V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KTsKLSAgICByZXR1cm4gU19PSzsKLX0K
LQogSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJh
dGlvbnNFbmFibGVkKEJPT0wgZW5hYmxlZCkKIHsKICAgICBzZXRCb29sVmFsdWUoV2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwgZW5hYmxl
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaAppbmRleCAyNDM3YjBl
NzYyODk1MDZjMjY0MDQ4ODZiZDJjMDNmNTgzMjUzYzUxLi4yMTI5MDVjYjFiYTYwMDk0MDM4Njk1
MzkxNzhhM2ZlYTcwM2EzOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJQcmVmZXJlbmNlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVu
Y2VzLmgKQEAgLTIzNiwxMyArMjM2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBzZXRDdXN0b21FbGVtZW50c0VuYWJsZWQoQk9PTCk7CiAgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIG1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVk
KF9PdXRfIEJPT0wqKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0
TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoQk9PTCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoX091dF8g
Qk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKEJPT0wpOwogICAgIAogICAgIC8vIElXZWJQcmVm
ZXJlbmNlc1ByaXZhdGU0CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNl
dEFwcGxpY2F0aW9uSWQoQlNUUik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHdlYkFuaW1hdGlvbnNFbmFibGVkKF9PdXRfIEJPT0wqKTsKLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoQk9PTCk7CiAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHVzZXJUaW1pbmdFbmFibGVkKF9PdXRf
IEJPT0wqKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0VXNlclRp
bWluZ0VuYWJsZWQoQk9PTCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHJlc291cmNlVGltaW5nRW5hYmxlZChfT3V0XyBCT09MKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuY3BwCmluZGV4IGI2YTI4M2M5M2U4ODJhM2UyMWQ0MTY4YzRiMzFjYjg0OWQxNWQxYWMu
LjJlMjViZTk2YjJhZDQ1YjVmNGU1ZTMxODhkNjJjMTRlMDJlOTlkOTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwCkBAIC01MjQ0LDExICs1MjQ0LDYgQEAgSFJFU1VMVCBXZWJWaWV3
Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9u
KQogICAgICAgICByZXR1cm4gaHI7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0g
ICAgaHIgPSBwcmVmc1ByaXZhdGUtPndlYkFuaW1hdGlvbnNFbmFibGVkKCZlbmFibGVkKTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAgIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoISFlbmFi
bGVkKTsKLQogICAgIGhyID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zQ29tcG9zaXRlT3Bl
cmF0aW9uc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICBy
ZXR1cm4gaHI7CkBAIC01MjU5LDExICs1MjU0LDYgQEAgSFJFU1VMVCBXZWJWaWV3Ojpub3RpZnlQ
cmVmZXJlbmNlc0NoYW5nZWQoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgICAg
ICByZXR1cm4gaHI7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQoISFlbmFibGVkKTsKIAot
ICAgIGhyID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCZlbmFibGVkKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCghIWVuYWJsZWQpOwotCiAgICAgaHIgPSBwcmVmc1ByaXZh
dGUtPkNTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkKCZlbmFibGVkKTsKICAgICBp
ZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDRmYTcwOTQ3YzM4MzgyZmMwMzBjMjFhZTdl
NmJlMjVlMWIyNmVlM2UuLjgzMzA3NTIxYzg4NDJiMjA4ZTI4ZGZjZTMzYzI0MzVhZjZjYmVmYzYg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUg
YSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxs
eSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRl
ZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9UZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMpOgor
ICAgICAgICAoVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyBjb25z
dCk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgKiBE
dW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChlbmFibGVFeHBl
cmltZW50YWxGZWF0dXJlcyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRp
b25zKToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwOgor
ICAgICAgICAoZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMpOgorICAgICAgICAoc2V0V2ViUHJl
ZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyk6CisKIDIwMjAtMDktMTYgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFrIFNES10gQ2hlcnJ5LXBp
Y2sgTWVzYSB1c2UtYWZ0ZXItZnJlZSBmaXhlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE9wdGlvbnMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMu
Y3BwCmluZGV4IDA2NDU3ZGZkZmRlZWE1MDMwNGUzMzJkMGEzMTgyZjVhYmE0YWY4MDUuLjBkYmZh
YzlmM2M4NzQ5NDJjZDdiMWRlZjE0MDg4NDg0MzJlNDI2NGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0T3B0aW9ucy5jcHAKQEAgLTEyNiw4ICsxMjYsNiBAQCBUZXN0T3B0aW9uczo6VGVzdE9wdGlv
bnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29s
dQogICAgICAgICAgICAgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gcGFyc2VCb29sZWFuVGVz
dEhlYWRlclZhbHVlKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIpCiAgICAgICAgICAgICBhbGxv
d0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICAgICAg
ZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRl
clZhbHVlKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpbnRlcm5hbDpzZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIpCiAgICAgICAgICAgICBlbmFibGVTZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVl
KHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCkBA
IC0xNjcsNiArMTY1LDUgQEAgVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3Ry
aW5nJiBwYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHUKIGJvb2wgVGVzdE9wdGlv
bnM6OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3Ro
ZXIpIGNvbnN0CiB7CiAgICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXll
ckJhY2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25z
Ci0gICAgICAgICYmIG90aGVyLmVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiA9PSBl
bmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb247CisgICAgICAgICYmIG90aGVyLmpzY09w
dGlvbnMgPT0ganNjT3B0aW9uczsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1Rlc3RPcHRpb25zLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCmluZGV4
IGM1YzhjODU5OTJlMWNmZjM3NTA4MjFjODFmZjI4NDNkZDA5ZWI5OTcuLmQ3NjY4MTdiNzA1YjQ2
MjUwZDJlZmY1NTMzNDZhN2RkOTM3ZWIzNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL1Rlc3RPcHRpb25zLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMu
aApAQCAtMjksNyArMjksNiBAQAogCiBzdHJ1Y3QgVGVzdE9wdGlvbnMgewogICAgIGJvb2wgZW5h
YmxlQXR0YWNobWVudEVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlV2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uIHsgdHJ1ZSB9OwogICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3
aW5nIHsgZmFsc2UgfTsKICAgICBib29sIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIHsgZmFs
c2UgfTsKICAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IDQ2M2M5YjkyZWViNWVlZTk3
YTFhNzIwZGVmODVmYzYwZDQ4Nzg1M2MuLjY5MTU3YzQzMDAxYzU0NDE0MzBiMTExN2NkYTNhY2M0
NzAyNzRlODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0K
QEAgLTgxNCw3ICs4MTQsNiBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJl
cyhXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMpCiAgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlh
UHJlbG9hZGluZ0VuYWJsZWQ6WUVTXTsKICAgICAvLyBGSVhNRTogSW5wdXRFdmVudHMKICAgICBb
cHJlZmVyZW5jZXMgc2V0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkOllFU107Ci0gICAgW3ByZWZl
cmVuY2VzIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNl
dFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVm
ZXJlbmNlcyBzZXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQ6WUVTXTsKICAg
ICBbcHJlZmVyZW5jZXMgc2V0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQ6WUVT
XTsKQEAgLTk3OSw3ICs5NzgsNiBAQCBzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRl
c3RPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogICAgIHByZWZlcmVuY2VzLmlz
U2VjdXJlQ29udGV4dEF0dHJpYnV0ZUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUlzU2VjdXJlQ29u
dGV4dEF0dHJpYnV0ZTsKICAgICBwcmVmZXJlbmNlcy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVk
ID0gb3B0aW9ucy5lbmFibGVJbnNwZWN0b3JBZGRpdGlvbnM7CiAgICAgcHJlZmVyZW5jZXMuYWxs
b3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBvcHRpb25zLmFs
bG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzOwotICAgIHByZWZl
cmVuY2VzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgPSBvcHRpb25zLmVuYWJs
ZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbjsKICAgICBwcmVmZXJlbmNlcy5jb2xvckZpbHRl
ckVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUNvbG9yRmlsdGVyOwogICAgIHByZWZlcmVuY2VzLnNl
bGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVTZWxl
Y3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzOwogICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJs
ZWQgPSBvcHRpb25zLmVuYWJsZVdlYkdQVTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVt
cFJlbmRlclRyZWUuY3BwCmluZGV4IGE3MjczNGY2ZjRmYWY2YWRlOTU3Y2MzY2IzNDNkNTY3ZTQ4
N2QzM2UuLmQ3NDcxMzFmOTJiZGZkZmJjMzdhOTFhM2Y3ZThmYmIyZjQ2YjE2NTkgMTAwNjQ0Ci0t
LSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNzk2LDcgKzc5Niw2
IEBAIHN0YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKElXZWJQcmVmZXJlbmNl
cyogcHJlZmVyZW5jZXMpCiAgICAgcHJlZnNQcml2YXRlLT5zZXRWaXN1YWxWaWV3cG9ydEFQSUVu
YWJsZWQoVFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTY3JvbGxpbmdBUElF
bmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVzaXplT2JzZXJ2ZXJFbmFibGVk
KFRSVUUpOwotICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoVFJVRSk7
CiAgICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0Vu
YWJsZWQoVFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zTXV0YWJsZVRp
bWVsaW5lc0VuYWJsZWQoVFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRDU1NDdXN0b21Qcm9w
ZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZChUUlVFKTsKQEAgLTkwOSw3ICs5MDgsNiBAQCBzdGF0aWMg
dm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyogcHJl
ZmVyZW5jZXMsIGNvbnN0CiB7CiAgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBw
cmVmc1ByaXZhdGUgeyBRdWVyeSwgcHJlZmVyZW5jZXMgfTsKIAotICAgIHByZWZzUHJpdmF0ZS0+
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChvcHRpb25zLmVuYWJsZVdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbik7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRNZW51SXRlbUVs
ZW1lbnRFbmFibGVkKG9wdGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KTsKICAgICBwcmVmc1By
aXZhdGUtPnNldEtleWdlbkVsZW1lbnRFbmFibGVkKG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVu
dCk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChvcHRp
b25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHMpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE5YWVkNzY0OWI0OGQ4OTRh
ZmZhOTRhMDViMjRkYmQ4ODg0MjFjMWEuLjYyMzJlZTI1NjJmMWY5YmY4ZTI5ZjdlZjUwOWZkMjM5
ZDU3NzdhNTggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRU
ZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw5MSBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWlu
dCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmlt
YXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgUmVtb3ZlIGFueSB1c2Ugb2Ygbm93LXJlbW92ZWQgdGVzdGluZyBtZXRob2RzIGFuZCBzb21l
IHJ1bnRpbWUgZmxhZ3MgZnJvbSBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBhbmltYXRpb25z
L2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiBhbmltYXRp
b25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzOgorICAgICAgICAocGF1c2VB
bmltYXRpb25BdFRpbWVPbkVsZW1lbnQpOgorICAgICAgICAqIGh0dHAvdGVzdHMvY29udGVudGV4
dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sOgorICAgICAgICAqIGltcG9y
dGVkL2JsaW5rL3RyYW5zaXRpb25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0
aW9ucy1pbnNpZGUtaWZyYW1lLWlubmVyLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogdHJhbnNp
dGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9i
b3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlw
LXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAt
cGF0aC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAtdHJhbnNp
dGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVk
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0
aC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFu
c2Zvcm0uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlv
bi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2RlbGF5Lmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvZmxleC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2Zv
bnQtZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMv
ZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ludGVy
cnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbG9uZ2hh
bmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tYXNr
LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1o
ZWlnaHQtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXNtYXRjaGVk
LXNoYWRvdy1zdHlsZXMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNo
YWRvdy10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21peGVkLXR5cGUu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlv
bnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5z
aXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0
aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0
aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qczoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRpb25zLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1sOgor
ICAgICAgICAqIHRyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRp
b25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvc3ZnLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdGV4dC1pbmRl
bnQtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1s
aXN0LW1hdGNoLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qt
bm8tbWF0Y2guaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVu
dC1yZW5kZXJpbmcuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10
ZXN0LXRyYW5zZm9ybS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0
LXRlc3QuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBo
YXNlLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdp
dGgtY29udGVudC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRo
YW5kLWRlbGF5Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmct
ZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20t
YXV0by5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRl
ZmluZWQuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3Rh
cnQuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1p
bnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9h
Y2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29tcGxldGlvbi5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3Bl
bnNpb24uaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRp
b24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Fj
Y2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3Qu
aHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0
ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sOgorICAgICAgICAq
IHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5p
bWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy1h
bmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRt
bDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWw6CisgICAgICAg
ICogd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxl
cmF0ZWQuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFz
aC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5z
aXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25z
L3NldHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sOgor
ICAgICAgICAqIHdlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9w
ZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWw6CisKIDIwMjAtMDktMTUg
IFJvYiBCdWlzICA8cmJ1aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggbGF6eSBpbWFnZSBs
b2FkIHBhaW50aW5nCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1l
bmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVn
YWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDQwMmY5OGVhMzExNWFhMWQ3
NzZmYWY4OGVlZGI5MWEyODc1MWY5NzMuLjA4ZWJjNDRjNGQxNmRhNjkyNWQ2NWVkYzEzMTk0ZDhh
ZDMyNTY0NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29k
aW5nLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVn
YWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9ZmFsc2UgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
PGh0bWw+CiA8aGVhZD4KICAgICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmlt
YXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzIGIvTGF5b3V0VGVzdHMv
YW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCAxOGE1
YTAxMjlmZjdmMmFlMjRiZDMzZTMxOWU2MDZmNTc5YWE0MTllLi42ZGUwOGQzODU1MTg0NDM2NzEx
N2YwMDcyMjU3MDkwM2VhZjViY2ZlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25z
L3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCisrKyBiL0xheW91dFRlc3RzL2Fu
aW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKQEAgLTUxNCwxMSAr
NTE0LDYgQEAgZnVuY3Rpb24gY2hlY2tFeHBlY3RlZFZhbHVlQ2FsbGJhY2soZXhwZWN0ZWQsIGlu
ZGV4KQogCiBmdW5jdGlvbiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChhbmltYXRpb25O
YW1lLCB0aW1lLCBlbGVtZW50KQogewotICAgIC8vIElmIHdlIGhhdmVuJ3Qgb3B0ZWQgaW50byBD
U1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIGFzIFdlYiBBbmltYXRpb25zLCB1c2Ug
dGhlIGludGVybmFsIEFQSS4KLSAgICBpZiAoJ2ludGVybmFscycgaW4gd2luZG93ICYmICFpbnRl
cm5hbHMuc2V0dGluZ3Mud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gaW50ZXJuYWxzLnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGFuaW1h
dGlvbk5hbWUsIHRpbWUsIGVsZW1lbnQpOwotCi0gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIFdl
YiBBbmltYXRpb25zIEFQSS4KICAgICBjb25zdCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmlt
YXRpb25zKCk7CiAgICAgZm9yIChsZXQgYW5pbWF0aW9uIG9mIGFuaW1hdGlvbnMpIHsKICAgICAg
ICAgaWYgKGFuaW1hdGlvbiBpbnN0YW5jZW9mIENTU0FuaW1hdGlvbiAmJiBhbmltYXRpb24uYW5p
bWF0aW9uTmFtZSA9PSBhbmltYXRpb25OYW1lKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRt
bCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXkt
bm9uZS1rZXlmcmFtZS5odG1sCmluZGV4IGMxYzZmZDY3MmM0ZDBlZjc5ZjhiZTdiYTg4MTk0OWZi
MjZkOTRjOTkuLmE1Y2UzNDJkNTJlYmZiMDA1ZmQwNDFiNzg4ZmJiMTE2YjE2N2Y2ZGYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3Bs
YXktbm9uZS1rZXlmcmFtZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVu
dGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIEhUTUw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD1mYWxzZSBdIC0tPgorPCFET0NUWVBF
IEhUTUw+CiA8c2NyaXB0PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgdGVzdFJ1bm5l
ci5kdW1wQXNUZXh0KCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90
cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRl
LWlmcmFtZS1pbm5lci5odG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlv
bnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUt
aW5uZXIuaHRtbApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I0MWNiYzhiZmM3ODQz
YzNiYjk4OTMyZmM5ZWM5OTczYmM1MDcyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9y
ZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5l
ci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPCFET0NUWVBFPgotPGh0bWw+
Ci08aGVhZD4KLTxzdHlsZT4KLSAgICAjYmFja2dyb3VuZCB7Ci0gICAgICAgIHdpZHRoOiAyMDBw
eDsKLSAgICAgICAgaGVpZ2h0OiAyMDBweDsKLSAgICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAg
ICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVuOwotICAgIH0KLSAgICAub3ZlcmxheSB7Ci0gICAg
ICAgIHdpZHRoOiA1MHB4OwotICAgICAgICBoZWlnaHQ6IDUwcHg7Ci0gICAgICAgIGJhY2tncm91
bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMSk7Ci0gICAgICAgIC13ZWJraXQtdHJhbnNp
dGlvbjogb3BhY2l0eSAxczsKLSAgICB9Ci0KLSAgICAjcG9wdXAgewotICAgICAgICB3aWR0aDog
MjBweDsKLSAgICAgICAgaGVpZ2h0OiAyMHB4OwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBy
ZWQ7Ci0gICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKLSAgICAgICAgLXdlYmtpdC10cmFuc2l0
aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAxczsKLSAgICB9Ci0KLSAgICAudHJhbnNwYXJlbnQgewot
ICAgICAgICBvcGFjaXR5OiAwOwotICAgIH0KLQotICAgIFtoaWRkZW5dIHsKLSAgICAgICAgZGlz
cGxheTogbm9uZTsKLSAgICB9Ci0KLSAgICAub3ZlcmxheS50cmFuc3BhcmVudCAucGFnZSB7Ci0g
ICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwcHgpOwotICAgIH0KLQotPC9z
dHlsZT4KLTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+Ci0g
ICAgZnVuY3Rpb24gcnVuVGVzdCgpCi0gICAgewotICAgICAgICB2YXIgc29saWRfY29sb3Jfb3Zl
cmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJzb2xpZF9jb2xvcl9vdmVybGF5Iik7Ci0g
ICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsKLQot
ICAgICAgICB2YXIgcG9wdXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKTsKLSAg
ICAgICAgcG9wdXAucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsKLQotICAgICAgICAvLyBOT1RF
OiBUaGlzIGlzIGEgaGFja3kgd2F5IHRvIGZvcmNlIHRoZSBjb250YWluZXIgdG8gbGF5b3V0IHdo
aWNoCi0gICAgICAgIC8vIHdpbGwgYWxsb3cgdXMgdG8gdHJpZ2dlciB0aGUgd2Via2l0IHRyYW5z
aXRpb24uCi0gICAgICAgIC8vIFNlZSBjcmJ1Zy5jb20vMzI0Njg1Ci0gICAgICAgIHNvbGlkX2Nv
bG9yX292ZXJsYXkuc2Nyb2xsVG9wOwotICAgICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LmNsYXNz
TGlzdC5yZW1vdmUoJ3RyYW5zcGFyZW50Jyk7Ci0KLSAgICAgICAgLy8gZHVtcCB0aGUgcGl4ZWwg
aW4gdGhlIG1pZGRsZSBvZiB0aGUgdHJhbnNpdGlvbgotICAgICAgICBpZiAod2luZG93LmludGVy
bmFscykgewotICAgICAgICAgICAgd2luZG93LmludGVybmFscy5mb3JjZUNvbXBvc2l0aW5nVXBk
YXRlKGRvY3VtZW50KTsKLSAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMucGF1c2VBbmltYXRp
b25zKDAuNSk7Ci0gICAgICAgIH0KLSAgICAgICAgdHJpZ2dlclBpeGVsUmVzdWx0cygpOwotICAg
IH0KLQotICAgIGZ1bmN0aW9uIHRyaWdnZXJQaXhlbFJlc3VsdHMoKQotICAgIHsKLSAgICAgICAg
cGFyZW50LnBvc3RNZXNzYWdlKCJUcmlnZ2VyUGl4ZWxSZXN1bHRzIiwgJyonKTsKLSAgICB9Ci0K
LSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcignbG9hZCcsIHJ1blRlc3QsIGZhbHNlKTsKLTwv
c2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08ZGl2IGlkPSJiYWNrZ3JvdW5kIj4KLSAgICA8ZGl2
IGlkPSJzb2xpZF9jb2xvcl9vdmVybGF5IiBjbGFzcz0ib3ZlcmxheSB0cmFuc3BhcmVudCIgaGlk
ZGVuPXRydWU+Ci0gICAgICAgIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0icGFnZSIgaGlkZGVuPXRy
dWU+PC9kaXY+Ci0gICAgPC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlv
bnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJh
bnNpdGlvbnMuaHRtbAppbmRleCA2MDFjZDVhODdmMjA0MTA2MmYxYTlkMDk4MDA5YzU0N2Y1MmYz
NDVlLi5kOTE0ZmNiYmU4MWQ0N2NkYmIxYWVlYmFjYjc5NWEzNzkzMWE0YTFiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25z
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10
cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGE4
MzdlMDU3ZGJjMTE4Yzc0YWJiYjYwM2VlYzU1NmU3Yzg4N2U1YTguLmJhNDAwY2FjOWViZmUxY2Ex
MGUyOTBhNzk4ZTk5ZDcyYjM0ODgwYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNp
dGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9u
cy5odG1sCmluZGV4IDg5N2NiNDc4OTBlY2Y0OGUxZmQwMDU4OGQ0Yjg4YzkxNzJiMjYxMDMuLmE1
YmZhMjdkM2FkMzIxOTkyMDg5MjE2MTUzMGI1ZDczZTE5ZDU2OTYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWwKaW5kZXggYjhhM2ZiNTNlN2JkNmJi
MDZkMTk5ZDk1NWU0MDNjOTEzNzA3ZDU4OS4uNTYzYmE5YzhmZjRmOGFjMmRiM2Q1MTRhYjFiMzYx
NjI0Y2NlMzMwYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJh
ZGl1cy10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVy
LXJhZGl1cy10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9u
cy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlv
bnMuaHRtbAppbmRleCBmZjIzZmEwNDUxMjNlZDMxMDU3ZTgyN2Q3MWFhZGM5ODhkMjEyZDc4Li5j
MWZhYTVjZjQyMTIxODAzNWI0MTBlMmFlYzJiZDYyM2I3NDBhNzZkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiNTVlZGZiN2Vh
ODQ1NTVkOGFjNDRiY2FmZmNhODQwYzc1NzhlZjU2Li41ZTY2NDRhODg0ZmNjZDYwN2JiNzYwYjE5
OGQ5OTBmNzFlMjlhZmRiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlw
LXBhdGgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlw
LXBhdGgtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24u
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sCmluZGV4
IDNjN2UyOWYxOTcwMTJkZmRlYTQzMDQzY2MwNDJhNzIxZGUwODEzZTEuLmZkZTFmMTczYWJjOTZi
OTFhYTQ2YmVmOTdhOGY5MDllY2Y3ZDAxYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2NsaXAtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24t
YWxsLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5o
dG1sCmluZGV4IDMzYzU5ODBlNjg3YWIzZTAyZTdlM2YyNTc3NmM4NzNmZDVkZThhYjkuLmE0OTJl
NzEzMzk0NDAwYzI2ZDM0N2U4OGFlMWQxM2MzMTdlM2RjN2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRy
YW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29s
b3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVkLmh0bWwKaW5kZXggYzczZmQ0YWE4M2NmYWQ5NWI1
MGI2ZTYzNTkxZTlhZTY3OTg5NTZkZC4uNTdjNjNlYzlhOGMxYWUwN2RhZDhjMzc4NWRmM2I4MTQ0
YjkyOGYyMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNp
dGlvbi1wcmVtdWx0aXBsaWVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29s
b3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVkLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3It
dHJhbnNpdGlvbi1yb3VuZGluZy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3It
dHJhbnNpdGlvbi1yb3VuZGluZy5odG1sCmluZGV4IDZlNzU2YmYzMzc4M2ZkNzIxZjMzYTY3Yzhm
YmQ2ZjI4ZjE1NWU1YjAuLmNhYWExMTU3OWY5YjBkZjg2ZTA4MTk0YzBkOTBmMWRkZjhiNTAzMTcg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91
bmRpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9u
LXJvdW5kaW5nLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbCBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1s
CmluZGV4IDc2ZTlkYjI2YTNiMTRkNGEzOGEzY2RhZjAwZWY2NmJmZjhlZGRiNjQuLmI4ZDcwYTI3
OTM1MTU1YmVhYjI4ZTc4NWNhZWY4ZjI1MzhkYzk1NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwKaW5kZXggNGRiZGY3YTZiMTNmOGFlZTAzYTc3
ODliMzY4YzEwOGUzZDFhNGRkZi4uODdkYzAwN2VkZjVmYjc2ZmYxNDUxY2E5YWZmOGNiOWNhYWE0
MTg5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3Jk
ZXItaW1hZ2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJv
cmRlci1pbWFnZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRt
bAppbmRleCBiNzZlYjY1YWVkMzNjODQ2YzRkY2VjNDViOTdkNTQxYTAzOGNlN2JhLi43NDc0ZjY2
ZDExNmM2ZjJhMjNhMmFmNjMzYTUwNDRlMjhjMmI3NjczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemll
ciB2YWx1ZSBvdmVyZmxvdzogQ29sb3JzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbAppbmRleCA2
NmZlYmFjZmY5N2U0MmE2NzNiMWRhNTlhYWMwZjYzNzFmOWVjNWFkLi4xYjVkZGFmZGY2NDhkOWYx
MGYwZWM4ZjIwZDk0OWJhMzYxNmZlODRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5
cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVl
IG92ZXJmbG93OiBMZW5ndGhzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbAppbmRleCBhOTlhNGRi
YTczNmFmYjJmOTU4MDVhZTg4ODVlMDJiZTBjMGE3M2Y4Li4wYmNjYTg4ZTg3MTdkYWRmNTllM2Nl
YmQwNjkxOWNlYWM0YTJhNzZlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRt
bD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJm
bG93OiBTaGFkb3dzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCmluZGV4IDcyMDI0
NjgxYjNjM2E3Y2RkMTlhMjhmNGMyODM4ZTYwNGFkNWI3Y2IuLjM1NTUzMDM5ZmM5ZGE4ZGI2ZWVh
MzI5NTZkOTFhYzFlNjQyY2ExZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFk
b2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2
YWx1ZSBvdmVyZmxvdzogU1ZHIExlbmd0aHM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1s
CmluZGV4IDY2MDk3MjUzNGRjNjYyYmMzYjgwZmY3NjQ5MzZmZmI0YWRhNWYyNjguLjY1MjkxMTJi
MTFkNjRmMWVjNDBhYmFjNTc1YTY4NjgxNTQwNWQ1NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJp
Yy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFRyYW5zZm9ybXM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXgg
Nzk4M2ZkY2VkMjI2MzcwZTFhMzQ0OTAxM2UwYzk4NWUwZDZlMjg2Yy4uMzUwODdjMzY0YTNmMWM5
OGU0NDBkOWE3OTllMGJkZDBjYmYwMDBhZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Rl
bGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sCmluZGV4IDk5YzMx
ZWE4N2RhMDkxZDVkNjdkYTU5ZjExYjNmMjY5M2EwZmY0YzAuLjNhMDJiNjI3OTgxMDVhMzZkNjBl
ZWExODIxYWY3MDM4MGVjY2VhMmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2RlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFk
PgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRy
YW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25z
Lmh0bWwKaW5kZXggOWZjNDY2MDM3YTUzOTUyZmRiOTAwZGMwZTk2M2Y0MzUyZTkxNjk0NS4uNjFm
NDU2YWNlOTE3MzBlN2IyNGNmZjZjNTQxOGY3MjA1ZDc1M2NkNyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhl
YWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZh
bWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9u
dC1mYW1pbHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbAppbmRleCBjZGNkMjBmMTU3NDkzN2Q5YWJj
Yjc2NmYyZTkyMDdkYzc4ZmRjYzc4Li4wM2Y5NTJkYTFiNzMzZTg0OTY5MTRjNWExNzY5YTgwMTdi
YzZjOGZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1k
dXJpbmctdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQt
ZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRp
bWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWlu
Zy1mdW5jdGlvbi5odG1sCmluZGV4IDMwZmVjYzZkNTFkNGMwNmU2NGVjN2FlZjAwMDk4NTA0NmJi
NWYwOGEuLmU4YjE2MjEwZWE3NjU3ZTQ3MGIwZGEyODE0MDM5Zjg1NTIyYTQzMDkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKaW5kZXgg
N2Q0NzNlOTEyMTQ2NTgzZjgxMTA5M2RlMjk3YmUzYWFmNTM4YmI0OC4uOWU2NmNkNGY5MjYxNGUx
ZTUwN2YyY2ZhNjQyM2Y3ZDJlNjEwMDlkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCmluZGV4IDYwOTkzM2Y2
MDRhNzE1MjhjZWY0MzFhN2JhNDk1OGJhNzJlNDc5NWYuLjIwMmU2NGQ2NDRkZjVjOGQ1ZjVlNGY5
OTE4N2I0NzdhM2E4ZmJkMWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xv
bmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMu
aHRtbAppbmRleCBiYzdjNzE4M2VhZjNmOWQ5YjRjMDY4N2RiYjk3NjRkM2E5NzJmNTA4Li4wYzNk
MzlhYjlmMjFhZDFmYjA5Nzg2MmYwM2VkMTJlZTVmY2ExNmIzIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1o
ZWlnaHQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgt
d2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggMTIwNDExN2JjYzMyMGMxMmE4MWVl
MmJlZWUyMjhlNDExZjk5YjljNy4uOWRkZjM5MzhhMjliZjNlMTBjOGM4YjZiNzQ2ZTMxYjAzZDc0
MjYwYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1o
ZWlnaHQtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4t
bWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVh
ZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0
Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRj
aGVkLXNoYWRvdy1zdHlsZXMuaHRtbAppbmRleCBlMmU1Y2IwNzI5ZDgxM2Q5ODQ2MGI4OTg0YTQx
MjBiNGZiOWVkZTI3Li44NzIzYzI3NDE2ODhiZWQ0OTAzYzc4YzgyOTY4NGI0NWQ0Y2M3NjAxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHls
ZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1z
dHlsZXMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9u
cy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNp
dGlvbnMuaHRtbAppbmRleCBjYjZkMzRkODQ3NWJmYTYxMTM2YjM2MzM4YmJjNzg3ZTBlOGVjNTA4
Li42ODdkMTBmMTIwOGE4MzVjZDI1ZmU5MDA5ZDQ1MzdkNGEwOGM2NzA0IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9taXhlZC10eXBlLmh0bWwKaW5kZXggMjRmYjExZmVmNGUxODcyZjE0MmIwZjU3MmRmNTUxYzA3
MzkzYjFiZC4uMzMzMjM2OGQ2ZTQ0ODUyMGZiODE2ODM3ZDQ5ZjdjOTc4ZTQ0ODlmYSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8
c3R5bGU+CiAjYm94IHsKICAgICB3aWR0aDogMTAlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbAppbmRleCBjZWQyZDVhMjIyMjgwNzAx
N2U1MzY5YWQwMWUxM2RiNjE1ZjNlNzJmLi5kYzQ0NThmMmQ1Mjc2NzZjOGNkNzMyZTBlMmJlYzk2
MGVkOGIzYjZmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVy
LXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVy
LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNp
emUtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJh
Y2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1sCmluZGV4IDIxM2UyMWFkY2VkNjZhN2FhZDY3
ZWM4YjVmOTU2OGM3ZjdiZWZmMjQuLjE0ZDc1MWM2NDk3MzNjMWMzMGEwN2JkYzRmZmI4ZWUzNjFj
NTIwMjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tn
cm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlw
bGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGIyOWVlNzNkMzUwZDk1
YjM3YjcyMTcxODZlYWE5YmMyOTMxODA2YzUuLjUwMzA2N2MxNjRjYTYwNzk1N2FkNThmMzY2ZGZm
ZGEyNzRlNzU4NTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxl
LWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1t
YXNrLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1t
YXNrLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggMzkyM2Q5M2M2ZDg0NTM0ZTVmN2Q3OGViOWYzZTM2
YWRhNGZkMzAyYy4uNWNiZTY5ZmMwNDc1NzJlYWJlNjBhMDQ4N2YxNTM2NWE0Y2E5YTkxOSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9u
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNp
dGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKaW5k
ZXggMzRhMGFkMjYzY2E5ZjE1OGQ3NDk5MDVhNGM1ZGZjNjU1MWU5M2ViNi4uNGE5ZDRlYzU2NGYz
M2M1NTQ3MzMxN2UxMThmNGY5MDdlY2U3NTA4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+
CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9u
ZWdhdGl2ZS1kZWxheS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVs
YXkuaHRtbAppbmRleCBjNzViZTdmM2NjNmQ1OTNjZmQxMDYyYTc3NTY1NzZiNWJhYTZhNmI2Li5k
MzNlNGI1NzYwZjU1M2M3Y2NkNzBiN2Q0YzdkODM2NjU1M2QxZjRkIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0
bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sCmluZGV4IGQ4NjM3MDU5ZWY3MGZlN2Ey
MmViMGNkMjA5NTZlN2FiZGQ4NzcxOGUuLjg2MmJhMDJiMTVmNjJlYjM0Mjg3ZmE1OGY0NGNiNWVi
NDdmOWM5YjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJh
bnNpdGlvbi16aW5kZXguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5
LXRyYW5zaXRpb24temluZGV4Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5z
aXRpb24tdGVzdC1oZWxwZXJzLmpzIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2Vz
L3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCmluZGV4IDdlNzlkMGM5ZTFiNDlhOGU3ODE2OTNl
ODRiZmY0MDkxODMyNWJmYzYuLmYzNTczMWI2NWZhNGM3NTJmZDEyNjAyZDcwMWZjMDliODYwZDA3
ZWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0
aW9uLXRlc3QtaGVscGVycy5qcworKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJj
ZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanMKQEAgLTM4MSwxNCArMzgxLDkgQEAgY29uc3Qg
cHJvcGVydGllc1JlcXVpcmluZ1ByZWZpeCA9IFsiLXdlYmtpdC10ZXh0LXN0cm9rZS1jb2xvciIs
ICItd2Via2l0LXRleHQtZmkKIAogZnVuY3Rpb24gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVt
ZW50KHRyYW5zaXRpb25Qcm9wZXJ0eSwgdGltZSwgZWxlbWVudCkKIHsKLSAgICAvLyBJZiB3ZSBo
YXZlbid0IG9wdGVkIGludG8gQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucyBhcyBX
ZWIgQW5pbWF0aW9ucywgdXNlIHRoZSBpbnRlcm5hbCBBUEkuCi0gICAgaWYgKCdpbnRlcm5hbHMn
IGluIHdpbmRvdyAmJiAhaW50ZXJuYWxzLnNldHRpbmdzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGludGVybmFscy5wYXVzZVRyYW5zaXRpb25B
dFRpbWVPbkVsZW1lbnQodHJhbnNpdGlvblByb3BlcnR5LCB0aW1lLCBlbGVtZW50KTsKLQogICAg
IGlmICh0cmFuc2l0aW9uUHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpICYmICFwcm9wZXJ0aWVz
UmVxdWlyaW5nUHJlZml4LmluY2x1ZGVzKHRyYW5zaXRpb25Qcm9wZXJ0eSkpCiAgICAgICAgIHRy
YW5zaXRpb25Qcm9wZXJ0eSA9IHRyYW5zaXRpb25Qcm9wZXJ0eS5zdWJzdHIocHJlZml4Lmxlbmd0
aCk7CiAKLSAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgV2ViIEFuaW1hdGlvbnMgQVBJLgogICAg
IGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnMoKTsKICAgICBmb3IgKGxl
dCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykgewogICAgICAgICBpZiAoYW5pbWF0aW9uIGluc3Rh
bmNlb2YgQ1NTVHJhbnNpdGlvbiAmJiBhbmltYXRpb24udHJhbnNpdGlvblByb3BlcnR5ID09IHRy
YW5zaXRpb25Qcm9wZXJ0eSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sCmluZGV4IDcwODgxZmU5MDIxYzg5NTAxMTA1
M2Y0MmYxY2JiYWFjNDMyODYyNGQuLmFlZmM5YTA1MzhmZWIwNGY4M2FlMTVlNDhiMjUyMzk5ZGQ4
MTY1ZjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUt
dHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRz
aWRlLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10
cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRl
ci10cmFuc2l0aW9ucy5odG1sCmluZGV4IDM1YzllMzI5MWZhYTEyNjIyMmQ0NDEwZTJhMmZlM2U3
NDQ5ZTdmOWMuLmZhYTc0NWMxYjFlN2UxYTM5MWQ2MjRjZWIxZjUxNTRjM2QwMDg3MjggMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlv
bnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRy
YW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbApp
bmRleCBkMzIyYjRlMWY0MWM1NWUwNGQzMDk5MzdmZGRjYmIxMTY1Zjk5N2NjLi5iNTUxYTJjYmM3
NjRiY2UyZWNmZGI1NzE2MmI0YTE3YTI0ZDMxNmQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9z
dGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBz
LXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDNlZTU1ZTAwYTRjY2MyN2RhNDc3OTU1N2NhM2Y5
NmZlNzBlY2JmZWYuLmJiOTYyYmNiOTcwNDMyMjk2MjliODRhOTJlNGEwY2UwNTgwMTU0MWUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwKaW5kZXggMTQ1ZDgz
YTAyYjAyMmM2MWU2ZmE4OGQ5NDY3MDNmYmFhNGFhMTk1MS4uMDA1OGFiNWQxNDE2ZGE0YjdjZGVi
YmQyZDE0ZWFkMjg2MGY3YmNiZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNp
dGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5z
aXRpb24uaHRtbAppbmRleCAzZmNhZDM4ODA2Y2E2MDA3YmE3OGY1ZjBiNDIwMjgwMTU0MjNhNjVm
Li41Nzk3ZTVlZGUzZGVhZGQ3MmQzYzNhYTM1MTU2YTEyYTEwNGM3YWFiIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sCisr
KyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KICAgICA8c3R5bGU+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sCmluZGV4IDhmM2Q4MmY0
ZTc1ZDM0ZDVhYjZmYjM4N2I0M2VkOGIzNWI4ZWM0YzEuLmFhMzk4ODA3OGZjOWVkY2E2ZTIwZTIy
NThmMTNlYzllMTllOWRlNzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2
Zy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFu
c2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
CisKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbAppbmRleCA0NzQ0YjU4NWNlZWZiODE0
NWViMmU0OWM3OTYwMWE2MTkzMWRkMWUxLi4xNmY4YWYxODgyYTVhNzZjYWQzY2Y3MzU0NGFmNTkz
YTlmMjAwNzFjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVu
dC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRl
bnQtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0
Y2guaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNo
Lmh0bWwKaW5kZXggMGY5YzQ4NzM0ZGRmZWRjZjZmY2ZmYjdlMzk3ODkwNThhZWI4MTU0Mi4uMGQz
ZjMzZWQxNTI3OTM0MDMxNTljMzIyNjBkMmIyZmQ4MDJkNjM1ZiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmlt
ZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURP
Q1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCmluZGV4IDg2ZGVhN2Uw
ZmE1ZWJkMzU2N2JjMjE0MDhjMDc3ZjJhNDcyODJhMjcuLmJmNmQzMGRkM2RhNmEyOGM3ODE1ODBk
NjQxZjdiZDJjMmVjMGE5OWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRlcmluZy5odG1sCmluZGV4IDAwN2NlOGRkMDU4NTM1
NjcyN2RlOTE2NTE1ZmJiM2NjNDI3YjE3YmQuLjk1OWFmZDYwZDA5YjAxMWJjZTNhZTEwNmQ2Nzlj
YTliNmQwYzNhOWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRp
b24tZW5kLWV2ZW50LXJlbmRlcmluZy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRlcmluZy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sCmluZGV4IDNkMzI5ZjQ2MDIxOTZh
YTFmNDkzNDAwODgyYzg4ODBjZjQ1ODIzN2MuLmVmODA2YzcxMWExZTE1YWJkZDM3OTZjNWE1ODcx
YjY5MTJkYzdkMzggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRp
b24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWhpdC10ZXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9u
LWhpdC10ZXN0Lmh0bWwKaW5kZXggZDlkZjg1YzE0NDdmMDlhZGU1MmFhYTQyYjAxZjIyMzhjYmNi
ZTNjNy4uODNhNjBhNmUyZTU1M2YzN2E3ZjU5ZTY3MjFiOTg1YmVkNzNhMDE2NSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwKaW5kZXggOTNlMDRmMmEz
MjhmZjJjZGExNjU2YTQzNDkxMDRmMjE0MjEwM2FiMC4uZmMyY2U5OTUxMGFkZTcyZDZjZTgxNTY5
MTc0NWI5OTAwODBhNjgyYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1j
b250ZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1l
bnQtd2l0aC1jb250ZW50Lmh0bWwKaW5kZXggMWYwM2VlYTc3NDk2ZjdiNzNmYWVhN2YyYzBjYzdk
NjdkODRhMmJhYi4uM2M0NzI5NDkxNjdkNjgzMjJhMjczNzFlYTA3MWYyNzYxMWY2NTM2OSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdp
dGgtY29udGVudC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
b24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5k
LWRlbGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFu
ZC1kZWxheS5odG1sCmluZGV4IDY4NzMyMjlkMTRkNzk0NjNjZTBmNDRkZjQ0OTBhYjQ5ODdkY2Jj
M2MuLmRmMDk4OWQ5ZjY0ZmE3ZGU0ZTRlYjM1MDgzYWU4ZDQ0OWJlZjQ2ZjYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXku
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbApp
bmRleCA5MTE3NDkyYjBiYjNhMTJiODEwMzdlZDIyOWZjNTllMGI2ZWNmZDk5Li4wNTBjNTJkMzE3
MWM4NjI5NmZjMjc2NTVjYjEzNDNhNTQ0ZjE5YmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAg
PHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10
by1mcm9tLWF1dG8uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8t
ZnJvbS1hdXRvLmh0bWwKaW5kZXggNGUzN2UxNjdmNDFmMTIzYmVkZWRiMDI4MGUyMWIwMGM5MTZi
MDhlZi4uZDg0NTliNzFkNGM4M2E5YzNkN2UzNjkxNTM2ZjU4YmE2OTA5NGJhNCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbApp
bmRleCAxNGU3OGM1MDE2MWRlODI0MjZkYWMyZjc5ZjQ2NDY4ZjA0MjRlY2UwLi42MjhjZjI2ODUy
ZWFhOGY5MzU2NjI0ZDkxMTljNmU4NzhlYmFmNzg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwKaW5kZXggMmVhNDQ2YzZiMmY5NWFhMmNmM2Rl
ZDM2Njc2MWU0MDY1ODM2MmMyZS4uYjE4NzhkMzE5MDUyMTc2OGU2M2JhNWU1YWQ3YzZkNTMyZGVl
NzNlMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNv
bG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9y
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0
bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVy
by1kdXJhdGlvbi1pbi1saXN0Lmh0bWwKaW5kZXggZTY2YWRmM2IxOTBjOWUwZDg1ZWE3ODAyYzFk
OTcxZDM4YTFjZmUyZC4uYjJiY2JmNTI1OTdkZGIzZDZlZGZlODkwY2RkNjA1NmY1MGUyZDdkYiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5
LXN0YXJ0Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgt
bm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbAppbmRleCA2NjYxZjkxYTQwOWE5MWFiZDNiOWMwNWUx
NGJhNDc0NDEwNTMyNDUwLi42MDhlMDAzZjVjMGRlN2Y2MzAzNThhNmIwNDczYTQzNTk1NDVjMjI2
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgt
bm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96
ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
IGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmlt
YXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRl
cnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwKaW5kZXggOWM3YTEzYjQ1YjY0NTNhODQ1ZDU4ZTIw
NWM5YjRlM2VjODU0NjU0Yy4uZDExNWM5NTExODQ3Y2M1YjFhOGY2ODg0OTkzNTdlNmViMGEyMDBi
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmlt
YXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5v
bmUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24t
cmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24t
Y29tcGxldGlvbi5odG1sCmluZGV4IGIzNzY2ODE3Y2Y0MGUzZDlkYWU2NWU0MzljYTJkZmYzYzY5
ZTViYjYuLmExYzg0OGEzYTE1NmEwYTA0YzAwZGIzZDkyNzY0YjRkMDc5YjYxMjMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92
YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1j
b21wbGV0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHls
ZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5p
bWF0aW9uLXN1c3BlbnNpb24uaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxl
cmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbAppbmRleCAwNjU0YTY5NWY1YjI0YmM0MmZj
YTdmMWQyMzgxZGEwZjcyYWI2ODhjLi5lZmFhNTQzOWQ0ZmI3NDBhYjVjNzQzMTBkMTQ3Njg4ODNj
MzY4ZmVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVk
LWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRt
bCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1y
ZW1vdmluZy1wcm9wZXJ0eS5odG1sCmluZGV4IGJlZjA4MDhlOTQ3Yzk2YTA1NGMzMThiOTFkNTlh
NTI0MDIxZTNiMjcuLmYzNDAxYjZjZTY2MGZiNjIwN2Q4YjkxZjNjNTI2ZWJmNmM2YzA3ZDYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlv
bi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogICAgIGRpdiB7CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xl
YXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVm
ZmVjdC5odG1sCmluZGV4IGI2MDVjMDg5MTFiYTY5MzFiMGNmMzgzNWI3OWNjYjBjNGZmNTM2NzQu
LjlkZDU2MThiYjY3NTAxZWY5MDlmNjM3MmQxZjExOTFmNWFlYzkyNjcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVh
cmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9u
LWVmZmVjdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8
dGl0bGU+Q3Jhc2ggYWNjZXNzaW5nIGEgQ1NTQW5pbWF0aW9uJ3MgY3VycmVudCB0aW1lIGFmdGVy
IHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1m
aW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFu
aW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sCmluZGV4IDU4ZjZjNDliOWM4YzA4MmRmOGNlOTE2
ZDhjNjE2OGEwZDg5OGNlM2YuLjQzMDZhMTllYmJkM2NjZjhkZTk5MWI1YzU4MzJiNGIxM2Y3ZDBh
MWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJl
bnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFm
dGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIGFjY2Vzc2luZyBh
IENTU0FuaW1hdGlvbidzIGN1cnJlbnQgdGltZSBhZnRlciByZW1vdmFsIG9mIGl0cyB0YXJnZXQ8
L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9j
c3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1j
cmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVj
dC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sCmluZGV4IGQ5
ODBkMzU2MjhlNGFhMzlhMTgzNDAzNWQ1N2U0N2FmMGNkMWNiYjcuLjY2ZmJhNTUyZjg1ZGQzYzI4
MTdkNzIxMTk4Mzc1NjMyYjhkNjk5MmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJl
bW92YWwtY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmlt
YXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGJvZHk+CiA8c3R5bGU+CiAKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5n
ZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNy
YXNoLmh0bWwKaW5kZXggNTYwODcyMTNhNDVlZGQ0NzZhMDhlZDkzOWNjMTZiMDhmNTE0Y2M3Yi4u
OWU1NTNiZGZiYTRiZjZlNWYxMTEzZTgxODlmYzJhMDEzNzc0MTg3NiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdl
LWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVz
LWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGJvZHk+CiA8c3R5bGU+CiAKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbAppbmRleCA4M2ZlOTVj
YTdkZjE2NjNhZDU5MDhhYmUwNGEzNmJmNTcxYTU1MWFlLi5lNWY5NTIwMDBjNmE0ZWVlNWVmZGIy
MWFhNmU3ZTQ3N2Q1OWJiYTBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2Nzcy1hbmltYXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3Mt
YW5pbWF0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+
CiA8dGl0bGU+Q1NTIEFuaW1hdGlvbnM8L3RpdGxlPgogPHN0eWxlIHR5cGU9InRleHQvY3NzIiBt
ZWRpYT0ic2NyZWVuIj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3Nz
LXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwgYi9MYXlvdXRU
ZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2Nl
bGVyYXRlZC5odG1sCmluZGV4IDMwNzgzYThiZmYwYmIwMWE0ZWZiNDA1OGJhZGM3MDkxOGEyZTk3
MGYuLjA0ZGJhYTUzY2ExZDIzNmZkOTgwYmNjZDcxY2E4YjlhM2FmOTI4NzcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVy
c2FsLWFjY2VsZXJhdGVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3Mt
dHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiA8dGl0bGU+UmV2ZXJzYWwgb2YgYWNj
ZWxlcmF0ZWQgaW4tZmxpZ2h0IENTUyBUcmFuc2l0aW9uczwvdGl0bGU+CiA8c3R5bGUgdHlwZT0i
dGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwKaW5kZXggNjBhYzM2NWYzMDU2NTQzYTNm
MTg2NTRiOWY3YzJmM2UxMjQ3YzU2Mi4uMGY1ZmZiM2YyNzA4NjdiM2E2M2VlMDMxYTMyNWJiYWJh
YTQxNzdkMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlm
cmFtZXMtY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtl
eWZyYW1lcy1jcmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8
c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2Nl
bGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5n
LXByb3BlcnR5Lmh0bWwKaW5kZXggNGRiZjcwNmU0MTc0ZjI5YWIxOTViOGUyZmY1NjJhOWQwOTM3
YWY3YS4uZmEzYzg1NWRiY2IyNmU4ZDk5N2MxMjUyNDI4ODMyYzkxMTE4N2M4ZiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlv
bi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxwcmUgaWQ9InJlc3VsdHMiPjwvcHJlPgog
PGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6
IDA7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7
Ij48L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1j
c3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5n
LWVmZmVjdC5odG1sCmluZGV4IGJkMjQwNjhiY2M0NWRjMzgyOTA4ODlmZDdjM2EzNDY0Y2YyMDE3
ZWIuLmY4MGIwNDdmMjY1NmZlNTkxODgxNWIwMzJjODc1NTQ4NmUwN2JmYmEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0
ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9z
ZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIHNldHRp
bmcgYSBDU1MgQW5pbWF0aW9uIHRvICJub25lIiBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8g
bnVsbDwvdGl0bGU+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVy
LWNsZWFyaW5nLWVmZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5n
LWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1l
ZmZlY3QuaHRtbAppbmRleCA0YjE1MDRhYmNhZDNlN2RiMDQxM2NkZGJmMzMzNjFlYTQ5NDU0YWYx
Li45MzJiYzkxYTc2ZWExNTVmOWFiODZkOGM5MDRkOGZlYjUzNWM3NzZiIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJv
cGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12
aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
PG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBzZXR0aW5nIGEgQ1NTQW5pbWF0aW9u
J3MgcHJvcGVydHkgdmlhIHN0eWxlIGFmdGVyIHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90
aXRsZT4KIDxzdHlsZT4K
</data>
<flag name="commit-queue"
          id="424472"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408928</attachid>
            <date>2020-09-16 09:40:16 -0700</date>
            <delta_ts>2020-09-16 10:40:05 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916184014.patch</filename>
            <type>text/plain</type>
            <size>558568</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGZiODMxYjM1OTc3MTBiZmY4YWFkOGY4ZDI5ZTA5
ZDRkYTRiYzNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzLCBzb21lIFJlbmRl
ckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25z
IGFuZCBhCisgICAgICAgIG1lY2hhbmlzbSB0byBub3RpZnkgd2hlbiBhbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkbyBub3QgdXNl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsOgorICAgICAg
ICAqIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9u
UGxheWJhY2tFdmVudEluaXQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcik6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oLgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NUcmFu
c2l0aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGw6CisgICAgICAgICogYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0
aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzdW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBk
b20vUHNldWRvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50Ojpj
bGVhckhvc3RFbGVtZW50KToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJB
bmltYXRpb25TdGFydGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFUaW1lVG9DdXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFuaW1hdGlv
bkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbGVtZW50OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
UGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJl
bmRlcmVycyk6CisgICAgICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgICog
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRy
ZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0
aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAy
MC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl1bMS4xOF0gUmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmQ4OGQwOWM2MGQy
NjllYjhlYjkxZjgxMmMyMTJlNzc5OGNjMTM1OC4uZjIxNmYyOTRmODMxYmQxZDBlYTAwOWJjYWYz
ODFlZmI2NmZlNmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwg
dGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25z
IGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92
ZWQuCisKKyAgICAgICAgV2UgYWxzbyByZW1vdmUgdGhlIG1lY2hhbmlzbSB0byBub3RpZnkgd2hl
biBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9u
IGVuZ2luZSBkbyBub3QgdXNlLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAg
ICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
ZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1ByZWZlcmVu
Y2VzIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVI
b3N0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25E
aWRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpvdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0
YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAobWVkaWFUaW1lVG9DdXJy
ZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0
aW9uRGlkU3RhcnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KTog
RGVsZXRlZC4KKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlM
RUQgaW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3
NDYxM2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24g
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2lu
Y2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxh
Z3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAg
ICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVd
KToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgor
CiAyMDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQ
SQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcy
ZGQ0NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0w
OS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9u
IGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBB
bmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUg
bm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAq
IFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXpl
RGVmYXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBz
ZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3Jt
RW5hYmxlLmgKaW5kZXggNzAwZjkwYWRjNmMzOWE3NmJhYTI3ZDdjOGIzMWZlNGRlNjI5NTk4Yi4u
YjQ3MzE3OWFkMWUzNTMwZjVkMDk3NGM0NzEwYjRiZGFjZTQ4NzliYiAxMDA2NDQKLS0tIGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm1FbmFibGUuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9y
bUVuYWJsZS5oCkBAIC04MzcsNiArODM3LDEwIEBACiAjZW5kaWYKICNlbmRpZgogCisjaWYgIWRl
ZmluZWQoRU5BQkxFX0JPR1VTX0ZFQVRVUkVfVE9fRk9SQ0VfQ0xFQU5fQlVJTEQpCisjZGVmaW5l
IEVOQUJMRV9CT0dVU19GRUFUVVJFX1RPX0ZPUkNFX0NMRUFOX0JVSUxEIDEKKyNlbmRpZgorCiAv
KiBUaGlzIGZlYXR1cmUgd29ya3MgYnkgZW1iZWRkaW5nIHRoZSBPcGNvZGVJRCBpbiB0aGUgMzIg
Yml0IGp1c3QgYmVmb3JlIHRoZSBnZW5lcmF0ZWQgTExpbnQgY29kZQogICAgdGhhdCBleGVjdXRl
cyBlYWNoIG9wY29kZS4gSXQgY2Fubm90IGJlIHN1cHBvcnRlZCBieSB0aGUgQ0xvb3Agc2luY2Ug
dGhlcmUncyBubyB3YXkgdG8gZW1iZWQgdGhlCiAgICBPcGNvZGVJRCB3b3JkIGluIHRoZSBDTG9v
cCdzIHN3aXRjaCBzdGF0ZW1lbnQgY2FzZXMuIEl0IGlzIGFsc28gY3VycmVudGx5IG5vdCBpbXBs
ZW1lbnRlZCBmb3IgTVNWQy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKaW5kZXggMjBmOGM0MTJhYTIzMzc1
NTViMzdkNTk0MWUxOGIyZWFkZmQzN2JlZi4uNTlmNzkyYTk0ODdmYTk4YjgxNjU5YmExMjFhMjIw
Y2MyYzEwNDkzMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQKQEAgLTEyMSw3ICsxMjEsNiBAQCBzZXQo
V2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAiJHtXRUJDT1JFX0RJUn0v
bG9hZGVyL2ljb24iCiAgICAgIiR7V0VCQ09SRV9ESVJ9L21hdGhtbCIKICAgICAiJHtXRUJDT1JF
X0RJUn0vcGFnZSIKLSAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9hbmltYXRpb24iCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2UvY3NwIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlL3Njcm9sbGlu
ZyIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0iCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQppbmRleCBh
NTVhMThkMzIwNDhlNzZlNjUxZTAwNjA1ZjgwYjA1YTMyN2ExMWVlLi5jYjRhOWRlOTI3N2FmZTli
NzQ0ZWNmZTU0M2QwNWNkYWE1OWFhNTM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCisrKyBiL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKQEAgLTg4OSw5ICs4
ODksNiBAQCBzZXQoV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCiAgICAgcGFnZS9X
aGVlbEV2ZW50VGVzdE1vbml0b3IuaAogICAgIHBhZ2UvV2luZG93RmVhdHVyZXMuaAogCi0gICAg
cGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5oCi0gICAgcGFnZS9hbmltYXRpb24vQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oCi0KICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3ku
aAogICAgIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeUNsaWVudC5oCiAgICAgcGFnZS9j
c3AvQ29udGVudFNlY3VyaXR5UG9saWN5SGFzaC5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CmluZGV4IDFkZjU0ODU1
YjBkY2Q0YzI2YTRmNzZiMzU0MmZhMjE0NmNmYmE5ZDguLjM4ODI3YzQzYzFjNTFlZTI4ZTg2OTdm
OWNkZDdiMWZiYTY4ZmJlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0
CisrKyBiL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0CkBAIC00NDEsNiArNDQxLDcgQEAgYW5p
bWF0aW9uL0FuaW1hdGlvbkV2ZW50QmFzZS5jcHAKIGFuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFj
a0V2ZW50LmNwcAogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmNwcAogYW5pbWF0aW9uL0NT
U0FuaW1hdGlvbi5jcHAKK2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKIGFuaW1h
dGlvbi9DU1NUcmFuc2l0aW9uLmNwcAogYW5pbWF0aW9uL0RlY2xhcmF0aXZlQW5pbWF0aW9uLmNw
cAogYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuY3BwCkBAIC0xNjc1LDEyICsxNjc2LDYgQEAg
cGFnZS9XaGVlbEV2ZW50VGVzdE1vbml0b3IuY3BwCiBwYWdlL1dpbmRvd0ZlYXR1cmVzLmNwcAog
cGFnZS9XaW5kb3dGb2N1c0FsbG93ZWRJbmRpY2F0b3IuY3BwCiBwYWdlL1dvcmtlck5hdmlnYXRv
ci5jcHAKLXBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCi1wYWdlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb25Db250cm9sbGVyLmNwcAotcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCi1wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwCi1wYWdlL2Fu
aW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5p
bWF0aW9uLmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9saWN5LmNwcAogcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5Q2xpZW50LmNwcAogcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5RGlyZWN0aXZlLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDY2NTU5OGY2MzUwNGQ4MzVkNGRkYTczZTI2N2U2MjI5
ZDA3MTMzZDIuLjI4ZTlmMjkxYmYzMDk5ZDZjMjUzYmZlZmViZjBlZDJkZjE5YjNkYWUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagor
KysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAg
LTI3Niw3ICsyNzYsNiBAQAogCQkwRjExNzgxODIyRTNDNDdGMDA4QkQ1NzAgLyogRnJhbWVJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjExNzgxNjIyRTNDNDdFMDA4QkQ1NzAgLyogRnJhbWVJZGVudGlmaWVyLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxMUE1NEYwRjM5MjMzMTAw
QzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJT
ZWxlY3Rpb25JbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEYxMzE2M0UxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjEzMTYzRDE2
RUQwQ0M4MDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcg
LyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovOyB9OwogCQkwRjE1RUQ1QzFCN0VDN0M1MDBF
RERGRUIgLyogV2lsbENoYW5nZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTVFRDVBMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0
YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBG
MTc3NDgwMTM3OEI3NzIwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNzc0N0UxMzc4Qjc3MTAwOURB
NzZBIC8qIFNjcm9sbEFuaW1hdG9ySU9TLmggKi87IH07CiAJCTBGMUEwQzM4MjI5QTQ4MTgwMEQz
N0FEQiAvKiBWZWxvY2l0eURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMUEwQzM2MjI5QTQ4MTgwMEQzN0FEQiAvKiBWZWxvY2l0eURhdGEuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtOTE2LDEx
ICs5MTUsNiBAQAogCQkzMTZERTcwMjFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0YUNoYW5uZWxT
dGF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2
REU3MDExRTgzQUUxRDAwODRDMjYxIC8qIFJUQ0RhdGFDaGFubmVsU3RhdGUuaCAqLzsgfTsKIAkJ
MzE2RkUwNzIwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5ZnJhbWVSdWxlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA2RTBFNkNDQkVFMDBC
RjYwODggLyogSlNDU1NLZXlmcmFtZVJ1bGUuaCAqLzsgfTsKIAkJMzE2RkUwNzQwRTZDQ0JFRTAw
QkY2MDg4IC8qIEpTQ1NTS2V5ZnJhbWVzUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2RkUwNzAwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5
ZnJhbWVzUnVsZS5oICovOyB9OwotCQkzMTZGRTExMjBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0
aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MzE2RkUxMDgwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkzMTZGRTExNDBFNkUxREE3MDBC
RjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2RkUxMEEwRTZFMURBNzAwQkY2MDg4IC8qIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRl
LCApOyB9OyB9OwotCQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZG
RTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggKi87IH07Ci0JCTMx
NkZFMTE4MEU2RTFEQTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE2RkUxMEUwRTZFMURBNzAwQkY2
MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmggKi87IH07Ci0JCTMxNkZFMTFBMEU2RTFEQTcwMEJG
NjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE2RkUxMTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5p
bWF0aW9uLmggKi87IH07CiAJCTMxNzQxQUFEMTY2MzY2MDkwMDhBNUI3RSAvKiBTaW11bGF0ZWRD
bGlja09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlvbnMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTdEM0ZG
MzIxNTU5OUY0MDAzNEUzQjkgLyogUG9pbnRlckV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTdEM0ZGMjIxNTU5OUUzMDAzNEUzQjkgLyogUG9p
bnRlckV2ZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMzE4MTVBMzExRjlBNkM4RjAwRkNCRjg5IC8qIEltYWdlQml0bWFwLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMUQyNkJCRjFGODZEMTg5MDA4
RkYyNTUgLyogSW1hZ2VCaXRtYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwpAQCAtMjE1OCw2ICsyMTUyLDcgQEAKIAkJNzFFMkM0MjYyMUM5MzUyODAw
MjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUUyQzQyNDIxQzkzNTFEMDAyNEY4QzggLyogQW5pbWF0
aW9uRWZmZWN0UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQk3MUVBRENEODIyMDg3RTcyMDA2NUE0NUYgLyogUG9pbnRlcklELmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVBRENENjIyMDg3RTZE
MDA2NUE0NUYgLyogUG9pbnRlcklELmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVm
ZmVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFF
RkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTcxRjA1RjgwMjUxMjQ0MkUwMDcx
RTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3Bl
cnR5QW5pbWF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJNzIxNDQzMzMyMjNFQzhCMDAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MzIyM0IyQTI0
MDBGQkE5NDQgLyogU1ZHUHJvcGVydHkuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzNDIyM0VDOTE2MDBGMTJGRjcgLyogU1ZHUHJvcGVy
dHlPd25lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NTVFRTUzNjAyMjNCMkEyMTAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5T3duZXIuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjI4M0YwRTIzMEIyNjhD
MDBGNUQ4MjggLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcyQzE4QTNGMjMwQjA0QjcwMDY4NDdDNyAvKiBJbWFn
ZVBhaW50aW5nT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yMTk0LDcgKzIxODksNiBAQAogCQk3N0Q1MTAxQzFFRDcyMkJGMDBEQTRD
ODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMUIxRUQ3MjJCNTAwREE0Qzg3IC8qIEpTQ3JlZGVu
dGlhbHNDb250YWluZXIuaCAqLzsgfTsKIAkJNzdENTEwMjUxRUQ3NEI1ODAwREE0Qzg3IC8qIEpT
TmF2aWdhdG9yQ3JlZGVudGlhbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc3RDUxMDI0MUVENzRCNTUwMERBNEM4NyAvKiBKU05hdmlnYXRvckNyZWRl
bnRpYWxzLmggKi87IH07CiAJCTc3RUY2MkY0MTJGOURCNzQwMEM3N0JEMiAvKiBKU1dlYkdMVmVy
dGV4QXJyYXlPYmplY3RPRVMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDc3RUY2MkYyMTJGOURCNzQwMEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlP
YmplY3RPRVMuaCAqLzsgfTsKLQkJNzhEMDJCQzYxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3Bl
cnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3OEQwMkJDNDE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAq
LzsgfTsKIAkJNzlBQzkyMTkxMDk5NDVDODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlBQzkyMTcx
MDk5NDVDODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3OUYyRjVB
MjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzlGMkY1OUYxMDkxOTM5QTAwMEQ4N0NCIC8q
IENvbXBvc2l0aW9uRXZlbnQuaCAqLzsgfTsKIAkJN0EwOUNFRjExRjAyMDY5QjAwRTkzQkRCIC8q
IEZpbGVNb25pdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSA3QTA5Q0VFQzFGMDFDQzkzMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNTg2Niw3ICs1ODYwLDYg
QEAKIAkJMEYxMUE1NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVuZGVyU2VsZWN0aW9uSW5mby5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRDE2RUQwQ0M4MDAzNUNDMDQgLyog
UGxhdGZvcm1DQUZpbHRlcnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUGxh
dGZvcm1DQUZpbHRlcnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzE2M0Yx
NkVEMENERTAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW0gKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVyc0NvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyog
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxNUVENTkxQjdFQzdDNTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFdpbGxDaGFuZ2VEYXRh
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNUVENUExQjdFQzdDNTAwRURE
RkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFdpbGxDaGFuZ2VEYXRhLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTZCRUQ5
MjMwNEYwNTMwMEI0QTE2NyAvKiBHUFVCYXNlZENhbnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gR1BVQmFzZWRDYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTcyMTUsMTYgKzcyMDgsNiBAQAogCQkzMTZGRTA3
MDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ1NTS2V5ZnJhbWVzUnVsZS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkzMTZGRTA5MTBFNkNDRDdGMDBCRjYwODggLyogQ1NTS2V5ZnJhbWVSdWxl
LmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBDU1NLZXlmcmFtZVJ1bGUuaWRsOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkzMTZGRTA5MjBFNkNDRDdGMDBCRjYwODggLyogQ1NTS2V5
ZnJhbWVzUnVsZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTS2V5ZnJhbWVzUnVsZS5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA3MEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEFuaW1hdGlvbkJhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZG
RTEwODBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25CYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07Ci0JCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwQTBFNkUx
REE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVyLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTMxNkZFMTBCMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmlt
YXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEMwRTZF
MURBNzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEltcGxpY2l0QW5pbWF0aW9u
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEUwRTZFMURBNzAwQkY2
MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IEltcGxpY2l0QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMx
NkZFMTBGMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBLZXlmcmFtZUFuaW1hdGlvbi5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlm
cmFtZUFuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBLZXlmcmFt
ZUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTc0MUFBQjE2NjM1
RTQ1MDA4QTVCN0UgLyogU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNp
bXVsYXRlZENsaWNrT3B0aW9ucy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTdE
M0ZFRjIxNTU5OUUxMDAzNEUzQjkgLyogUG9pbnRlckV2ZW50LmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBQb2ludGVyRXZl
bnQuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkzMTdEM0ZGMTIxNTU5OUUyMDAz
NEUzQjkgLyogUG9pbnRlckV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFBvaW50ZXJFdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05ODgzLDYgKzk4NjYsOCBAQAog
CQk3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkVmZmVjdC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQk3MUVGQ0VEQTIwMkIzODhGMDBEN0M0MTEgLyogQW5pbWF0aW9uRWZm
ZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFuaW1hdGlvbkVm
ZmVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURFMjAyQjM5Qzcw
MEQ3QzQxMSAvKiBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBKU0FuaW1hdGlvbkVmZmVjdEN1c3RvbS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5MyAvKiBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MUYwNUY3RjI1
MTI0NDBEMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3MUY5MzZGNzFERDRGOTlCMDA5MjJDQzcgLyogdHJhY2tz
LXN1cHBvcnQuanMgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmphdmFzY3JpcHQ7IHBhdGggPSAidHJh
Y2tzLXN1cHBvcnQuanMiOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MUZGODUxODIy
QTNGODFGMDA1RDU5NTkgLyogTmF2aWdhdG9yTWF4VG91Y2hQb2ludHMuaWRsICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IE5hdmlnYXRvck1heFRvdWNoUG9pbnRzLmlkbDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJNzIxNDQzNDUyMjQwQzhCQTAwRjEyRkY3IC8qIFNWR0FuaW1hdGVkVmFs
dWVQcm9wZXJ0eS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTk5OTEsOCArOTk3Niw2IEBACiAJCTc3RDUx
MDI0MUVENzRCNTUwMERBNEM4NyAvKiBKU05hdmlnYXRvckNyZWRlbnRpYWxzLmggKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzdFRjYyRjExMkY5REI3NDAwQzc3QkQyIC8qIEpTV2Vi
R0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk3N0VGNjJGMjEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFy
cmF5T2JqZWN0T0VTLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTV2ViR0xW
ZXJ0ZXhBcnJheU9iamVjdE9FUy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OEQw
MkJDMzE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQk3OEQwMkJDNDE1NEExOERGMDBCNjJEMDUgLyog
Q1NTUHJvcGVydHlBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q1NTUHJvcGVydHlBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlB
QzkyMTYxMDk5NDVDODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU0NvbXBvc2l0aW9uRXZlbnQuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlND
b21wb3NpdGlvbkV2ZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEpTQ29t
cG9zaXRpb25FdmVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUYyRjU5RTEw
OTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKQEAgLTE4NzEyLDI2ICsxODY5NSw2IEBACiAJCQlwYXRoID0gd29ya2VyczsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CiAJCX07Ci0JCTMxNkZFMTA2MEU2RTFEODQwMEJG
NjA4OCAvKiBhbmltYXRpb24gKi8gPSB7Ci0JCQlpc2EgPSBQQlhHcm91cDsKLQkJCWNoaWxkcmVu
ID0gKAotCQkJCTMxNkZFMTA3MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmNwcCAq
LywKLQkJCQkzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5oICovLAot
CQkJCTMxNkZFMTBCMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uY3BwICov
LAotCQkJCTMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCAq
LywKLQkJCQkzMTZGRTEwOTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ci5jcHAgKi8sCi0JCQkJMzE2RkUxMEEwRTZFMURBNzAwQkY2MDg4IC8qIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCAqLywKLQkJCQkwRjE1REE4OTBGM0FBRUU3MDAwMENFNDcgLyogQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLywKLQkJCQk3OEQwMkJDMzE1NEExOERGMDBCNjJEMDUg
LyogQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwICovLAotCQkJCTc4RDAyQkM0MTU0QTE4REYwMEI2
MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTBEMEU2RTFEQTcw
MEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEUwRTZFMURB
NzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmggKi8sCi0JCQkJMzE2RkUxMEYwRTZFMURB
NzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmNwcCAqLywKLQkJCQkzMTZGRTExMDBFNkUx
REE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLywKLQkJCSk7Ci0JCQlwYXRoID0g
YW5pbWF0aW9uOwotCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKLQkJfTsKIAkJMzMzRjcwM0Qw
RkI0OUMxNjAwOEUxMkE2IC8qIG5vdGlmaWNhdGlvbnMgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKApAQCAtMjE0MzEsNyArMjEzOTQsNiBAQAogCQk2NUJGMDIxODA5
NzQ4MDYzMDBDNDMxOTYgLyogcGFnZSAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hp
bGRyZW4gPSAoCi0JCQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLywK
IAkJCQk1RDU5NzVCNTE5NjM2MkJFMDBEMDA4NzggLyogY29jb2EgKi8sCiAJCQkJQ0UxN0FEMTQx
QzU4NTIyRjAwNUY0Nzk5IC8qIGNzcCAqLywKIAkJCQkxOEE2Q0Q2RjBEOEYyMDI1MDAxREMzQ0Ug
LyogaW9zICovLApAQCAtMjE4NzQsNiArMjE4MzYsOCBAQAogCQkJCTcxQzI5RTJFMjAzQ0U3NkIw
MDhGMzZEMiAvKiBDU1NBbmltYXRpb24uY3BwICovLAogCQkJCTcxQzI5RTMwMjAzQ0U3NkIwMDhG
MzZEMiAvKiBDU1NBbmltYXRpb24uaCAqLywKIAkJCQk3MUMyOUUzMTIwM0NFNzZDMDA4RjM2RDIg
LyogQ1NTQW5pbWF0aW9uLmlkbCAqLywKKwkJCQk3MUYwNUY3RjI1MTI0NDBEMDA3MUU2OTMgLyog
Q1NTUHJvcGVydHlBbmltYXRpb24uY3BwICovLAorCQkJCTcxRjA1RjdFMjUxMjQ0MEMwMDcxRTY5
MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovLAogCQkJCTcxMzE3MTMyMUZCRTc4QzUwMEY3
NThERSAvKiBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmggKi8sCiAJCQkJNzEyM0MxODcyMDQ3
MzlCQjAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uY3BwICovLAogCQkJCTcxMjNDMTg2MjA0NzM5
QkEwMDc4OTM5MiAvKiBDU1NUcmFuc2l0aW9uLmggKi8sCkBAIC0zMDMxNSw3ICszMDI3OSw2IEBA
CiAJCQkJMzFBNzk1QzcxODg4QkNCMjAwMzgyRjkwIC8qIEFOR0xFSW5zdGFuY2VkQXJyYXlzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk0OTA3MDdFNzEyMTlDMDQzMDBEOTBFNTEgLyogQU5HTEVXZWJL
aXRCcmlkZ2UuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5RTkxMkFCMEVGQUM5MDYwMDlEMENBRiAv
KiBBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAotCQkJCTMxNkZFMTEyMEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUVGQ0VEQzIwMkIzOEE5
MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUUyQzQy
NjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTMxOTg0ODAxMUExRDgxN0IwMEExMzMxOCAvKiBBbmltYXRpb25FdmVudC5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDY5OCw3ICszMDY2MSw2IEBACiAJCQkJQzJGNEU3OEMxRTQ1QzNFRjAw
NkQ3MTA1IC8qIENvbXBsZXhUZXh0Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTRC
QTUwOTAxQkNGQkQ5NTAwRTM0RUY3IC8qIENvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0NEZBMTg1MUJDQTZCNUEwMDkxQjZFRiAvKiBDb21wb3NlZFRy
ZWVJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMTYwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDlEREQwOTlF
NjQ5MjAwNTZFNTgxIC8qIENvbXBvc2l0ZUVkaXRDb21tYW5kLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk3MTI0N0UzNzFGRUE1Rjg2MDA4QzA4Q0UgLyogQ29tcG9zaXRlT3BlcmF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3MTExMjQzRTIxNkZBNzExMDBFQjdCNjcgLyogQ29tcG9zaXRlT3BlcmF0
aW9uT3JBdXRvLmggaW4gSGVhZGVycyAqLywKQEAgLTMwODM4LDggKzMwODAwLDYgQEAKIAkJCQk3
QzlBQ0FBODFGM0NDRUI0MDBGM0FBMDkgLyogQ3J5cHRvUnNhSGFzaGVkS2V5QWxnb3JpdGhtLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3QzlBQ0FBNDFGM0NDRTY5MDBGM0FBMDkgLyogQ3J5cHRvUnNh
S2V5QWxnb3JpdGhtLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MUMyOUUzMjIwM0NFNzgxMDA4RjM2
RDIgLyogQ1NTQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExNDBFNkUxREE3
MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEYxNURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDQUU5RjkxMDE0NjQ0MUYwMDBDMjQ1QjAgLyogQ1NTQXNw
ZWN0UmF0aW9WYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTRERTVDODIxRDdGM0ExNDAwMTY0
RjJBIC8qIENTU0F0UnVsZUlELmggaW4gSGVhZGVycyAqLywKIAkJCQlGQkQ2QUY4ODE1RUYyNUM5
MDA4QjcxMTAgLyogQ1NTQmFzaWNTaGFwZXMuaCBpbiBIZWFkZXJzICovLApAQCAtMzA5MDgsNyAr
MzA4NjgsNyBAQAogCQkJCUE4MEU2Q0U2MEExOTg5Q0EwMDdGQjhDNSAvKiBDU1NQcmltaXRpdmVW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTFFRDhBQzMwQ0M0OUJFMDAwQkZDNTU3IC8qIENT
U1ByaW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCBpbiBIZWFkZXJzICovLAogCQkJCUE4MEU2Q0ZGMEEx
OTg5Q0EwMDdGQjhDNSAvKiBDU1NQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJNzhEMDJC
QzYxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAq
LywKKwkJCQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24u
aCBpbiBIZWFkZXJzICovLAogCQkJCTcxMzE3MTM0MUZCRTc4REIwMEY3NThERSAvKiBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk2NTY1ODBGNDA5RDEyQjIw
MDAwRTYxRDcgLyogQ1NTUHJvcGVydHlOYW1lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTQ2RDM3
NDYxRDZEMDFENDAwNzcwODRGIC8qIENTU1Byb3BlcnR5UGFyc2VyLmggaW4gSGVhZGVycyAqLywK
QEAgLTMxNzMyLDcgKzMxNjkyLDYgQEAKIAkJCQk1NUJCRDQyOTI0REI1NjA0MDBCQjZFMEMgLyog
SW1hZ2VVdGlsaXRpZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkIzMUIzQjY2RjcwMDA1
REQ3OSAvKiBJbW11dGFibGVORkEuaCBpbiBIZWFkZXJzICovLAogCQkJCTI2Rjc1NkI1MUIzQjY4
RjIwMDA1REQ3OSAvKiBJbW11dGFibGVORkFOb2RlQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCRTk2MUM1NTE4QUQzMzhDMDBEMDdEQzUgLyogSW5iYW5kRGF0YVRleHRU
cmFjay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDc4NjMzRTkyM0ZGMzQ3QjAwODdBRTIxIC8qIElu
YmFuZEdlbmVyaWNDdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTA3MDZBMEQ5MjQwODMwQTcwMEU5
MzgxOCAvKiBJbmJhbmRHZW5lcmljQ3VlSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8sCkBAIC0z
MjcwOSw3ICszMjY2OCw2IEBACiAJCQkJNTE3QTYzQzYxQjc0MzE5MjAwRTdEQ0RDIC8qIEtleWVk
RW5jb2RlckNGLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTEzQjNENzExNEIxNjY2MDAxQzQyOUIg
LyogS2V5RXZlbnRDb2NvYS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMjY1NTQxMzkxNDg5ODExQzAw
MERGQzVEIC8qIEtleUV2ZW50Q29kZXNJT1MuaCBpbiBIZWFkZXJzICovLAotCQkJCTMxNkZFMTFB
MEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNzEyNDdFMzkxRkVBNUY4NjAwOEMwOENFIC8qIEtleWZyYW1lQW5pbWF0aW9uT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJNzE1NTZDQjQxRjlGMDlCQTAwRTc4RDA4IC8qIEtleWZyYW1l
RWZmZWN0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzQTFGRUE1Rjg2MDA4QzA4Q0UgLyog
S2V5ZnJhbWVFZmZlY3RPcHRpb25zLmggaW4gSGVhZGVycyAqLywKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRhYmxlLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRhYmxlLmlkbAppbmRleCAxNDY0NzEwMDA2NTE2OGY4MjlmYjZhMjRhYTY4MzA4
MWYzYWU3MDAxLi40ZmE4Y2M2MjU5MDg4NTNjNTYyMmVjYWUzZGJhYTRiMjYxZGE1ZGViIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJsZS5pZGwKKysrIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCkBAIC0yNCw5ICsyNCw3IEBACiAg
Ki8KIAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI3RoZS1h
bmltYXRhYmxlLWludGVyZmFjZS1taXhpbgotWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9ucwotXSBpbnRlcmZhY2UgbWl4aW4gQW5pbWF0YWJsZSB7CitpbnRlcmZhY2UgbWl4aW4g
QW5pbWF0YWJsZSB7CiAgICAgW01heVRocm93RXhjZXB0aW9uLCBDYWxsV2l0aD1HbG9iYWxPYmpl
Y3RdIFdlYkFuaW1hdGlvbiBhbmltYXRlKG9iamVjdD8ga2V5ZnJhbWVzLCBvcHRpb25hbCAodW5y
ZXN0cmljdGVkIGRvdWJsZSBvciBLZXlmcmFtZUFuaW1hdGlvbk9wdGlvbnMpIG9wdGlvbnMpOwog
ICAgIHNlcXVlbmNlPFdlYkFuaW1hdGlvbj4gZ2V0QW5pbWF0aW9ucyhvcHRpb25hbCBHZXRBbmlt
YXRpb25zT3B0aW9ucyBvcHRpb25zKTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQW5pbWF0aW9uRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25FZmZlY3QuaWRsCmluZGV4IGRiZGYxZmUyYzY0YjRjMzZjNTk0OTg2Nzk2NWU5MzQy
NWExYzg3MDcuLmZkYTQxMWEyODJmYTI3MDI5YTNjNTEyMzI4N2JiNzA4ZTdjYWEyNTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsCkBAIC0yNCw3ICsy
NCw2IEBACiAgKi8KIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucywKICAg
ICBFeHBvc2VkPVdpbmRvdywKICAgICBDdXN0b21Ub0pTT2JqZWN0CiBdIGludGVyZmFjZSBBbmlt
YXRpb25FZmZlY3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvblBsYXliYWNrRXZlbnQuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blBsYXliYWNrRXZlbnQuaWRsCmluZGV4IGI5NjkxYjQ4NTM2NDYyMDIyZmFkNWRlZjA0YTdhNTAy
ODhhZTIzYzkuLmU3OWY4Y2YwYTVjOTlmZjM1ZTFlMGU4MzJjOGYwZGVjZTVhMzVkMTUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5p
ZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJB
bmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uUGxh
eWJhY2tFdmVudCA6IEV2ZW50IHsKICAgICBjb25zdHJ1Y3RvcihET01TdHJpbmcgdHlwZSwgb3B0
aW9uYWwgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgZXZlbnRJbml0RGljdCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0
LmlkbAppbmRleCA4ODcxMmQ5MmYyZTI3MDcwZTgyMWRiNDdmMzYzYjE3OWVjYjc0YTFjLi43YWEx
YmJhY2NjODE4NDk1MTNlMzE5MGJmYzQzMjQxYmIyNjA3Y2NhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwKQEAg
LTIzLDkgKzIzLDcgQEAKICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotWwotICAgIEVuYWJsZWRBdFJ1
bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBkaWN0aW9uYXJ5IEFuaW1hdGlvblBsYXliYWNrRXZlbnRJ
bml0IDogRXZlbnRJbml0IHsKK2RpY3Rpb25hcnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQg
OiBFdmVudEluaXQgewogICAgIGRvdWJsZT8gY3VycmVudFRpbWUgPSBudWxsOwogICAgIGRvdWJs
ZT8gdGltZWxpbmVUaW1lID0gbnVsbDsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmlkbAppbmRleCAwNGZhOTU5ZGI1ZDU1YTY1MzViNGI5YmRiMmZk
ZGVmNjFjZTM5ZDU1Li5kNWJlZjEwZTlmOTUyMTQzZWZjODVhNDdhYjUxNjlhOWQ0MjA2Yzk1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKQEAg
LTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRp
b25zLAogICAgIEV4cG9ydE1hY3JvPVdFQkNPUkVfRVhQT1JULAogICAgIEN1c3RvbVRvSlNPYmpl
Y3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvblRpbWVsaW5lIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9DU1NBbmltYXRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbi5pZGwKaW5kZXggMWU1Yjg4NGE5YTY3Y2E1MjkxNzZlMzllZjY4Mjk1
YWY4ZjYxNWNiNC4uYmEzZTYyYTU0MGVmZjdjOTZmOWJlOTZiOTg0YTcxY2RiOWE3ZWE2MyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGwKKysrIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGwKQEAgLTI2LDcgKzI2LDYg
QEAKIHR5cGVkZWYgVVNWU3RyaW5nIENTU09NU3RyaW5nOwogCiBbCi0gICAgRW5hYmxlZEF0UnVu
dGltZT1XZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24sCiAgICAgRXhwb3NlZD1XaW5kb3cKIF0g
aW50ZXJmYWNlIENTU0FuaW1hdGlvbiA6IFdlYkFuaW1hdGlvbiB7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIENTU09NU3RyaW5nIGFuaW1hdGlvbk5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43ODE1YWEwZDA5
ZDFhMmNjYjljYjkzODdhYzI2ZTA5ZjdkZTI2ZmE1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApAQCAtMCwwICsxLDE4
NzAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDksIDIwMTMsIDIwMTYg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLCAy
MDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoK
KyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgi
QXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUg
dXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20g
dGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4g
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkg
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCisKKyNpbmNsdWRlICJD
U1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKKyNpbmNsdWRlICJDU1NDcm9zc2ZhZGVWYWx1
ZS5oIgorI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5oIgorI2luY2x1ZGUg
IkNTU1ByaW1pdGl2ZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dC5oIgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKKyNpbmNsdWRlICJDYWNoZWRJbWFn
ZS5oIgorI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKKyNpbmNsdWRlICJDbGlwUGF0aE9w
ZXJhdGlvbi5oIgorI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKKyNpbmNsdWRlICJGbG9hdENv
bnZlcnNpb24uaCIKKyNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgorI2luY2x1ZGUgIkZvbnRTZWxl
Y3Rpb25BbGdvcml0aG0uaCIKKyNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGluZ3MuaCIKKyNpbmNs
dWRlICJHYXBMZW5ndGguaCIKKyNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9ybU9wZXJhdGlvbi5o
IgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNYXRyaXgzRFRyYW5zZm9ybU9wZXJh
dGlvbi5oIgorI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5oIgorI2luY2x1ZGUg
IlJlbmRlckJveC5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCisjaW5jbHVkZSAiU3R5bGVD
YWNoZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2UuaCIKKyNpbmNsdWRl
ICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCisjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgor
I2luY2x1ZGUgPGFsZ29yaXRobT4KKyNpbmNsdWRlIDxtZW1vcnk+CisjaW5jbHVkZSA8d3RmL01h
dGhFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBhcmlzb24uaD4KKyNp
bmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1RleHRTdHJlYW0u
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIGludCBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9tLCBpbnQgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKK30K
Kworc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7Cisg
ICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
ZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBmbG9hdCBm
cm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBuYXJyb3dQcmVj
aXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsKK30KKworc3RhdGlj
IGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sK
KyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKK30KKworc3RhdGljIGlubGlu
ZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25z
dCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAg
ICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBH
YXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25z
dCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
K3sKKyAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05vcm1hbCgpKSA/IHRvIDog
YmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNzKTsKK30KKworc3RhdGlj
IGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBMZW5ndGhTaXplJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiB7IGJsZW5kRnVuYyhhbmltLCBmcm9tLndp
ZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJvbS5oZWlnaHQsIHRv
LmhlaWdodCwgcHJvZ3Jlc3MpIH07Cit9CisKK3N0YXRpYyBpbmxpbmUgU2hhZG93U3R5bGUgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFNoYWRvd1N0eWxl
IGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20g
PT0gdG8pCisgICAgICAgIHJldHVybiB0bzsKKworICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9
PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7CisgICAgZG91YmxlIHRvVmFsID0gdG8gPT0g
U2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOworICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1
bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4g
MCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7Cit9CisKK3N0YXRp
YyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dEYXRhKiBmcm9tLCBjb25z
dCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEFTU0VSVChmcm9tICYm
IHRvKTsKKyAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUoKSkKKyAgICAgICAgcmV0
dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKKworICAgIHJldHVybiBtYWtlVW5pcXVl
PFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5sb2NhdGlvbigpLCBwcm9n
cmVzcyksCisgICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFkaXVzKCksIHByb2dy
ZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5zcHJlYWQoKSwgcHJvZ3Jl
c3MpLAorICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUoKSwgdG8tPnN0eWxlKCks
IHByb2dyZXNzKSwKKyAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFkb3coKSwKKyAgICAgICAg
YmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNzKSk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiBmcm9t
LCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAg
IGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKQorICAgICAgICBy
ZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBwcm9ncmVzcyk7CisgICAg
cmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJvbSwgcHJvZ3Jlc3Ms
IGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25jYXN0PFJlbmRlckJv
eD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNpemUoKSA6IExheW91
dFNpemUoKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENsaXBQYXRoT3BlcmF0
aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAg
ICBpZiAoIWZyb20gfHwgIXRvKQorICAgICAgICByZXR1cm4gdG87CisKKyAgICAvLyBPdGhlciBj
bGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBub3QgYmUgYW5pbWF0ZWQu
CisgICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUgfHwgdG8t
PnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCisgICAgICAgIHJldHVybiB0bzsK
KworICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYg
dG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCp0bykuYmFzaWNTaGFw
ZSgpOworCisgICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFwZSkpCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0aW9uOjpjcmVhdGUodG9T
aGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sK
KyAgICBpZiAoIWZyb20gfHwgIXRvKQorICAgICAgICByZXR1cm4gdG87CisKKyAgICBpZiAoZnJv
bS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRvLT50eXBlKCkgIT0gU2hh
cGVWYWx1ZTo6VHlwZTo6U2hhcGUpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChmcm9t
LT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIGNv
bnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgpOworICAgIGNvbnN0IEJh
c2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5j
YW5CbGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBl
VmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpLCB0by0+Y3Nz
Qm94KCkpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsdGVyT3BlcmF0aW9uKiBm
cm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNzLCBib29sIGJsZW5k
VG9QYXNzdGhyb3VnaCA9IGZhbHNlKQoreworICAgIEFTU0VSVCh0b09wKTsKKyAgICByZXR1cm4g
dG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJvdWdoKTsKK30KKwor
c3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3QgRmlsdGVyT3BlcmF0aW9u
cyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sK
KyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKyAgICBzaXplX3QgZnJvbVNpemUgPSBmcm9t
Lm9wZXJhdGlvbnMoKS5zaXplKCk7CisgICAgc2l6ZV90IHRvU2l6ZSA9IHRvLm9wZXJhdGlvbnMo
KS5zaXplKCk7CisgICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9tU2l6ZSwgdG9TaXplKTsK
KyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZyb20ub3BlcmF0aW9u
cygpW2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gdG9PcCA9
IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7CisgICAgICAgIFJl
ZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVuZEZ1bmMoYW5pbSwg
ZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9wID8gYmxlbmRGdW5j
KGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDogMCk7CisgICAgICAgIGlm
IChibGVuZGVkT3ApCisgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChibGVu
ZGVkT3ApOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGF1dG8gaWRlbnRpdHlPcCA9IFBh
c3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGlmIChwcm9n
cmVzcyA+IDAuNSkKKyAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZCh0
b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21PcCA/IGZyb21PcCA6
IFdURk1vdmUoaWRlbnRpdHlPcCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcywgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCit7CisgICAgRmlsdGVyT3Bl
cmF0aW9ucyByZXN1bHQ7CisKKyAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVyIGZ1bmN0aW9uIGxp
c3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlvbi4KKyAgICAKKyAgICBi
b29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKKyAgICBzd2l0Y2ggKHByb3BlcnR5SUQpIHsKKyAgICBj
YXNlIENTU1Byb3BlcnR5RmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+ZmlsdGVy
RnVuY3Rpb25MaXN0c01hdGNoKCk7CisgICAgICAgIGJyZWFrOworI2lmIEVOQUJMRShGSUxURVJT
X0xFVkVMXzIpCisgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyOgorICAg
ICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2go
KTsKKyAgICAgICAgYnJlYWs7CisjZW5kaWYKKyAgICBjYXNlIENTU1Byb3BlcnR5QXBwbGVDb2xv
ckZpbHRlcjoKKyAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9yRmlsdGVyRnVuY3Rpb25M
aXN0c01hdGNoKCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICAKKyAgICBpZiAobGlzdHNNYXRjaCkKKyAgICAgICAgcmVzdWx0ID0gYmxl
bmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisgICAgZWxzZSB7
CisgICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMgZG9uJ3QgbWF0Y2gsIHdl
IGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhhdmUgYSB3YXkgdG8gcmVw
cmVzZW50IHRoYXQgaW4gQ1NTLgorICAgICAgICAvLyBGb3Igbm93IHdlJ2xsIGp1c3QgZmFpbCB0
byBhbmltYXRlLgorICAgICAgICByZXN1bHQgPSB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZpbHRlcihj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNoZWRJbWFnZSogaW1hZ2Us
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKGltYWdlKTsKKyAgICBGaWx0ZXJPcGVy
YXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmltLCBmcm9tLCB0
bywgcHJvZ3Jlc3MpOworCisgICAgYXV0byBpbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3Jl
YXRlKCppbWFnZSk7CisgICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1dGVkU3R5bGVFeHRyYWN0
b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBmaWx0ZXJSZXN1bHQsIERv
Tm90QWRqdXN0UGl4ZWxWYWx1ZXMpOworCisgICAgYXV0byByZXN1bHQgPSBDU1NGaWx0ZXJJbWFn
ZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92ZShmaWx0ZXJWYWx1ZSkp
OworICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZpbHRlclJlc3VsdCk7Cisg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKHJlc3VsdCkpOwor
fQorCitzdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJpbGl0eSB0bywgZG91
YmxlIHByb2dyZXNzKQoreworICAgIC8vIEFueSBub24temVybyByZXN1bHQgbWVhbnMgd2UgY29u
c2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8gd2UgY29uc2lkZXIg
dGhlIG9iamVjdCB0byBiZQorICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlzaWJsZSB2YWx1ZSB3
ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29sbGFwc2UpIGRlcGVu
ZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KKyAgICBkb3VibGUgZnJvbVZhbCA9
IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47CisgICAgZG91YmxlIHRvVmFs
ID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47CisgICAgaWYgKGZyb21WYWwg
PT0gdG9WYWwpCisgICAgICAgIHJldHVybiB0bzsKKyAgICBkb3VibGUgcmVzdWx0ID0gYmxlbmRG
dW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7CisgICAgcmV0dXJuIHJlc3VsdCA+
IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
dG8gOiBmcm9tKTsKK30KKworc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5lT2Zmc2V0IGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBUZXh0VW5k
ZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiB0bywgZG91Ymxl
IHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNMZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhMZW5ndGgoYmxl
bmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jl
c3MpKTsKKyAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0aEF1dG8oKTsK
K30KKworc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgVGV4dERlY29yYXRpb25U
aGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiB0bywgZG91Ymxl
IHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8uaXNMZW5ndGgoKSkK
KyAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVXaXRoTGVuZ3Ro
KGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0aFZhbHVlKCksIHBy
b2dyZXNzKSk7CisgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVhdGVXaXRo
QXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoQm94JiBmcm9tLCBjb25z
dCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgTGVuZ3RoQm94IHJlc3Vs
dChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dyZXNzKSwKKyAgICAg
ICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0KCksIHRvLnJpZ2h0KCks
IHByb2dyZXNzKSwKKyAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmJv
dHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxl
bmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dyZXNzKSk7CisgICAgcmV0
dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBTVkdMZW5ndGhWYWx1ZSBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiBm
cm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBy
ZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHByb2dyZXNzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmVjdG9yPFNWR0xlbmd0aFZhbHVl
PiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFZlY3Rv
cjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgc2l6ZV90IGZyb21MZW5ndGggPSBmcm9tLnNpemUo
KTsKKyAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7CisgICAgaWYgKCFmcm9tTGVuZ3Ro
KQorICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOworICAgIGlmICghdG9MZW5n
dGgpCisgICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6IHRvOworICAgIHNpemVf
dCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOworICAgIGlmIChmcm9tTGVuZ3RoICE9IHRvTGVu
Z3RoKSB7CisgICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVu
Z3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKKyAgICAgICAgICAgIHJlc3Vs
dExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsKKyAgICAgICAgZWxzZQor
ICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRvTGVuZ3RoOworICAgIH0K
KyAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRMZW5ndGgpOworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCisgICAgICAgIHJlc3VsdFtp
XSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVuZ3RoXSwgdG9baSAlIHRv
TGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGNyb3NzZmFkZUJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNhY2hlZEltYWdlKiBm
cm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdlLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9mIHRoZSBleHRyZW1lcywg
d2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdlLAorICAgIC8vIG5vdCBh
IGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25lIG9mIHRoZSBleGlzdGlu
ZyBpbWFnZXMuCisgICAgaWYgKCFwcm9ncmVzcykKKyAgICAgICAgcmV0dXJuIGZyb21TdHlsZUlt
YWdlOworICAgIGlmIChwcm9ncmVzcyA9PSAxKQorICAgICAgICByZXR1cm4gdG9TdHlsZUltYWdl
OworICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgfHwgIXRvU3R5bGVJbWFn
ZS0+Y2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRvU3R5bGVJbWFnZTsKKworICAgIGF1
dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmZyb21TdHlsZUltYWdl
LT5jYWNoZWRJbWFnZSgpKTsKKyAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKKyAgICBhdXRvIHBlcmNlbnRh
Z2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3MsIENTU1VuaXRUeXBl
OjpDU1NfTlVNQkVSKTsKKworICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUgPSBDU1NDcm9zc2ZhZGVW
YWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZNb3ZlKHRvSW1hZ2VWYWx1
ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7CisgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVk
SW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdlKiB0bywgZG91YmxlIHBy
b2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJldHVybiB0bzsKKwor
ICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7CisgICAgdG8gPSB0by0+c2VsZWN0ZWRJ
bWFnZSgpOworCisgICAgaWYgKCFmcm9tIHx8ICF0bykKKyAgICAgICAgcmV0dXJuIHRvOyAgICAK
KworICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQgaW1hZ2VzLiBDcm9zcyBm
YWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCisgICAgaWYgKGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAgICAgIENTU0lt
YWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRl
ZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZh
bHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykuaW1h
Z2VWYWx1ZSgpOworCisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2Vu
ZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAg
ICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1c3QgcG9zc2libGUgaWYg
aW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KKyAgICAgICAgICAgIC8vIE90aGVyd2lzZSBmYWxsIGJh
Y2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZh
bHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVy
YXRlZCk7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25j
YXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIGlmIChm
cm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZyb21GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0Nyb3NzZmFk
ZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiBm
cm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQp
OworICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRlID0gZG93bmNhc3Q8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIGlmIChmcm9tQ3Jv
c3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7CisgICAgICAgICAgICAgICAg
aWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVuZChmcm9tQ3Jvc3NmYWRl
LCBwcm9ncmVzcykpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZElt
YWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW9uIGJldHdlZW4gdHdv
ICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KKyAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgorICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVHZW5lcmF0
ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykpIHsKKyAgICAgICAg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgQ1NTRmlsdGVySW1h
Z2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21H
ZW5lcmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiBk
b3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdlKCkgPT0gZnJvbUZpbHRl
ci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmlt
LCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygp
LCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBG
SVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRlIGFuZCBpbWFnZSBzb3Vy
Y2UuCisgICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVl
JiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykuaW1hZ2VW
YWx1ZSgpOworICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQp
KSB7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRlciA9IGRvd25jYXN0
PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIGlmICh0b0Zp
bHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKS5j
YWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZEltYWdlKCksIEZpbHRlck9w
ZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7CisgICAg
ICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gaW1hZ2Ug
c291cmNlIGFuZCBjcm9zcy1mYWRlLgorICAgIH0KKworICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9y
dCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQgaW1hZ2VzLgorICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI5MworICAgIGlmIChp
czxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKSkK
KyAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25jYXN0PFN0eWxlQ2FjaGVk
SW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0byksIHByb2dyZXNzKTsK
KworICAgIHJldHVybiB0bzsKK30KKworc3RhdGljIGlubGluZSBOaW5lUGllY2VJbWFnZSBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTmluZVBp
ZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywgZG91YmxlIHByb2dyZXNz
KQoreworICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFnZSgpKQorICAgICAg
ICByZXR1cm4gdG87CisKKyAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBwb3J0IHRyYW5zaXRpb25p
bmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkgbW9yZSB0aGFuIGltYWdl
IGNvbnRlbnQuCisKKyAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9IHRvLmltYWdlU2xpY2Vz
KCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGljZXMoKSB8fCBmcm9tLm91
dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRvLmZpbGwoKSB8fCBmcm9t
Lmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8fCBmcm9tLnZlcnRpY2Fs
UnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQorICAgICAgICByZXR1cm4gdG87CisKKyAgICBp
ZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7CisgICAgICAgIGlmIChmcm9t
LmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5pbWFnZSgpLT5pbWFnZVNp
emUocmVuZGVyZXIsIDEuMCkpCisgICAgICAgICAgICByZXR1cm4gdG87CisgICAgfQorCisgICAg
cmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9tLmltYWdlKCksIHRvLmlt
YWdlKCksIHByb2dyZXNzKSwKKyAgICAgICAgZnJvbS5pbWFnZVNsaWNlcygpLCBmcm9tLmZpbGwo
KSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJvbS5ob3Jpem9udGFsUnVs
ZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKK30KKworI2lmIEVOQUJMRShWQVJJQVRJT05fRk9O
VFMpCisKK3N0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBGb250VmFyaWF0aW9uU2V0
dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgpKQorICAgICAgICByZXR1
cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgRm9udFZhcmlhdGlvblNldHRpbmdzIHJl
c3VsdDsKKyAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IHNpemU7ICsraSkgeworICAgICAgICBhdXRvJiBmcm9tSXRlbSA9IGZyb20u
YXQoaSk7CisgICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOworICAgICAgICBpZiAoZnJv
bUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQorICAgICAgICAgICAgcmV0dXJuIEZvbnRWYXJp
YXRpb25TZXR0aW5ncygpOworICAgICAgICBmbG9hdCBpbnRlcnBvbGF0ZWQgPSBibGVuZEZ1bmMo
YW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHByb2dyZXNzKTsKKyAgICAg
ICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBvbGF0ZWQgfSk7CisgICAg
fQorICAgIHJldHVybiByZXN1bHQ7Cit9CisKKyNlbmRpZgorCitzdGF0aWMgaW5saW5lIEZvbnRT
ZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25WYWx1ZSB0bywgZG91
YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5j
KGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvKSwg
cHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFs
dWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBPcHRp
b25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1
ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVl
KGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1ZSgpKSwgc3RhdGlj
X2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOworfQorCitjbGFzcyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3Bl
cnR5SUQgcHJvcCkKKyAgICAgICAgOiBtX3Byb3AocHJvcCkKKyAgICB7CisgICAgfQorICAgIHZp
cnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1bHQ7CisKKyAgICB2
aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0K
KyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgYm9vbCBjYW5JbnRlcnBvbGF0ZShj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3QgeyByZXR1cm4gdHJ1
ZTsgfQorICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxl
KiwgZG91YmxlKSBjb25zdCA9IDA7CisgICAgCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZpcnR1
YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29uc3QgPSAwOworI2VuZGlm
CisKKyAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wOyB9
CisKKyAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIGZhbHNlOyB9CisKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3A7Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1
YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAo
YSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIp
KCkgPT0gKGItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyAgICBUIHZhbHVlKGNvbnN0IFJlbmRl
clN0eWxlKiBhKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCk7
CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVz
dWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVy
dHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2
YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2Vu
ZGlmCisKK3Byb3RlY3RlZDoKKyAgICBUIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0
OworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXIgOiBw
dWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBU
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKFQpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihwcm9wLCBnZXR0ZXIp
CisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBk
c3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgp
LCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlciko
VCk7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKKyAgICAgICAgOiBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKworcHJvdGVjdGVk
OgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0cjxUPiYmKTsKK307CisK
K2NsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IExl
bmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoTGVuZ3RoJiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJl
dHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVy
KSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgm
Pjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFu
aW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlciko
KSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgp
LCBwcm9ncmVzcykpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgKFJlbmRlclN0eWxl
OjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xh
c3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgVCY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgY29u
c3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoVCYmKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+
KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
UmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0
LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBU
Jj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZv
aWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Cit9OworCitjbGFzcyBQcm9wZXJ0eVdy
YXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRo
T3BlcmF0aW9uPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9wLCBDbGlwUGF0aE9wZXJh
dGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKKyAgICAgICAgOiBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9wLCBnZXR0ZXIsIHNldHRl
cikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgLy8g
SWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRo
ZSB0ZXN0LgorICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBi
b3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQYXRoQSA9IChhLT4q
bV9nZXR0ZXIpKCk7CisgICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlwUGF0aEIgPSAoYi0+
Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNsaXBQYXRoQikKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWNsaXBQYXRoQSB8fCAhY2xpcFBhdGhC
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gKmNsaXBQYXRoQSA9
PSAqY2xpcFBhdGhCOworICAgIH0KK307CisKKyNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQor
Y2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzIDogcHVibGljIFByb3Bl
cnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGlu
Z3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGluZ3MgKFJlbmRlclN0eWxl
OjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoRm9udFZhcmlh
dGlvblNldHRpbmdzKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZhcmlhdGlvblNl
dHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUg
c2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgorICAgICAgICAvLyBJZiBlaXRoZXIg
aXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KKyAg
ICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgY29uc3QgRm9u
dFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNldHRpbmdz
QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJldHVybiB2YXJpYXRpb25TZXR0aW5nc0Eg
PT0gdmFyaWF0aW9uU2V0dGluZ3NCOworICAgIH0KK307CisjZW5kaWYKKworY2xhc3MgUHJvcGVy
dHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFwZVZh
bHVlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVy
dHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVlKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8
U2hhcGVWYWx1ZT4mJikpCisgICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTaGFw
ZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUg
c2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgorICAgICAgICAvLyBJZiBlaXRoZXIg
aXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KKyAg
ICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU2hhcGVWYWx1
ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU2hhcGVWYWx1ZSogc2hhcGVC
ID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKHNoYXBlQSA9PSBzaGFwZUIpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFzaGFwZUEgfHwgIXNoYXBlQikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuICpzaGFwZUEgPT0gKnNoYXBl
QjsKKyAgICB9Cit9OworCitjbGFzcyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIDogcHVibGlj
IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCisg
ICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wLCBnZXR0
ZXIsIHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgU3R5bGVJbWFn
ZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VC
ID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERh
dGEoaW1hZ2VBLCBpbWFnZUIpOworICAgIH0KK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNv
bG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+IHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDb2xv
cihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQorICAg
ICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHByb3AsIGdldHRlcikK
KyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJs
ZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+Ojpt
X2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3ImPjo6bV9n
ZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVu
ZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKK307CisKK2NsYXNzIFByb3BlcnR5
V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdy
YXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZSZW5kZXJTdHls
ZTo6c2V0T3BhY2l0eSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhbmltYXRpb25Jc0FjY2Vs
ZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGRzdC0+c2V0T3BhY2l0eShibGVu
ZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dyZXNzKSk7CisgICAg
fQorfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0gOiBwdWJs
aWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyQWNjZWxl
cmF0ZWRUcmFuc2Zvcm0oKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zv
cm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6dHJhbnNm
b3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGRz
dC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0oKSwgYi0+dHJhbnNm
b3JtKCksIHByb2dyZXNzKSk7CisgICAgfQorfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyRmls
dGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
ckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwgc2V0dGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NTUHJvcGVydHlGaWx0
ZXIKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICAgICAgfHwgcHJvcGVydHko
KSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCisjZW5kaWYKKyAgICAgICAgICAg
IDsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlcikoKSwgKGItPipQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlcikoKSwg
cHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKKyAgICB9Cit9OworCitzdGF0aWMgaW5saW5lIHNpemVf
dCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKK3sKKyAgICBzaXpl
X3QgY291bnQ7CisgICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93ID0gc2hhZG93LT5u
ZXh0KCkpCisgICAgICAgICsrY291bnQ7CisgICAgcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMg
aW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNvbnN0IFNoYWRvd0Rh
dGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cpCit7CisgICAgc3Rh
dGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dEYXRhKExheW91dFBv
aW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJ
bnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Okluc2V0LCBm
YWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJbnNldFdlYktp
dEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Okluc2V0LCB0
cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7CisKKyAgICBpZiAoc3JjU2hhZG93KQorICAg
ICAgICByZXR1cm4gc3JjU2hhZG93OworCisgICAgaWYgKG90aGVyU2hhZG93LT5zdHlsZSgpID09
IFNoYWRvd1N0eWxlOjpJbnNldCkKKyAgICAgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtp
dEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEuZ2V0KCkgOiAm
ZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKKworICAgIHJldHVybiBvdGhlclNoYWRvdy0+
aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6
ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKK30KKworY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hh
ZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQ
cm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6KmdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFk
b3dEYXRhPiwgYm9vbCkpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFi
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEq
IHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAodHJ1ZSkgeworICAg
ICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKKyAgICAgICAgICAgIGlmICghc2hhZG93QSAm
JiAhc2hhZG93QikKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAg
Ly8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cworICAgICAgICAgICAgaWYgKCFzaGFkb3dB
IHx8ICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKKyAgICAgICAgICAg
IHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisg
ICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dBKTsKKyAgICAg
ICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsKKworICAgICAgICBp
ZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAxICYmIHRvTGVuZ3Ro
IDw9IDEpKSB7CisgICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kU2ltcGxlT3JNYXRj
aGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IpLCBmYWxzZSk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICAoZHN0LT4qbV9zZXR0
ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFkb3dBLCBz
aGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKKyAgICB9CisKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZp
bmFsCisgICAgeworICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCisgICAgICAgIExP
R19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgU2hhZG93RGF0
YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9n
cmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKKyAgICB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOworICAgICAgICBT
aGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKKworICAgICAgICB3aGlsZSAoc2hhZG93QSB8fCBz
aGFkb3dCKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFk
b3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKKyAgICAgICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNoYWRvd0EpOwor
CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9
IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOworICAgICAg
ICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFkb3cuZ2V0KCk7
CisKKyAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKKyAgICAgICAgICAgICAgICBuZXdTaGFk
b3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRlZFNoYWRvdykpOwor
CisgICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsKKworICAgICAgICAg
ICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOworICAgICAgICAgICAg
c2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOworICAgICAgICB9CisKKyAg
ICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7CisgICAgfQorCisgICAgc3RkOjp1bmlxdWVfcHRy
PFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hhZG93RGF0YSog
c2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21MZW5ndGgsIGludCB0
b0xlbmd0aCkgY29uc3QKKyAgICB7CisgICAgICAgIC8vIFRoZSBzaGFkb3dzIGluIFNoYWRvd0Rh
dGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1hdGluZyBtaXNtYXRj
aGVkIGxpc3RzLAorICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNoIGZyb20gdGhlIGVu
ZC4KKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9tU2hhZG93cyhmcm9t
TGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOworICAgICAgICAgICAg
c2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIFZlY3Rvcjxj
b25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKKyAgICAgICAgZm9yIChp
bnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIHRvU2hhZG93
c1tpXSA9IHNoYWRvd0I7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93Qi0+bmV4dCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5ld1NoYWRv
d0RhdGE7CisKKyAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRv
TGVuZ3RoKTsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkgPCBmcm9tTGVuZ3Ro
ID8gZnJvbVNoYWRvd3NbaV0gOiAwOworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogdG9T
aGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOworCisgICAgICAgICAgICBj
b25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhmcm9tU2hhZG93
LCB0b1NoYWRvdyk7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBkc3RTaGFkb3cgPSBz
aGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7CisKKyAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0s
IHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICAvLyBJbnNlcnQg
YXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRlci4KKyAgICAgICAg
ICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dEYXRhKSk7CisgICAg
ICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKKyAgICAgICAg
fQorCisgICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOworICAgIH0KKworICAgIGNvbnN0IFNo
YWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJl
bmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiwgYm9vbCk7
Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6IHB1YmxpYyBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9w
ZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3Qs
IHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQorICAgICAgICA6IEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAgICAgLCBtX2dldHRlcihnZXR0
ZXIpCisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKKyAgICAgICAgQ29sb3IgdG9D
b2xvciA9IHZhbHVlKGIpOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAh
dG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xv
cigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xv
ciA9IGItPmNvbG9yKCk7CisKKyAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOwor
ICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9IHZh
bHVlKGIpOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5p
c1ZhbGlkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKCFmcm9tQ29sb3Iu
aXNWYWxpZCgpKQorICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAgICAgICAg
aWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigp
OworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tQ29sb3IsIHRv
Q29sb3IsIHByb2dyZXNzKSk7CisgICAgfQorCisgICAgQ29sb3IgdmFsdWUoY29uc3QgUmVuZGVy
U3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsK
KyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1
bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBiZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRl
eHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAt
PiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIGNv
bnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworCitlbnVtIE1heWJl
SW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKK2NsYXNzIFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6Oip2aXNp
dGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRTZXR0ZXIpKGNv
bnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9w
KQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihw
cm9wLCBnZXR0ZXIsIHNldHRlcikpCisgICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5p
cXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0
dGVyKSkKKyAgICB7CisgICAgfQorICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENv
bG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlkQ29sb3JUYWcsIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShjb25zdCBDb2xvciYpLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBD
b2xvciYpKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAg
ICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQorICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIo
bWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRl
ZEdldHRlciwgdmlzaXRlZFNldHRlcikpCisgICAgeworICAgIH0KKyAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICByZXR1cm4gbV93cmFwcGVyLT5lcXVhbHMoYSwgYikgJiYgbV92aXNp
dGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOworICAgIH0KKyAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgbV93cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEs
IGIsIHByb2dyZXNzKTsKKyAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0
LCBhLCBiLCBwcm9ncmVzcyk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQg
bG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25z
dCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAg
eworICAgICAgICBtX3dyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwor
ICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dCbGVuZChhLCBiLCByZXN1bHQsIHByb2dyZXNz
KTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93cmFwcGVyOworICAgIHN0ZDo6dW5pcXVlX3B0cjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3Zpc2l0ZWRXcmFwcGVyOworfTsKKworLy8g
V3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBhbmltYXRhYmxlIHByb3BlcnR5IGluIGEgRmlsbExh
eWVyCitjbGFzcyBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCisgICAgICAgIDogbV9w
cm9wZXJ0eShwcm9wZXJ0eSkKKyAgICB7CisgICAgfQorICAgIHZpcnR1YWwgfkZpbGxMYXllckFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1bHQ7CisKKyAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eTsgfQorCisgICAgdmlydHVh
bCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9
IDA7CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3Vi
bGUpIGNvbnN0ID0gMDsKKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIHZvaWQgbG9n
QmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZp
bGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworI2VuZGlmCitwcml2YXRlOgorICAgIENTU1By
b3BlcnR5SUQgbV9wcm9wZXJ0eTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEZpbGxMYXllckFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcik7Citw
dWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIFQgKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCkKKyAgICAgICAgOiBGaWxs
TGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAgICAgICAsIG1f
Z2V0dGVyKGdldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmls
bExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIChhLT4q
bV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyAgICBUIHZhbHVlKGNv
bnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gKGxheWVy
LT4qbV9nZXR0ZXIpKCk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3Qg
RmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIg
PDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8
ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoKKyAgICBUIChGaWxsTGF5ZXI6OiptX2dldHRl
cikoKSBjb25zdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBUJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEZp
bGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBUJiAo
RmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQp
KQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJv
cGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0K
KworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
RmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9z
ZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKworI2lmICFM
T0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBj
b25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMs
IHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAgPDwg
IiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFs
dWUoYSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRT
dHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAi
IDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3Vs
dCkpOworICAgIH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoq
bV9zZXR0ZXIpKFQpOworfTsKKworY2xhc3MgRmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBw
ZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQ
b3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBMZW5n
dGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6
Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRnZSAoRmlsbExheWVyOjoqb3JpZ2luR2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipvcmlnaW5TZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVk
Z2UpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0
aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIpCisgICAgICAgICwgbV9sZW5ndGhTZXR0ZXIobGVu
Z3RoU2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luR2V0dGVyKG9yaWdpbkdldHRlcikKKyAgICAg
ICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5TZXR0ZXIpCisgICAgICAgICwgbV9mYXJFZGdlKGZh
ckVkZ2UpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGgg
PSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCk7CisgICAgICAgIExlbmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisg
ICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBF
ZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBy
ZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCAmJiBmcm9tRWRnZSA9PSB0b0VkZ2U7CisgICAg
fQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExlbmd0aCBm
cm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVu
Z3RoJj46Om1fZ2V0dGVyKSgpOworICAgICAgICBMZW5ndGggdG9MZW5ndGggPSAoYi0+KkZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Cisg
ICAgICAgIAorICAgICAgICBFZGdlIGZyb21FZGdlID0gKGEtPiptX29yaWdpbkdldHRlcikoKTsK
KyAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICAK
KyAgICAgICAgaWYgKGZyb21FZGdlICE9IHRvRWRnZSkgeworICAgICAgICAgICAgLy8gQ29udmVy
dCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBjYWxjIGV4cHJlc3Npb24sCisgICAgICAgICAgICBp
ZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQorICAgICAgICAgICAgICAgIGZyb21MZW5ndGggPSBj
b252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgoZnJvbUxlbmd0aCk7CisgICAgICAgICAgICBl
bHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdlKSB7CisgICAgICAgICAgICAgICAgdG9MZW5ndGgg
PSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgodG9MZW5ndGgpOworICAgICAgICAgICAg
ICAgIChkc3QtPiptX29yaWdpblNldHRlcikoZnJvbUVkZ2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNh
bGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZlIHRvIHRoZSBsZWZ0L3RvcCBlZGdlLgorICAgICAg
ICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgKGRzdC0+Km1fbGVuZ3RoU2V0dGVyKShibGVu
ZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9MZW5ndGgsIHByb2dyZXNzKSk7CisgICAgfQorCisj
aWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5
KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0
ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNz
KSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX2xlbmd0aFNldHRlcikoTGVuZ3RoKTsKKyAgICBF
ZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChGaWxs
TGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRnZSk7CisgICAgRWRnZSBtX2ZhckVkZ2U7Cit9Owor
Cit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUmVmQ291
bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUKiAoRmlsbExheWVy
OjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYm
KSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5
LCBnZXR0ZXIpCisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxM
YXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+
OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpt
X2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
dm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBh
LCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxl
bmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQqPjo6cHJvcGVydHkoKSkKKyAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKGEpCisgICAgICAgICAgICA8PCAiIHRvICIg
PDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUoYikKKyAgICAgICAg
ICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VCo+Ojp2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShSZWZQdHI8VD4mJik7Cit9OworCitjbGFzcyBGaWxs
TGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJbWFnZSogKEZpbGxMYXllcjo6KmdldHRlcikoKSBj
b25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCisg
ICAgICAgIDogRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihw
cm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxz
KGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAg
ICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAg
U3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgU3R5bGVJbWFn
ZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5n
VG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQK
KyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5
ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8
PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZh
bHVlKHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorfTsKKworY2xhc3MgRmlsbExheWVyc1Byb3Bl
cnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIGNvbnN0IEZpbGxM
YXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0dGVyKSgpIGNvbnN0OworICAgIHR5cGVkZWYg
RmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNBY2Nlc3NvcikoKTsKKworICAgIEZpbGxM
YXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgTGF5ZXJzR2V0dGVy
IGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNzb3IpCisgICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKKyAgICAgICAgLCBtX2xheWVyc0dldHRlcihnZXR0
ZXIpCisgICAgICAgICwgbV9sYXllcnNBY2Nlc3NvcihhY2Nlc3NvcikKKyAgICB7CisgICAgICAg
IHN3aXRjaCAocHJvcGVydHkpIHsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQ
b3NpdGlvblg6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YOgor
ICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxM
YXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6eFBvc2l0
aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZGaWxsTGF5ZXI6OmJhY2tncm91bmRYT3Jp
Z2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWE9yaWdpbiwgRWRnZTo6UmlnaHQpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b25ZOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWToKKyAgICAg
ICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQ
b3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwg
JkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExheWVyOjpiYWNrZ3JvdW5kWU9yaWdpbiwg
JkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmlnaW4sIEVkZ2U6OkJvdHRvbSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplOgorICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKKyAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6
ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXplTGVuZ3RoLCAmRmlsbExheWVyOjpzZXRTaXpl
TGVuZ3RoKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFj
a2dyb3VuZEltYWdlOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBt
YWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAm
RmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6c2V0SW1hZ2UpOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgIGF1dG8qIGZyb21MYXllciA9ICYoYS0+Km1fbGF5ZXJz
R2V0dGVyKSgpOworICAgICAgICBhdXRvKiB0b0xheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIp
KCk7CisKKyAgICAgICAgd2hpbGUgKGZyb21MYXllciAmJiB0b0xheWVyKSB7CisgICAgICAgICAg
ICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5lcXVhbHMoZnJvbUxheWVyLCB0b0xh
eWVyKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGZyb21M
YXllciA9IGZyb21MYXllci0+bmV4dCgpOworICAgICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXIt
Pm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVy
U3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBhdXRvKiBhTGF5
ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJihi
LT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIGRzdExheWVyID0gJihkc3QtPipt
X2xheWVyc0FjY2Vzc29yKSgpOworCisgICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYm
IGRzdExheWVyKSB7CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+Ymxl
bmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxheWVyLCBwcm9ncmVzcyk7CisgICAgICAgICAg
ICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKKyAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+
bmV4dCgpOworICAgICAgICAgICAgZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOworICAgICAg
ICB9CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5
bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAg
YXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8q
IGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogZHN0TGF5
ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVyKSgpOworCisgICAgICAgIHdoaWxlIChhTGF5
ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3Bl
cnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIsIGFMYXllciwgYkxheWVyLCBwcm9ncmVzcyk7
CisgICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKKyAgICAgICAgICAgIGJMYXll
ciA9IGJMYXllci0+bmV4dCgpOworICAgICAgICAgICAgZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4
dCgpOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgc3RkOjp1bmlx
dWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fZmlsbExheWVy
UHJvcGVydHlXcmFwcGVyOworCisgICAgTGF5ZXJzR2V0dGVyIG1fbGF5ZXJzR2V0dGVyOworICAg
IExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNzb3I7Cit9OworCitjbGFzcyBTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU2hvcnRoYW5kUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVycykKKyAgICAgICAgOiBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAgICAgICAsIG1fcHJvcGVydHlXcmFwcGVycyhX
VEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGlzU2hv
cnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIGJv
b2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykgewor
ICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMoYSwgYikpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBmb3IgKGF1
dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCisgICAgICAgICAgICB3cmFwcGVyLT5i
bGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBkc3QsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFw
cGVycykKKyAgICAgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3Mp
OworICAgIH0KKyNlbmRpZgorCisgICAgY29uc3QgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygpIGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlX
cmFwcGVyczsgfQorCitwcml2YXRlOgorICAgIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
RmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJGbGV4KCkKKyAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5RmxleCkKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0g
YikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgcmV0dXJuIGEtPmZsZXhCYXNpcygpID09
IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkgPT0gYi0+ZmxleEdyb3coKSAmJiBhLT5m
bGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygpOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBkc3QtPnNldEZsZXhCYXNpcyhibGVu
ZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGItPmZsZXhCYXNpcygpLCBwcm9ncmVzcykpOwor
ICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4R3JvdygpLCBi
LT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOworICAgICAgICBkc3QtPnNldEZsZXhTaHJpbmsoYmxl
bmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwgYi0+ZmxleFNocmluaygpLCBwcm9ncmVzcykp
OworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIg
bG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAi
ICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCit9OworCitjbGFzcyBQcm9wZXJ0
eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsK
KyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBw
ZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3AsIFNWR1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6
OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENvbG9yIChSZW5kZXJTdHlsZTo6KmdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAg
ICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fcGFp
bnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikKKyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIp
CisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSAhPSAoYi0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIC8vIFdlIG9u
bHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZHUGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29s
b3IgdmFsdWVzLgorICAgICAgICAvLyBGb3IgZXZlcnl0aGluZyBlbHNlIHdlIG11c3QgcmV0dXJu
IHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UKKyAgICAgICAgLy8gd2Ugd2lsbCB0cnkg
dG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVyLgorICAgICAgICBpZiAoKGEtPiptX3Bh
aW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKSB7CisgICAgICAgICAg
ICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICAgICAgQ29sb3Ig
dG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgICAgIGlmICghZnJvbUNvbG9y
LmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOworICAgICAgICAgICAgaWYgKCF0b0NvbG9yLmlz
VmFsaWQoKSkKKyAgICAgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKworICAgICAgICAg
ICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOworICAgICAgICB9CisgICAgICAgIHJldHVy
biB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6
OlJHQkNvbG9yCisgICAgICAgICAgICB8fCAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNW
R1BhaW50VHlwZTo6UkdCQ29sb3IpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgQ29s
b3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ29sb3IgdG9Db2xvciA9
IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYm
ICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAo
IWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwor
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgdG9Db2xvciA9IENv
bG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21Db2xv
ciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
dm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCisgICAgICAgIExPR19XSVRIX1NUUkVBTShB
bmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgU1ZHUGFpbnQgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9Cisj
ZW5kaWYKKworcHJpdmF0ZToKKyAgICBTVkdQYWludFR5cGUgKFJlbmRlclN0eWxlOjoqbV9wYWlu
dFR5cGVHZXR0ZXIpKCkgY29uc3Q7CisgICAgQ29sb3IgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIp
KCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3Im
KTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPj4geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSgpCisg
ICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4+KENT
U1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5bGU6OmZvbnRJdGFsaWMsICZSZW5kZXJTdHls
ZTo6c2V0Rm9udEl0YWxpYykKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0
ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIGZyb20tPmZvbnRJdGFsaWMoKSAmJiB0by0+
Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9
PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVB
eGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNv
bnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGF1dG8gZGlzY3JldGUgPSAhY2Fu
SW50ZXJwb2xhdGUoZnJvbSwgdG8pOworCisgICAgICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9
IEZvbnRTdHlsZUF4aXM6OnNsbnQ7CisgICAgICAgIGlmIChkaXNjcmV0ZSkKKyAgICAgICAgICAg
IGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3MgPCAwLjUgPyBmcm9tIDogdG8pLT5mb250RGVz
Y3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7CisKKyAgICAgICAgYXV0byBmcm9tRm9udEl0YWxp
YyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKKyAgICAgICAgYXV0byB0b0ZvbnRJdGFsaWMgPSB0by0+
Zm9udEl0YWxpYygpOworICAgICAgICBhdXRvIGJsZW5kZWRGb250SXRhbGljID0gcHJvZ3Jlc3Mg
PCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0YWxpYzsKKyAgICAgICAgaWYgKCFkaXNj
cmV0ZSkKKyAgICAgICAgICAgIGJsZW5kZWRGb250SXRhbGljID0gYmxlbmRGdW5jKGFuaW0sIGZy
b21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHByb2dyZXNzKTsKKworICAgICAgICBGb250U2Vs
ZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkc3QtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVj
dG9yKCk7CisgICAgICAgIGF1dG8gZGVzY3JpcHRpb24gPSBkc3QtPmZvbnREZXNjcmlwdGlvbigp
OworICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMoYmxlbmRlZEZvbnRJdGFsaWMpOworICAg
ICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlzKGJsZW5kZWRTdHlsZUF4aXMpOworICAg
ICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAg
ICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUoY3VycmVudEZvbnRTZWxlY3Rvcik7CisgICAg
fQorfTsKKworY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgQ1NTUHJvcGVydHlBbmlt
YXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IFRo
aXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJlIHdlIHNob3VsZCByZWYgY291bnQgaXQg
YW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NBbmltYXRpb25Db250cm9sbGVyIGlzIGRlc3Ry
b3llZD8KKyAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPENTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcD4gbWFwOworICAgICAgICByZXR1cm4gbWFwOworICAgIH0KKworICAgIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQpCisgICAgeworICAgICAgICBpZiAocHJvcGVydHlJRCA8IGZpcnN0Q1NTUHJv
cGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQcm9wZXJ0eSkKKyAgICAgICAgICAgIHJldHVy
biBudWxscHRyOworCisgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRleCA9IGluZGV4RnJvbVBy
b3BlcnR5SUQocHJvcGVydHlJRCk7CisgICAgICAgIGlmICh3cmFwcGVySW5kZXggPT0gY0ludmFs
aWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKTsKKyAg
ICB9CisKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyRm9ySW5kZXgo
dW5zaWduZWQgaW5kZXgpCisgICAgeworICAgICAgICBBU1NFUlQoaW5kZXggPCBtX3Byb3BlcnR5
V3JhcHBlcnMuc2l6ZSgpKTsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyc1tpbmRl
eF0uZ2V0KCk7CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAg
Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCk7CisgICAgfkNTU1Byb3BlcnR5QW5pbWF0
aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOworCisgICAgdW5zaWduZWQgY2hhciYgaW5kZXhGcm9t
UHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCisgICAgeworICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJRCAtIGZpcnN0Q1NTUHJvcGVydHldOworICAg
IH0KKworICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKKyAgICB1bnNpZ25lZCBjaGFyIG1fcHJvcGVydHlU
b0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOworCisgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNo
YXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9IFVDSEFSX01BWDsKKworICAgIGZyaWVu
ZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cD47Cit9OworCitDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcCgpCit7CisgICAgLy8gYnVpbGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkg
d3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25zIGFuZCBibGVuZHMKKyAgICBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzW10g
PSB7CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMZWZ0LCAm
UmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TGVmdCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSaWdodCwgJlJlbmRlclN0eWxlOjpyaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNl
dFRvcCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3R0
b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVyU3R5bGU6OnNldEJvdHRvbSksCisKKyAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVy
U3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbldpZHRoLCAmUmVuZGVyU3R5bGU6Om1pbldp
ZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCAmUmVuZGVyU3R5bGU6Om1heFdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OmhlaWdodCwgJlJlbmRlclN0
eWxlOjpzZXRIZWlnaHQpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjpz
ZXRNaW5IZWlnaHQpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1heEhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRN
YXhIZWlnaHQpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGbGV4KCksCisKKyAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxl
ZnRXaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRv
cFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFdpZHRoKSwKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21XaWR0aCwgJlJlbmRl
clN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21X
aWR0aCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJn
aW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2lu
TGVmdCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJn
aW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXJn
aW5SaWdodCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlN
YXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdp
blRvcCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJn
aW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1h
cmdpbkJvdHRvbSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpz
ZXRQYWRkaW5nTGVmdCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNldFBhZGRpbmdSaWdodCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdUb3AsICZSZW5kZXJT
dHlsZTo6c2V0UGFkZGluZ1RvcCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdCb3R0b20sICZS
ZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q2FyZXRDb2xvciwgJlJlbmRlclN0
eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENhcmV0Q29sb3IsICZSZW5kZXJTdHls
ZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ2Fy
ZXRDb2xvciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENv
bG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHlsZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpdGVkTGlua0NvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRl
ZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kQ29sb3IsIE1heWJlSW52YWxpZENv
bG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNr
Z3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IpLAorCisgICAgICAgIG5l
dyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCAm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dy
b3VuZExheWVycyksCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6bGlzdFN0eWxlSW1hZ2UsICZSZW5k
ZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAorICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNr
SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdlKSwKKworICAgICAgICBuZXcgU3R5bGVJ
bWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU291
cmNlKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94
PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VT
bGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTbGljZXMpLAorICAgICAgICBuZXcg
TGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVy
SW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckltYWdlV2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5
V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJT
dHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRz
ZXQpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJj
ZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUltYWdlJj4oQ1NTUHJvcGVydHlXZWJraXRNYXNr
Qm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6OnNldE1h
c2tCb3hJbWFnZSksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBG
aWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwg
JlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tn
cm91bmRMYXllcnMpLAorICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2dyb3VuZFNpemUsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5k
TGF5ZXJzKSwKKworICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRl
clN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6Om1h
c2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFza0xheWVycyksCisgICAgICAgIG5ldyBG
aWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1NpemUsICZSZW5k
ZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKKwor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZvbnRTaXplLCAm
UmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUsICZSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0
eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9w
ZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9wZXJ0eUNvbHVtbkdhcCwgJlJlbmRlclN0eWxl
Ojpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uR2FwKSwKKyAgICAgICAgbmV3IExl
bmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9wZXJ0eVJvd0dhcCwg
JlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJTdHlsZTo6c2V0Um93R2FwKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9ydD4oQ1NTUHJvcGVydHlDb2x1bW5Db3Vu
dCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5Db3Vu
dCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Q29sdW1u
V2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1u
V2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdl
YmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3Jk
ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6b250YWxCb3JkZXJTcGFjaW5nKSwKKyAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJW
ZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVydGljYWxCb3JkZXJTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2luZyksCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRleCwgJlJlbmRlclN0eWxlOjpzcGVjaWZpZWRa
SW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lmaWVkWkluZGV4KSwKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlPcnBoYW5zLCAmUmVuZGVyU3R5bGU6Om9y
cGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFucyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dzLCAmUmVuZGVyU3R5bGU6OndpZG93cywgJlJl
bmRlclN0eWxlOjpzZXRXaWRvd3MpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpzcGVjaWZpZWRMaW5lSGVpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6b3V0bGlu
ZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5lT2Zmc2V0KSwKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHls
ZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVXaWR0aCksCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJl
bmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcp
LAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V29yZFNwYWNp
bmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNp
bmcpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VGV4dElu
ZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnNldFRleHRJbmRl
bnQpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5UGVy
c3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6c2V0UGVy
c3BlY3RpdmUpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWCwgJlJl
bmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6
OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblkp
LAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3Jt
T3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNl
dFRyYW5zZm9ybU9yaWdpblgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5Z
LCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblkpLAorICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5aKSwK
KyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NT
UHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRS
YWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wTGVmdFJhZGl1cyksCisgICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9y
ZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRpdXMpLAorICAgICAgICBuZXcgTGVuZ3Ro
VmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlckJvdHRv
bUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZh
cmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21S
aWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1cyksCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6
OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0VmlzaWJpbGl0eSksCisgICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Wm9vbSwgJlJlbmRlclN0eWxlOjp6b29t
LCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0UmV0dXJuVmFsdWUpLAorCisgICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlDbGlw
LCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJTdHlsZTo6c2V0Q2xpcCksCisKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpLAorICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKSwKKyAgICAgICAgCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlciksCisjaWYgRU5BQkxFKEZJTFRFUlNfTEVW
RUxfMikKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtp
dEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5
bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKKyNlbmRpZgorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgJlJlbmRlclN0eWxlOjphcHBs
ZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEFwcGxlQ29sb3JGaWx0ZXIpLAorCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eUNsaXBQYXRoLCAmUmVu
ZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OnNldENsaXBQYXRoKSwKKworICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlTaGFwZU91dHNpZGUsICZSZW5k
ZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlT3V0c2lkZSksCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTaGFwZU1hcmdpbiwg
JlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZU1hcmdpbiks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U2hhcGVJbWFn
ZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5
bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVDb2xvciwgTWF5YmVJ
bnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdl
YmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4
dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0
eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua1RleHRTdHJva2VDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRGaWxsQ29sb3IsIE1heWJlSW52YWxp
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4
dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRGaWxsQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RmlsbENvbG9yKSwKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9y
LCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9y
ZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9y
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJUb3BDb2xvciwgTWF5YmVJbnZh
bGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclRvcENvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90
dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZp
c2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtC
b3JkZXJCb3R0b21Db2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZm
ZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZS
ZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvciwg
JlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpdGVkTGlua091dGxpbmVDb2xvciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNo
YWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5k
ZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRv
dyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZS
ZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNo
YWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6dGV4dFNoYWRvdywgJlJl
bmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
U1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVuZGVyU3R5bGU6OmZpbGxQYWludFR5cGUsICZS
ZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0RmlsbFBhaW50Q29s
b3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZpbGxP
cGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZpbGxP
cGFjaXR5KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVy
dHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRUeXBlLCAmUmVuZGVyU3R5bGU6OnN0
cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlUGFpbnRDb2xvciksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ryb2tlT3BhY2l0eSwg
JlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZU9wYWNp
dHkpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4+
KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hBcnJh
eSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNoQXJyYXkpLAorICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0cm9rZU1pdGVybGltaXQsICZSZW5kZXJTdHls
ZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VNaXRlckxpbWl0KSwK
KworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3gsICZSZW5k
ZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0Q3gpLAorICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZSZW5kZXJTdHlsZTo6Y3ksICZSZW5kZXJTdHls
ZTo6c2V0Q3kpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5bGU6OnNldFIpLAorICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UngsICZSZW5kZXJTdHlsZTo6cngsICZSZW5k
ZXJTdHlsZTo6c2V0UngpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZSZW5kZXJTdHlsZTo6c2V0UnkpLAorICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldCwg
JlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURh
c2hPZmZzZXQpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
U3Ryb2tlV2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVyU3R5bGU6OnNldFgpLAorICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WSwgJlJlbmRlclN0eWxlOjp5LCAmUmVu
ZGVyU3R5bGU6OnNldFkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZsb29kT3BhY2l0eSwgJlJlbmRl
clN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5
YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9vZENvbG9yLCAmUmVuZGVyU3R5bGU6OmZsb29k
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RDb2xvciksCisKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpz
dG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRTdG9wT3BhY2l0eSksCisgICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eVN0b3BDb2xvciwgJlJl
bmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0U3RvcENvbG9yKSwKKworICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlMaWdo
dGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
TGlnaHRpbmdDb2xvciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhW
YWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0LCAmUmVuZGVyU3R5bGU6OmJhc2VsaW5lU2hp
ZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNlbGluZVNoaWZ0VmFsdWUpLAorICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUtlcm5pbmcsICZS
ZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0eWxlOjpzZXRLZXJuaW5nKSwKKyNpZiBFTkFC
TEUoVkFSSUFUSU9OX0ZPTlRTKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlh
dGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVuZGVyU3R5
bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJlbmRlclN0eWxlOjpzZXRGb250VmFyaWF0aW9u
U2V0dGluZ3MpLAorI2VuZGlmCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVj
dGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQsICZSZW5kZXJTdHlsZTo6Zm9udFdlaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFN0cmV0Y2gsICZSZW5kZXJT
dHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6c2V0Rm9udFN0cmV0Y2gpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25U
aGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJT
dHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25lc3MpLAorICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENTU1Byb3BlcnR5VGV4dFVuZGVybGluZU9mZnNl
dCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldFRl
eHRVbmRlcmxpbmVPZmZzZXQpLAorICAgIH07CisgICAgY29uc3QgdW5zaWduZWQgYW5pbWF0YWJs
ZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxlTG9u
Z2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKKworICAgIHN0YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlE
IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzW10gPSB7CisgICAgICAgIENTU1Byb3BlcnR5
QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQtY29sb3IsIGJhY2tncm91bmQtcG9zaXRpb24s
IGJhY2tncm91bmQtaW1hZ2UKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24s
CisgICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8gZm9yIGZvbnQtc2l6ZSwgZm9udC13ZWlnaHQK
KyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrLCAvLyBmb3IgbWFzay1wb3NpdGlvbgorICAg
ICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlC
b3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9t
LCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3Is
CisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVzLAorICAgICAgICBDU1NQcm9wZXJ0eUJv
cmRlcldpZHRoLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlciwKKyAgICAgICAgQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZSwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJTcGFjaW5nLAorICAgICAg
ICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9yIGxpc3Qtc3R5bGUtaW1hZ2UKKyAgICAgICAg
Q1NTUHJvcGVydHlNYXJnaW4sCisgICAgICAgIENTU1Byb3BlcnR5T3V0bGluZSwKKyAgICAgICAg
Q1NTUHJvcGVydHlQYWRkaW5nLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2Us
CisgICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVsZSwKKyAgICAgICAgQ1NTUHJvcGVydHlXZWJr
aXRCb3JkZXJSYWRpdXMsCisgICAgICAgIENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luCisgICAg
fTsKKyAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50
ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllcyk7CisKKyAg
ICAvLyBUT0RPOgorICAgIC8vCisgICAgLy8gIENTU1Byb3BlcnR5VmVydGljYWxBbGlnbgorICAg
IC8vCisgICAgLy8gQ29tcG91bmQgcHJvcGVydGllcyB0aGF0IGhhdmUgY29tcG9uZW50cyB0aGF0
IHNob3VsZCBiZSBhbmltYXRhYmxlOgorICAgIC8vCisgICAgLy8gIENTU1Byb3BlcnR5Q29sdW1u
cworICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJveFJlZmxlY3QKKworICAgIC8vIE1ha2Ugc3Vy
ZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1D
U1NQcm9wZXJ0aWVzOyArK2kpCisgICAgICAgIG1fcHJvcGVydHlUb0lkTWFwW2ldID0gY0ludmFs
aWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKKworICAgIENPTVBJTEVfQVNTRVJUKGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291
bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0YWJsZVByb3BlcnRpZXNNdXN0QmVMZXNzVGhh
blVDaGFyTWF4KTsKKyAgICBtX3Byb3BlcnR5V3JhcHBlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBhbmltYXRhYmxlU2hvcnRoYW5k
UHJvcGVydGllc0NvdW50KTsKKworICAgIC8vIEZpcnN0IHdlIHB1dCB0aGUgbm9uLXNob3J0aGFu
ZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBtYXAsIHNvIHRoZSBzaG9ydGhhbmQtYnVpbGRp
bmcKKyAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0uCisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsKKyAgICAgICAg
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IGFuaW1hdGFibGVMb25naGFu
ZFByb3BlcnR5V3JhcHBlcnNbaV07CisgICAgICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNr
ZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+KHdy
YXBwZXIpKTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRCh3cmFwcGVyLT5wcm9wZXJ0eSgp
KSA9IGk7CisgICAgfQorCisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsKKyAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNbaV07CisgICAgICAgIGF1dG8g
c2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHkocHJvcGVydHlJRCk7CisgICAgICAgIGlm
ICghc2hvcnRoYW5kLmxlbmd0aCgpKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJzOwor
ICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoc2hvcnRoYW5k
Lmxlbmd0aCgpKTsKKyAgICAgICAgZm9yIChhdXRvIGxvbmdoYW5kIDogc2hvcnRoYW5kKSB7Cisg
ICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5kZXggPSBpbmRleEZyb21Qcm9wZXJ0eUlEKGxv
bmdoYW5kKTsKKyAgICAgICAgICAgIGlmICh3cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0
eVdyYXBwZXJJbmRleCkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIEFT
U0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XSk7CisgICAgICAgICAgICBsb25n
aGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlcklu
ZGV4XS5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBtX3Byb3BlcnR5V3JhcHBlcnMudW5j
aGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7CisgICAgICAgIGluZGV4RnJvbVByb3Bl
cnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBp
OworICAgIH0KK30KKworc3RhdGljIGJvb2wgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVy
dGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+JiBwcm9wZXJ0eVNldCkKK3sKKyAgICBp
ZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqIHNob3J0aGFuZFdyYXBwZXIgPSBzdGF0
aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIqPih3cmFwcGVyKTsKKyAgICBib29sIGNv
bnRhaW5lZCA9IGZhbHNlOworICAgIGZvciAoYXV0byYgY3VycldyYXBwZXIgOiBzaG9ydGhhbmRX
cmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsKKyAgICAgICAgaWYgKGdhdGhlckVuY2xvc2lu
Z1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHksIGN1cnJXcmFwcGVyLCBwcm9wZXJ0eVNldCkg
fHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0gcHJvcGVydHkpCisgICAgICAgICAgICBjb250
YWluZWQgPSB0cnVlOworICAgIH0KKworICAgIGlmIChjb250YWluZWQpCisgICAgICAgIHByb3Bl
cnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgpKTsKKworICAgIHJldHVybiBjb250YWluZWQ7
Cit9CisKKy8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IGFuaW1hdGlvbiB0aW1l
cnMKK3ZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0
eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91
YmxlIHByb2dyZXNzKQoreworICAgIEFTU0VSVChwcm9wICE9IENTU1Byb3BlcnR5SW52YWxpZCk7
CisKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVy
dHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJv
cCk7CisgICAgaWYgKHdyYXBwZXIpIHsKKyAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0
LCBhLCBiLCBwcm9ncmVzcyk7CisjaWYgIUxPR19ESVNBQkxFRAorICAgICAgICB3cmFwcGVyLT5s
b2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsKKyNlbmRpZgorICAgIH0KK30KKworYm9vbCBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVydHlJRCBw
cm9wKQoreworICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCBw
cm9wKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0
eShwcm9wKTsKKyAgICByZXR1cm4gd3JhcHBlciA/IHdyYXBwZXItPmFuaW1hdGlvbklzQWNjZWxl
cmF0ZWQoKSA6IGZhbHNlOworfQorCisvLyBOb3RlOiB0aGlzIGlzIGluZWZmaWNpZW50LiBJdCdz
IG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0aW9uQXRUaW1lKCkuCitIYXNoU2V0PENTU1By
b3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVj
dGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCit7CisgICAgQ1NTUHJvcGVydHlB
bmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpOworCisgICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBmb3VuZFByb3BlcnRp
ZXM7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IG1hcC5zaXplKCk7ICsraSkKKyAgICAg
ICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwgbWFwLndyYXBw
ZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVzKTsKKworICAgIHJldHVybiBmb3VuZFByb3Bl
cnRpZXM7Cit9CisKK2Jvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVy
dHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5lcXVh
bHMoYSwgYik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQ1NTUHJvcGVydHlBbmltYXRp
b246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7CisgICAgQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIGlmICh3cmFwcGVy
KQorICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2FuSW50ZXJwb2xhdGUoYSwgYik7CisgICAgcmV0
dXJuIGZhbHNlOworfQorCitDU1NQcm9wZXJ0eUlEIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQ
cm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0aGFuZCkKK3sKKyAg
ICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1Byb3BlcnR5QW5pbWF0
aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBpZiAoaSA8IDAgfHwgc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkpCisgICAgICAgIHJldHVybiBDU1NQcm9wZXJ0
eUludmFsaWQ7CisKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0g
bWFwLndyYXBwZXJGb3JJbmRleChpKTsKKyAgICBpc1Nob3J0aGFuZCA9IHdyYXBwZXItPmlzU2hv
cnRoYW5kV3JhcHBlcigpOworICAgIHJldHVybiB3cmFwcGVyLT5wcm9wZXJ0eSgpOworfQorCitp
bnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVByb3BlcnRpZXMoKQoreworICAgIHJldHVy
biBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLnNpemUoKTsKK30K
KworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jZGUyYzg3NTgzMjM4MGM1M2Y1MGE1NWYwZWQ0NGVmNmQ4NDQ0MTliCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5p
bWF0aW9uLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
KyAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNTU1Byb3BlcnR5
TmFtZXMuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQ7CitjbGFzcyBSZW5kZXJTdHlsZTsK
KworY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb24geworcHVibGljOgorICAgIHN0YXRpYyBib29s
IGlzUHJvcGVydHlBbmltYXRhYmxlKENTU1Byb3BlcnR5SUQpOworICAgIHN0YXRpYyBib29sIGFu
aW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKENTU1Byb3BlcnR5SUQpOworICAgIHN0YXRp
YyBib29sIHByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBib29sIGNhblByb3BlcnR5QmVJ
bnRlcnBvbGF0ZWQoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKTsKKyAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCBnZXRQcm9wZXJ0eUF0SW5k
ZXgoaW50LCBPcHRpb25hbDxib29sPiYgaXNTaG9ydGhhbmQpOworICAgIHN0YXRpYyBpbnQgZ2V0
TnVtUHJvcGVydGllcygpOworCisgICAgc3RhdGljIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gYW5p
bWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKKworICAg
IC8vIFJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0aW9uIHRp
bWVycworICAgIHN0YXRpYyB2b2lkIGJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0NTU1RyYW5zaXRpb24uaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Ry
YW5zaXRpb24uaWRsCmluZGV4IDE5NGM2YWYxYjVhZGZkMDZkMjdjZmMwNDBjNGNjMTk3ZmMyMzY3
MmYuLjMxOTA1YWJkZjQwNTVjYTMxMzc5ZDJhMzliMDU5ZjFjNjBhMDkxZTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9uLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKQEAgLTI2LDcgKzI2LDYgQEAKIHR5
cGVkZWYgVVNWU3RyaW5nIENTU09NU3RyaW5nOwogCiBbCi0gICAgRW5hYmxlZEF0UnVudGltZT1X
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24sCiAgICAgRXhwb3NlZD1XaW5kb3cKIF0gaW50ZXJm
YWNlIENTU1RyYW5zaXRpb24gOiBXZWJBbmltYXRpb24gewogICAgIHJlYWRvbmx5IGF0dHJpYnV0
ZSBDU1NPTVN0cmluZyB0cmFuc2l0aW9uUHJvcGVydHk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMuaWRsCmluZGV4IDRmMzEzMzdiZmMxMmViMmNjNGYw
NTU1MmIzNGY4NzhlNGYyYjEzNTUuLmU4ZWU0ZTQ5ZTIwMmU3ZTdkZDUzN2NlNDYwMmExZjk4MmZl
ZTM2NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1h
dGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlv
bnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8KIAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cu
b3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lvbnMtdG8tdGhlLWRvY3VtZW50LWludGVyZmFj
ZQotWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVy
ZmFjZSBEb2N1bWVudCB7CitwYXJ0aWFsIGludGVyZmFjZSBEb2N1bWVudCB7CiAgICAgcmVhZG9u
bHkgYXR0cmlidXRlIERvY3VtZW50VGltZWxpbmUgdGltZWxpbmU7CiB9OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50T3JTaGFkb3dSb290QW5pbWF0aW9ucy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRp
b25zLmlkbAppbmRleCA3N2EyMGQwYWNkNTBhOGE1MzRjMWQ3ZDQ3YWUyMDUyNTU1YjgyNTFjLi45
ZGZkMTg2NWJmZGFhOTBjMWVkMGRhMTVjNDFhNGE3OGVkZTUzYzU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRp
b25zLmlkbApAQCAtMjQsOCArMjQsNiBAQAogICovCiAKIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dn
Lm9yZy93ZWItYW5pbWF0aW9ucy0xLyNleHRlbnNpb25zLXRvLXRoZS1kb2N1bWVudG9yc2hhZG93
cm9vdC1pbnRlcmZhY2UtbWl4aW4KLVsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlv
bnMKLV0gcGFydGlhbCBpbnRlcmZhY2UgbWl4aW4gRG9jdW1lbnRPclNoYWRvd1Jvb3QgeworcGFy
dGlhbCBpbnRlcmZhY2UgbWl4aW4gRG9jdW1lbnRPclNoYWRvd1Jvb3QgewogICAgIHNlcXVlbmNl
PFdlYkFuaW1hdGlvbj4gZ2V0QW5pbWF0aW9ucygpOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAppbmRleCBiMDg2YjJhNDZiOWIzZmNkNTUxNjI1
OTVmZjkzYmY5MWJhN2NlY2IxLi41YTlhNDExMjU0NDI1NWQxMTAzYzFhM2RkYzA1NDFjYTBlZTlk
ZmE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGlu
ZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRs
CkBAIC0yNCw3ICsyNCw2IEBACiAgKi8KIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKIF0gaW50ZXJmYWNlIERvY3VtZW50VGltZWxp
bmUgOiBBbmltYXRpb25UaW1lbGluZSB7CiAgICAgW0NhbGxXaXRoPURvY3VtZW50XSBjb25zdHJ1
Y3RvcihvcHRpb25hbCBEb2N1bWVudFRpbWVsaW5lT3B0aW9ucyBvcHRpb25zKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCmluZGV4IDM5ODdlOGJlNjNkMWQ3
MmI3OTkzNjBiZjc5YjkzODkwNDlmYzYyY2MuLmYwZjMyYjBiMDk0NDM2MWZiNWIxNzlkNTNhZDU5
ZTM0YjdhNjYwY2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFt
ZUVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0
LmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5k
b3csCiAgICAgSlNHZW5lcmF0ZVRvTmF0aXZlT2JqZWN0LAogXSBpbnRlcmZhY2UgS2V5ZnJhbWVF
ZmZlY3QgOiBBbmltYXRpb25FZmZlY3QgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL1dlYkFuaW1hdGlvbi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5p
bWF0aW9uLmlkbAppbmRleCBlZDNiMzhkZmUzZWMzZmE4NDIwMDgwMDEzNTA0NTNmZWQ4YmJhZWE5
Li4zNDc3ODE1YWY5ZjAyMTM5MTUzMTI3MjAzNGU4ZGEwMGZmMjExZDBmIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbApAQCAtMzgsNyArMzgsNiBAQCBlbnVtIEFu
aW1hdGlvblJlcGxhY2VTdGF0ZSB7CiAKIFsKICAgICBBY3RpdmVET01PYmplY3QsCi0gICAgRW5h
YmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEludGVyZmFjZU5hbWU9QW5pbWF0aW9u
LAogICAgIEN1c3RvbVRvSlNPYmplY3QsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBPUlQK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5o
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmgKaW5kZXggM2Iw
ODFkMzJmZDUyMzc2YzcyNDlmNDRhNDViM2ZmYzlhNmQ0YTU3Ni4uYmRiODY5ODUwZjZiMTI3NzBi
N2U4MGI5NDNhY2JhY2Q1NjBmMTk2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL1dlYkFuaW1hdGlvblR5cGVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dl
YkFuaW1hdGlvblR5cGVzLmgKQEAgLTUwLDYgKzUwLDExIEBAIHN0cnVjdCBXZWJBbmltYXRpb25z
TWFya2FibGVEb3VibGVUcmFpdHMgewogICAgIH0KIH07CiAKK2VudW0gY2xhc3MgQW5pbWF0aW9u
SW1wYWN0IHsKKyAgICBSZXF1aXJlc1JlY29tcG9zaXRlICAgICA9IDEgPDwgMCwKKyAgICBGb3Jj
ZXNTdGFja2luZ0NvbnRleHQgICA9IDEgPDwgMQorfTsKKwogdXNpbmcgTWFya2FibGVEb3VibGUg
PSBNYXJrYWJsZTxkb3VibGUsIFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cz47CiAK
IHVzaW5nIEFuaW1hdGlvbkNvbGxlY3Rpb24gPSBMaXN0SGFzaFNldDxSZWZQdHI8V2ViQW5pbWF0
aW9uPj47CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFy
YXRpb24uY3BwCmluZGV4IGEzZjEzMzhiMzYwYWMwZDgwNWFlYjMxOTZhNDgxMGQ1ZDljNzRiZWYu
LjM2OWIxYmQ2YzA2ZDBjNjRlYzYyMDk2ZGZmY2EzOGJhMzhhMmE5OGYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwCkBAIC0yNiw3
ICsyNiw2IEBACiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCiAKICNp
bmNsdWRlICJCYXNpY1NoYXBlRnVuY3Rpb25zLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0FzcGVjdFJhdGlvVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NCYXNpY1NoYXBlcy5oIgogI2luY2x1ZGUgIkNTU0JvcmRlckltYWdlLmgiCkBAIC00MCw2ICsz
OSw3IEBACiAjaW5jbHVkZSAiQ1NTTGluZUJveENvbnRhaW5WYWx1ZS5oIgogI2luY2x1ZGUgIkNT
U1ByaW1pdGl2ZVZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5o
IgorI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCiAjaW5jbHVkZSAiQ1NT
UmVmbGVjdFZhbHVlLmgiCkBAIC0yMjQ2LDExICsyMjQ2LDggQEAgc3RhdGljIGlubGluZSBjb25z
dCBSZW5kZXJTdHlsZSogY29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkoRWxlbWVudCYgZWxl
bWVudCwKIHsKICAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsKIAotICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcjo6c3VwcG9ydHNBY2NlbGVyYXRlZEFuaW1hdGlvbk9mUHJvcGVydHkocHJvcGVy
dHlJRCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBlbGVtZW50LmRvY3VtZW50KCku
ZXhpc3RpbmdUaW1lbGluZSgpKQotICAgICAgICAgICAgb3duZWRTdHlsZSA9IHRpbWVsaW5lLT5h
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoKnJlbmRlcmVyKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgb3duZWRTdHlsZSA9IHJlbmRlcmVyLT5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRlZFN0
eWxlRm9yUmVuZGVyZXIoKnJlbmRlcmVyKTsKKyAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXIt
PmlzQ29tcG9zaXRlZCgpICYmIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0eUlEKSkgeworICAgICAgICBvd25lZFN0eWxlID0gcmVu
ZGVyZXItPmFuaW1hdGVkU3R5bGUoKTsKICAgICAgICAgaWYgKHBzZXVkb0VsZW1lbnRTcGVjaWZp
ZXIgIT0gUHNldWRvSWQ6Ok5vbmUgJiYgIWVsZW1lbnQuaXNQc2V1ZG9FbGVtZW50KCkpIHsKICAg
ICAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGNhY2hlZCBwc2V1ZG8gc3R5bGUgd2lsbCBvbmx5IGV4
aXN0IGlmIHRoZSBhbmltYXRpb24gaGFzIGJlZW4gcnVuIGF0IGxlYXN0IG9uY2UuCiAgICAgICAg
ICAgICByZXR1cm4gb3duZWRTdHlsZS0+Z2V0Q2FjaGVkUHNldWRvU3R5bGUocHNldWRvRWxlbWVu
dFNwZWNpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCA5MDk2ZjI2NDY3OTEzMGE3
ODRhNTFhOWFkYzhiYWRlYmVjN2M3YWM0Li4yOTQwYzU4YmYxNzhjNTIwYTYwOWViMWI3Mzc3Mzhl
YjY2OWZkYzA2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTMyLDcgKzMyLDYgQEAKICNp
bmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQmVmb3JlVW5sb2FkRXZlbnQuaCIKICNpbmNsdWRl
ICJDREFUQVNlY3Rpb24uaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVEZWNsYXJhdGlv
bi5oIgogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKQEAgLTE5NjIsNyArMTk2MSw2IEBAIHZv
aWQgRG9jdW1lbnQ6OnJlc29sdmVTdHlsZShSZXNvbHZlU3R5bGVUeXBlIHR5cGUpCiAgICAgVHJh
Y2VTY29wZSB0cmFjaW5nU2NvcGUoU3R5bGVSZWNhbGNTdGFydCwgU3R5bGVSZWNhbGNFbmQpOwog
CiAgICAgUmVuZGVyVmlldzo6UmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yIHJlcGFpbnRSZWdpb25B
Y2N1bXVsYXRvcihyZW5kZXJWaWV3KCkpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1h
dGlvblVwZGF0ZUJsb2NrKCZtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKSk7CiAKICAgICAvLyBG
SVhNRTogRG8gdGhpcyB1cGRhdGUgcGVyIHRyZWUgc2NvcGUuCiAgICAgewpAQCAtMjQyMiwxOSAr
MjQyMCwxMyBAQCB2b2lkIERvY3VtZW50OjpkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJbkZyYW1l
KCkKICAgICAvLyBiZSBvdXQgb2Ygc3luYyBpZiB0aGUgRE9NIHN1c3BlbnNpb24gc3RhdGUgY2hh
bmdlZCB3aGlsZSB0aGUgZG9jdW1lbnQgd2FzIG5vdCBpbiB0aGUgZnJhbWUgKHBvc3NpYmx5IGlu
IHRoZQogICAgIC8vIGJhY2svZm9yd2FyZCBjYWNoZSwgb3Igc2ltcGx5IG5ld2x5IGNyZWF0ZWQp
LgogICAgIGlmIChtX2ZyYW1lLT5hY3RpdmVET01PYmplY3RzQW5kQW5pbWF0aW9uc1N1c3BlbmRl
ZCgpKSB7Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAg
aWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0Nv
bnRyb2xsZXItPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgbV9mcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVu
dCh0aGlzKTsKKyAgICAgICAgaWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKKyAgICAgICAgICAg
IG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICAgICAgc3Vz
cGVuZFNjaGVkdWxlZFRhc2tzKFJlYXNvbkZvclN1c3BlbnNpb246OlBhZ2VXaWxsQmVTdXNwZW5k
ZWQpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIHJlc3VtZVNjaGVkdWxlZFRhc2tzKFJlYXNvbkZv
clN1c3BlbnNpb246OlBhZ2VXaWxsQmVTdXNwZW5kZWQpOwotICAgICAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCi0g
ICAgICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7
Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgbV9mcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCku
cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1lbGlu
ZXNDb250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVB
bmltYXRpb25zKCk7CiAgICAgfQogfQogCkBAIC0yNTI4LDkgKzI1MjAsNiBAQCB2b2lkIERvY3Vt
ZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKCkKICAgICBpZiAobV9oYXNQcmVwYXJlZEZvckRl
c3RydWN0aW9uKQogICAgICAgICByZXR1cm47CiAKLSAgICBpZiAobV9mcmFtZSkKLSAgICAgICAg
bV9mcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkuZGV0YWNoRnJvbURvY3VtZW50KHRoaXMpOwotCiAj
aWYgVVNFKExJQldFQlJUQykKICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgbW92ZWQgdG8g
TW9kdWxlcy9tZWRpYXN0cmVhbS4KICAgICBpZiAoTGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2
YWlsYWJsZSgpKSB7CkBAIC0zMDY2LDggKzMwNTUsNiBAQCB2b2lkIERvY3VtZW50OjppbXBsaWNp
dENsb3NlKCkKICAgICAgICAgaWYgKGF1dG8qIGRvY3VtZW50TG9hZGVyID0gbG9hZGVyKCkpCiAg
ICAgICAgICAgICBkb2N1bWVudExvYWRlci0+c3RhcnRJY29uTG9hZGluZygpOwogCi0gICAgICAg
IGYtPmxlZ2FjeUFuaW1hdGlvbigpLnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKHRoaXMp
OwotCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYmUgZGlzcGF0Y2hpbmcgcGVuZGlu
ZyBldmVudHMgZ2xvYmFsbHkgb24gYWxsIERvY3VtZW50cyBoZXJlLgogICAgICAgICAvLyBGb3Ig
bm93LCBvbmx5IGRvIHRoaXMgd2hlbiB0aGVyZSBpcyBhIEZyYW1lLCBvdGhlcndpc2UgdGhpcyBj
b3VsZCBjYXVzZSBKUyByZWVudHJhbmN5CiAgICAgICAgIC8vIGJlbG93IFNWRyBmb250IHBhcnNp
bmcsIGZvciBleGFtcGxlLiA8aHR0cHM6Ly93ZWJraXQub3JnL2IvMTM2MjY5PgpAQCAtNTQ1NCwx
MSArNTQ0MSw4IEBAIHZvaWQgRG9jdW1lbnQ6OnJlc3VtZShSZWFzb25Gb3JTdXNwZW5zaW9uIHJl
YXNvbikKIAogICAgIEFTU0VSVChtX2ZyYW1lKTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAgICAgICAgICAg
bV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVBbmltYXRpb25zKCk7ICAKLSAgICB9IGVsc2UK
LSAgICAgICAgbV9mcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KHRoaXMpOworICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgIG1f
dGltZWxpbmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwogCiAgICAgcmVzdW1lU2No
ZWR1bGVkVGFza3MocmVhc29uKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL0Vs
ZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCmluZGV4IDhmODZmZjQx
YTY2NDY4MmMyZmM2ODdlM2ViYTY4M2M1M2ZjNjM4NmEuLmM1YjMzMTZjY2Y2NDIxNmYyOTFlNmJh
NTZhYjg3MDgxMzBmNzE0NjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKQEAgLTI5LDcgKzI5LDYg
QEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1
ZGUgIkF0dHJpYnV0ZUNoYW5nZUludmFsaWRhdGlvbi5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDaHJvbWUu
aCIKICNpbmNsdWRlICJDaHJvbWVDbGllbnQuaCIKQEAgLTExOSw2ICsxMTgsNyBAQAogI2luY2x1
ZGUgIlRvdWNoQWN0aW9uLmgiCiAjaW5jbHVkZSAiVm9pZENhbGxiYWNrLmgiCiAjaW5jbHVkZSAi
V2ViQW5pbWF0aW9uLmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKICNpbmNsdWRl
ICJXaGVlbEV2ZW50LmgiCiAjaW5jbHVkZSAiWExpbmtOYW1lcy5oIgogI2luY2x1ZGUgIlhNTE5T
TmFtZXMuaCIKQEAgLTIyODgsOSArMjI4OCw2IEBAIHZvaWQgRWxlbWVudDo6cmVtb3ZlZEZyb21B
bmNlc3RvcihSZW1vdmFsVHlwZSByZW1vdmFsVHlwZSwgQ29udGFpbmVyTm9kZSYgb2xkUGFyCiAg
ICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAg
ICAgICAgIHRpbWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAKLSAgICBpZiAoZnJh
bWUpCi0gICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5jYW5jZWxBbmltYXRpb25zKCp0
aGlzKTsKLQogI2lmIEVOQUJMRShXSEVFTF9FVkVOVF9MQVRDSElORykKICAgICBpZiAoZnJhbWUg
JiYgZnJhbWUtPnBhZ2UoKSkgewogICAgICAgICBpZiAoYXV0byogc2Nyb2xsTGF0Y2hpbmdDb250
cm9sbGVyID0gZnJhbWUtPnBhZ2UoKS0+c2Nyb2xsTGF0Y2hpbmdDb250cm9sbGVySWZFeGlzdHMo
KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAppbmRleCAxNWQ4MWMxMDZkODA5MzUz
ZjIxYmU3ZWM4NDgzZGQ4OGI3NjI4YjM3Li5kYWQxNTY2Y2MwNmEzZDE0ZDZiY2I3YzUwNzZlY2Mx
OGI2YzdhNzY3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCkBAIC0yOCw3ICsy
OCw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgog
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNvbnRlbnRE
YXRhLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnRUaW1lbGluZS5oIgogI2luY2x1ZGUgIkluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbi5oIgpAQCAtOTMsOSArOTIsNiBAQCB2b2lkIFBzZXVkb0VsZW1lbnQ6
OmNsZWFySG9zdEVsZW1lbnQoKQogICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50KCku
ZXhpc3RpbmdUaW1lbGluZSgpKQogICAgICAgICB0aW1lbGluZS0+ZWxlbWVudFdhc1JlbW92ZWQo
KnRoaXMpOwogICAgIAotICAgIGlmIChhdXRvKiBmcmFtZSA9IGRvY3VtZW50KCkuZnJhbWUoKSkK
LSAgICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMp
OwotCiAgICAgbV9ob3N0RWxlbWVudCA9IG51bGxwdHI7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9y
eS9DYWNoZWRGcmFtZS5jcHAKaW5kZXggNDY5ODU3NGQzMjUwNWU2ZjljNWMzYTFjYmFjYWJmZWIy
ZDBkNDFkYy4uOGRlMjZlMWJjMTUzM2ZkMGIzZjA3NGYwNmIxZjM0ZDNlODBiODk4YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNs
dWRlICJDYWNoZWRGcmFtZS5oIgogCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgotI2lu
Y2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRGcmFtZVBs
YXRmb3JtRGF0YS5oIgogI2luY2x1ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKQEAgLTI3Myw4ICsyNzIsNiBAQCB2b2lkIENhY2hlZEZyYW1lOjpkZXN0cm95KCkKIAog
ICAgIEZyYW1lOjpjbGVhclRpbWVycyhtX3ZpZXcuZ2V0KCksIG1fZG9jdW1lbnQuZ2V0KCkpOwog
Ci0gICAgbV92aWV3LT5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLmRldGFjaEZyb21Eb2N1bWVu
dChtX2RvY3VtZW50LmdldCgpKTsKLQogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBj
YWxsIHJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzIGhlcmU/IFdoZW4gdGhlIGRvY3VtZW50IGlzIGlu
IGJhY2svZm9yd2FyZCBjYWNoZSwgdGhpcyBtZXRob2Qgd29uJ3Qgd29yawogICAgIC8vIGZ1bGx5
IGFueXdheSwgYmVjYXVzZSB0aGUgZG9jdW1lbnQgd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgaXRz
IERPTVdpbmRvdyBvYmplY3QgKGR1ZSB0byBiZWluZyBmcmFtZWxlc3MpLgogICAgIG1fZG9jdW1l
bnQtPnJlbW92ZUFsbEV2ZW50TGlzdGVuZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL0ZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDNj
NWFlNDU4NTRjNzJiZGY2ZmI3MzY1ZWY1ZjI3ZmFhNmZkYmU1ZWMuLmJkMzQ5N2MxYTIyMDAxNTY1
NmUwMDIwNDVlNGU2MTc3YzM5Mzk4YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0zMyw3ICsz
Myw2IEBACiAjaW5jbHVkZSAiQXBwbHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJCYWNrRm9y
d2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVk
ZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJD
YWNoZWRDU1NTdHlsZVNoZWV0LmgiCkBAIC0xNTYsNyArMTU1LDYgQEAgRnJhbWU6OkZyYW1lKFBh
Z2UmIHBhZ2UsIEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8
RnJhbWVMb2EKICAgICAsIG1fbmF2aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmln
YXRpb25TY2hlZHVsZXI+KCp0aGlzKSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVu
dCkKICAgICAsIG1fc2NyaXB0KG1ha2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMp
KQotICAgICwgbV9hbmltYXRpb25Db250cm9sbGVyKG1ha2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9u
Q29udHJvbGxlcj4oKnRoaXMpKQogICAgICwgbV9wYWdlWm9vbUZhY3RvcihwYXJlbnRQYWdlWm9v
bUZhY3Rvcih0aGlzKSkKICAgICAsIG1fdGV4dFpvb21GYWN0b3IocGFyZW50VGV4dFpvb21GYWN0
b3IodGhpcykpCiAgICAgLCBtX2V2ZW50SGFuZGxlcihtYWtlVW5pcXVlUmVmPEV2ZW50SGFuZGxl
cj4oKnRoaXMpKQpAQCAtNzM3LDExICs3MzUsOCBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycyhG
cmFtZVZpZXcgKnZpZXcsIERvY3VtZW50ICpkb2N1bWVudCkKIHsKICAgICBpZiAodmlldykgewog
ICAgICAgICB2aWV3LT5sYXlvdXRDb250ZXh0KCkudW5zY2hlZHVsZUxheW91dCgpOwotICAgICAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiB0aW1l
bGluZXMgPSBkb2N1bWVudC0+dGltZWxpbmVzQ29udHJvbGxlcigpKQotICAgICAgICAgICAgICAg
IHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAg
ICAgICB2aWV3LT5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zRm9y
RG9jdW1lbnQoZG9jdW1lbnQpOworICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1l
bnQtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVu
ZEFuaW1hdGlvbnMoKTsKICAgICAgICAgdmlldy0+ZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zdG9w
QXV0b3Njcm9sbFRpbWVyKCk7CiAgICAgfQogfQpAQCAtMTAyOSwxMSArMTAyNCw4IEBAIHZvaWQg
RnJhbWU6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIC8vIEZy
YW1lOjpjbGVhclRpbWVycygpIHN1c3BlbmRlZCBhbmltYXRpb25zIGFuZCBwZW5kaW5nIHJlbGF5
b3V0cy4KIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0
byogdGltZWxpbmVzID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAg
IHRpbWVsaW5lcy0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0gZWxzZQotICAgICAgICBsZWdh
Y3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQobV9kb2MuZ2V0KCkpOwor
ICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBtX2RvYy0+dGltZWxpbmVzQ29udHJvbGxlcigpKQor
ICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICBpZiAobV92aWV3KQog
ICAgICAgICBtX3ZpZXctPmxheW91dENvbnRleHQoKS5zY2hlZHVsZUxheW91dCgpOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9GcmFtZS5oCmluZGV4IDY4ZmRjMTE1NWQ5MTNlZWNmMjU3MDZhZDk4ODliNTAyMWZhYmYyYzQu
LjUwYzY1ZjVlNWIwNzUzYzFlNmQzMDdiMjEzYjUyMDBjNDUwYWEzMGEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
LmgKQEAgLTY2LDcgKzY2LDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ29sb3I7CiBjbGFz
cyBET01XaW5kb3c7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTE3NCw4ICsxNzMsNiBAQCBwdWJsaWM6
CiAgICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50KCktPnNl
bGVjdGlvbigpOyB9CiAgICAgY29uc3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0
IHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVUcmVlJiB0cmVl
KCkgY29uc3Q7Ci0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0aW9uKCkg
eyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9Ci0gICAgY29uc3QgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlciYgbGVnYWN5QW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25D
b250cm9sbGVyOyB9CiAgICAgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0KCkgeyByZXR1cm4gbV9z
Y3JpcHQ7IH0KICAgICBjb25zdCBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHQoKSBjb25zdCB7IHJl
dHVybiBtX3NjcmlwdDsgfQogCkBAIC0zNDUsNyArMzQyLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQ
dHI8RG9jdW1lbnQ+IG1fZG9jOwogCiAgICAgVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+IG1f
c2NyaXB0OwotICAgIFVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlv
bkNvbnRyb2xsZXI7CiAKICNpZiBFTkFCTEUoREFUQV9ERVRFQ1RJT04pCiAgICAgUmV0YWluUHRy
PE5TQXJyYXk+IG1fZGF0YURldGVjdGlvblJlc3VsdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL0ZyYW1lVmlldy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAKaW5kZXggNzViOWUyYmZjOWVhZTNlMzViZWUxOGZlYmQ0OTFmNDBmMzY3YzYxNi4uZDQ5MjQx
ZWYwODhiODM3NjI1NjA5ZDJjNjVhYmYyODM0ZGE0MTg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNh
Y2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRl
ICJDaHJvbWUuaCIKQEAgLTU4Niw4ICs1ODUsNiBAQCB2b2lkIEZyYW1lVmlldzo6ZGlkRGVzdHJv
eVJlbmRlclRyZWUoKQogCiAgICAgQVNTRVJUKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3Rz
IHx8IG1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7CiAgICAg
QVNTRVJUKCFtX3Nsb3dSZXBhaW50T2JqZWN0cyB8fCBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+Y29t
cHV0ZXNFbXB0eSgpKTsKLQotICAgIEFTU0VSVCghZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5o
YXNBbmltYXRpb25zKCkpOwogfQogCiB2b2lkIEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNv
bnN0IEludFNpemUmIHNpemUpCkBAIC00NDE3LDggKzQ0MTQsNiBAQCB2b2lkIEZyYW1lVmlldzo6
dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSgpCiAgICAgLy8gU3R5bGUgdXBk
YXRlcyBjYW4gdHJpZ2dlciBzY3JpcHQsIHdoaWNoIGNhbiBjYXVzZSB0aGlzIEZyYW1lVmlldyB0
byBiZSBkZXN0cm95ZWQuCiAgICAgUmVmPEZyYW1lVmlldz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7
CiAKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmZnJhbWUo
KS5sZWdhY3lBbmltYXRpb24oKSk7Ci0KICAgICB1c2luZyBEZXNjZW5kYW50c0RlcXVlID0gRGVx
dWU8UmVmPEZyYW1lVmlldz4sIDE2PjsKICAgICBhdXRvIG5leHRSZW5kZXJlZERlc2NlbmRhbnQg
PSBbdGhpc10gKERlc2NlbmRhbnRzRGVxdWUmIGRlc2NlbmRhbnRzRGVxdWUpIC0+IFJlZlB0cjxG
cmFtZVZpZXc+IHsKICAgICAgICAgaWYgKGRlc2NlbmRhbnRzRGVxdWUuaXNFbXB0eSgpKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAKaW5kZXggMGM4
YmU3OTQ5NTFiNzhlMTliNzU5Mjg4NWJiZjgzNWViMWM5NTNiMS4uOWZhNTE3MGZhMTUxNWYzYWZi
NjdjZjMxMDdkOThjZmI5NWViMmQ1MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9G
cmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1l
Vmlld0xheW91dENvbnRleHQuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5oIgogCi0jaW5jbHVkZSAiQ1NT
QW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkRlYnVnUGFnZU92ZXJsYXlzLmgiCiAj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTIwNCw3ICsy
MDMsNiBAQCB2b2lkIEZyYW1lVmlld0xheW91dENvbnRleHQ6OmxheW91dCgpCiAgICAgTGF5b3V0
U2NvcGUgbGF5b3V0U2NvcGUoKnRoaXMpOwogICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKExh
eW91dFN0YXJ0LCBMYXlvdXRFbmQpOwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2ls
bExheW91dCh2aWV3KCkuZnJhbWUoKSk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0
aW9uVXBkYXRlQmxvY2soJnZpZXcoKS5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKICAgICBX
ZWFrUHRyPFJlbmRlckVsZW1lbnQ+IGxheW91dFJvb3Q7CiAgICAgCiAgICAgbV9sYXlvdXRUaW1l
ci5zdG9wKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAppbmRleCBhMGE3N2QyODgzNjQ4MjFjNTEwYjJkNTEy
YmE3MGU3MjljMjFiNmQ1Li5mOTIzYmE4OTI5OWMwMDhlMTBmMGQyOGVlODBhM2YzZjk3YmFhOTg2
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvUGFnZS5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJCYWNrRm9y
d2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDbGllbnQuaCIKICNpbmNsdWRlICJC
YWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiQ2FjaGVTdG9yYWdlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJDYWNoZWRS
ZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtMTY0OCw5ICsxNjQ3LDYg
QEAgdm9pZCBQYWdlOjpoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UoYm9vbCBpc0xvd1Bvd2VyTW9k
ZUVuYWJsZWQpCiAgICAgbV90aHJvdHRsaW5nUmVhc29ucyA9IG1fdGhyb3R0bGluZ1JlYXNvbnMg
XiBUaHJvdHRsaW5nUmVhc29uOjpMb3dQb3dlck1vZGU7CiAgICAgcmVuZGVyaW5nVXBkYXRlU2No
ZWR1bGVyKCkuYWRqdXN0UmVuZGVyaW5nVXBkYXRlRnJlcXVlbmN5KCk7CiAKLSAgICBpZiAoIVJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24o
KS51cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLQogICAgIHVwZGF0ZURPTVRpbWVyQWxpZ25tZW50
SW50ZXJ2YWwoKTsKIH0KIApAQCAtMjE4NSwxMyArMjE4MSwxMCBAQCB2b2lkIFBhZ2U6OnNldElz
VmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogICAgICAgICAgICAgdmlldy0+c2hvdygp
OwogCiAgICAgICAgIGlmIChtX3NldHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVu
c2lvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRp
bWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+
cmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBl
bHNlCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkucmVzdW1l
QW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYg
ZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1l
bnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMt
PnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAg
ICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKQEAgLTIyMDksMTMg
KzIyMDIsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJs
ZSkKIAogICAgIGlmICghaXNWaXNpYmxlKSB7CiAgICAgICAgIGlmIChtX3NldHRpbmdzLT5oaWRk
ZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50
KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8q
IHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAg
ICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgIG1haW5GcmFtZSgp
LmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICBmb3JF
YWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgICAgIGlm
IChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpCisgICAg
ICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAg
ICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVu
dCYgZG9jdW1lbnQpIHsKQEAgLTI1NjAsMjEgKzI1NTAsMTQgQEAgdm9pZCBQYWdlOjpyZXNldFNl
ZW5NZWRpYUVuZ2luZXMoKQogdm9pZCBQYWdlOjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVu
c2lvblN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgaWYgKCFpc1Zpc2libGUoKSkgewotICAgICAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChb
Jl0gKERvY3VtZW50JiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1l
bGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5h
YmxlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgICAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAg
ICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICB9KTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX3NldHRpbmdz
LT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgICAg
ICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwot
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1h
dGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQorICAgICAgICBmb3JFYWNoRG9j
dW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiB0
aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpIHsKKyAgICAgICAgICAg
ICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFi
bGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMo
KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+
cmVzdW1lQW5pbWF0aW9ucygpOworICAgICAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5kZXgg
MDg0M2VkNzYwY2RlYzczYTljYjFhZmY3ZGEyOWNjYTQwMjRhNmE0My4uZTY0YjJlNjE5YjFhZDQw
MWVjZTk4YzdlYTg0MDllZjVhOTk2YWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50
aW1lRW5hYmxlZEZlYXR1cmVzLmgKQEAgLTcwLDEyICs3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldElzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9p
c1NlY3VyZUNvbnRleHRBdHRyaWJ1dGVFbmFibGVkID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBp
c1NlY3VyZUNvbnRleHRBdHRyaWJ1dGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlY3Vy
ZUNvbnRleHRBdHRyaWJ1dGVFbmFibGVkOyB9CiAKLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNF
bmFibGVkKGJvb2wgYXJlRW5hYmxlZCkgeyBtX2FyZVdlYkFuaW1hdGlvbnNFbmFibGVkID0gYXJl
RW5hYmxlZDsgfQotICAgIGJvb2wgd2ViQW5pbWF0aW9uc0VuYWJsZWQoKSBjb25zdCB7IHJldHVy
biBtX2FyZVdlYkFuaW1hdGlvbnNFbmFibGVkOyB9Ci0KLSAgICB2b2lkIHNldFdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgPSBpc0VuYWJsZWQ7IH0KLSAgICBib29sIHdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZVdlYkFuaW1h
dGlvbnNFbmFibGVkICYmIG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOyB9
Ci0KICAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChi
b29sIGFyZUVuYWJsZWQpIHsgbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0Vu
YWJsZWQgPSBhcmVFbmFibGVkOyB9CiAgICAgYm9vbCB3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3Bl
cmF0aW9uc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZVdlYkFuaW1hdGlvbnNDb21wb3Np
dGVPcGVyYXRpb25zRW5hYmxlZDsgfQogCkBAIC0zMDAsOCArMjk0LDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIG1faXNNZW51SXRlbUVsZW1lbnRFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1f
aXNEaXJlY3RvcnlVcGxvYWRFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9hcmVXZWJBbmltYXRp
b25zRW5hYmxlZCB7IHRydWUgfTsKLSAgICBib29sIG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkIHsgdHJ1ZSB9OwogICAgIGJvb2wgbV9hcmVXZWJBbmltYXRpb25zQ29tcG9z
aXRlT3BlcmF0aW9uc0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9hcmVXZWJBbmltYXRp
b25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0ltYWdl
Qml0bWFwRW5hYmxlZCB7IHRydWUgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQW5pbWF0aW9uQmFzZS5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYWU3
NDM1OTc3ZmE5MjUwZWMxMGMxNzM5NDE1ZGU0Y2Q0ZjU1M2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw3ODggKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotCi0jaW5jbHVk
ZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRp
dmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAi
Q29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJG
bG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1
ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJT
dHlsZS5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0j
aW5jbHVkZSA8d3RmL1JlZi5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUFuaW1hdGlvbkJh
c2U6OkFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIEVsZW1lbnQmIGVs
ZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgIDogbV9l
bGVtZW50KCZlbGVtZW50KQotICAgICwgbV9jb21wb3NpdGVBbmltYXRpb24oJmNvbXBvc2l0ZUFu
aW1hdGlvbikKLSAgICAsIG1fYW5pbWF0aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0
aW9uKSkKLXsKLSAgICAvLyBDb21wdXRlIHRoZSB0b3RhbCBkdXJhdGlvbgotICAgIGlmIChtX2Fu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCi0gICAgICAgIG1fdG90YWxEdXJhdGlvbiA9
IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7
Ci19Ci0KLUFuaW1hdGlvbkJhc2U6On5BbmltYXRpb25CYXNlKCkgPSBkZWZhdWx0OwotCi1jb25z
dCBSZW5kZXJTdHlsZSYgQW5pbWF0aW9uQmFzZTo6Y3VycmVudFN0eWxlKCkgY29uc3QKLXsKLSAg
ICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4g
cmVuZGVyZXItPnN0eWxlKCk7Ci0gICAgcmV0dXJuIHVuYW5pbWF0ZWRTdHlsZSgpOwotfQotCi1S
ZW5kZXJFbGVtZW50KiBBbmltYXRpb25CYXNlOjpyZW5kZXJlcigpIGNvbnN0Ci17Ci0gICAgcmV0
dXJuIG1fZWxlbWVudCA/IG1fZWxlbWVudC0+cmVuZGVyZXIoKSA6IG51bGxwdHI7Ci19Ci0KLXZv
aWQgQW5pbWF0aW9uQmFzZTo6Y2xlYXIoKQotewotICAgIGVuZEFuaW1hdGlvbigpOwotICAgIG1f
ZWxlbWVudCA9IG51bGxwdHI7Ci0gICAgbV9jb21wb3NpdGVBbmltYXRpb24gPSBudWxscHRyOwot
fQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OnNldE5lZWRzU3R5bGVSZWNhbGMoRWxlbWVudCogZWxl
bWVudCkKLXsKLSAgICBpZiAoIWVsZW1lbnQgfHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5yZW5kZXJU
cmVlQmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGVsZW1l
bnQtPmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdElu
QmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlKCk7Ci19Ci0K
LWRvdWJsZSBBbmltYXRpb25CYXNlOjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
YW5pbWF0aW9uLT5kdXJhdGlvbigpOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OnBsYXlTdGF0
ZVBsYXlpbmcoKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+cGxheVN0YXRlKCkg
PT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6
OmFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbikgY29uc3QKLXsKLSAg
ICByZXR1cm4gbV9hbmltYXRpb24tPmFuaW1hdGlvbnNNYXRjaChhbmltYXRpb24pOwotfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotc3RhdGljIGNvbnN0IGNoYXIqIG5hbWVGb3JTdGF0ZShBbmltYXRp
b25CYXNlOjpBbmltYXRpb25TdGF0ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0g
ICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6TmV3OiByZXR1cm4gIk5ldyI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXI6
IHJldHVybiAiU3RhcnRXYWl0VGltZXIiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRSZXNwb25zZTogcmV0dXJuICJTdGFydFdhaXRSZXNwb25zZSI7Ci0gICAgY2FzZSBBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6TG9vcGluZzogcmV0dXJuICJMb29waW5nIjsKLSAg
ICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpFbmRpbmc6IHJldHVybiAiRW5k
aW5nIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc6
IHJldHVybiAiUGF1c2VkTmV3IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0
YXRlOjpQYXVzZWRXYWl0VGltZXI6IHJldHVybiAiUGF1c2VkV2FpdFRpbWVyIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU6
IHJldHVybiAiUGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJh
c2U6OkFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2U6IHJldHVybiAiUGF1c2VkV2Fp
dFJlc3BvbnNlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQYXVz
ZWRSdW46IHJldHVybiAiUGF1c2VkUnVuIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlOjpEb25lOiByZXR1cm4gIkRvbmUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6
QW5pbWF0aW9uU3RhdGU6OkZpbGxpbmdGb3J3YXJkczogcmV0dXJuICJGaWxsaW5nRm9yd2FyZHMi
OwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0jZW5kaWYKLQotI2lmICFFUlJPUl9ESVNBQkxF
RAotc3RhdGljIGNvbnN0IGNoYXIqIG5hbWVGb3JTdGF0ZUlucHV0KEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlSW5wdXQgaW5wdXQpCi17Ci0gICAgc3dpdGNoIChpbnB1dCkgewotICAgIGNh
c2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6TWFrZU5ldzogcmV0dXJuICJN
YWtlTmV3IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0
YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlN0YXJ0QW5pbWF0aW9uIjsKLSAgICBjYXNlIEFuaW1hdGlv
bkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb246IHJldHVybiAiUmVz
dGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdGFydFRpbWVyRmlyZWQ6IHJldHVybiAiU3RhcnRUaW1lckZpcmVkIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlOiByZXR1
cm4gIlN0eWxlQXZhaWxhYmxlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0YXJ0VGltZVNldDogcmV0dXJuICJTdGFydFRpbWVTZXQiOwotICAgIGNhc2Ug
QW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQ6IHJldHVy
biAiTG9vcFRpbWVyRmlyZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGVJbnB1dDo6RW5kVGltZXJGaXJlZDogcmV0dXJuICJFbmRUaW1lckZpcmVkIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGU6IHJldHVy
biAiUGF1c2VPdmVycmlkZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZUlucHV0OjpSZXN1bWVPdmVycmlkZTogcmV0dXJuICJSZXN1bWVPdmVycmlkZSI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nOiBy
ZXR1cm4gIlBsYXlTdGF0ZVJ1bm5pbmciOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkOiByZXR1cm4gIlBsYXlTdGF0ZVBhdXNlZCI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRBbmltYXRp
b246IHJldHVybiAiRW5kQW5pbWF0aW9uIjsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotfQotI2Vu
ZGlmCi0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQgaW5wdXQsIGRvdWJsZSBwYXJhbSkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5p
bWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBnZXQgQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6UmVzdGFydEFuaW1hdGlvbiB0aGVuIHdlIGZvcmNlIGEgbmV3IGFuaW1hdGlvbiwg
cmVnYXJkbGVzcyBvZiBzdGF0ZS4KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1
dDo6TWFrZU5ldykgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25T
dGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFu
aW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAg
bV9zdGFydFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpu
dWxsb3B0OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24o
KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJv
bUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2Fu
aW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0
ZTo6TmV3OwotICAgICAgICBtX3N0YXJ0VGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgbV9w
YXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0g
MDsKLSAgICAgICAgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSBXVEY6Om51bGxvcHQ7Ci0gICAg
ICAgIGVuZEFuaW1hdGlvbigpOwotCi0gICAgICAgIGlmICghcGF1c2VkKCkpCi0gICAgICAgICAg
ICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24s
IC0xKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmltYXRp
b25TdGF0ZUlucHV0OjpFbmRBbmltYXRpb24pIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAg
ICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9t
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0gICAgICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRG9uZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2Fu
aW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0
ZTo6RG9uZTsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9
Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGF1c2VPdmVycmlkZSkg
ewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0UmVzcG9uc2UpIHsKLSAgICAgICAgICAgIC8vIElmIHdlIGFyZSBpbiBBbmltYXRpb25TdGF0
ZTo6U3RhcnRXYWl0UmVzcG9uc2UsIHRoZSBhbmltYXRpb24gd2lsbCBnZXQgY2FuY2VsZWQgYmVm
b3JlIAotICAgICAgICAgICAgLy8gd2UgZ2V0IGEgcmVzcG9uc2UsIHNvIG1vdmUgdG8gdGhlIG5l
eHQgc3RhdGUuCi0gICAgICAgICAgICBlbmRBbmltYXRpb24oKTsKLSAgICAgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQot
Ci0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3VtZU92ZXJyaWRlKSB7
Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpMb29waW5n
IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykgewotICAgICAg
ICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgc3RhcnRBbmltYXRpb24o
YmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAg
ICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgLy8gRXhlY3V0ZSBzdGF0ZSBt
YWNoaW5lCi0gICAgc3dpdGNoIChtX2FuaW1hdGlvblN0YXRlKSB7Ci0gICAgICAgIGNhc2UgQW5p
bWF0aW9uU3RhdGU6Ok5ldzoKLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0
OjpQbGF5U3RhdGVSdW5uaW5nIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlT
dGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdGFydEFuaW1hdGlvbiB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5
U3RhdGVSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSBi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFRpbWVyIiwgdGhpcywgbmFtZUZv
clN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0
YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOwotICAgICAgICAgICAgfSBlbHNl
IHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyBiZWZvcmUgd2UgZXZlbiBzdGFy
dGVkLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUg
JXMgLT4gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2Fu
aW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWROZXc7Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcjoKLSAgICAgICAgICAgIEFTU0VSVChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQgfHwgaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYg
KGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZXJGaXJlZCkgewotICAgICAg
ICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKLSAgICAgICAgICAgICAgICAvLyBTdGFydCB0
aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3Ig
aXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0
aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlICh0
aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0p
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRp
b24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
KnRoaXMpOwotCi0gICAgICAgICAgICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4g
c3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fZWxlbWVudCk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIEFTU0VSVCghcGF1c2VkKCkpOwotICAgICAgICAgICAg
ICAgIC8vIFdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJlIGFuZCB3ZSBn
b3QgYSBwYXVzZS4gQ2FuY2VsIHRoZSB0aW1lciwgcGF1c2UgYW5kIHdhaXQKLSAgICAgICAgICAg
ICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkV2Fp
dFRpbWVyIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRUaW1l
cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1h
dGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZToKLSAgICAgICAgICAgIEFTU0VSVChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSB8fCBpbnB1dCA9PSBB
bmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0gICAgICAgICAgICBpZiAo
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpIHsKLSAgICAgICAg
ICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBz
dGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKLSAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2Fp
dFJlc3BvbnNlICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0
YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRp
b25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U7Ci0KLSAgICAgICAgICAgICAgICBvdmVycmlkZUFu
aW1hdGlvbnMoKTsKLQotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KLSAg
ICAgICAgICAgICAgICBpZiAob3ZlcnJpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFyZSBv
dmVycmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IG1vdmUgb24gdG8gdGhl
IG5leHQgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUo
bV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRl
ID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgICAgICAg
ICBtX2lzQWNjZWxlcmF0ZWQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRp
b25VcGRhdGVUaW1lKCkpOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGRvdWJsZSB0aW1lT2Zmc2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYg
dGhlIHZhbHVlIGZvciAnYW5pbWF0aW9uLWRlbGF5JyBpcyBuZWdhdGl2ZSB0aGVuIHRoZSBhbmlt
YXRpb24gYXBwZWFycyB0byBoYXZlIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApCi0gICAgICAgICAgICAgICAgICAg
ICAgICB0aW1lT2Zmc2V0ID0gLW1fYW5pbWF0aW9uLT5kZWxheSgpOwotICAgICAgICAgICAgICAg
ICAgICBib29sIHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0KTsKLQotICAgICAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRl
ZCk7Ci0gICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7Ci0gICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBX
ZSdyZSB3YWl0aW5nIGZvciB0aGUgc3R5bGUgdG8gYmUgYXZhaWxhYmxlIGFuZCB3ZSBnb3QgYSBw
YXVzZS4gUGF1c2UgYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlIiwgdGhpcywg
bmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1h
dGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0
YXRlOjpTdGFydFdhaXRSZXNwb25zZToKLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChw
YXJhbSA+IC0wLjAwMSk7IC8vIFNvbWV0aW1lcyBDb3JlIEFuaW1hdGlvbiBnaXZlcyB1cyBhIGJl
Z2luVGltZSBzbGlnaHRseSBpbnRvIHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFRpbWVTZXQgKHRpbWUgaXMg
JWYpIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBXZSBoYXZlIGEgc3RhcnQgdGltZSwgc2V0IGl0LCB1bmxlc3MgdGhl
IHN0YXJ0VGltZSBpcyBhbHJlYWR5IHNldAotICAgICAgICAgICAgICAgIGlmICghbV9zdGFydFRp
bWUpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSBwYXJhbTsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGZvciAnYW5pbWF0aW9uLWRlbGF5JyBpcyBuZWdh
dGl2ZSB0aGVuIHRoZSBhbmltYXRpb24gYXBwZWFycyB0byBoYXZlIHN0YXJ0ZWQgaW4gdGhlIHBh
c3QuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApCi0g
ICAgICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lLnZhbHVlKCkg
KyBtX2FuaW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICAvLyBOb3cgdGhhdCB3ZSBrbm93IHRoZSBzdGFydCB0aW1lLCBmaXJlIHRoZSBzdGFydCBl
dmVudC4KLSAgICAgICAgICAgICAgICBvbkFuaW1hdGlvblN0YXJ0KDApOyAvLyBUaGUgZWxhcHNl
ZFRpbWUgaXMgMC4KLQotICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGV0aGVyIHRvIGdvIGlu
dG8gbG9vcGluZyBvciBlbmRpbmcgc3RhdGUKLSAgICAgICAgICAgICAgICBnb0ludG9FbmRpbmdP
ckxvb3BpbmdTdGF0ZSgpOwotCi0gICAgICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdXBkYXRlU3R5
bGVJZk5lZWRlZCBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAg
IGlmIChtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9u
LT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fZWxl
bWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBw
YXVzaW5nIHdoaWxlIHdhaXRpbmcgZm9yIGEgc3RhcnQgcmVzcG9uc2UuIENhbmNlbCB0aGUgYW5p
bWF0aW9uIGFuZCB3YWl0LiBXaGVuIAotICAgICAgICAgICAgICAgIC8vIHdlIHVucGF1c2UsIHdl
IHdpbGwgYWN0IGFzIHRob3VnaCB0aGUgc3RhcnQgdGltZXIganVzdCBmaXJlZAotICAgICAgICAg
ICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAgICAg
ICAgICAgICAgcGF1c2VBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVw
IEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0
ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2U7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZzoK
LSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpMb29wVGlt
ZXJGaXJlZCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQp
OwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRp
bWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7Ci0gICAgICAg
ICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBMb29wVGlt
ZXJGaXJlZCAodGltZSBpcyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSksIHBhcmFtKTsKLQotICAgICAgICAgICAgICAgIC8vIExvb3AgdGltZXIgZmlyZWQsIGxvb3Ag
YWdhaW4gb3IgZW5kLgotICAgICAgICAgICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uKHBhcmFt
KTsKLQotICAgICAgICAgICAgICAgIC8vIERlY2lkZSB3aGV0aGVyIHRvIGdvIGludG8gbG9vcGlu
ZyBvciBlbmRpbmcgc3RhdGUKLSAgICAgICAgICAgICAgICBnb0ludG9FbmRpbmdPckxvb3BpbmdT
dGF0ZSgpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUg
cGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdAotICAg
ICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0g
ICAgICAgICAgICAgICAgcGF1c2VBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkg
LSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biIsIHRoaXMsIG5hbWVGb3JTdGF0
ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9
IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOgotI2lmICFFUlJPUl9E
SVNBQkxFRAotICAgICAgICAgICAgaWYgKGlucHV0ICE9IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVu
ZFRpbWVyRmlyZWQgJiYgaW5wdXQgIT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1
c2VkKQotICAgICAgICAgICAgICAgIExPR19FUlJPUigiU3RhdGUgaXMgQW5pbWF0aW9uU3RhdGU6
OkVuZGluZywgYnV0IGlucHV0IGlzIG5vdCBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZp
cmVkIG9yIEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZC4gSXQgaXMgJXMuIiwg
bmFtZUZvclN0YXRlSW5wdXQoaW5wdXQpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlucHV0
ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAg
ICBBU1NFUlQocGFyYW0gPj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gRW5kIHRpbWVyIGZpcmVk
LCBmaW5pc2ggdXAKLSAgICAgICAgICAgICAgICBvbkFuaW1hdGlvbkVuZChwYXJhbSk7Ci0KLSAg
ICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IERv
bmUgKHRpbWUgaXMgJWYpIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBw
YXJhbSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpEb25lOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9u
U3RhdGUgJXMgLT4gRmlsbGluZ0ZvcndhcmRzIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0
aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBB
bmltYXRpb25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOwotICAgICAgICAgICAgICAgICAgICB9IGVs
c2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCk7
Ci0KLSAgICAgICAgICAgICAgICAgICAgLy8gRmlyZSBvZmYgYW5vdGhlciBzdHlsZSBjaGFuZ2Ug
c28gd2UgY2FuIHNldCB0aGUgZmluYWwgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1f
ZWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5h
bmltYXRpb25Db250cm9sbGVyKCkuYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fZWxlbWVu
dCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlv
biBhbmQgd2FpdAotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgcGF1c2VBbmltYXRpb24oYmVnaW5BbmltYXRp
b25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9h
bmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW47Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICAvLyB8dGhpc3wgbWF5IGJlIGRlbGV0ZWQgaGVyZQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRUaW1lcjoKLSAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVS
dW5uaW5nKTsKLSAgICAgICAgICAgIEFTU0VSVChwYXVzZWQoKSk7Ci0gICAgICAgICAgICAvLyBV
cGRhdGUgdGhlIHRpbWVzCi0gICAgICAgICAgICBtX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lLnZh
bHVlT3IoMCkgKyBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcGF1c2VUaW1lLnZhbHVl
T3IoMCk7Ci0gICAgICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLQotICAgICAg
ICAgICAgLy8gd2Ugd2VyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSwgZ28g
YmFjayBhbmQgd2FpdCBhZ2FpbgotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmlt
YXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSkpOwotICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7
Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3Rh
cnRBbmltYXRpb24sIDApOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZE5ldzoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
V2FpdFJlc3BvbnNlOgotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0U3R5
bGVBdmFpbGFibGU6Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjoKLSAg
ICAgICAgICAgIC8vIFdlIHRyZWF0IHRoZXNlIHR3byBjYXNlcyB0aGUgc2FtZS4gVGhlIG9ubHkg
ZGlmZmVyZW5jZSBpcyB0aGF0LCB3aGVuIHdlIGFyZSBpbgotICAgICAgICAgICAgLy8gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSwgd2UgZG9uJ3QgeWV0IGhhdmUgYSB2YWxpZCBz
dGFydFRpbWUsIHNvIHdlIHNlbmQgMCB0byBzdGFydEFuaW1hdGlvbi4KLSAgICAgICAgICAgIC8v
IFdoZW4gdGhlIEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCBjb21lcyBpbiBhbmQg
d2Ugd2VyZSBpbiBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuLCB3ZSB3aWxsIG5vdGljZQotICAg
ICAgICAgICAgLy8gdGhhdCB3ZSBoYXZlIGFscmVhZHkgc2V0IHRoZSBzdGFydFRpbWUgYW5kIHdp
bGwgaWdub3JlIGl0LgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQ
bGF5U3RhdGVSdW5uaW5nIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGlt
ZVNldCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSk7Ci0g
ICAgICAgICAgICBBU1NFUlQocGF1c2VkKCkpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewotICAgICAgICAgICAgICAg
IGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXcpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugd2VyZSBwYXVzZWQgYmVmb3JlIHdlIGV2ZW4gc3RhcnRl
ZCwgYW5kIG5vdyB3ZSdyZSBzdXBwb3NlZAotICAgICAgICAgICAgICAgICAgICAvLyB0byBzdGFy
dCwgc28ganVtcCBiYWNrIHRvIHRoZSBOZXcgc3RhdGUgYW5kIHJlc2V0LgotICAgICAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlv
blN0YXRlOjpOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsK
LSAgICAgICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAg
ICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShpbnB1dCwgcGFyYW0pOwotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAv
LyBVcGRhdGUgdGhlIHRpbWVzCi0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bikKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFy
dFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1l
KCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAg
ICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSAwOwotCi0gICAgICAgICAgICAgICAgbV9wYXVz
ZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25T
dGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25T
dGF0ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9u
U3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdlcmUgZWl0aGVyIHJ1bm5pbmcgb3Igd2FpdGlu
ZyBmb3IgYSBiZWdpbiB0aW1lIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdGlvbi4KLSAgICAgICAg
ICAgICAgICAgICAgLy8gRWl0aGVyIHdheSB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIGFuaW1hdGlv
biAocG9zc2libHkgd2l0aCBhbiBvZmZzZXQgaWYgd2UKLSAgICAgICAgICAgICAgICAgICAgLy8g
aGFkIGFscmVhZHkgYmVlbiBydW5uaW5nKSBhbmQgd2FpdCBmb3IgaXQgdG8gc3RhcnQuCi0gICAg
ICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
U3RhcnRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6
OlN0YXJ0V2FpdFJlc3BvbnNlOwotCi0gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBh
bmltYXRpb24KLSAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgdHJ5IHRvIHN0YXJ0IGFjY2VsZXJhdGVkIGFu
aW1hdGlvbnMgaWYgd2UgYXJlIG92ZXJyaWRkZW4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAg
ICAvLyBqdXN0IG1vdmUgb24gdG8gdGhlIG5leHQgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAg
ICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0
LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2lzQWNjZWxlcmF0ZWQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24oYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFy
dGVkKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQpIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2Fp
dFJlc3BvbnNlKTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUg
cGF1c2VkIGJ1dCB3ZSBnb3QgdGhlIGNhbGxiYWNrIHRoYXQgbm90aWZpZXMgdXMgdGhhdCBhbiBh
Y2NlbGVyYXRlZCBhbmltYXRpb24gc3RhcnRlZC4KLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25v
cmUgdGhlIHN0YXJ0IHRpbWUgYW5kIGp1c3QgbW92ZSBpbnRvIHRoZSBwYXVzZWQtcnVuIHN0YXRl
LgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gUGF1c2VkUnVuICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlv
blN0YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zdGFydFRp
bWUpOwotICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAg
ICAgbV9wYXVzZVRpbWUgPSBtX3BhdXNlVGltZS52YWx1ZU9yKDApICsgcGFyYW07Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2Fu
aW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXcgfHwgbV9hbmltYXRpb25T
dGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlKTsKLQotICAg
ICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNl
ZCkKLSAgICAgICAgICAgICAgICBicmVhazsKLQotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKTsKLQotICAgICAgICAgICAgLy8g
V2UgYXJlIHBhdXNlZCBidXQgd2UgZ290IHRoZSBjYWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRo
YXQgc3R5bGUgaGFzIGJlZW4gdXBkYXRlZC4KLSAgICAgICAgICAgIC8vIFdlIG1vdmUgdG8gdGhl
IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2Ugc3RhdGUKLSAgICAgICAgICAgIExP
RyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkV2FpdFJlc3BvbnNl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOwotICAg
ICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOgotICAgICAgICBjYXNlIEFu
aW1hdGlvblN0YXRlOjpEb25lOgotICAgICAgICAgICAgLy8gV2UncmUgZG9uZS4gU3RheSBpbiB0
aGlzIHN0YXRlIHVudGlsIHdlIGFyZSBkZWxldGVkCi0gICAgICAgICAgICBicmVhazsKLSAgICB9
Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCkK
LXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICAvLyBJZiB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIGRlbGF5IHRpbWUgdG8gZXhwaXJlIGFuZCBp
dCBoYXMsIGdvIHRvIHRoZSBuZXh0IHN0YXRlCi0gICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgIT0g
QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyICYmIG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5p
bWF0aW9uU3RhdGU6Okxvb3BpbmcgJiYgbV9hbmltYXRpb25TdGF0ZSAhPSBBbmltYXRpb25TdGF0
ZTo6RW5kaW5nKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXZSBoYXZlIHRvIG1ha2Ugc3Vy
ZSB0byBrZWVwIGEgcmVmIHRvIHRoZSB0aGlzIHBvaW50ZXIsIGJlY2F1c2UgaXQgY291bGQgZ2V0
IGRlc3Ryb3llZAotICAgIC8vIGR1cmluZyBhbiBhbmltYXRpb24gY2FsbGJhY2sgdGhhdCBtaWdo
dCBnZXQgY2FsbGVkLiBTaW5jZSB0aGUgb3duZXIgaXMgYSBDb21wb3NpdGVBbmltYXRpb24KLSAg
ICAvLyBhbmQgaXQgcmVmIGNvdW50cyB0aGlzIG9iamVjdCwgd2Ugd2lsbCBrZWVwIGEgcmVmIHRv
IHRoYXQgaW5zdGVhZC4gVGhhdCB3YXkgdGhlIEFuaW1hdGlvbkJhc2UKLSAgICAvLyBjYW4gc3Rp
bGwgYWNjZXNzIHRoZSByZXNvdXJjZXMgb2YgaXRzIENvbXBvc2l0ZUFuaW1hdGlvbiBhcyBuZWVk
ZWQuCi0gICAgUmVmPEFuaW1hdGlvbkJhc2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAgIFJl
ZjxDb21wb3NpdGVBbmltYXRpb24+IHByb3RlY3RDb21wb3NpdGVBbmltYXRpb24oKm1fY29tcG9z
aXRlQW5pbWF0aW9uKTsKLSAgICAKLSAgICAvLyBDaGVjayBmb3Igc3RhcnQgdGltZW91dAotICAg
IGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcikg
ewotICAgICAgICBpZiAoYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3JlcXVlc3RlZFN0
YXJ0VGltZSA+PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRl
TWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQsIDApOwotICAgICAg
ICByZXR1cm47Ci0gICAgfQotCi0gICAgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKTsKLQotICAgIC8vIEZJ
WE1FOiB3ZSBuZWVkIHRvIGVuc3VyZSB0aGF0IGVsYXBzZWREdXJhdGlvbiBpcyBuZXZlciA8IDAu
IElmIGl0IGlzLCB0aGlzIHN1Z2dlc3RzIHRoYXQKLSAgICAvLyB3ZSBoYWQgYSByZWNhbGNTdHls
ZSgpIG91dHNpZGUgb2YgYmVnaW5BbmltYXRpb25VcGRhdGUoKS9lbmRBbmltYXRpb25VcGRhdGUo
KS4KLSAgICAvLyBBbHNvIGNoZWNrIGluIGdldFRpbWVUb05leHRFdmVudCgpLgotICAgIGVsYXBz
ZWREdXJhdGlvbiA9IHN0ZDo6bWF4KGVsYXBzZWREdXJhdGlvbiwgMC4wKTsKLSAgICAKLSAgICAv
LyBDaGVjayBmb3IgZW5kIHRpbWVvdXQKLSAgICBpZiAobV90b3RhbER1cmF0aW9uICYmIGVsYXBz
ZWREdXJhdGlvbiA+PSBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSkgewotICAgICAgICAvLyBXZSBt
YXkgc3RpbGwgYmUgaW4gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgaWYgd2UndmUgbWFuYWdlZCB0
byBza2lwIGEKLSAgICAgICAgLy8gd2hvbGUgaXRlcmF0aW9uLCBpbiB3aGljaCBjYXNlIHdlIHNo
b3VsZCBqdW1wIHRvIHRoZSBlbmQgc3RhdGUuCi0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAg
QW5pbWF0aW9uU3RhdGUgJXMgLT4gRW5kaW5nIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0
aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpF
bmRpbmc7Ci0KLSAgICAgICAgLy8gRmlyZSBhbiBlbmQgZXZlbnQKLSAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQsIG1fdG90YWxEdXJh
dGlvbi52YWx1ZSgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBDaGVjayBmb3IgaXRlcmF0
aW9uIHRpbWVvdXQKLSAgICAgICAgaWYgKCFtX25leHRJdGVyYXRpb25EdXJhdGlvbikgewotICAg
ICAgICAgICAgLy8gSGFzbid0IGJlZW4gc2V0IHlldCwgc2V0IGl0Ci0gICAgICAgICAgICBkb3Vi
bGUgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9kKGVsYXBzZWRE
dXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOwotICAgICAgICAgICAgbV9uZXh0SXRl
cmF0aW9uRHVyYXRpb24gPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgICAg
IH0KLSAgICAgICAgCi0gICAgICAgIGlmIChlbGFwc2VkRHVyYXRpb24gPj0gbV9uZXh0SXRlcmF0
aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIFNldCB0byB0aGUgbmV4dCBpdGVyYXRpb24K
LSAgICAgICAgICAgIGRvdWJsZSBwcmV2aW91cyA9IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uLnZh
bHVlKCk7Ci0gICAgICAgICAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1
cmF0aW9uKCkgLSBmbW9kKGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkp
OwotICAgICAgICAgICAgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSBlbGFwc2VkRHVyYXRpb24g
KyBkdXJhdGlvbkxlZnQ7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNlbmQgdGhlIGV2
ZW50Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6
TG9vcFRpbWVyRmlyZWQsIHByZXZpb3VzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBB
bmltYXRpb25CYXNlOjp1cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlIHBsYXlTdGF0
ZSkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0K
LSAgICAvLyBXaGVuIHdlIGdldCBoZXJlLCB3ZSBjYW4gaGF2ZSBvbmUgb2YgNCBkZXNpcmVkIHN0
YXRlczogcnVubmluZywgcGF1c2VkLCBzdXNwZW5kZWQsIHBhdXNlZCAmIHN1c3BlbmRlZC4KLSAg
ICAvLyBUaGUgc3RhdGUgbWFjaGluZSBjYW4gYmUgaW4gb25lIG9mIHR3byBzdGF0ZXM6IHJ1bm5p
bmcsIHBhdXNlZC4KLSAgICAvLyBTZXQgdGhlIHN0YXRlIG1hY2hpbmUgdG8gdGhlIGRlc2lyZWQg
c3RhdGUuCi0gICAgYm9vbCBwYXVzZSA9IHBsYXlTdGF0ZSA9PSBBbmltYXRpb25QbGF5U3RhdGU6
OlBhdXNlZCB8fCBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKTsKLQotICAgIGlm
IChwYXVzZSA9PSBwYXVzZWQoKSAmJiAhaXNOZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
dXBkYXRlU3RhdGVNYWNoaW5lKHBhdXNlID8gIEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0
ZVBhdXNlZCA6IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcsIC0xKTsKLX0K
LQotT3B0aW9uYWw8U2Vjb25kcz4gQW5pbWF0aW9uQmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKQot
ewotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgYXQgd2hpY2ggbmV4dCBzZXJ2aWNlIGlzIHJlcXVp
cmVkLiBXVEY6Om51bGxvcHQgbWVhbnMgbm8gc2VydmljZSBpcyByZXF1aXJlZC4gMCBtZWFucwot
ICAgIC8vIHNlcnZpY2UgaXMgcmVxdWlyZWQgbm93LCBhbmQgPiAwIG1lYW5zIHNlcnZpY2UgaXMg
cmVxdWlyZWQgdGhhdCBtYW55IHNlY29uZHMgaW4gdGhlIGZ1dHVyZS4KLSAgICBpZiAocGF1c2Vk
KCkgfHwgaXNOZXcoKSB8fCBwb3N0QWN0aXZlKCkgfHwgZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAg
ICAgIHJldHVybiBXVEY6Om51bGxvcHQ7Ci0gICAgCi0gICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyKSB7Ci0gICAgICAgIGRvdWJsZSB0aW1l
RnJvbU5vdyA9IG1fYW5pbWF0aW9uLT5kZWxheSgpIC0gKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUpOwotICAgICAgICByZXR1cm4gc3RkOjptYXgoU2Vj
b25kcyB7IHRpbWVGcm9tTm93IH0sIDBfcyk7Ci0gICAgfQotICAgIAotICAgIGZpcmVBbmltYXRp
b25FdmVudHNJZk5lZWRlZCgpOwotICAgICAgICAKLSAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMs
IHdlIG5lZWQgc2VydmljZSByaWdodCBhd2F5LgotICAgIHJldHVybiAwX3M7Ci19Ci0KLS8vIENv
bXB1dGUgdGhlIGZyYWN0aW9uYWwgdGltZSwgdGFraW5nIGludG8gYWNjb3VudCBkaXJlY3Rpb24u
Ci0vLyBUaGVyZSBpcyBubyBuZWVkIHRvIHdvcnJ5IGFib3V0IGl0ZXJhdGlvbnMsIHdlIGFzc3Vt
ZSB0aGF0IHdlIHdvdWxkIGhhdmUKLS8vIHNob3J0IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJl
IGRvbmUuCi0KLWRvdWJsZSBBbmltYXRpb25CYXNlOjpmcmFjdGlvbmFsVGltZShkb3VibGUgc2Nh
bGUsIGRvdWJsZSBlbGFwc2VkVGltZSwgZG91YmxlIG9mZnNldCkgY29uc3QKLXsKLSAgICBkb3Vi
bGUgZnJhY3Rpb25hbFRpbWUgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSA/IChlbGFwc2VkVGlt
ZSAvIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKSA6IDE7Ci0gICAgLy8gRklYTUU6IHN0YXJ0VGlt
ZSBjYW4gYmUgYmVmb3JlIHRoZSBjdXJyZW50IGFuaW1hdGlvbiAiZnJhbWUiIHRpbWUuIFRoaXMg
aXMgdG8gc3luYyB3aXRoIHRoZSBmcmFtZSB0aW1lCi0gICAgLy8gY29uY2VwdCBpbiBBbmltYXRp
b25UaW1lQ29udHJvbGxlci4gU28gd2UgbmVlZCB0byBzb21laG93IHN5bmMgdGhlIHR3by4gVW50
aWwgdGhlbiwgdGhlIHBvc3NpYmxlCi0gICAgLy8gZXJyb3IgaXMgc21hbGwgYW5kIHdpbGwgcHJv
YmFibHkgbm90IGJlIG5vdGljZWFibGUuIFVudGlsIHdlIGZpeCB0aGlzLCByZW1vdmUgdGhlIGFz
c2VydC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIw
MzcKLSAgICAvLyBBU1NFUlQoZnJhY3Rpb25hbFRpbWUgPj0gMCk7Ci0gICAgaWYgKGZyYWN0aW9u
YWxUaW1lIDwgMCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAwOwotCi0gICAgaW50IGludGVn
cmFsVGltZSA9IHN0YXRpY19jYXN0PGludD4oZnJhY3Rpb25hbFRpbWUpOwotICAgIGNvbnN0IGlu
dCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50ID0gc3RhdGljX2Nhc3Q8aW50PihtX2FuaW1hdGlvbi0+
aXRlcmF0aW9uQ291bnQoKSk7Ci0gICAgY29uc3QgYm9vbCBpdGVyYXRpb25Db3VudEhhc0ZyYWN0
aW9uYWwgPSBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAtIGludGVncmFsSXRlcmF0aW9u
Q291bnQ7Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlv
bjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSAmJiAhaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFs
KQotICAgICAgICBpbnRlZ3JhbFRpbWUgPSBzdGQ6Om1pbihpbnRlZ3JhbFRpbWUsIGludGVncmFs
SXRlcmF0aW9uQ291bnQgLSAxKTsKLQotICAgIGZyYWN0aW9uYWxUaW1lIC09IGludGVncmFsVGlt
ZTsKLQotICAgIGlmICgoKG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFu
aW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZSkgJiYgKGludGVncmFsVGltZSAmIDEpKQotICAgICAg
ICB8fCAoKG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRp
cmVjdGlvbkFsdGVybmF0ZVJldmVyc2UpICYmICEoaW50ZWdyYWxUaW1lICYgMSkpCi0gICAgICAg
IHx8IG1fYW5pbWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVj
dGlvblJldmVyc2UpCi0gICAgICAgIGZyYWN0aW9uYWxUaW1lID0gMSAtIGZyYWN0aW9uYWxUaW1l
OwotCi0gICAgaWYgKHNjYWxlICE9IDEgfHwgb2Zmc2V0KQotICAgICAgICBmcmFjdGlvbmFsVGlt
ZSA9IChmcmFjdGlvbmFsVGltZSAtIG9mZnNldCkgKiBzY2FsZTsKLQotICAgIHJldHVybiBmcmFj
dGlvbmFsVGltZTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OnByb2dyZXNzKGRvdWJsZSBz
Y2FsZSwgZG91YmxlIG9mZnNldCwgY29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9u
KSBjb25zdAotewotICAgIGlmIChwcmVBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAg
ICBpZiAocG9zdEFjdGl2ZSgpKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGRvdWJsZSBlbGFw
c2VkVGltZSA9IGdldEVsYXBzZWRUaW1lKCk7Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBtX2Fu
aW1hdGlvbi0+ZHVyYXRpb24oKTsKLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50
KCkgPiAwKQotICAgICAgICBkdXJhdGlvbiAqPSBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQo
KTsKLQotICAgIGlmIChmaWxsaW5nRm9yd2FyZHMoKSkKLSAgICAgICAgZWxhcHNlZFRpbWUgPSBk
dXJhdGlvbjsKLQotICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IHRoaXMtPmZyYWN0aW9uYWxU
aW1lKHNjYWxlLCBlbGFwc2VkVGltZSwgb2Zmc2V0KTsKLQotICAgIGlmIChtX2FuaW1hdGlvbi0+
aXRlcmF0aW9uQ291bnQoKSA+IDAgJiYgZWxhcHNlZFRpbWUgPj0gZHVyYXRpb24pIHsKLSAgICAg
ICAgaWYgKFdURjo6aXNJbnRlZ3JhbChmcmFjdGlvbmFsVGltZSkpCi0gICAgICAgICAgICByZXR1
cm4gZnJhY3Rpb25hbFRpbWU7Ci0gICAgfQotCi0gICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKLSAg
ICAgICAgdGltaW5nRnVuY3Rpb24gPSBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKTsKLQot
ICAgIHJldHVybiB0aW1pbmdGdW5jdGlvbi0+dHJhbnNmb3JtVGltZShmcmFjdGlvbmFsVGltZSwg
bV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmdldFRp
bWVUb05leHRFdmVudChTZWNvbmRzJiB0aW1lLCBib29sJiBpc0xvb3BpbmcpIGNvbnN0Ci17Ci0g
ICAgLy8gRGVjaWRlIHdoZW4gdGhlIGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKLSAg
ICBjb25zdCBkb3VibGUgZWxhcHNlZER1cmF0aW9uID0gc3RkOjptYXgoYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApLCAwLjApOwotICAgIGRvdWJsZSBk
dXJhdGlvbkxlZnQgPSAwOwotICAgIGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IG1fdG90YWxE
dXJhdGlvbi52YWx1ZU9yKDApOwotCi0gICAgaWYgKCFtX3RvdGFsRHVyYXRpb24gfHwgZWxhcHNl
ZER1cmF0aW9uIDwgbV90b3RhbER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgZHVyYXRpb25M
ZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPiAwID8gKG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKSkgOiAw
OwotICAgICAgICBuZXh0SXRlcmF0aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9u
TGVmdDsKLSAgICB9Ci0gICAgCi0gICAgaWYgKCFtX3RvdGFsRHVyYXRpb24gfHwgbmV4dEl0ZXJh
dGlvblRpbWUgPCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSkgewotICAgICAgICAvLyBXZSBhcmUg
bm90IGF0IHRoZSBlbmQgeWV0Ci0gICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDAp
OwotICAgICAgICBpc0xvb3BpbmcgPSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdl
IGFyZSBhdCB0aGUgZW5kCi0gICAgICAgIGlzTG9vcGluZyA9IGZhbHNlOwotICAgIH0KLSAgICAK
LSAgICB0aW1lID0gU2Vjb25kcyB7IGR1cmF0aW9uTGVmdCB9OwotfQotCi12b2lkIEFuaW1hdGlv
bkJhc2U6OmdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCkKLXsKLSAgICBTZWNvbmRzIHQ7Ci0g
ICAgYm9vbCBpc0xvb3Bpbmc7Ci0gICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQsIGlzTG9vcGluZyk7
Ci0gICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiAlcyIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgaXNMb29waW5nID8gIkxvb3BpbmciIDog
IkVuZGluZyIpOwotICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBpc0xvb3BpbmcgPyBBbmltYXRpb25T
dGF0ZTo6TG9vcGluZyA6IEFuaW1hdGlvblN0YXRlOjpFbmRpbmc7Ci19Ci0gIAotdm9pZCBBbmlt
YXRpb25CYXNlOjpmcmVlemVBdFRpbWUoZG91YmxlIHQpCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0
ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX3N0YXJ0VGltZSkgewot
ICAgICAgICAvLyBJZiB3ZSBoYXZlbid0IHN0YXJ0ZWQgeWV0LCBtYWtlIGl0IGFzIGlmIHdlIHN0
YXJ0ZWQuCi0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
U3RhcnRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJl
c3BvbnNlOwotICAgICAgICBvbkFuaW1hdGlvblN0YXJ0UmVzcG9uc2UoTW9ub3RvbmljVGltZTo6
bm93KCkpOwotICAgIH0KLQotICAgIEFTU0VSVChtX3N0YXJ0VGltZSk7IC8vIElmIG1fc3RhcnRU
aW1lIGlzIHplcm8sIHdlIGhhdmVuJ3Qgc3RhcnRlZCB5ZXQsIHNvIHdlJ2xsIGdldCBhIGJhZCBw
YXVzZSB0aW1lLgotICAgIGlmICh0IDw9IG1fYW5pbWF0aW9uLT5kZWxheSgpKQotICAgICAgICBt
X3BhdXNlVGltZSA9IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0gICAgZWxzZQotICAgICAgICBt
X3BhdXNlVGltZSA9IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkgKyB0IC0gbV9hbmltYXRpb24tPmRl
bGF5KCk7Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAg
ICAgICByZW5kZXJlci0+c3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZTo6ZnJvbVJhd1Nl
Y29uZHMobV9wYXVzZVRpbWUudmFsdWUoKSkpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFzZTo6
YmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbXBvc2l0ZUFu
aW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
LnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFz
ZTo6Z2V0RWxhcHNlZFRpbWUoKSBjb25zdAotewotICAgIGlmIChwYXVzZWQoKSkgewotICAgICAg
ICBkb3VibGUgZGVsYXlPZmZzZXQgPSAoIW1fc3RhcnRUaW1lICYmIG1fYW5pbWF0aW9uLT5kZWxh
eSgpIDwgMCkgPyBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA6IDA7Ci0gICAgICAgIHJldHVybiBtX3Bh
dXNlVGltZS52YWx1ZU9yKDApIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSAtIGRlbGF5T2Zmc2V0
OwotICAgIH0KLQotICAgIGlmICghbV9zdGFydFRpbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0g
ICAgaWYgKHBvc3RBY3RpdmUoKSB8fCBmaWxsaW5nRm9yd2FyZHMoKSkKLSAgICAgICAgcmV0dXJu
IG1fdG90YWxEdXJhdGlvbi52YWx1ZU9yKDApOwotCi0gICAgcmV0dXJuIGJlZ2luQW5pbWF0aW9u
VXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKTsKLX0KLQotdm9pZCBBbmltYXRp
b25CYXNlOjpzZXRFbGFwc2VkVGltZShkb3VibGUgdGltZSkKLXsKLSAgICAvLyBGSVhNRTogaW1w
bGVtZW50IHRoaXMgbWV0aG9kCi0gICAgVU5VU0VEX1BBUkFNKHRpbWUpOwotfQotCi12b2lkIEFu
aW1hdGlvbkJhc2U6OnBsYXkoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRo
b2QKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwYXVzZSgpCi17Ci0gICAgLy8gRklYTUU6IGlt
cGxlbWVudCB0aGlzIG1ldGhvZAotfQotCi1zdGF0aWMgYm9vbCBjb250YWluc1JvdGF0aW9uKGNv
bnN0IFZlY3RvcjxSZWZQdHI8VHJhbnNmb3JtT3BlcmF0aW9uPj4mIG9wZXJhdGlvbnMpCi17Ci0g
ICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiBvcGVyYXRpb25zKSB7Ci0gICAgICAgIGlm
IChvcGVyYXRpb24tPnR5cGUoKSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSkKLSAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
QW5pbWF0aW9uQmFzZTo6Y29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChj
b25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIExh
eW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBGbG9hdFJlY3QgZmxvYXRCb3VuZHMgPSBi
b3VuZHM7Ci0gICAgRmxvYXRQb2ludCB0cmFuc2Zvcm1PcmlnaW47Ci0gICAgCi0gICAgYm9vbCBh
cHBseVRyYW5zZm9ybU9yaWdpbiA9IGNvbnRhaW5zUm90YXRpb24oc3R5bGUudHJhbnNmb3JtKCku
b3BlcmF0aW9ucygpKSB8fCBzdHlsZS50cmFuc2Zvcm0oKS5hZmZlY3RlZEJ5VHJhbnNmb3JtT3Jp
Z2luKCk7Ci0gICAgaWYgKGFwcGx5VHJhbnNmb3JtT3JpZ2luKSB7Ci0gICAgICAgIHRyYW5zZm9y
bU9yaWdpbiA9IHJlbmRlcmVyQm94LmxvY2F0aW9uKCkgKyBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9p
bnQoc3R5bGUudHJhbnNmb3JtT3JpZ2luWFkoKSwgcmVuZGVyZXJCb3guc2l6ZSgpKTsKLSAgICAg
ICAgLy8gSWdub3JlIHRyYW5zZm9ybU9yaWdpblogYmVjYXVzZSB3ZSdsbCBiYWlsIGlmIHdlIGVu
Y291bnRlciBhbnkgM0QgdHJhbnNmb3Jtcy4KLSAgICAgICAgZmxvYXRCb3VuZHMubW92ZUJ5KC10
cmFuc2Zvcm1PcmlnaW4pOwotICAgIH0KLQotICAgIGZvciAoY29uc3QgYXV0byYgb3BlcmF0aW9u
IDogc3R5bGUudHJhbnNmb3JtKCkub3BlcmF0aW9ucygpKSB7Ci0gICAgICAgIGlmIChvcGVyYXRp
b24tPnR5cGUoKSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSkgewotICAgICAgICAgICAg
Ly8gRm9yIG5vdywganVzdCB0cmVhdCB0aGlzIGFzIGEgZnVsbCByb3RhdGlvbi4gVGhpcyBjb3Vs
ZCB0YWtlIGFuZ2xlIGludG8gYWNjb3VudCB0byByZWR1Y2UgaW5mbGF0aW9uLgotICAgICAgICAg
ICAgZmxvYXRCb3VuZHMgPSBib3VuZHNPZlJvdGF0aW5nUmVjdChmbG9hdEJvdW5kcyk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07
Ci0gICAgICAgICAgICBvcGVyYXRpb24tPmFwcGx5KHRyYW5zZm9ybSwgcmVuZGVyZXJCb3guc2l6
ZSgpKTsKLSAgICAgICAgICAgIGlmICghdHJhbnNmb3JtLmlzQWZmaW5lKCkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkg
PT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRSSVggfHwgb3BlcmF0aW9uLT50eXBlKCkgPT0gVHJh
bnNmb3JtT3BlcmF0aW9uOjpNQVRSSVhfM0QpIHsKLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1h
dGlvbk1hdHJpeDo6RGVjb21wb3NlZDJUeXBlIHRvRGVjb21wOwotICAgICAgICAgICAgICAgIHRy
YW5zZm9ybS5kZWNvbXBvc2UyKHRvRGVjb21wKTsKLSAgICAgICAgICAgICAgICAvLyBBbnkgcm90
YXRpb24gcHJldmVudHMgdXMgZnJvbSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlv
bi4KLSAgICAgICAgICAgICAgICBpZiAodG9EZWNvbXAuYW5nbGUpCi0gICAgICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmxvYXRCb3Vu
ZHMgPSB0cmFuc2Zvcm0ubWFwUmVjdChmbG9hdEJvdW5kcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoYXBwbHlUcmFuc2Zvcm1PcmlnaW4pCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVC
eSh0cmFuc2Zvcm1PcmlnaW4pOwotCi0gICAgYm91bmRzID0gTGF5b3V0UmVjdChmbG9hdEJvdW5k
cyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6Y29tcHV0ZVRy
YW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICBzdHlsZS5hcHBseVRyYW5zZm9y
bSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LCBSZW5kZXJTdHlsZTo6SW5jbHVkZVRyYW5zZm9ybU9y
aWdpbik7Ci0gICAgaWYgKCF0cmFuc2Zvcm0uaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9zZWQyVHlwZSBmcm9tRGVj
b21wOwotICAgIHRyYW5zZm9ybS5kZWNvbXBvc2UyKGZyb21EZWNvbXApOwotICAgIC8vIEFueSBy
b3RhdGlvbiBwcmV2ZW50cyB1cyBmcm9tIHVzaW5nIGEgc2ltcGxlIHN0YXJ0L2VuZCByZWN0IHVu
aW9uLgotICAgIGlmIChmcm9tRGVjb21wLmFuZ2xlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBib3VuZHMgPSBMYXlvdXRSZWN0KHRyYW5zZm9ybS5tYXBSZWN0KGJvdW5kcykpOwotICAg
IHJldHVybiB0cnVlOwotCi19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggN2JjNDIwNGVkNzk2YWU1MjFhYThiMWM4ZTQ3Mjg5MjQwMjQ1NGE4MS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkg
KzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSAiUmVuZGVyU3R5bGVDb25zdGFudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewot
Ci1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgRmxvYXRS
ZWN0OwotY2xhc3MgTGF5b3V0UmVjdDsKLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5k
ZXJTdHlsZTsKLWNsYXNzIFRpbWluZ0Z1bmN0aW9uOwotCi1lbnVtIGNsYXNzIEFuaW1hdGVDaGFu
Z2UgewotICAgIFN0eWxlQmxlbmRlZCAgICAgICAgICAgID0gMSA8PCAwLCAvLyBTdHlsZSB3YXMg
Y2hhbmdlZC4KLSAgICBTdGF0ZUNoYW5nZSAgICAgICAgICAgICA9IDEgPDwgMSwgLy8gQW5pbWF0
aW9uIHN0YXRlKCkgY2hhbmdlZC4KLSAgICBSdW5uaW5nU3RhdGVDaGFuZ2UgICAgICA9IDEgPDwg
MiwgLy8gQW5pbWF0aW9uICJydW5uaW5nIG9yIHBhdXNlZCIgY2hhbmdlZC4KLX07Ci0KLWVudW0g
Y2xhc3MgQW5pbWF0aW9uSW1wYWN0IHsKLSAgICBSZXF1aXJlc1JlY29tcG9zaXRlICAgICA9IDEg
PDwgMCwKLSAgICBGb3JjZXNTdGFja2luZ0NvbnRleHQgICA9IDEgPDwgMQotfTsKLQotY2xhc3Mg
QW5pbWF0aW9uQmFzZSA6IHB1YmxpYyBSZWZDb3VudGVkPEFuaW1hdGlvbkJhc2U+Ci0gICAgLCBw
dWJsaWMgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCB7Ci0gICAgZnJpZW5kIGNsYXNzIENvbXBv
c2l0ZUFuaW1hdGlvbjsKLSAgICBmcmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShj
b25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIEVsZW1lbnQmLCBDb21wb3NpdGVBbmltYXRpb24m
KTsKLSAgICB2aXJ0dWFsIH5BbmltYXRpb25CYXNlKCk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50
KCkgY29uc3QgeyByZXR1cm4gbV9lbGVtZW50LmdldCgpOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5
bGUmIGN1cnJlbnRTdHlsZSgpIGNvbnN0IG92ZXJyaWRlOwotICAgIFJlbmRlckVsZW1lbnQqIHJl
bmRlcmVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7Ci0KLSAg
ICBkb3VibGUgZHVyYXRpb24oKSBjb25zdDsKLQotICAgIC8vIEFuaW1hdGlvbnMgYW5kIFRyYW5z
aXRpb25zIGdvIHRocm91Z2ggdGhlIHN0YXRlcyBiZWxvdy4gV2hlbiBlbnRlcmluZyB0aGUgU1RB
UlRFRCBzdGF0ZQotICAgIC8vIHRoZSBhbmltYXRpb24gaXMgc3RhcnRlZC4gVGhpcyBtYXkgb3Ig
bWF5IG5vdCByZXF1aXJlIGRlZmVycmVkIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdG9yLgotICAg
IC8vIElmIHNvLCB3ZSBzdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgdGhhdCByZXNwb25zZSBpcyBy
ZWNlaXZlZCAoYW5kIGl0IHJldHVybnMgdGhlIHN0YXJ0IHRpbWUpLgotICAgIC8vIE90aGVyd2lz
ZSwgd2UgdXNlIHRoZSBjdXJyZW50IHRpbWUgYXMgdGhlIHN0YXJ0IHRpbWUgYW5kIGdvIGltbWVk
aWF0ZWx5IHRvIEFuaW1hdGlvblN0YXRlOjpMb29waW5nCi0gICAgLy8gb3IgQW5pbWF0aW9uU3Rh
dGU6OkVuZGluZy4KLSAgICBlbnVtIGNsYXNzIEFuaW1hdGlvblN0YXRlIDogdWludDhfdCB7Ci0g
ICAgICAgIE5ldywgICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24ganVzdCBjcmVh
dGVkLCBhbmltYXRpb24gbm90IHJ1bm5pbmcgeWV0Ci0gICAgICAgIFN0YXJ0V2FpdFRpbWVyLCAg
ICAgICAgICAgICAvLyBzdGFydCB0aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCi0gICAg
ICAgIFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlLCAgICAvLyB3YWl0aW5nIGZvciBzdHlsZSBzZXR1
cCBzbyB3ZSBjYW4gc3RhcnQgYW5pbWF0aW9ucwotICAgICAgICBTdGFydFdhaXRSZXNwb25zZSwg
ICAgICAgICAgLy8gYW5pbWF0aW9uIHN0YXJ0ZWQsIHdhaXRpbmcgZm9yIHJlc3BvbnNlCi0gICAg
ICAgIExvb3BpbmcsICAgICAgICAgICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5p
bWF0aW9uIHJ1bm5pbmcsIGxvb3AgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAg
ICAgICBFbmRpbmcsICAgICAgICAgICAgICAgICAgICAgLy8gcmVjZWl2ZWQsIGFuaW1hdGlvbiBy
dW5uaW5nLCBlbmQgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBQYXVz
ZWROZXcsICAgICAgICAgICAgICAgICAgLy8gaW4gcGF1c2UgbW9kZSB3aGVuIGFuaW1hdGlvbiB3
YXMgY3JlYXRlZAotICAgICAgICBQYXVzZWRXYWl0VGltZXIsICAgICAgICAgICAgLy8gaW4gcGF1
c2UgbW9kZSB3aGVuIGFuaW1hdGlvbiBzdGFydGVkCi0gICAgICAgIFBhdXNlZFdhaXRTdHlsZUF2
YWlsYWJsZSwgICAvLyBpbiBwYXVzZSBtb2RlIHdoZW4gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAK
LSAgICAgICAgUGF1c2VkV2FpdFJlc3BvbnNlLCAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQg
d2hlbiBpbiBTVEFSVElORyBzdGF0ZQotICAgICAgICBQYXVzZWRSdW4sICAgICAgICAgICAgICAg
ICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIExPT1BJTkcgb3IgRU5ESU5HIHN0YXRlCi0g
ICAgICAgIERvbmUsICAgICAgICAgICAgICAgICAgICAgICAvLyBlbmQgdGltZXIgZmlyZWQsIGFu
aW1hdGlvbiBmaW5pc2hlZCBhbmQgcmVtb3ZlZAotICAgICAgICBGaWxsaW5nRm9yd2FyZHMgICAg
ICAgICAgICAgLy8gYW5pbWF0aW9uIGhhcyBlbmRlZCBhbmQgaXMgcmV0YWluaW5nIGl0cyBmaW5h
bCB2YWx1ZQotICAgIH07Ci0KLSAgICBlbnVtIGNsYXNzIEFuaW1hdGlvblN0YXRlSW5wdXQgOiB1
aW50OF90IHsKLSAgICAgICAgTWFrZU5ldywgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gbmV3
IGZyb20gYW55IHN0YXRlCi0gICAgICAgIFN0YXJ0QW5pbWF0aW9uLCAgICAvLyBhbmltYXRpb24g
cmVxdWVzdHMgYSBzdGFydAotICAgICAgICBSZXN0YXJ0QW5pbWF0aW9uLCAgLy8gZm9yY2UgYSBy
ZXN0YXJ0IGZyb20gYW55IHN0YXRlCi0gICAgICAgIFN0YXJ0VGltZXJGaXJlZCwgICAvLyBzdGFy
dCB0aW1lciBmaXJlZAotICAgICAgICBTdHlsZUF2YWlsYWJsZSwgICAgLy8gc3R5bGUgaXMgc2V0
dXAsIHJlYWR5IHRvIHN0YXJ0IGFuaW1hdGluZwotICAgICAgICBTdGFydFRpbWVTZXQsICAgICAg
Ly8gbV9zdGFydFRpbWUgd2FzIHNldAotICAgICAgICBMb29wVGltZXJGaXJlZCwgICAgLy8gbG9v
cCB0aW1lciBmaXJlZAotICAgICAgICBFbmRUaW1lckZpcmVkLCAgICAgLy8gZW5kIHRpbWVyIGZp
cmVkCi0gICAgICAgIFBhdXNlT3ZlcnJpZGUsICAgICAvLyBwYXVzZSBhbiBhbmltYXRpb24gZHVl
IHRvIG92ZXJyaWRlCi0gICAgICAgIFJlc3VtZU92ZXJyaWRlLCAgICAvLyByZXN1bWUgYW4gb3Zl
cnJpZGRlbiBhbmltYXRpb24KLSAgICAgICAgUGxheVN0YXRlUnVubmluZywgIC8vIHBsYXkgc3Rh
dGUgcGF1c2VkIC0+IHJ1bm5pbmcKLSAgICAgICAgUGxheVN0YXRlUGF1c2VkLCAgIC8vIHBsYXkg
c3RhdGUgcnVubmluZyAtPiBwYXVzZWQKLSAgICAgICAgRW5kQW5pbWF0aW9uICAgICAgIC8vIGZv
cmNlIGFuIGVuZCBmcm9tIGFueSBzdGF0ZQotICAgIH07Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBh
bmltYXRpb24gaXMgaW4gQW5pbWF0aW9uU3RhdGU6Ok5ldyB0byBzdGFydCBhbmltYXRpb24KLSAg
ICB2b2lkIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0LCBkb3VibGUgcGFy
YW0pOwotCi0gICAgLy8gQW5pbWF0aW9uIGhhcyBhY3R1YWxseSBzdGFydGVkLCBhdCBwYXNzZWQg
dGltZQotICAgIHZvaWQgb25BbmltYXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWUgc3Rh
cnRUaW1lKQotICAgIHsKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlN0YXJ0VGltZVNldCwgc3RhcnRUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25k
cygpKTsKLSAgICB9Ci0KLSAgICAvLyBDYWxsZWQgdG8gY2hhbmdlIHRvIG9yIGZyb20gcGF1c2Vk
IHN0YXRlCi0gICAgdm9pZCB1cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlKTsKLSAg
ICBib29sIHBsYXlTdGF0ZVBsYXlpbmcoKSBjb25zdDsKLQotICAgIGJvb2wgd2FpdGluZ1RvU3Rh
cnQoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpO
ZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIg
fHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OyB9Ci0gICAg
Ym9vbCBwcmVBY3RpdmUoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Ok5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1h
dGlvblN0YXRlOjpTdGFydFdhaXRUaW1lciB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICB9Ci0KLSAgICBib29sIHBvc3RB
Y3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpEb25lOyB9Ci0gICAgYm9vbCBmaWxsaW5nRm9yd2FyZHMoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpGaWxsaW5nRm9yd2FyZHM7IH0KLSAgICBi
b29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuICFwb3N0QWN0aXZlKCkgJiYgIXByZUFjdGl2ZSgp
OyB9Ci0gICAgYm9vbCBydW5uaW5nKCkgY29uc3QgeyByZXR1cm4gIWlzTmV3KCkgJiYgIXBvc3RB
Y3RpdmUoKTsgfQotICAgIGJvb2wgcGF1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZVRpbWUg
fHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OyB9Ci0KLSAg
ICBzdGF0aWMgYm9vbCBpc1BhdXNlZFN0YXRlKEFuaW1hdGlvblN0YXRlIHN0YXRlKSB7IHJldHVy
biBzdGF0ZSA+PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3ICYmIHN0YXRlIDw9IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWRSdW47IH0KLSAgICBzdGF0aWMgYm9vbCBpc1J1bm5pbmdTdGF0ZShBbmlt
YXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0
V2FpdFN0eWxlQXZhaWxhYmxlICYmIHN0YXRlIDwgQW5pbWF0aW9uU3RhdGU6OkRvbmU7IH0KLQot
ICAgIGJvb2wgaW5QYXVzZWRTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUGF1c2VkU3RhdGUobV9h
bmltYXRpb25TdGF0ZSk7IH0KLSAgICBib29sIGluUnVubmluZ1N0YXRlKCkgY29uc3QgeyByZXR1
cm4gaXNSdW5uaW5nU3RhdGUobV9hbmltYXRpb25TdGF0ZSk7IH0KLQotICAgIGJvb2wgaXNOZXco
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpOZXcg
fHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OyB9Ci0gICAg
Ym9vbCB3YWl0aW5nRm9yU3RhcnRUaW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0
ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U7IH0KLSAgICBib29sIHdhaXRp
bmdGb3JTdHlsZUF2YWlsYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlOyB9Ci0KLSAgICBib29sIGlz
QWNjZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiBtX2lzQWNjZWxlcmF0ZWQ7IH0KLQotICAgIHZp
cnR1YWwgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKTsKLQotICAgIGRvdWJs
ZSBwcm9ncmVzcyhkb3VibGUgc2NhbGUgPSAxLCBkb3VibGUgb2Zmc2V0ID0gMCwgY29uc3QgVGlt
aW5nRnVuY3Rpb24qID0gbnVsbHB0cikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QW5p
bWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUq
LykgPSAwOwotCi0gICAgdmlydHVhbCBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1h
dGlvbihMYXlvdXRSZWN0JikgY29uc3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIHNob3VsZEZp
cmVFdmVudHMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBmaXJlQW5pbWF0
aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiYpIGNvbnN0OwotCi0gICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25z
dCB7IHJldHVybiBtX2FuaW1hdGlvbjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNvbnN0IEFu
aW1hdGlvbiYgYW5pbWF0aW9uKSB7IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmltYXRpb24m
PihhbmltYXRpb24pOyB9Ci0KLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1hdGlvbiBp
cyBvdmVycmlkZGVuLiBUaGlzIHdpbGwgb25seSBiZSB0aGUgY2FzZSBmb3IKLSAgICAvLyBJbXBs
aWNpdEFuaW1hdGlvbnMgYW5kIGlzIHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdl
IHNob3VsZCBmb3JjZQotICAgIC8vIHNldCB0aGUgc3RhcnQgdGltZS4gSWYgYW4gYW5pbWF0aW9u
IGlzIG92ZXJyaWRkZW4sIGl0IHdpbGwgcHJvYmFibHkgbm90IGdldAotICAgIC8vIGJhY2sgdGhl
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCBpbnB1dC4KLSAgICB2aXJ0dWFsIGJv
b2wgb3ZlcnJpZGRlbigpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBEb2VzIHRo
aXMgYW5pbWF0aW9uL3RyYW5zaXRpb24gaW52b2x2ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/Ci0gICAg
dmlydHVhbCBib29sIGFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIC8qcHJvcGVydHkqLykg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChhY2NlbGVyYXRlZE9ubHkgJiYgIW1faXNBY2NlbGVyYXRlZCkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWFmZmVjdHNQcm9wZXJ0eShwcm9w
ZXJ0eSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGluUnVu
bmluZ1N0YXRlKCkgfHwgaW5QYXVzZWRTdGF0ZSgpOwotICAgIH0KLQotICAgIGJvb2wgdHJhbnNm
b3JtRnVuY3Rpb25MaXN0c01hdGNoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90cmFuc2Zv
cm1GdW5jdGlvbkxpc3RzTWF0Y2g7IH0KLSAgICBib29sIGZpbHRlckZ1bmN0aW9uTGlzdHNNYXRj
aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBib29sIGJhY2tkcm9wRmlsdGVyRnVu
Y3Rpb25MaXN0c01hdGNoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZHJvcEZpbHRl
ckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2VuZGlmCi0gICAgYm9vbCBjb2xvckZpbHRlckZ1bmN0
aW9uTGlzdHNNYXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29sb3JGaWx0ZXJGdW5j
dGlvbkxpc3RzTWF0Y2g7IH0KLQotICAgIC8vIEZyZWV6ZSB0aGUgYW5pbWF0aW9uOyB1c2VkIGJ5
IER1bXBSZW5kZXJUcmVlLgotICAgIHZvaWQgZnJlZXplQXRUaW1lKGRvdWJsZSB0KTsKLQotICAg
IC8vIFBsYXkgYW5kIHBhdXNlIEFQSQotICAgIHZvaWQgcGxheSgpOwotICAgIHZvaWQgcGF1c2Uo
KTsKLSAgICAKLSAgICBkb3VibGUgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgY29uc3Q7Ci0g
ICAgCi0gICAgZG91YmxlIGdldEVsYXBzZWRUaW1lKCkgY29uc3Q7Ci0gICAgLy8gU2V0dGluZyB0
aGUgZWxhcHNlZCB0aW1lIHdpbGwgYWRqdXN0IHRoZSBzdGFydCB0aW1lIGFuZCBwb3NzaWJseSBw
YXVzZSB0aW1lLgotICAgIHZvaWQgc2V0RWxhcHNlZFRpbWUoZG91YmxlKTsKLSAgICAKLSAgICB2
b2lkIHN0eWxlQXZhaWxhYmxlKCkgCi0gICAgewotICAgICAgICBBU1NFUlQod2FpdGluZ0ZvclN0
eWxlQXZhaWxhYmxlKCkpOwotICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3R5bGVBdmFpbGFibGUsIC0xKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2
aXJ0dWFsIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJl
c3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgeyB9Ci0KLSAgICBDb21wb3NpdGVBbmltYXRpb24q
IGNvbXBvc2l0ZUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fY29tcG9zaXRlQW5pbWF0aW9uOyB9Ci0K
LSAgICAvLyBUaGVzZSBhcmUgY2FsbGVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgdGltZXIgZmly
ZXMgc28gc3ViY2xhc3NlcyBjYW4gZG8gYW55IGV4dHJhIHdvcmsKLSAgICB2aXJ0dWFsIHZvaWQg
b25BbmltYXRpb25TdGFydChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICB2aXJ0dWFs
IHZvaWQgb25BbmltYXRpb25JdGVyYXRpb24oZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsg
fQotICAgIAotICAgIC8vIHRpbWVPZmZzZXQgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQg
dGltZSB3aGVuIHRoZSBhbmltYXRpb24gc2hvdWxkIHN0YXJ0LiBOZWdhdGl2ZSB2YWx1ZXMgYXJl
IE9LLgotICAgIC8vIFJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0byBleHBlY3QgYW4g
YXN5bmNocm9ub3VzIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSBjYWxsYmFjay4KLSAgICB2aXJ0
dWFsIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIC8qdGltZU9mZnNldCovKSB7IHJldHVybiBm
YWxzZTsgfQotICAgIC8vIHRpbWVPZmZzZXQgaXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGFuaW1h
dGlvbiBpcyBiZWluZyBwYXVzZWQuCi0gICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGRv
dWJsZSAvKnRpbWVPZmZzZXQqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihi
b29sIC8qZmlsbGluZ0ZvcndhcmRzKi8gPSBmYWxzZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0
IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIGdv
SW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCk7Ci0KLSAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGU7IH0KLQotICAgIHN0YXRpYyB2b2lkIHNl
dE5lZWRzU3R5bGVSZWNhbGMoRWxlbWVudCopOwotICAgIAotICAgIHZvaWQgZ2V0VGltZVRvTmV4
dEV2ZW50KFNlY29uZHMmIHRpbWUsIGJvb2wmIGlzTG9vcGluZykgY29uc3Q7Ci0KLSAgICBkb3Vi
bGUgZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNlZFRpbWUsIGRvdWJs
ZSBvZmZzZXQpIGNvbnN0OwotCi0gICAgLy8gVGhlc2UgcmV0dXJuIHRydWUgaWYgd2UgY2FuIGVh
c2lseSBjb21wdXRlIGEgYm91bmRpbmcgYm94IGJ5IGFwcGx5aW5nIHRoZSBzdHlsZSdzIHRyYW5z
Zm9ybSB0byB0aGUgYm91bmRzIHJlY3QuCi0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRl
bnRWaWFUcmFuc2Zvcm1MaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNvbnN0IFJl
bmRlclN0eWxlJiwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVU
cmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBj
b25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3Q7Ci0KLXByb3RlY3Rl
ZDoKLSAgICBib29sIG1faXNBY2NlbGVyYXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ZpbHRlckZ1bmN0
aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAg
ICBib29sIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxzZSB9OwotI2Vu
ZGlmCi0KLXByaXZhdGU6Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKLQotcHJvdGVj
dGVkOgotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogbV9jb21wb3NpdGVBbmltYXRpb247IC8vIElk
ZWFsbHkgdGhpcyB3b3VsZCBiZSBhIHJlZmVyZW5jZSwgYnV0IGl0IGhhcyB0byBiZSBjbGVhcmVk
IGlmIGFuIGFuaW1hdGlvbiBpcyBkZXN0cm95ZWQgaW5zaWRlIGFuIGV2ZW50IGNhbGxiYWNrLgot
ICAgIFJlZjxBbmltYXRpb24+IG1fYW5pbWF0aW9uOwotCi0gICAgT3B0aW9uYWw8ZG91YmxlPiBt
X3N0YXJ0VGltZTsKLSAgICBPcHRpb25hbDxkb3VibGU+IG1fcGF1c2VUaW1lOwotICAgIGRvdWJs
ZSBtX3JlcXVlc3RlZFN0YXJ0VGltZSB7IDAgfTsKLSAgICBPcHRpb25hbDxkb3VibGU+IG1fdG90
YWxEdXJhdGlvbjsKLSAgICBPcHRpb25hbDxkb3VibGU+IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9u
OwotCi0gICAgQW5pbWF0aW9uU3RhdGUgbV9hbmltYXRpb25TdGF0ZSB7IEFuaW1hdGlvblN0YXRl
OjpOZXcgfTsKLSAgICBib29sIG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxz
ZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcApkZWxldGVk
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAyYWM5ZGE3OGQzMjZjNTg0MTUyZjIzOWYyN2RlODM0
MTJmNjE3NC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAor
KysgL2Rldi9udWxsCkBAIC0xLDgwNSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3
LCAyMDA4LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMg
IkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0g
KiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJBbmltYXRp
b25CYXNlLmgiCi0jaW5jbHVkZSAiQW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9u
LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlQYXJzZXIuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVB
bmltYXRpb24uaCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIK
LSNpbmNsdWRlICJGcmFtZVZpZXcuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAi
UHNldWRvRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJUcmFu
c2l0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgotI2luY2x1
ZGUgIldlYktpdFRyYW5zaXRpb25FdmVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8v
IEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiA2MGZwcyB0byBtYWtlIHN1cmUgd2UgY2FuIGF0IGxl
YXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBhbmltYXRpb25U
aW1lckRlbGF5IHsgMTVfbXMgfTsKLS8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiAzMGZwcyB0
byBtYWtlIHN1cmUgd2UgY2FuIGF0IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCi1zdGF0aWMg
Y29uc3QgU2Vjb25kcyBhbmltYXRpb25UaW1lclRocm90dGxlZERlbGF5IHsgMzBfbXMgfTsKLQot
Y2xhc3MgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHsKLXB1YmxpYzoKLSAgICBBbmltYXRp
b25Qcml2YXRlVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1h
dGlvbkNvbnRyb2xsZXIpCi0gICAgICAgIDogbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlv
bkNvbnRyb2xsZXIpCi0gICAgewotICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuYmVnaW5B
bmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgfkFuaW1hdGlvblByaXZhdGVVcGRh
dGVCbG9jaygpCi0gICAgewotICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZW5kQW5pbWF0
aW9uVXBkYXRlKCk7Ci0gICAgfQotICAgIAotICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlJiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7Ci19OwotCi1DU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmIGZyYW1lKQotICAg
IDogbV9hbmltYXRpb25UaW1lcigqdGhpcywgJkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphbmltYXRpb25UaW1lckZpcmVkKQotICAgICwgbV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0
Y2hlcigqdGhpcywgJkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlckZpcmVkKQotICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fYmVn
aW5BbmltYXRpb25VcGRhdGVDb3VudCgwKQotICAgICwgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5v
dGlmaWNhdGlvbihmYWxzZSkKLSAgICAsIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVu
ZGVkKGZhbHNlKQotewotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6fkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlKCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0
bHkgY2xlYXIgdGhlIGNvbXBvc2l0ZSBhbmltYXRpb25zIGhlcmUgYmVjYXVzZSB0aGUKLSAgICAv
LyBkZXN0cnVjdG9yIG9mIENvbXBvc2l0ZUFuaW1hdGlvbiB3aWxsIGNhbGwgbWVtYmVycyBvZiB0
aGlzIGNsYXNzIGJhY2suCi0gICAgbV9jb21wb3NpdGVBbmltYXRpb25zLmNsZWFyKCk7Ci19Ci0K
LUNvbXBvc2l0ZUFuaW1hdGlvbiYgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3Vy
ZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50KQotewotICAgIGVsZW1lbnQuc2V0
SGFzQ1NTQW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5lbnN1cmUoJmVsZW1lbnQsIFsmXSB7Ci0gICAgICAgIHJldHVybiBDb21wb3NpdGVBbmlt
YXRpb246OmNyZWF0ZSgqdGhpcyk7Ci0gICAgfSk7Ci0KLSAgICBpZiAoYW5pbWF0aW9uc0FyZVN1
c3BlbmRlZEZvckRvY3VtZW50KCZlbGVtZW50LmRvY3VtZW50KCkpKQotICAgICAgICByZXN1bHQu
aXRlcmF0b3ItPnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotCi0gICAgcmV0dXJuICpyZXN1
bHQuaXRlcmF0b3ItPnZhbHVlOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOjpjbGVhcihFbGVtZW50JiBlbGVtZW50KQotewotICAgIEFTU0VSVChlbGVtZW50Lmhhc0NT
U0FuaW1hdGlvbigpID09IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5jb250YWlucygmZWxlbWVudCkp
OwotCi0gICAgaWYgKCFlbGVtZW50Lmhhc0NTU0FuaW1hdGlvbigpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgZWxlbWVudC5jbGVhckhhc0NTU0FuaW1hdGlvbigpOwotCi0gICAgYXV0byBp
dCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5maW5kKCZlbGVtZW50KTsKLSAgICBpZiAoaXQgPT0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIGNsZWFy
OiAlcCIsIHRoaXMsICZlbGVtZW50KTsKLQotICAgIG1fZXZlbnRzVG9EaXNwYXRjaC5yZW1vdmVB
bGxNYXRjaGluZyhbJl0gKGNvbnN0IEV2ZW50VG9EaXNwYXRjaCYgaW5mbykgewotICAgICAgICBy
ZXR1cm4gaW5mby5lbGVtZW50LnB0cigpID09ICZlbGVtZW50OwotICAgIH0pOwotCi0gICAgbV9l
bGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIGN1cnJl
bnRFbGVtZW50KSB7Ci0gICAgICAgIHJldHVybiBjdXJyZW50RWxlbWVudC5wdHIoKSA9PSAmZWxl
bWVudDsKLSAgICB9KTsKLSAgICAKLSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRv
IGFueXRoaW5nIE9SIHdlIGFyZSBzdXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwotICAgIC8v
IGRvIGEgaW52YWxpZGF0ZVN0eWxlRm9yU3VidHJlZSgpIHdoZW4gc3VzcGVuZGVkKS4KLSAgICAv
LyBGSVhNRTogVGhlIGNvZGUgYmVsb3cgZG9lcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCB0aGUgY29t
bWVudCBhYm92ZSBzYXlzIHJlZ2FyZGluZyBzdXNwZW5kZWQgc3RhdGUuCi0gICAgYXV0byYgYW5p
bWF0aW9uID0gKml0LT52YWx1ZTsKLSAgICBib29sIHJlc3VsdCA9IGFuaW1hdGlvbi5pc1N1c3Bl
bmRlZCgpOwotICAgIGFuaW1hdGlvbi5jbGVhckVsZW1lbnQoKTsKLQotICAgIG1fY29tcG9zaXRl
QW5pbWF0aW9ucy5yZW1vdmUoaXQpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotT3B0aW9u
YWw8U2Vjb25kcz4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlv
bnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQot
ewotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0g
ICAgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2U7Ci0gICAgYm9vbCBjYWxsZWRT
ZXRDaGFuZ2VkID0gZmFsc2U7Ci0KLSAgICBmb3IgKGF1dG8mIGNvbXBvc2l0ZUFuaW1hdGlvbiA6
IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24mIGFu
aW1hdGlvbiA9ICpjb21wb3NpdGVBbmltYXRpb24udmFsdWU7Ci0gICAgICAgIGlmICghYW5pbWF0
aW9uLmlzU3VzcGVuZGVkKCkgJiYgYW5pbWF0aW9uLmhhc0FuaW1hdGlvbnMoKSkgewotICAgICAg
ICAgICAgT3B0aW9uYWw8U2Vjb25kcz4gdCA9IGFuaW1hdGlvbi50aW1lVG9OZXh0U2VydmljZSgp
OwotICAgICAgICAgICAgaWYgKHQgJiYgKCF0aW1lVG9OZXh0U2VydmljZSB8fCB0LnZhbHVlKCkg
PCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICB0aW1lVG9OZXh0
U2VydmljZSA9IHQudmFsdWUoKTsKLSAgICAgICAgICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSAm
JiB0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpID09IDBfcykgewotICAgICAgICAgICAgICAgIGlm
IChjYWxsU2V0Q2hhbmdlZCAhPSBDYWxsU2V0Q2hhbmdlZCkKLSAgICAgICAgICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVu
dCA9ICpjb21wb3NpdGVBbmltYXRpb24ua2V5OwotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVt
ZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdElu
QmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5
bGUoKTsKLSAgICAgICAgICAgICAgICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChjYWxsZWRTZXRDaGFuZ2VkKQotICAg
ICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLQotICAgIHJl
dHVybiB0aW1lVG9OZXh0U2VydmljZTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQp
Ci17Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2U7Ci0KLSAgICBjb25z
dCBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5p
bWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghY29tcG9zaXRlQW5pbWF0aW9uLT5pc1N1
c3BlbmRlZCgpICYmIGNvbXBvc2l0ZUFuaW1hdGlvbi0+aGFzQW5pbWF0aW9ucygpKQotICAgICAg
ICB0aW1lVG9OZXh0U2VydmljZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZp
Y2UoKTsKLQotICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkgJiYgKG1fYW5pbWF0aW9uVGltZXIu
cmVwZWF0SW50ZXJ2YWwoKSB8fCBtX2FuaW1hdGlvblRpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSA8
PSB0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9h
bmltYXRpb25UaW1lci5zdGFydE9uZVNob3QodGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRp
bWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykK
LXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0ZUFuaW1h
dGlvbnMoY2FsbFNldENoYW5nZWQpOwotCi0gICAgTE9HKEFuaW1hdGlvbnMsICJ1cGRhdGVBbmlt
YXRpb25UaW1lcjogdGltZVRvTmV4dFNlcnZpY2UgaXMgJS4yZiIsIHRpbWVUb05leHRTZXJ2aWNl
LnZhbHVlT3IoU2Vjb25kcyB7IC0xIH0pLnZhbHVlKCkpOwotCi0gICAgLy8gSWYgd2UgZG9uJ3Qg
bmVlZCBzZXJ2aWNlLCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgdGltZXIgaXMgbm8gbG9uZ2Vy
IHJ1bm5pbmcKLSAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlKSB7Ci0gICAgICAgIGlmIChtX2Fu
aW1hdGlvblRpbWVyLmlzQWN0aXZlKCkpCi0gICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0
b3AoKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIElmIHdlIHdhbnQgc2Vydmlj
ZSBpbW1lZGlhdGVseSwgd2Ugc3RhcnQgYSByZXBlYXRpbmcgdGltZXIgdG8gcmVkdWNlIHRoZSBv
dmVyaGVhZCBvZiBzdGFydGluZwotICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSkg
ewotICAgICAgICBhdXRvKiBwYWdlID0gbV9mcmFtZS5wYWdlKCk7Ci0gICAgICAgIGJvb2wgc2hv
dWxkVGhyb3R0bGUgPSBwYWdlICYmIHBhZ2UtPmlzTG93UG93ZXJNb2RlRW5hYmxlZCgpOwotICAg
ICAgICBTZWNvbmRzIGRlbGF5ID0gc2hvdWxkVGhyb3R0bGUgPyBhbmltYXRpb25UaW1lclRocm90
dGxlZERlbGF5IDogYW5pbWF0aW9uVGltZXJEZWxheTsKLQotICAgICAgICBpZiAoIW1fYW5pbWF0
aW9uVGltZXIuaXNBY3RpdmUoKSB8fCBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkg
IT0gZGVsYXkpCi0gICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5nKGRl
bGF5KTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgd2Ugd2Fu
dCB0byBzdGFydCBhIG9uZS1zaG90IHRpbWVyIHNvIHdlIGdldCBoZXJlIGFnYWluCi0gICAgbV9h
bmltYXRpb25UaW1lci5zdGFydE9uZVNob3QodGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVk
ZWREaXNwYXRjaGVyRmlyZWQoKQotewotICAgIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwot
fQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpmaXJlRXZlbnRzQW5kVXBk
YXRlU3R5bGUoKQotewotICAgIC8vIFByb3RlY3QgdGhlIGZyYW1lIGZyb20gZ2V0dGluZyBkZXN0
cm95ZWQgaW4gdGhlIGV2ZW50IGhhbmRsZXIKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2Zy
YW1lKTsKLQotICAgIGJvb2wgdXBkYXRlU3R5bGUgPSAhbV9ldmVudHNUb0Rpc3BhdGNoLmlzRW1w
dHkoKSB8fCAhbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2guaXNFbXB0eSgpOwotCi0gICAgLy8g
ZmlyZSBhbGwgdGhlIGV2ZW50cwotICAgIFZlY3RvcjxFdmVudFRvRGlzcGF0Y2g+IGV2ZW50c1Rv
RGlzcGF0Y2ggPSBXVEZNb3ZlKG1fZXZlbnRzVG9EaXNwYXRjaCk7Ci0gICAgZm9yIChhdXRvJiBl
dmVudCA6IGV2ZW50c1RvRGlzcGF0Y2gpIHsKLSAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGV2
ZW50LmVsZW1lbnQ7Ci0gICAgICAgIGlmIChldmVudC5ldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LnRyYW5zaXRpb25lbmRFdmVudCkKLSAgICAgICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChU
cmFuc2l0aW9uRXZlbnQ6OmNyZWF0ZShldmVudC5ldmVudFR5cGUsIGV2ZW50Lm5hbWUsIGV2ZW50
LmVsYXBzZWRUaW1lLCBQc2V1ZG9FbGVtZW50Ojpwc2V1ZG9FbGVtZW50TmFtZUZvckV2ZW50cyhl
bGVtZW50LnBzZXVkb0lkKCkpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KEFuaW1hdGlvbkV2ZW50OjpjcmVh
dGUoZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNldWRv
RWxlbWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgpKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBjaGFuZ2Ug
OiBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaCkKLSAgICAgICAgY2hhbmdlLT5pbnZhbGlkYXRl
U3R5bGUoKTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNoLmNsZWFyKCk7Ci0KLSAg
ICBpZiAodXBkYXRlU3R5bGUpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5
bGVJZk5lZWRlZCgpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpz
dGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCkKLXsKLSAgICBpZiAoIW1fdXBkYXRl
U3R5bGVJZk5lZWRlZERpc3BhdGNoZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV91cGRhdGVTdHls
ZUlmTmVlZGVkRGlzcGF0Y2hlci5zdGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1lbnQmIGVsZW1l
bnQsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3Vi
bGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgbV9ldmVudHNUb0Rpc3BhdGNoLmFwcGVuZCh7IGVsZW1l
bnQsIGV2ZW50VHlwZSwgbmFtZSwgZWxhcHNlZFRpbWUgfSk7Ci0gICAgc3RhcnRVcGRhdGVTdHls
ZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjphZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50KQotewot
ICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3BhdGNoLmFwcGVuZChlbGVtZW50KTsKLSAgICBBU1NF
UlQobV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2gubGFzdCgpLT5kb2N1bWVudCgpLmJhY2tGb3J3
YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAg
IHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uRnJhbWVDYWxsYmFja0ZpcmVkKCkKLXsK
LSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0ZUFuaW1hdGlv
bnMoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlKQotICAgICAg
ICBtX2ZyYW1lLmRvY3VtZW50KCktPnZpZXcoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZCgp
Ci17Ci0gICAgLy8gV2UgbmVlZCB0byBrZWVwIHRoZSBmcmFtZSBhbGl2ZSwgc2luY2UgaXQgb3du
cyB1cy4KLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKLQotICAgIC8vIFRoZSBh
bmltYXRpb24gdGltZXIgbWlnaHQgZmlyZSBiZWZvcmUgdGhlIGxheW91dCB0aW1lciwgaW4KLSAg
ICAvLyB3aGljaCBjYXNlIHdlIG1pZ2h0IGNyZWF0ZSBzb21lIGFuaW1hdGlvbnMgd2l0aCBpbmNv
cnJlY3QKLSAgICAvLyB2YWx1ZXMgaWYgd2UgZG9uJ3QgbGF5b3V0IGZpcnN0LgotICAgIGlmICht
X3JlcXVpcmVzTGF5b3V0KSB7Ci0gICAgICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2ZyYW1l
LmRvY3VtZW50KCktPnZpZXcoKSkgewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+bmVlZHNM
YXlvdXQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZVZpZXctPmZvcmNlTGF5b3V0KCk7Ci0gICAg
ICAgIH0KLSAgICAgICAgbV9yZXF1aXJlc0xheW91dCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8v
IE1ha2Ugc3VyZSBhbmltYXRpb25VcGRhdGVUaW1lIGlzIHVwZGF0ZWQsIHNvIHRoYXQgaXQgaXMg
Y3VycmVudCBldmVuIGlmIG5vCi0gICAgLy8gc3R5bGVDaGFuZ2UgaGFzIGhhcHBlbmVkIChlLmcu
IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMpCi0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2Nr
IHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwg
d2UgZG8gaXMgY2FsbCBzZXRDaGFuZ2VkIG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFu
aW1hdGlvbnMgYW5kIHRoZW4gZG8gYW4gaW1tZWRpYXRlCi0gICAgLy8gdXBkYXRlU3R5bGVJZk5l
ZWRlZC4gSXQgd2lsbCB0aGVuIGNhbGwgYmFjayB0byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4K
LSAgICB1cGRhdGVBbmltYXRpb25UaW1lcihDYWxsU2V0Q2hhbmdlZCk7Ci0KLSAgICAvLyBGaXJl
IGV2ZW50cyByaWdodCBhd2F5LCB0byBhdm9pZCBhIGZsYXNoIG9mIHVuYW5pbWF0ZWQgc3R5bGUg
YWZ0ZXIgYW4gYW5pbWF0aW9uIGNvbXBsZXRlcywgYW5kIGJlZm9yZQotICAgIC8vIHRoZSAnZW5k
JyBldmVudCBmaXJlcy4KLSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5k
ZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29u
c3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVuZGVy
ZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGZh
bHNlKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5n
QWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuZWxlbWVu
dCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21w
b3NpdGVBbmltYXRpb25zLmdldChyZW5kZXJlci5lbGVtZW50KCkpOwotICAgIGlmICghYW5pbWF0
aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbi0+aXNBbmlt
YXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpCi17Ci0gICAgdXBkYXRlQW5p
bWF0aW9uVGltZXIoKTsKLQotICAgIGZvciAoYXV0byogY2hpbGRGcmFtZSA9IG1fZnJhbWUudHJl
ZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRy
ZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZEZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS51cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLX0KLQotU2Vjb25kcyBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdAotewotICAgIGlmICghbV9h
bmltYXRpb25UaW1lci5pc0FjdGl2ZSgpKQotICAgICAgICByZXR1cm4gU2Vjb25kcyB7IElORklO
SVRZIH07Ci0KLSAgICByZXR1cm4gU2Vjb25kcyB7IG1fYW5pbWF0aW9uVGltZXIucmVwZWF0SW50
ZXJ2YWwoKSB9OwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNw
ZW5kQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKGlzU3VzcGVuZGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIHN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgp
KTsKLQotICAgIC8vIFRyYXZlcnNlIHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0g
bV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgp
Lm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5k
QW5pbWF0aW9ucygpOwotCi0gICAgbV9pc1N1c3BlbmRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIGlm
ICghaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgcmVzdW1lQW5pbWF0aW9u
c0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2ZXJzZSBzdWJm
cmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQo
KTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBj
aGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9ucygpOwotCi0gICAgbV9pc1N1
c3BlbmRlZCA9IGZhbHNlOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjphbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQot
ewotICAgIHJldHVybiBpc1N1c3BlbmRlZCgpIHx8IG1fc3VzcGVuZGVkRG9jdW1lbnRzLmNvbnRh
aW5zKGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
ZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBtX3N1c3BlbmRl
ZERvY3VtZW50cy5yZW1vdmUoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1
bWVudCkKLXsKLSAgICBpZiAoYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3Vt
ZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMuYWRkKGRv
Y3VtZW50KTsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygq
dGhpcyk7Ci0KLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9u
cykgewotICAgICAgICBpZiAoJmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQp
Ci0gICAgICAgICAgICBhbmltYXRpb24udmFsdWUtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAg
fQotCi0gICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBk
b2N1bWVudCkKLXsKLSAgICBpZiAoIWFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChk
b2N1bWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGRldGFjaEZyb21Eb2N1bWVudChkb2N1
bWVudCk7Ci0KLSAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRo
aXMpOwotCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMp
IHsKLSAgICAgICAgaWYgKCZhbmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQot
ICAgICAgICAgICAgYW5pbWF0aW9uLnZhbHVlLT5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgfQot
Ci0gICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6c3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5kZWQoRG9jdW1lbnQqIGRv
Y3VtZW50KQotewotICAgIGlmICghYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRv
Y3VtZW50KSB8fCBhbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSkKLSAgICAgICAg
cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVu
ZGVkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3Bl
bmRlZCA9IGFsbG93ZWQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcm
IG5hbWUsIGRvdWJsZSB0KQotewotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5p
bWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKGVsZW1lbnQpOwotICAgIGlmIChjb21w
b3NpdGVBbmltYXRpb24ucGF1c2VBbmltYXRpb25BdFRpbWUobmFtZSwgdCkpIHsKLSAgICAgICAg
ZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVl
ZGVkRGlzcGF0Y2hlcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNl
VHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5
LCBkb3VibGUgdCkKLXsKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlv
biA9IGVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRl
QW5pbWF0aW9uLnBhdXNlVHJhbnNpdGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwg
dCkpIHsKLSAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgc3RhcnRV
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLU1vbm90b25pY1RpbWUgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpCi17Ci0gICAgQVNT
RVJUKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCk7Ci0gICAgaWYgKCFtX2JlZ2luQW5pbWF0
aW9uVXBkYXRlVGltZSkKLSAgICAgICAgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUgPSBNb25v
dG9uaWNUaW1lOjpub3coKTsKLQotICAgIHJldHVybiBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZS52YWx1ZSgpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpiZWdp
bkFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgaWYgKCFtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291
bnQpCi0gICAgICAgIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gV1RGOjpudWxsb3B0Owot
ICAgICsrbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50OwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjplbmRBbmltYXRpb25VcGRhdGUoKQotewotICAgIEFTU0VSVCht
X2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQgPiAwKTsKLSAgICBpZiAobV9iZWdpbkFuaW1hdGlv
blVwZGF0ZUNvdW50ID09IDEpIHsKLSAgICAgICAgc3R5bGVBdmFpbGFibGUoKTsKLSAgICAgICAg
aWYgKCFtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uKQotICAgICAgICAgICAgc3Rh
cnRUaW1lUmVzcG9uc2UoYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkpOwotICAgIH0KLSAgICAt
LW1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6cmVjZWl2ZWRTdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lIHRp
bWUpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSAlcCByZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlICVmIiwgdGhpcywgdGltZS5zZWNvbmRzU2lu
Y2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0KLSAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZp
Y2F0aW9uID0gZmFsc2U7Ci0gICAgc3RhcnRUaW1lUmVzcG9uc2UodGltZSk7Ci19Ci0KLXN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFu
aW1hdGVkU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgYXV0byogYW5p
bWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmZWxlbWVudCk7Ci0gICAgaWYgKCFh
bmltYXRpb24pCi0gICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgQW5pbWF0aW9uUHJpdmF0
ZVVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGF1dG8gYW5p
bWF0aW5nU3R5bGUgPSBhbmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUoKTsKLSAgICBpZiAoIWFu
aW1hdGluZ1N0eWxlKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4g
YW5pbWF0aW5nU3R5bGU7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiBlbGVtZW50LCBMYXlvdXRSZWN0JiBi
b3VuZHMpIGNvbnN0Ci17Ci0gICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRp
b25zLmdldCgmZWxlbWVudCk7Ci0gICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiB0
cnVlOwotCi0gICAgaWYgKCFhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVy
dHlUcmFuc2Zvcm0sIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4g
YW5pbWF0aW9uLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKTsKLX0K
LQotdW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZl
QW5pbWF0aW9ucyhEb2N1bWVudCogZG9jdW1lbnQpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgY291
bnQgPSAwOwotICAgIAotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmlt
YXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5pbWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1
bWVudCkKLSAgICAgICAgICAgIGNvdW50ICs9IGFuaW1hdGlvbi52YWx1ZS0+bnVtYmVyT2ZBY3Rp
dmVBbmltYXRpb25zKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvbik7Ci0gICAgbV9hbmltYXRpb25z
V2FpdGluZ0ZvclN0eWxlLmFkZCgmYW5pbWF0aW9uKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5p
bWF0aW9uQmFzZSYgYW5pbWF0aW9uVG9SZW1vdmUpCi17Ci0gICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlLnJlbW92ZSgmYW5pbWF0aW9uVG9SZW1vdmUpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdHlsZUF2YWlsYWJsZSgpCi17Ci0gICAgLy8gR28gdGhy
b3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5kIHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLSAgICBmb3Ig
KGNvbnN0IGF1dG8mIHdhaXRpbmdBbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUpCi0gICAgICAgIHdhaXRpbmdBbmltYXRpb24tPnN0eWxlQXZhaWxhYmxlKCk7Ci0KLSAgICBt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuY2xlYXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCi17
Ci0gICAgLy8gSWYgd2lsbEdldFJlc3BvbnNlIGlzIHRydWUsIGl0IG1lYW5zIHRoaXMgYW5pbWF0
aW9uIGlzIGFjdHVhbGx5IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UKLSAgICAvLyAod2hpY2ggd2ls
bCBjb21lIGluIGFzIGEgY2FsbCB0byBub3RpZnlBbmltYXRpb25TdGFydGVkKCkpLgotICAgIC8v
IEluIHRoYXQgY2FzZSB3ZSBkb24ndCBuZWVkIHRvIGFkZCBpdCB0byB0aGlzIGxpc3QuIFdlIGp1
c3Qgc2V0IGEgd2FpdGluZ0ZvckFSZXNwb25zZSBmbGFnIAotICAgIC8vIHdoaWNoIHNheXMgd2Ug
YXJlIHdhaXRpbmcgZm9yIHRoZSByZXNwb25zZS4gSWYgd2lsbEdldFJlc3BvbnNlIGlzIGZhbHNl
LCB0aGlzIGFuaW1hdGlvbiAKLSAgICAvLyBpcyBub3Qgd2FpdGluZyBmb3IgYSByZXNwb25zZSBm
b3IgaXRzZWxmLCBidXQgcmF0aGVyIGZvciBhIG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsIGZvciAK
LSAgICAvLyBhbm90aGVyIGFuaW1hdGlvbiB0byB3aGljaCBpdCB3aWxsIHN5bmMuCi0gICAgLy8K
LSAgICAvLyBXaGVuIGVuZEFuaW1hdGlvblVwZGF0ZSgpIGlzIGNhbGxlZCB3ZSBjaGVjayB0byBz
ZWUgaWYgdGhlIHdhaXRpbmdGb3JBUmVzcG9uc2UgZmxhZyBpcwotICAgIC8vIHRydWUuIElmIHNv
LCB3ZSBqdXN0IHJldHVybiBhbmQgd2lsbCBkbyBvdXIgd29yayB3aGVuIHRoZSBmaXJzdCBub3Rp
ZnlYWFhTdGFydGVkKCkgY2FsbAotICAgIC8vIGNvbWVzIGluLiBJZiBpdCBpcyBmYWxzZSwgd2Ug
d2lsbCBub3QgYmUgZ2V0dGluZyBhIG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsLCBzbyB3ZSB3aWxs
Ci0gICAgLy8gZG8gb3VyIHdvcmsgcmlnaHQgYXdheS4gSW4gYm90aCBjYXNlcyB3ZSBjYWxsIHRo
ZSBvbkFuaW1hdGlvblN0YXJ0UmVzcG9uc2UoKSBtZXRob2QKLSAgICAvLyBvbiBlYWNoIGFuaW1h
dGlvbi4gSW4gdGhlIGZpcnN0IGNhc2Ugd2Ugc2VuZCBpbiB0aGUgdGltZSB3ZSBnb3QgZnJvbSBu
b3RpZnlYWFhTdGFydGVkKCkuCi0gICAgLy8gSW4gdGhlIHNlY29uZCBjYXNlLCB3ZSBqdXN0IHBh
c3MgaW4gdGhlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpLgotICAgIC8vCi0gICAgLy8gVGhp
cyB3aWxsIHN5bmNocm9uaXplIGFsbCBzb2Z0d2FyZSBhbmQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
cyBzdGFydGVkIGluIHRoZSBzYW1lIAotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQgY3ljbGUu
Ci0gICAgLy8KLQotICAgIGlmICh3aWxsR2V0UmVzcG9uc2UpCi0gICAgICAgIG1fd2FpdGluZ0Zv
ckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSB0cnVlOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0YXJ0VGltZVJlc3BvbnNlLmFkZCgmYW5pbWF0aW9uKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9uVG9SZW1vdmUpCi17Ci0gICAg
bV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0aW9u
VG9SZW1vdmUpOwotICAgIGlmIChtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UuaXNFbXB0eSgpKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9u
ID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0
VGltZVJlc3BvbnNlKE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICAvLyBHbyB0aHJvdWdoIGxp
c3Qgb2Ygd2FpdGVycyBhbmQgc2VuZCB0aGVtIG9uIHRoZWlyIHdheQotCi0gICAgZm9yIChjb25z
dCBhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UpCi0gICAgICAgIGFuaW1hdGlvbi0+b25BbmltYXRpb25TdGFydFJlc3BvbnNlKHRpbWUpOwot
ICAgIAotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5jbGVhcigp
OwotICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChBbmltYXRpb25CYXNlJiBhbmltYXRpb24pCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBhbmltYXRpb25XaWxsQmVSZW1vdmVkOiAlcCIs
IHRoaXMsICZhbmltYXRpb24pOwotCi0gICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoYW5pbWF0aW9uKTsKLSAgICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWVSZXNwb25zZShhbmltYXRpb24pOwotCi0gICAgYm9vbCBhbnlBbmltYXRpb25zV2FpdGlu
Z0ZvckFzeW5jU3RhcnQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSkgewotICAgICAgICBpZiAoYW5pbWF0
aW9uLT53YWl0aW5nRm9yU3RhcnRUaW1lKCkgJiYgYW5pbWF0aW9uLT5pc0FjY2VsZXJhdGVkKCkp
IHsKLSAgICAgICAgICAgIGFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5bmNTdGFydCA9IHRydWU7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghYW55QW5p
bWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0KQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0
YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIoRnJhbWUmIGZyYW1lKQotICAgIDogbV9kYXRhKG1ha2VVbmlx
dWU8Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+KGZyYW1lKSkKLXsKLX0KLQotQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcjo6fkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7Ci0K
LXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50JiBl
bGVtZW50KQotewotICAgIGlmICghbV9kYXRhLT5jbGVhcihlbGVtZW50KSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95
ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCkuYmFj
a0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7
Ci0gICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLX0KLQotQW5pbWF0aW9uVXBkYXRlIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwg
Y29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUp
Ci17Ci0gICAgYm9vbCBoYXNPckhhZEFuaW1hdGlvbnMgPSAob2xkU3R5bGUgJiYgb2xkU3R5bGUt
Pmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpIHx8IG5ld1N0eWxlLmhhc0FuaW1hdGlvbnNP
clRyYW5zaXRpb25zKCk7Ci0gICAgaWYgKCFoYXNPckhhZEFuaW1hdGlvbnMpCi0gICAgICAgIHJl
dHVybiB7IH07Ci0KLSAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVT
dGF0ZSgpICE9IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KLSAgICAvLyBEb24ndCBydW4gdHJhbnNpdGlvbnMgd2hlbiBwcmludGluZy4KLSAg
ICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLnJlbmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKLSAgICAg
ICAgcmV0dXJuIHsgfTsKLQotICAgIC8vIEZldGNoIG91ciBjdXJyZW50IHNldCBvZiBpbXBsaWNp
dCBhbmltYXRpb25zIGZyb20gYSBoYXNodGFibGUuIFdlIHRoZW4gY29tcGFyZSB0aGVtCi0gICAg
Ly8gYWdhaW5zdCB0aGUgYW5pbWF0aW9ucyBpbiB0aGUgc3R5bGUgYW5kIG1ha2Ugc3VyZSB3ZSdy
ZSBpbiBzeW5jLiBJZiBkZXN0aW5hdGlvbiB2YWx1ZXMKLSAgICAvLyBoYXZlIGNoYW5nZWQsIHdl
IHJlc2V0IHRoZSBhbmltYXRpb24uIFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVl
cyBhbmQgd2UgcmV0dXJuCi0gICAgLy8gYSBuZXcgc3R5bGUuCi0KLSAgICBDb21wb3NpdGVBbmlt
YXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fZGF0YS0+ZW5zdXJlQ29tcG9zaXRlQW5pbWF0
aW9uKGVsZW1lbnQpOwotICAgIGF1dG8gdXBkYXRlID0gY29tcG9zaXRlQW5pbWF0aW9uLmFuaW1h
dGUoZWxlbWVudCwgb2xkU3R5bGUsIG5ld1N0eWxlKTsKLQotICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpOwotICAgIGlmICgocmVuZGVyZXIgJiYgcmVuZGVyZXItPnBhcmVu
dCgpKSB8fCBuZXdTdHlsZS5hbmltYXRpb25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5h
bmltYXRpb25zKCkpKSB7Ci0gICAgICAgIGF1dG8mIGZyYW1lVmlldyA9ICplbGVtZW50LmRvY3Vt
ZW50KCkudmlldygpOwotICAgICAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLmhhc0FuaW1hdGlv
blRoYXREZXBlbmRzT25MYXlvdXQoKSkKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0UmVxdWlyZXNM
YXlvdXQoKTsKLSAgICAgICAgbV9kYXRhLT51cGRhdGVBbmltYXRpb25UaW1lckZvckVsZW1lbnQo
ZWxlbWVudCk7Ci0gICAgICAgIGZyYW1lVmlldy5zY2hlZHVsZUFuaW1hdGlvbigpOwotICAgIH0K
LQotICAgIHJldHVybiB1cGRhdGU7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVs
ZW1lbnQmIHJlbmRlcmVyKQotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVz
dWx0OwotCi0gICAgaWYgKHJlbmRlcmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlv
bnMoKSAmJiByZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJlc3VsdCA9IG1fZGF0YS0+YW5p
bWF0ZWRTdHlsZUZvckVsZW1lbnQoKnJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0KLSAgICBpZiAoIXJl
c3VsdCkKLSAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0
eWxlKCkpOwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjpjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQo
KSkKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLmhhc0Fu
aW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0
dXJuIG1fZGF0YS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKCpyZW5kZXJlci5lbGVtZW50KCks
IGJvdW5kcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTW9ub3RvbmljVGltZSBzdGFydFRp
bWUpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyICVwIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQgb24gcmVuZGVyZXIgJXAsIHRpbWU9JWYiLCB0aGlzLCAmcmVu
ZGVyZXIsIHN0YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgVU5V
U0VEX1BBUkFNKHJlbmRlcmVyKTsKLQotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlv
blVwZGF0ZUJsb2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVjZWl2ZWRTdGFydFRpbWVSZXNwb25z
ZShzdGFydFRpbWUpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5p
bWF0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRv
dWJsZSB0KQotewotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2Nr
KHRoaXMpOwotICAgIHJldHVybiBtX2RhdGEtPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQs
IG5hbWUsIHQpOwotfQotCi11bnNpZ25lZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdAotewotICAgIHJldHVy
biBtX2RhdGEtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhkb2N1bWVudCk7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmIGVs
ZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIEFuaW1hdGlv
blVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMpOwotICAgIHJldHVybiBtX2Rh
dGEtPnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBwcm9wZXJ0eSwgdCk7Ci19Ci0KLWJv
b2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihS
ZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsK
LSAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBtX2RhdGEtPmlzUnVubmluZ0FuaW1h
dGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIHByb3BlcnR5KTsKLX0KLQotYm9vbCBDU1NBbmltYXRp
b25Db250cm9sbGVyOjppc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIoUmVu
ZGVyRWxlbWVudCYgcmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0g
ICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBY2NlbGVy
YXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIHByb3BlcnR5KTsKLX0KLQotYm9vbCBD
U1NBbmltYXRpb25Db250cm9sbGVyOjppc1N1c3BlbmRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZGF0YS0+aXNTdXNwZW5kZWQoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVy
OjpzdXNwZW5kQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJjb250cm9sbGVy
IGlzIHN1c3BlbmRpbmcgYW5pbWF0aW9ucyIpOwotICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1hdGlv
bnMoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25z
KCkKLXsKLSAgICBMT0coQW5pbWF0aW9ucywgImNvbnRyb2xsZXIgaXMgcmVzdW1pbmcgYW5pbWF0
aW9ucyIpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9ucygpOwotfQotCi1ib29sIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNv
bnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVu
ZGVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0QWxsb3dzTmV3QW5p
bWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX2RhdGEtPnNldEFs
bG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChhbGxvd2VkKTsKLX0KLQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjpzZXJ2aWNlQW5pbWF0aW9ucygpCi17Ci0gICAgbV9kYXRhLT5h
bmltYXRpb25GcmFtZUNhbGxiYWNrRmlyZWQoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjp1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKQotewotICAgIG1fZGF0YS0+dXBkYXRlVGhy
b3R0bGluZ1N0YXRlKCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5p
bWF0aW9uSW50ZXJ2YWwoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmFuaW1hdGlvbklu
dGVydmFsKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4g
bV9kYXRhLT5hbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotfQot
Ci12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmRldGFjaEZyb21Eb2N1bWVudChEb2N1bWVu
dCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+ZGV0YWNoRnJvbURvY3VtZW50KGRv
Y3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0
aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBMT0coQW5pbWF0aW9u
cywgInN1c3BlbmRpbmcgYW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0g
ICAgbV9kYXRhLT5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQo
RG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIExPRyhBbmltYXRpb25zLCAicmVzdW1pbmcgYW5p
bWF0aW9ucyBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0gICAgQW5pbWF0aW9uVXBkYXRl
QmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgbV9kYXRhLT5yZXN1bWVBbmlt
YXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkK
LXsKLSAgICBMT0coQW5pbWF0aW9ucywgImFuaW1hdGlvbnMgbWF5IHN0YXJ0IGZvciBkb2N1bWVu
dCAlcCIsIGRvY3VtZW50KTsKLQotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVw
ZGF0ZUJsb2NrKHRoaXMpOwotICAgIG1fZGF0YS0+c3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5k
ZWQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmJlZ2luQW5p
bWF0aW9uVXBkYXRlKCkKLXsKLSAgICBtX2RhdGEtPmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6ZW5kQW5pbWF0aW9uVXBkYXRlKCkKLXsK
LSAgICBtX2RhdGEtPmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi1ib29sIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KENTU1By
b3BlcnR5SUQgcHJvcGVydHkpCi17Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uOjph
bmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6aGFzQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJu
IG1fZGF0YS0+aGFzQW5pbWF0aW9ucygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250
cm9sbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250
cm9sbGVyLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVjZDYwNTg0NTM5OGFhOGU3
NWE5YTUyNjVlMDBlZjY0ZDYyMjI4MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9u
Q29udHJvbGxlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJBbmltYXRpb25CYXNlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgot
I2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU7Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZyYW1lOwotY2xh
c3MgTGF5b3V0UmVjdDsKLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci0KLXN0cnVjdCBBbmltYXRpb25V
cGRhdGUgewotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0gICAgT3B0
aW9uU2V0PEFuaW1hdGlvbkltcGFjdD4gaW1wYWN0OwotCi19OwotCi1jbGFzcyBDU1NBbmltYXRp
b25Db250cm9sbGVyIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBleHBsaWNpdCBDU1NBbmltYXRpb25Db250cm9sbGVyKEZyYW1lJik7Ci0gICAgfkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIoKTsKLQotICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50Jik7
Ci0gICAgQW5pbWF0aW9uVXBkYXRlIHVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJl
bmRlclN0eWxlJiBuZXdTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICBz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5k
ZXJFbGVtZW50Jik7Ci0KLSAgICAvLyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0aGUgdmlzdWFsIGV4
dGVudCBvZiBhbnkgdHJhbnNmb3JtIGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4gcmVuZGVyZXIKLSAg
ICAvLyB1c2luZyB0aGUgZ2l2ZW4gcmVjdCwgcmV0dXJuaW5nIHRoZSByZXN1bHQgaW4gdGhlIHJl
Y3QuIFJldHVybiBmYWxzZSBpZiB0aGVyZSBpcyBzb21lCi0gICAgLy8gdHJhbnNmb3JtIGFuaW1h
dGlvbiBidXQgd2Ugd2VyZSB1bmFibGUgdG8gY2hlYXBseSBjb21wdXRlIGl0cyBhZmZlY3Qgb24g
dGhlIGV4dGVudC4KLSAgICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVt
ZW50JiwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBh
biBhY2NlbGVyYXRlZCBhbmltYXRpb24gb3IgdHJhbnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRl
ZCB0byBhbmltYXRlLgotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVt
ZW50JiwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9v
bCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwg
ZG91YmxlIHQpOyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKLSAgICBXRUJDT1JFX0VY
UE9SVCBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBw
cm9wZXJ0eSwgZG91YmxlIHQpOyAvLyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKLSAgICBX
RUJDT1JFX0VYUE9SVCB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQq
KSBjb25zdDsgLy8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgCi0gICAgLy8gIlJ1
bm5pbmciIGhlcmUgbWVhbnMgdGhlIGFuaW1hdGlvbiBpcyBydW5uaW5nIG9yIHBhdXNlZC4KLSAg
ICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1By
b3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25P
blJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9S
VCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1
bWVBbmltYXRpb25zKCk7Ci0gICAgdm9pZCBzZXJ2aWNlQW5pbWF0aW9ucygpOwotCi0gICAgdm9p
ZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBTZWNvbmRzIGFu
aW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN1c3Bl
bmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIFdFQkNPUkVf
RVhQT1JUIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KERvY3VtZW50Kik7
Ci0gICAgdm9pZCBkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHN0YXJ0
QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50Kik7Ci0KLSAgICB2b2lkIGJlZ2luQW5p
bWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRBbmltYXRpb25VcGRhdGUoKTsKLQotICAgIFdF
QkNPUkVfRVhQT1JUIGJvb2wgYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkgY29u
c3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVT
dXNwZW5kZWQoYm9vbCk7Ci0gICAgCi0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRl
ZEFuaW1hdGlvbk9mUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICBib29sIGhhc0FuaW1h
dGlvbnMoKSBjb25zdDsKLQotcHJpdmF0ZToKLSAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU+IG1fZGF0YTsKLX07Ci0KLWNsYXNzIEFuaW1hdGlv
blVwZGF0ZUJsb2NrIHsKLXB1YmxpYzoKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayhDU1NBbmlt
YXRpb25Db250cm9sbGVyKiBhbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICA6IG1fYW5pbWF0
aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAgIHsKLSAgICAgICAgaWYgKG1f
YW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+
YmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgfkFuaW1hdGlvblVwZGF0
ZUJsb2NrKCkKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAg
ICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAg
IH0KLSAgICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyKiBtX2FuaW1hdGlvbkNvbnRyb2xs
ZXI7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUu
aApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDMyMDM3N2RlY2M5YzUzNGRlZWI3YjRl
OTVjZTBlZDJkODVhZWRiMS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJBbmltYXRpb25CYXNlLmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3
dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbXBvc2l0ZUFuaW1hdGlv
bjsKLWNsYXNzIERvY3VtZW50OwotY2xhc3MgRnJhbWU7Ci0KLWVudW0gU2V0Q2hhbmdlZCB7IERv
Tm90Q2FsbFNldENoYW5nZWQsIENhbGxTZXRDaGFuZ2VkIH07Ci0KLWNsYXNzIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBleHBsaWNpdCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSYpOwot
ICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSgpOwotCi0gICAgLy8gUmV0dXJucyB0
aGUgdGltZSB1bnRpbCB0aGUgbmV4dCBhbmltYXRpb24gbmVlZHMgdG8gYmUgc2VydmljZWQsIG9y
IC0xIGlmIHRoZXJlIGFyZSBub25lLgotICAgIE9wdGlvbmFsPFNlY29uZHM+IHVwZGF0ZUFuaW1h
dGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZCA9IERvTm90Q2FsbFNldENoYW5nZWQpOwot
ICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZCA9
IERvTm90Q2FsbFNldENoYW5nZWQpOwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBlbnN1cmVD
b21wb3NpdGVBbmltYXRpb24oRWxlbWVudCYpOwotICAgIGJvb2wgY2xlYXIoRWxlbWVudCYpOwot
Ci0gICAgdm9pZCB1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCk7Ci0gICAgdm9p
ZCBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7Ci0gICAgdm9pZCBhZGRFdmVu
dFRvRGlzcGF0Y2goRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgY29uc3Qg
U3RyaW5nJiBuYW1lLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotICAgIHZvaWQgYWRkRWxlbWVudENo
YW5nZVRvRGlzcGF0Y2goRWxlbWVudCYpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29u
c3QgeyByZXR1cm4gIW1fY29tcG9zaXRlQW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLQotICAgIGJv
b2wgaXNTdXNwZW5kZWQoKSBjb25zdCB7IHJldHVybiBtX2lzU3VzcGVuZGVkOyB9Ci0gICAgdm9p
ZCBzdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAg
IHZvaWQgYW5pbWF0aW9uRnJhbWVDYWxsYmFja0ZpcmVkKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVRo
cm90dGxpbmdTdGF0ZSgpOwotICAgIFNlY29uZHMgYW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdDsK
LQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAg
IHZvaWQgcmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgYm9vbCBh
bmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHN0
YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50Kik7Ci0gICAgdm9pZCBkZXRhY2hG
cm9tRG9jdW1lbnQoRG9jdW1lbnQqKTsKLQotICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25S
ZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgYm9vbCBp
c1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENT
U1Byb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VU
cmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUg
dCk7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29u
c3Q7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JF
bGVtZW50KEVsZW1lbnQmKTsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKEVs
ZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBNb25vdG9uaWNUaW1lIGJlZ2luQW5p
bWF0aW9uVXBkYXRlVGltZSgpOwotICAgIAotICAgIHZvaWQgYmVnaW5BbmltYXRpb25VcGRhdGUo
KTsKLSAgICB2b2lkIGVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAgIHZvaWQgcmVjZWl2ZWRTdGFy
dFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLSAgICAKLSAgICB2b2lkIGFkZFRvQW5pbWF0
aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJik7Ci0gICAgdm9pZCByZW1vdmVGcm9t
QW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIGFk
ZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiwg
Ym9vbCB3aWxsR2V0UmVzcG9uc2UpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhbmlt
YXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgdXBkYXRlQW5p
bWF0aW9uVGltZXJGb3JFbGVtZW50KEVsZW1lbnQmKTsKLQotICAgIGJvb2wgYWxsb3dzTmV3QW5p
bWF0aW9uc1doaWxlU3VzcGVuZGVkKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NOZXdBbmltYXRp
b25zV2hpbGVTdXNwZW5kZWQ7IH0KLSAgICB2b2lkIHNldEFsbG93c05ld0FuaW1hdGlvbnNXaGls
ZVN1c3BlbmRlZChib29sKTsKLQotICAgIHZvaWQgc2V0UmVxdWlyZXNMYXlvdXQoKSB7IG1fcmVx
dWlyZXNMYXlvdXQgPSB0cnVlOyB9Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhbmltYXRpb25UaW1l
ckZpcmVkKCk7Ci0KLSAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgdm9pZCBmaXJlRXZl
bnRzQW5kVXBkYXRlU3R5bGUoKTsKLSAgICB2b2lkIHN0YXJ0VGltZVJlc3BvbnNlKE1vbm90b25p
Y1RpbWUpOwotCi0gICAgSGFzaE1hcDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxDb21wb3NpdGVB
bmltYXRpb24+PiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnM7Ci0gICAgVGltZXIgbV9hbmltYXRpb25U
aW1lcjsKLSAgICBUaW1lciBtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyOwotICAgIEZy
YW1lJiBtX2ZyYW1lOwotCi0gICAgc3RydWN0IEV2ZW50VG9EaXNwYXRjaCB7Ci0gICAgICAgIFJl
ZjxFbGVtZW50PiBlbGVtZW50OwotICAgICAgICBBdG9tU3RyaW5nIGV2ZW50VHlwZTsKLSAgICAg
ICAgU3RyaW5nIG5hbWU7Ci0gICAgICAgIGRvdWJsZSBlbGFwc2VkVGltZTsKLSAgICB9OwotICAg
IFZlY3RvcjxFdmVudFRvRGlzcGF0Y2g+IG1fZXZlbnRzVG9EaXNwYXRjaDsKLSAgICBWZWN0b3I8
UmVmPEVsZW1lbnQ+PiBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaDsKLSAgICBIYXNoU2V0PERv
Y3VtZW50Kj4gbV9zdXNwZW5kZWREb2N1bWVudHM7Ci0KLSAgICBPcHRpb25hbDxNb25vdG9uaWNU
aW1lPiBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZTsKLQotICAgIHVzaW5nIEFuaW1hdGlvbnNT
ZXQgPSBIYXNoU2V0PFJlZlB0cjxBbmltYXRpb25CYXNlPj47Ci0gICAgQW5pbWF0aW9uc1NldCBt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGU7Ci0gICAgQW5pbWF0aW9uc1NldCBtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2U7Ci0KLSAgICBpbnQgbV9iZWdpbkFuaW1hdGlv
blVwZGF0ZUNvdW50OwotCi0gICAgYm9vbCBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0
aW9uOwotICAgIGJvb2wgbV9pc1N1c3BlbmRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3JlcXVp
cmVzTGF5b3V0IHsgZmFsc2UgfTsKLQotICAgIC8vIFVzZWQgdG8gZmxhZyB3aGV0aGVyIHdlIHNo
b3VsZCByZXZlcnQgdG8gcHJldmlvdXMgYnVnZ3kKLSAgICAvLyBiZWhhdmlvciBvZiBhbGxvd2lu
ZyBuZXcgdHJhbnNpdGlvbnMgYW5kIGFuaW1hdGlvbnMgdG8KLSAgICAvLyBydW4gZXZlbiB3aGVu
IHRoaXMgb2JqZWN0IGlzIHN1c3BlbmRlZC4KLSAgICBib29sIG1fYWxsb3dzTmV3QW5pbWF0aW9u
c1doaWxlU3VzcGVuZGVkOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAxYmU3NTliMDgxNjA5YmY1MzMzNDBkMzBh
MDI2MTQ3Mzc2NTA1MDA1Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDE4NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBv
cmF0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTUHJv
cGVydHlBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlv
bi5oIgotI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRmlsdGVy
SW1hZ2VWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVy
dHlOYW1lcy5oIgotI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FsY3VsYXRp
b25WYWx1ZS5oIgotI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ29s
b3JCbGVuZGluZy5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZv
bnRDYXNjYWRlLmgiCi0jaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgotI2luY2x1
ZGUgIkZvbnRUYWdnZWRTZXR0aW5ncy5oIgotI2luY2x1ZGUgIkdhcExlbmd0aC5oIgotI2luY2x1
ZGUgIklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgot
I2luY2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTWF0cml4
VHJhbnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAi
UmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAi
U3R5bGVHZW5lcmF0ZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQu
aCIKLSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2lu
Y2x1ZGUgPG1lbW9yeT4KLSNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0
Zi9OZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1
ZGUgPHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+
Ci0jaW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7
Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVy
biBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBk
b3VibGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8s
IHByb2dyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCi17Ci0gICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAt
IGZyb20pICogcHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0
IENvbG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0
bywgcHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVu
Z3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywg
cHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3Qg
R2FwTGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiAoZnJvbS5pc05v
cm1hbCgpIHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5s
ZW5ndGgoKSwgcHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNp
emUmIGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAg
cmV0dXJuIHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyks
IGJsZW5kRnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKLX0K
LQotc3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbSA9PSB0bykKLSAgICAgICAgcmV0dXJuIHRv
OwotCi0gICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAx
IDogMDsKLSAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6
IDA7Ci0gICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwg
cHJvZ3Jlc3MpOwotICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6
IFNoYWRvd1N0eWxlOjpJbnNldDsKLX0KLQotc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8
U2hhZG93RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGZyb20gJiYgdG8pOwotICAgIGlmIChmcm9tLT5zdHls
ZSgpICE9IHRvLT5zdHlsZSgpKQotICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRh
PigqdG8pOwotCi0gICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+
bG9jYXRpb24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJv
bS0+cmFkaXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChmcm9t
LT5zcHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kRnVuYyhh
bmltLCBmcm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBmcm9t
LT5pc1dlYmtpdEJveFNoYWRvdygpLAotICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+
Y29sb3IoKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRp
b25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24s
IGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlv
bnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3Jt
RnVuY3Rpb25MaXN0c01hdGNoKCkpCi0gICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdP
cGVyYXRpb25zKGZyb20sIHByb2dyZXNzKTsKLSAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0
cml4SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24t
PnJlbmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigp
KS5ib3JkZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKLX0KLQotc3RhdGljIGlu
bGluZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0
aW9uKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAg
ICAgIHJldHVybiB0bzsKLQotICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4g
QmFzaWNTaGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KLSAgICBpZiAoZnJvbS0+dHlwZSgpICE9
IENsaXBQYXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0
aW9uOjpTaGFwZSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgY29uc3QgQmFzaWNTaGFwZSYg
ZnJvbVNoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2lj
U2hhcGUoKTsKLSAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVD
bGlwUGF0aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7Ci0KLSAgICBpZiAoIWZyb21TaGFw
ZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgcmV0dXJuIFNo
YXBlQ2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJv
Z3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFw
ZVZhbHVlKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0g
ICAgICAgIHJldHVybiB0bzsKLQotICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6
VHlwZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKLSAg
ICAgICAgcmV0dXJuIHRvOwotCi0gICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3go
KSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBl
ID0gKmZyb20tPnNoYXBlKCk7Ci0gICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+
c2hhcGUoKTsKLQotICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQotICAgICAg
ICByZXR1cm4gdG87Ci0KLSAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxl
bmQoZnJvbVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0
b09wLCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCi17
Ci0gICAgQVNTRVJUKHRvT3ApOwotICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dy
ZXNzLCBibGVuZFRvUGFzc3Rocm91Z2gpOwotfQotCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJh
dGlvbnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEZpbHRlck9wZXJhdGlvbnMgcmVz
dWx0OwotICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKLSAg
ICBzaXplX3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKLSAgICBzaXplX3Qgc2l6
ZSA9IHN0ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKSB7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9
IChpIDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwotICAgICAg
ICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0
aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxl
bmRlZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCks
IHByb2dyZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBw
cm9ncmVzcywgdHJ1ZSkgOiAwKTsKLSAgICAgICAgaWYgKGJsZW5kZWRPcCkKLSAgICAgICAgICAg
IHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7Ci0gICAgICAgIGVsc2Ugewot
ICAgICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246
OmNyZWF0ZSgpOwotICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQotICAgICAgICAgICAg
ICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVu
dGl0eU9wKSk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJh
dGlvbnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBG
aWx0ZXJPcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB0bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQ
cm9wZXJ0eUZpbHRlcikKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLQotICAgIC8v
IElmIHdlIGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXIt
ZnVuY3Rpb24gYW5pbWF0aW9uLgotICAgIAotICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOwot
ICAgIHN3aXRjaCAocHJvcGVydHlJRCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6Ci0g
ICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKLSAg
ICAgICAgYnJlYWs7Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjYXNlIENTU1By
b3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5i
YWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOwotICAgICAgICBicmVhazsKLSNlbmRp
ZgotICAgIGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgotICAgICAgICBsaXN0c01h
dGNoID0gYW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJl
YWs7Ci0gICAgZGVmYXVsdDoKLSAgICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChs
aXN0c01hdGNoKQotICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwg
ZnJvbSwgdG8sIHByb2dyZXNzKTsKLSAgICBlbHNlIHsKLSAgICAgICAgLy8gSWYgdGhlIGZpbHRl
ciBmdW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUs
IGJ1dCBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCi0gICAg
ICAgIC8vIEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCi0gICAgICAgIHJlc3Vs
dCA9IHRvOwotICAgIH0KLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
UmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAg
ICBBU1NFUlQoaW1hZ2UpOwotICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxl
bmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7Ci0KLSAgICBhdXRv
IGltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKLSAgICBhdXRvIGZp
bHRlclZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+
Y3VycmVudFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7Ci0K
LSAgICBhdXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGlt
YWdlVmFsdWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7Ci0gICAgcmVzdWx0LmdldCgpLnNldEZp
bHRlck9wZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKLSAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJ
bWFnZTo6Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmlzaWJp
bGl0eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlz
aWJpbGl0eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8g
QW55IG5vbi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZp
c2libGUuIE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCi0gICAgLy8g
aW52aXNpYmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVu
IHZzLiBWaXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20v
dG8gdmFsdWVzLgotICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlID8gMS4gOiAwLjsKLSAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNp
YmxlID8gMS4gOiAwLjsKLSAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKLSAgICAgICAgcmV0dXJu
IHRvOwotICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWws
IHByb2dyZXNzKTsKLSAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxl
IDogKHRvICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOwotfQotCi1zdGF0aWMg
aW5saW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0
IFRleHRVbmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGZy
b20uaXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dFVuZGVy
bGluZU9mZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhW
YWx1ZSgpLCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOwotICAgIHJldHVybiBUZXh0VW5k
ZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIFRleHRE
ZWNvcmF0aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGZy
b20uaXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dERlY29y
YXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVu
Z3RoVmFsdWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4
dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Ci19Ci0KLXN0YXRpYyBpbmxp
bmUgTGVuZ3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRv
cCgpLCB0by50b3AoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5j
KGFuaW0sIGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAg
ICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9n
cmVzcyksCi0gICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCks
IHRvLmxlZnQoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMg
aW5saW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVl
JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6Ymxl
bmQoZnJvbSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKLX0KLQotc3Rh
dGljIGlubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwg
Y29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAg
ICBzaXplX3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOwotICAgIHNpemVfdCB0b0xlbmd0aCA9
IHRvLnNpemUoKTsKLSAgICBpZiAoIWZyb21MZW5ndGgpCi0gICAgICAgIHJldHVybiAhcHJvZ3Jl
c3MgPyBmcm9tIDogdG87Ci0gICAgaWYgKCF0b0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIHByb2dy
ZXNzID09IDEgPyBmcm9tIDogdG87Ci0gICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5n
dGg7Ci0gICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKLSAgICAgICAgaWYgKCFyZW1h
aW5kZXIoc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3Ro
LCB0b0xlbmd0aCkpKQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxl
bmd0aCwgdG9MZW5ndGgpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHRMZW5ndGgg
PSBmcm9tTGVuZ3RoICogdG9MZW5ndGg7Ci0gICAgfQotICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1
ZT4gcmVzdWx0KHJlc3VsdExlbmd0aCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1
bHRMZW5ndGg7ICsraSkKLSAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5k
KGZyb21baSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25U
b0Zsb2F0KHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGlu
ZSBSZWZQdHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hl
ZEltYWdlKiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICAvLyBJZiBwcm9n
cmVzcyBpcyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUg
dG8gc2hvdyB0aGUgaW1hZ2UsCi0gICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNv
IHdlIGhhbmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KLSAgICBpZiAoIXByb2dy
ZXNzKQotICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7Ci0gICAgaWYgKHByb2dyZXNzID09
IDEpCi0gICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7Ci0gICAgaWYgKCFmcm9tU3R5bGVJbWFn
ZS0+Y2FjaGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQotICAgICAg
ICByZXR1cm4gdG9TdHlsZUltYWdlOwotCi0gICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0lt
YWdlVmFsdWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOwotICAgIGF1
dG8gdG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNh
Y2hlZEltYWdlKCkpOwotICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFs
dWU6OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotCi0gICAgYXV0
byBjcm9zc2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9t
SW1hZ2VWYWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFs
dWUpKTsKLSAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jv
c3NmYWRlVmFsdWUpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2Uq
IGZyb20sIFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKCFmcm9t
IHx8ICF0bykKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgZnJvbSA9IGZyb20tPnNlbGVjdGVk
SW1hZ2UoKTsKLSAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7Ci0KLSAgICBpZiAoIWZyb20g
fHwgIXRvKQotICAgICAgICByZXR1cm4gdG87ICAgIAotCi0gICAgLy8gQW5pbWF0aW9uIGJldHdl
ZW4gdHdvIGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4K
LSAgICBpZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJh
dGVkSW1hZ2U+KCp0bykpIHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdl
bmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVl
KCk7Ci0gICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNh
c3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7Ci0KLSAgICAgICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlcklt
YWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewotICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdl
bmVyYXRlZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgot
ICAgICAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlv
bi4KLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2Fz
dDxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdl
cyh0b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAg
IHJldHVybiBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21G
aWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHBy
b2dyZXNzKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4o
ZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewot
ICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxD
U1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NDcm9zc2Zh
ZGVWYWx1ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5l
cmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0
b0Nyb3NzZmFkZSkpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9
IHRvQ3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKLSAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxl
bmQpOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBz
dXBwb3J0IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgot
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2
Ci0gICAgfSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5
bGVDYWNoZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBm
cm9tR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdl
VmFsdWUoKTsKLSAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0
ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93
bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBp
ZiAoZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+
KCp0bykuY2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAg
ICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJv
Z3Jlc3MpOwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBi
ZXR3ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KLSAgICB9IGVsc2UgaWYgKGlzPFN0
eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7
Ci0gICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlmIChpczxD
U1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0ZpbHRl
ckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9H
ZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93
bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIu
Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwg
dG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0
ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTog
QWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCi0g
ICAgfQotCi0gICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNo
ZWQgYW5kIGdlbmVyYXRlZCBpbWFnZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTc4MjkzCi0gICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9t
KSAmJiBpczxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQotICAgICAgICByZXR1cm4gY3Jvc3NmYWRl
QmxlbmQoYW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0
eWxlQ2FjaGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOwotCi0gICAgcmV0dXJuIHRvOwotfQotCi1z
dGF0aWMgaW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmlu
ZVBpZWNlSW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKCFmcm9tLmhhc0lt
YWdlKCkgfHwgIXRvLmhhc0ltYWdlKCkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIC8vIEZJ
WE1FICg3NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdl
cyB0aGF0IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KLQotICAgIGlmIChmcm9t
LmltYWdlU2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygp
ICE9IHRvLmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwg
ZnJvbS5maWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5o
b3Jpem9udGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxl
KCkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0t
PnJlbmRlcmVyKCkpIHsKLSAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRl
cmVyLCAxLjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKLSAgICAg
ICAgICAgIHJldHVybiB0bzsKLSAgICB9Ci0KLSAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxl
bmRGdW5jKGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAotICAgICAg
ICBmcm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBm
cm9tLm91dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkp
OwotfQotCi0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLQotc3RhdGljIGlubGluZSBGb250
VmFyaWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZh
cmlhdGlvblNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLnNp
emUoKSAhPSB0by5zaXplKCkpCi0gICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3Mo
KTsKLSAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OwotICAgIHVuc2lnbmVkIHNpemUg
PSBmcm9tLnNpemUoKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7
Ci0gICAgICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKLSAgICAgICAgYXV0byYgdG9J
dGVtID0gdG8uYXQoaSk7Ci0gICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFn
KCkpCi0gICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgICAg
IGZsb2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0
b0l0ZW0udmFsdWUoKSwgcHJvZ3Jlc3MpOwotICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0
ZW0udGFnKCksIGludGVycG9sYXRlZCB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0K
LQotI2VuZGlmCi0KLXN0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUg
ZnJvbSwgRm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0
dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGZyb20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOwotfQotCi1zdGF0aWMg
aW5saW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4g
ZnJvbSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQot
ewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19j
YXN0PGZsb2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSks
IHByb2dyZXNzKSk7Ci19Ci0KLWNsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewot
ICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOwot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQotICAgICAgICA6IG1f
cHJvcChwcm9wKQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSgpID0gZGVmYXVsdDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdy
YXBwZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7Ci0g
ICAgdmlydHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
UmVuZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKLSAg
ICAKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJl
c3VsdCwgZG91YmxlKSBjb25zdCA9IDA7Ci0jZW5kaWYKLQotICAgIENTU1Byb3BlcnR5SUQgcHJv
cGVydHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBhbmlt
YXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJpdmF0ZToK
LSAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgot
Y2xhc3MgUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoq
Z2V0dGVyKSgpIGNvbnN0KQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uo
cHJvcCkKLSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJv
b2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29u
c3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwot
ICAgIH0KLQotICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewot
ICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FC
TEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3QgZmluYWwKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJl
YW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBm
cm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0
U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4g
IiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFQg
KFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLWNsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VD4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCi0gICAgICAgIDogUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3Bl
cnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0
dGVyPFQ+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAg
ICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCog
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoUmVmUHRyPFQ+JiYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJv
cCwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0g
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPipt
X3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6
bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCks
IHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoUmVmUHRyPFQ+JiYpOwotfTsKLQotY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCi0gICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikK
LSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY2Fu
SW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsK
LSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1w
cm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOwot
fTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlX
cmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQotICAgICAgICA6
IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQotICAgICAgICAs
IG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFu
aW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChi
LT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNz
KSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRl
cikoVCYmKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJl
ZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChD
U1NQcm9wZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhP
cGVyYXRpb24+JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBh
dGhPcGVyYXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJl
IHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgIC8vIElmIGVp
dGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVl
LgotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDbGlw
UGF0aE9wZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgQ2xp
cFBhdGhPcGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGlm
IChjbGlwUGF0aEEgPT0gY2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGlmICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7Ci0gICAgfQotfTsK
LQotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250
VmFyaWF0aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25T
ZXR0aW5ncz4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZv
bnRWYXJpYXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQotICAgICAgICA6
IFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAv
LyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcg
dGhlIHRlc3QuCi0gICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElm
IGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlh
dGlvblNldHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IEZvbnRWYXJp
YXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKLSAg
ICAgICAgcmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7Ci0g
ICAgfQotfTsKLSNlbmRpZgotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBS
ZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0
eUlEIHByb3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9p
ZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKLSAgICAgICAg
OiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAv
LyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcg
dGhlIHRlc3QuCi0gICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElm
IGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVy
KSgpOwotICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAg
ICAgICBpZiAoc2hhcGVBID09IHNoYXBlQikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgICAgICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOwotICAgIH0KLX07Ci0KLWNsYXNzIFN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBl
cjxTdHlsZUltYWdlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1h
Z2UqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVy
dHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAgICB9
Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgIGlmIChhID09IGIpCi0gICAgICAg
ICAgIHJldHVybiB0cnVlOwotICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgp
OwotICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAg
ICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Ci0gICAgfQot
fTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IENvbG9yJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikK
LSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBD
b2xvciYpOwotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCi0g
ICAgICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQotICAgIHsKLSAgICB9
Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGIt
Pm9wYWNpdHkoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBw
ZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCi0gICAgICAgIDog
UHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRy
YW5zZm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNm
b3JtKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFu
aW0sIGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci19
OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
PGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
KQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJv
cGVydHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgYW5pbWF0
aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4g
cHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVM
XzIpCi0gICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ry
b3BGaWx0ZXIKLSNlbmRpZgotICAgICAgICAgICAgOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOwotICAg
IH0KLX07Ci0KLXN0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93KQotewotICAgIHNpemVfdCBjb3VudDsKLSAgICBmb3IgKGNvdW50ID0g
MDsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKLSAgICAgICAgKytjb3VudDsKLSAg
ICByZXR1cm4gY291bnQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dE
YXRhKiBvdGhlclNoYWRvdykKLXsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0
YT4gZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5v
cm1hbCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgp
LCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRC
b3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRy
dWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgp
LCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KTsKLQotICAgIGlmIChzcmNTaGFkb3cpCi0gICAgICAgIHJldHVybiBzcmNTaGFkb3c7Ci0KLSAg
ICBpZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQotICAgICAg
ICByZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0
V2ViS2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgp
OwotCi0gICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1
bHRXZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOwot
fQotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93
RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKLSAgICAgICAgOiBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9nZXR0ZXIoZ2V0
dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9v
bCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7
Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOwot
Ci0gICAgICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0
cwotICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQotICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxp
c3RzCi0gICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0Ip
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBzaGFkb3dBID0g
c2hhZG93QS0+bmV4dCgpOwotICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFk
b3dMaXN0TGVuZ3RoKHNoYWRvd0EpOwotICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0
TGVuZ3RoKHNoYWRvd0IpOwotCi0gICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8
IChmcm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKLSAgICAgICAgICAgIChkc3Qt
PiptX3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVz
cywgc2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgfQotCi0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3Ro
KSwgZmFsc2UpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0
TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQotI2VuZGlmCi0KLXBy
aXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRj
aGVkU2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3dCKSBjb25zdAotICAgIHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0Rh
dGE+IG5ld1NoYWRvd0RhdGE7Ci0gICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOwot
Ci0gICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKLSAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRv
d0IpOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9y
QmxlbmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywg
ZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hh
ZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKLQotICAgICAgICAgICAgaWYgKCFsYXN0U2hh
ZG93KQotICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFk
b3cpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5l
eHQoV1RGTW92ZShibGVuZGVkU2hhZG93KSk7Ci0KLSAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBi
bGVuZGVkU2hhZG93UHRyOwotCi0gICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRv
d0EtPm5leHQoKSA6IDA7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0It
Pm5leHQoKSA6IDA7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsK
LSAgICB9Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAotICAgIHsKLSAgICAg
ICAgLy8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3Jk
ZXIsIHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCi0gICAgICAgIC8vIHJldmVy
c2UgdGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgotICAgICAgICBWZWN0b3I8Y29uc3QgU2hh
ZG93RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOwotICAgICAgICBmb3IgKGludCBp
ID0gZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBmcm9tU2hhZG93
c1tpXSA9IHNoYWRvd0E7Ci0gICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRv
d3ModG9MZW5ndGgpOwotICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7
IC0taSkgewotICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKLSAgICAgICAgICAg
IHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKLQotICAgICAgICBpbnQgbWF4TGVu
Z3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOwotICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1heExlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRh
KiBmcm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7Ci0gICAg
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hh
ZG93c1tpXSA6IDA7Ci0KLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9
IHNoYWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKLSAgICAgICAgICAgIGNv
bnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBm
cm9tU2hhZG93KTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJs
ZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dy
ZXNzKTsKLSAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8g
cHJlc2VydmUgdGhlIG9yZGVyLgotICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChX
VEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKLSAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZN
b3ZlKGJsZW5kZWRTaGFkb3cpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRv
d0RhdGE7Ci0gICAgfQotCi0gICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9n
ZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3Jh
cHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlm
IChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9
IHZhbHVlKGEpOwotICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7Ci0KLSAgICAgICAg
aWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKLSAg
ICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7Ci0gICAgICAgIGlmICghdG9Db2xvci5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKLQotICAgICAgICBy
ZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEp
OwotICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7Ci0KLSAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVy
bjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9t
Q29sb3IgPSBhLT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0K
LSAgICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQK
LSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBm
aW5hbAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8g
IiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAg
fQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OwotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0
IENvbG9yJik7Ci19OwotCi0KLWVudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFs
aWRDb2xvciB9OwotY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBw
dWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwKLSAg
ICAgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3Qs
IHZvaWQgKFJlbmRlclN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAg
ICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV93cmFw
cGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVy
KSkKLSAgICAgICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVy
Q29sb3I+KHByb3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQotICAgIHsKLSAgICB9
Ci0gICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBw
cm9wLCBNYXliZUludmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiks
Ci0gICAgICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0g
ICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1f
d3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9w
LCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVl
PFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2
aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIHJldHVybiBtX3dyYXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVy
LT5lcXVhbHMoYSwgYik7Ci0gICAgfQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBtX3dyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jl
c3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHBy
b2dyZXNzKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0
eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAg
IG1fd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7Ci0gICAgICAgIG1f
dmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgIH0K
LSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlPiBtX3dyYXBwZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2U+IG1fdmlzaXRlZFdyYXBwZXI7Ci19OwotCi0vLyBXcmFwcGVyIGJh
c2UgY2xhc3MgZm9yIGFuIGFuaW1hdGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKLWNsYXNz
IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLSAgICAgICAgOiBtX3Byb3BlcnR5KHBy
b3BlcnR5KQotICAgIHsKLSAgICB9Ci0gICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZSgpID0gZGVmYXVsdDsKLQotICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnR5OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1
YWxzKGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKLSAgICB2
aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxM
YXllciosIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3Qg
PSAwOwotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25z
dCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwg
ZG91YmxlKSBjb25zdCA9IDA7Ci0jZW5kaWYKLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJRCBt
X3Byb3BlcnR5OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXIgOiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKLXB1YmxpYzoKLSAg
ICBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
VCAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0KQotICAgICAgICA6IEZpbGxMYXllckFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCi0gICAgICAgICwgbV9nZXR0ZXIoZ2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEs
IGNvbnN0IEZpbGxMYXllciogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChh
ID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlciko
KSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgIH0KLQotICAgIFQgdmFsdWUoY29uc3QgRmlsbExh
eWVyKiBsYXllcikgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRl
cikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25z
dCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIq
IGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8
IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5n
SW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0j
ZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0
OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCi0gICAgICAg
IDogRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0
dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIq
IGRzdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQm
Pjo6bV9nZXR0ZXIpKCksIChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxF
RAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxM
YXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8
ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46OnByb3BlcnR5KCkpCi0gICAgICAgICAgICA8PCAiIGZyb20gIiA8
PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQotICAg
ICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBUJj46OnZhbHVlKGIpCi0gICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9y
bWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7Ci0gICAg
fQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlciko
VCk7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1Ymxp
YyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclBvc2l0aW9uUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxM
YXllcjo6Kmxlbmd0aEdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0
dGVyKShMZW5ndGgpLCBFZGdlIChGaWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKEZpbGxMYXllcjo6Km9yaWdpblNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKLSAgICAg
ICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVy
dHksIGxlbmd0aEdldHRlcikKLSAgICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIp
Ci0gICAgICAgICwgbV9vcmlnaW5HZXR0ZXIob3JpZ2luR2V0dGVyKQotICAgICAgICAsIG1fb3Jp
Z2luU2V0dGVyKG9yaWdpblNldHRlcikKLSAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKLSAg
ICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQot
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsK
LSAgICAgICAgTGVuZ3RoIHRvTGVuZ3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgRWRn
ZSBmcm9tRWRnZSA9IChhLT4qbV9vcmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIEVkZ2UgdG9FZGdl
ID0gKGItPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmcm9t
TGVuZ3RoID09IHRvTGVuZ3RoICYmIGZyb21FZGdlID09IHRvRWRnZTsKLSAgICB9Ci0KLSAgICB2
b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXll
ciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGgg
PSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgCi0g
ICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOwotICAgICAgICBF
ZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBp
ZiAoZnJvbUVkZ2UgIT0gdG9FZGdlKSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdo
dC9ib3R0b20gaW50byBhIGNhbGMgZXhwcmVzc2lvbiwKLSAgICAgICAgICAgIGlmIChmcm9tRWRn
ZSA9PSBtX2ZhckVkZ2UpCi0gICAgICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEw
MFBlcmNlbnRNaW51c0xlbmd0aChmcm9tTGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRv
RWRnZSA9PSBtX2ZhckVkZ2UpIHsKLSAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRU
bzEwMFBlcmNlbnRNaW51c0xlbmd0aCh0b0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgKGRzdC0+
Km1fb3JpZ2luU2V0dGVyKShmcm9tRWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0g
bCksIGl0J3MgcmVsYXRpdmUgdG8gdGhlIGxlZnQvdG9wIGVkZ2UuCi0gICAgICAgICAgICB9Ci0g
ICAgICAgIH0KLQotICAgICAgICAoZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmlt
LCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJ
U0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3Qg
RmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJl
YW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBm
cm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0
U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4g
IiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZv
aWQgKEZpbGxMYXllcjo6Km1fbGVuZ3RoU2V0dGVyKShMZW5ndGgpOwotICAgIEVkZ2UgKEZpbGxM
YXllcjo6Km1fb3JpZ2luR2V0dGVyKSgpIGNvbnN0OwotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1f
b3JpZ2luU2V0dGVyKShFZGdlKTsKLSAgICBFZGdlIG1fZmFyRWRnZTsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6
IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQotICAgICAg
ICA6IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikK
LSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3Qs
IGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVy
KSgpLCAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgp
LCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0Js
ZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZp
bGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8
IGdldFByb3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9w
ZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQqPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShiKQotICAgICAgICAgICAgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVl
KHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoRmlsbExh
eWVyOjoqbV9zZXR0ZXIpKFJlZlB0cjxUPiYmKTsKLX07Ci0KLWNsYXNzIEZpbGxMYXllclN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTdHlsZUltYWdlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgRmlsbExheWVyU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBTdHlsZUltYWdlKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChGaWxsTGF5ZXI6OipzZXR0ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKLSAgICAgICAgOiBG
aWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBn
ZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmls
bExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgIGlmIChhID09IGIpCi0gICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgIGlmICghYSB8
fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBTdHlsZUltYWdlKiBp
bWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAo
Yi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShp
bWFnZUEsIGltYWdlQik7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3Qg
RmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIg
PDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8
ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
Ci0gICAgfQotI2VuZGlmCi19OwotCi1jbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVy
U3R5bGU6OipMYXllcnNHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdHlwZWRlZiBGaWxsTGF5ZXImIChS
ZW5kZXJTdHlsZTo6KkxheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgRmlsbExheWVyc1Byb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXll
cnNBY2Nlc3NvciBhY2Nlc3NvcikKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3BlcnR5KQotICAgICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKLSAgICAgICAg
LCBtX2xheWVyc0FjY2Vzc29yKGFjY2Vzc29yKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChwcm9w
ZXJ0eSkgewotICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKLSAg
ICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6Ci0gICAgICAgICAgICBt
X2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Q
cm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5
ZXI6OnNldFhQb3NpdGlvbiwgJkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5
ZXI6OnNldEJhY2tncm91bmRYT3JpZ2luLCBFZGdlOjpSaWdodCk7Ci0gICAgICAgICAgICBicmVh
azsKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgICAg
IGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25ZOgotICAgICAgICAgICAgbV9maWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVy
dHlXcmFwcGVyPihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpz
ZXRZUG9zaXRpb24sICZGaWxsTGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpz
ZXRCYWNrZ3JvdW5kWU9yaWdpbiwgRWRnZTo6Qm90dG9tKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tTaXplOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBt
YWtlVW5pcXVlPEZpbGxMYXllclByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHks
ICZGaWxsTGF5ZXI6OnNpemVMZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6
Ci0gICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8Rmls
bExheWVyU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6Omlt
YWdlLCAmRmlsbExheWVyOjpzZXRJbWFnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9v
bCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgYXV0byogZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0g
ICAgICAgIGF1dG8qIHRvTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKLQotICAgICAg
ICB3aGlsZSAoZnJvbUxheWVyICYmIHRvTGF5ZXIpIHsKLSAgICAgICAgICAgIGlmICghbV9maWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQotICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxh
eWVyLT5uZXh0KCk7Ci0gICAgICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1f
bGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dl
dHRlcikoKTsKLSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNz
b3IpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsK
LSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RM
YXllciwgYUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKLSAgICAgICAgICAgIGFMYXllciA9IGFM
YXllci0+bmV4dCgpOwotICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7Ci0gICAg
ICAgICAgICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIg
PSAmKGZyb20tPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAgICAgYXV0byogYkxheWVyID0gJih0
by0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0
LT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIg
JiYgZHN0TGF5ZXIpIHsKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5s
b2dCbGVuZChkc3RMYXllciwgYUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKLSAgICAgICAgICAg
IGFMYXllciA9IGFMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5u
ZXh0KCk7Ci0gICAgICAgICAgICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7Ci0gICAgICAg
IH0KLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExh
eWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXI7Ci0KLSAgICBMYXllcnNHZXR0ZXIgbV9sYXllcnNHZXR0ZXI7Ci0gICAgTGF5ZXJzQWNjZXNz
b3IgbV9sYXllcnNBY2Nlc3NvcjsKLX07Ci0KLWNsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
ciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uq
PiBsb25naGFuZFdyYXBwZXJzKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCi0gICAgICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hh
bmRXcmFwcGVycykpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVy
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
Zm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7Ci0gICAgICAgICAgICBp
ZiAoIXdyYXBwZXItPmVxdWFscyhhLCBiKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6
IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRz
dCwgYSwgYiwgcHJvZ3Jlc3MpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lk
IGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29u
c3QgUmVuZGVyU3R5bGUqIGRzdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAotICAgIHsK
LSAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQotICAgICAg
ICAgICAgd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7Ci0gICAgfQotI2Vu
ZGlmCi0KLSAgICBjb25zdCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBw
cm9wZXJ0eVdyYXBwZXJzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9Ci0K
LXByaXZhdGU6Ci0gICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3By
b3BlcnR5V3JhcHBlcnM7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGlj
IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckZsZXgoKQotICAgICAgICA6IEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlGbGV4KQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lz
KCkgJiYgYS0+ZmxleEdyb3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9
PSBiLT5mbGV4U2hyaW5rKCk7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBh
LT5mbGV4QmFzaXMoKSwgYi0+ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGRzdC0+
c2V0RmxleEdyb3coYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCks
IHByb2dyZXNzKSk7Ci0gICAgICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwg
YS0+ZmxleFNocmluaygpLCBiLT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZs
ZXggYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJv
Z3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlclNWR1Bh
aW50IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENT
U1Byb3BlcnR5SUQgcHJvcCwgU1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdl
dHRlcikoKSBjb25zdCwgQ29sb3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIo
cGFpbnRUeXBlR2V0dGVyKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICgo
YS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFu
aW1hdGlvbnMgYmV0d2VlbiBTVkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCi0g
ICAgICAgIC8vIEZvciBldmVyeXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhp
cyBtZXRob2QsIG90aGVyd2lzZQotICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJl
dHdlZW4gdmFsdWVzIGZvcmV2ZXIuCi0gICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVy
KSgpID09IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpIHsKLSAgICAgICAgICAgIENvbG9yIGZyb21D
b2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGIt
PiptX2dldHRlcikoKTsKLQotICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYm
ICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGZyb21D
b2xvciA9IENvbG9yKCk7Ci0gICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotCi0gICAgICAgICAgICByZXR1cm4gZnJv
bUNvbG9yID09IHRvQ29sb3I7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlm
ICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKLSAg
ICAgICAgICAgIHx8IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpS
R0JDb2xvcikKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3Ig
PSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRl
cikoKTsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNW
YWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlz
VmFsaWQoKSkKLSAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIGlmICgh
dG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKLSAgICAg
ICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBw
cm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1F
OiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51
bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIFNWR1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlciko
KSBjb25zdDsKLSAgICBDb2xvciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAg
ICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotY2xh
c3MgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRp
b25hbDxGb250U2VsZWN0aW9uVmFsdWU+PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCkKLSAgICAgICAgOiBQcm9w
ZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250
U3R5bGUsICZSZW5kZXJTdHlsZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRh
bGljKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRl
clN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICByZXR1cm4gZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkg
JiYgZnJvbS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4
aXM6OnNsbnQgJiYgdG8tPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250
U3R5bGVBeGlzOjpzbG50OwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5
bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShm
cm9tLCB0byk7Ci0KLSAgICAgICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhp
czo6c2xudDsKLSAgICAgICAgaWYgKGRpc2NyZXRlKQotICAgICAgICAgICAgYmxlbmRlZFN0eWxl
QXhpcyA9IChwcm9ncmVzcyA8IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZv
bnRTdHlsZUF4aXMoKTsKLQotICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9u
dEl0YWxpYygpOwotICAgICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7
Ci0gICAgICAgIGF1dG8gYmxlbmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21G
b250SXRhbGljIDogdG9Gb250SXRhbGljOwotICAgICAgICBpZiAoIWRpc2NyZXRlKQotICAgICAg
ICAgICAgYmxlbmRlZEZvbnRJdGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMs
IHRvRm9udEl0YWxpYywgcHJvZ3Jlc3MpOwotCi0gICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVu
dEZvbnRTZWxlY3RvciA9IGRzdC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKLSAgICAg
ICAgYXV0byBkZXNjcmlwdGlvbiA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGRl
c2NyaXB0aW9uLnNldEl0YWxpYyhibGVuZGVkRm9udEl0YWxpYyk7Ci0gICAgICAgIGRlc2NyaXB0
aW9uLnNldEZvbnRTdHlsZUF4aXMoYmxlbmRlZFN0eWxlQXhpcyk7Ci0gICAgICAgIGRzdC0+c2V0
Rm9udERlc2NyaXB0aW9uKFdURk1vdmUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgZHN0LT5mb250
Q2FzY2FkZSgpLnVwZGF0ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKLSAgICB9Ci19OwotCi1jbGFz
cyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAgewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXAmIHNpbmdsZXRvbigpCi0gICAgewotICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5l
dmVyIGRlc3Ryb3llZC4gTWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3
aGVuIHRoZSBsYXN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPwotICAgICAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBt
YXA7Ci0gICAgICAgIHJldHVybiBtYXA7Ci0gICAgfQotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSogd3JhcHBlckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkK
LSAgICB7Ci0gICAgICAgIGlmIChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9w
ZXJ0eUlEID4gbGFzdENTU1Byb3BlcnR5KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICAgICAgdW5zaWduZWQgd3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9w
ZXJ0eUlEKTsKLSAgICAgICAgaWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3Jh
cHBlckluZGV4KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcmV0dXJu
IG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpOwotICAgIH0KLQotICAgIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRl
eCkKLSAgICB7Ci0gICAgICAgIEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXpl
KCkpOwotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKLSAg
ICB9Ci0KLSAgICB1bnNpZ25lZCBzaXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb3Bl
cnR5V3JhcHBlcnMuc2l6ZSgpOwotICAgIH0KLQotcHJpdmF0ZToKLSAgICBDU1NQcm9wZXJ0eUFu
aW1hdGlvbldyYXBwZXJNYXAoKTsKLSAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFw
KCkgPSBkZWxldGU7Ci0KLSAgICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENT
U1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5
VG9JZE1hcFtwcm9wZXJ0eUlEIC0gZmlyc3RDU1NQcm9wZXJ0eV07Ci0gICAgfQotCi0gICAgVmVj
dG9yPHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9w
ZXJ0eVdyYXBwZXJzOwotICAgIHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NT
UHJvcGVydGllc107Ci0KLSAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFBy
b3BlcnR5V3JhcHBlckluZGV4ID0gVUNIQVJfTUFYOwotCi0gICAgZnJpZW5kIGNsYXNzIFdURjo6
TmV2ZXJEZXN0cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKLX07Ci0KLUNT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVy
TWFwKCkKLXsKLSAgICAvLyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBk
byB0aGUgY29tcGFyaXNvbnMgYW5kIGJsZW5kcwotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKLSAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6
bGVmdCwgJlJlbmRlclN0eWxlOjpzZXRMZWZ0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNldFJpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eVRvcCwgJlJlbmRlclN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKLSAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0
eWxlOjpib3R0b20sICZSZW5kZXJTdHlsZTo6c2V0Qm90dG9tKSwKLQotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0V2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWluV2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0TWluV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5TWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0TWF4V2lkdGgpLAotCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlIZWlnaHQsICZSZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdo
dCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWln
aHQsICZSZW5kZXJTdHlsZTo6bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCks
Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQs
ICZSZW5kZXJTdHlsZTo6bWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCi0K
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZsZXgoKSwKLQotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxl
Ojpib3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdp
ZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyUmlnaHRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5Qm9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVyVG9wV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKLSAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5k
ZXJTdHlsZTo6bWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKLSAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVu
ZGVyU3R5bGU6Om1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJl
bmRlclN0eWxlOjptYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKLSAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJl
bmRlclN0eWxlOjptYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwK
LSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0
LCAmUmVuZGVyU3R5bGU6OnBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdS
aWdodCwgJlJlbmRlclN0eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGlu
Z1JpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBh
ZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRk
aW5nVG9wKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBh
ZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpz
ZXRQYWRkaW5nQm90dG9tKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFm
ZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a0NhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKLQot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlDb2xvciwgJlJlbmRlclN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJl
bmRlclN0eWxlOjp2aXNpdGVkTGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Q29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xv
cihDU1NQcm9wZXJ0eUJhY2tncm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwg
JlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpdGVkTGlua0JhY2tncm91bmRDb2xvciksCi0KLSAgICAgICAgbmV3IEZpbGxMYXllcnNQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6
YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwK
LSAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5
bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRM
aXN0U3R5bGVJbWFnZSksCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5V2Via2l0TWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRl
clN0eWxlOjpzZXRNYXNrSW1hZ2UpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAotICAgICAg
ICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTbGljZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJJbWFnZVNsaWNlcyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50
UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1h
Z2VXaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJ
bWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCi0KLSAgICAg
ICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94
SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5
bGU6OnNldE1hc2tCb3hJbWFnZVNvdXJjZSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
Y29uc3QgTmluZVBpZWNlSW1hZ2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJl
bmRlclN0eWxlOjptYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwK
LQotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRQb3NpdGlvblgsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0
eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6
OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyks
Ci0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dy
b3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjpl
bnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNr
Z3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotCi0g
ICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a1Bvc2l0aW9uWCwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3Vy
ZU1hc2tMYXllcnMpLAotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNr
TGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAotCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6
Y29tcHV0ZWRGb250U2l6ZSwgJlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdp
ZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5SdWxlV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxH
YXBMZW5ndGg+KENTU1Byb3BlcnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5HYXApLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFBy
b3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6
OnJvd0dhcCwgJlJlbmRlclN0eWxlOjpzZXRSb3dHYXApLAotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyPHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5
bGU6OmNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRl
clN0eWxlOjpjb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9y
aXpvbnRhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6c2V0SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcpLAotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2lu
ZywgJlJlbmRlclN0eWxlOjp2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0
VmVydGljYWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+
KENTU1Byb3BlcnR5WkluZGV4LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRl
clN0eWxlOjpzZXRTcGVjaWZpZWRaSW5kZXgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PHNob3J0PihDU1NQcm9wZXJ0eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRl
clN0eWxlOjpzZXRPcnBoYW5zKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4o
Q1NTUHJvcGVydHlXaWRvd3MsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNl
dFdpZG93cyksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlM
aW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHls
ZTo6c2V0TGluZUhlaWdodCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5T3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVu
ZGVyU3R5bGU6OnNldE91dGxpbmVPZmZzZXQpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZVdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6Omxl
dHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0
eWxlOjp3b3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVy
U3R5bGU6OnRleHRJbmRlbnQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCi0KLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJl
bmRlclN0eWxlOjpwZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCi0g
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9y
aWdpblgsICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNl
dFBlcnNwZWN0aXZlT3JpZ2luWCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVP
cmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVu
ZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3Jp
Z2luWCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFu
c2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHls
ZTo6c2V0VHJhbnNmb3JtT3JpZ2luWSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1P
cmlnaW5aLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAotICAgICAgICBuZXcg
TGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRl
clRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJUb3BMZWZ0UmFkaXVzKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlh
bnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJh
ZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpz
ZXRCb3JkZXJUb3BSaWdodFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVy
dHlXcmFwcGVyPExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywg
JlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlckJvdHRvbUxlZnRSYWRpdXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5
V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNp
YmlsaXR5PihDU1NQcm9wZXJ0eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpYmlsaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHls
ZTo6c2V0Wm9vbVdpdGhvdXRSZXR1cm5WYWx1ZSksCi0KLSAgICAgICAgbmV3IExlbmd0aFZhcmlh
bnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHls
ZTo6Y2xpcCwgJlJlbmRlclN0eWxlOjpzZXRDbGlwKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5KCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJB
Y2NlbGVyYXRlZFRyYW5zZm9ybSgpLAotICAgICAgICAKLSAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlckZpbHRlcihDU1NQcm9wZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5k
ZXJTdHlsZTo6c2V0RmlsdGVyKSwKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0
ZXIsICZSZW5kZXJTdHlsZTo6YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ry
b3BGaWx0ZXIpLAotI2VuZGlmCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NT
UHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIs
ICZSZW5kZXJTdHlsZTo6c2V0QXBwbGVDb2xvckZpbHRlciksCi0KLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckNsaXBQYXRoKENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xp
cFBhdGgsICZSZW5kZXJTdHlsZTo6c2V0Q2xpcFBhdGgpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFw
ZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKLSAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6
OnNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAm
UmVuZGVyU3R5bGU6OnNoYXBlSW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJ
bWFnZVRocmVzaG9sZCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZl
Y3RlZENvbG9yKENTU1Byb3BlcnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwg
JlJlbmRlclN0eWxlOjpjb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVs
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yKSwKLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9r
ZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rVGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9r
ZUNvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9y
KENTU1Byb3BlcnR5V2Via2l0VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5k
ZXJTdHlsZTo6dGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAm
UmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpdGVkTGlua1RleHRGaWxsQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlz
aXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxp
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRC
b3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJS
aWdodENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9y
ZGVyUmlnaHRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0
ZWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJl
bmRlclN0eWxlOjpib3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xv
ciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFZpc2l0ZWRMaW5rQm9yZGVyVG9wQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5
YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3Jk
ZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNv
bG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENT
U1Byb3BlcnR5T3V0bGluZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpv
dXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0
bGluZUNvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3Bl
cnR5Qm94U2hhZG93LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRC
b3hTaGFkb3cpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5
V2Via2l0Qm94U2hhZG93LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpz
ZXRCb3hTaGFkb3cpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3Bl
cnR5VGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNl
dFRleHRTaGFkb3cpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQ
cm9wZXJ0eUZpbGwsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpm
aWxsUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCi0gICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6ZmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAotCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJl
bmRlclN0eWxlOjpzdHJva2VQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VQYWludENvbG9yKSwKLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6
OnN0cm9rZU9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCi0gICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlT
dHJva2VEYXNoYXJyYXksICZSZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5
bGU6OnNldFN0cm9rZURhc2hBcnJheSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5U3Ryb2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRl
ckxpbWl0LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAotCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwg
JlJlbmRlclN0eWxlOjpzZXRDeCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlDeSwgJlJlbmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCi0g
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5
bGU6OnIsICZSZW5kZXJTdHlsZTo6c2V0UiksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlSeCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRS
eCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJl
bmRlclN0eWxlOjpyeSwgJlJlbmRlclN0eWxlOjpzZXRSeSksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6
OnN0cm9rZURhc2hPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCi0g
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwg
JlJlbmRlclN0eWxlOjpzdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCks
Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVy
U3R5bGU6OngsICZSZW5kZXJTdHlsZTo6c2V0WCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0
WSksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9v
ZE9wYWNpdHksICZSZW5kZXJTdHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZs
b29kT3BhY2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eUZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRGbG9vZENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eVN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAm
UmVuZGVyU3R5bGU6OnNldFN0b3BPcGFjaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0
b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRTdG9wQ29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZS
ZW5kZXJTdHlsZTo6bGlnaHRpbmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9y
KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9w
ZXJ0eUJhc2VsaW5lU2hpZnQsICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVu
ZGVyU3R5bGU6OnNldEJhc2VsaW5lU2hpZnRWYWx1ZSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8U1ZHTGVuZ3RoVmFsdWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjpr
ZXJuaW5nLCAmUmVuZGVyU3R5bGU6OnNldEtlcm5pbmcpLAotI2lmIEVOQUJMRShWQVJJQVRJT05f
Rk9OVFMpCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3Mo
Q1NTUHJvcGVydHlGb250VmFyaWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlh
dGlvblNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCi0j
ZW5kaWYKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENT
U1Byb3BlcnR5Rm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNldEZvbnRXZWlnaHQpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxl
Y3Rpb25WYWx1ZT4oQ1NTUHJvcGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3Ry
ZXRjaCwgJlJlbmRlclN0eWxlOjpzZXRGb250U3RyZXRjaCksCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJGb250U3R5bGUoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVj
b3JhdGlvblRoaWNrbmVzcz4oQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJl
bmRlclN0eWxlOjp0ZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0
RGVjb3JhdGlvblRoaWNrbmVzcyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVu
ZGVybGluZU9mZnNldD4oQ1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5
bGU6OnRleHRVbmRlcmxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9m
ZnNldCksCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9w
ZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5
V3JhcHBlcnMpOwotCi0gICAgc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNo
b3J0aGFuZFByb3BlcnRpZXNbXSA9IHsKLSAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAv
LyBmb3IgYmFja2dyb3VuZC1jb2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1p
bWFnZQotICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKLSAgICAgICAgQ1NT
UHJvcGVydHlGb250LCAvLyBmb3IgZm9udC1zaXplLCBmb250LXdlaWdodAotICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2ssIC8vIGZvciBtYXNrLXBvc2l0aW9uCi0gICAgICAgIENTU1Byb3Bl
cnR5V2Via2l0TWFza1Bvc2l0aW9uLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NT
UHJvcGVydHlCb3JkZXJSaWdodCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5
Qm9yZGVyTGVmdCwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKLSAgICAgICAgQ1NT
UHJvcGVydHlCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCi0g
ICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdl
LAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclNwYWNpbmcsCi0gICAgICAgIENTU1Byb3BlcnR5
TGlzdFN0eWxlLCAvLyBmb3IgbGlzdC1zdHlsZS1pbWFnZQotICAgICAgICBDU1NQcm9wZXJ0eU1h
cmdpbiwKLSAgICAgICAgQ1NTUHJvcGVydHlPdXRsaW5lLAotICAgICAgICBDU1NQcm9wZXJ0eVBh
ZGRpbmcsCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKLSAgICAgICAgQ1NT
UHJvcGVydHlDb2x1bW5SdWxlLAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1
cywKLSAgICAgICAgQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4KLSAgICB9OwotICAgIGNvbnN0
IHVuc2lnbmVkIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlf
TEVOR1RIKGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzKTsKLQotICAgIC8vIFRPRE86Ci0g
ICAgLy8KLSAgICAvLyAgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduCi0gICAgLy8KLSAgICAvLyBD
b21wb3VuZCBwcm9wZXJ0aWVzIHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFu
aW1hdGFibGU6Ci0gICAgLy8KLSAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCi0gICAgLy8gIENT
U1Byb3BlcnR5V2Via2l0Qm94UmVmbGVjdAotCi0gICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90
cyBoYXZlIGEgdmFsdWUKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7
ICsraSkKLSAgICAgICAgbV9wcm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3Jh
cHBlckluZGV4OwotCi0gICAgQ09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVy
dGllc0NvdW50ICsgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01B
WCwgbnVtYmVyT2ZBbmltYXRhYmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOwot
ICAgIG1fcHJvcGVydHlXcmFwcGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291
bnQpOwotCi0gICAgLy8gRmlyc3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdy
YXBwZXJzIGludG8gdGhlIG1hcCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZwotICAgIC8vIGNv
ZGUgY2FuIGZpbmQgdGhlbS4KLQotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRh
YmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgewotICAgICAgICBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFw
cGVyc1tpXTsKLSAgICAgICAgbV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6
OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOwotICAg
ICAgICBpbmRleEZyb21Qcm9wZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKLSAgICB9
Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0
aWVzQ291bnQ7ICsraSkgewotICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmlt
YXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc1tpXTsKLSAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBz
aG9ydGhhbmRGb3JQcm9wZXJ0eShwcm9wZXJ0eUlEKTsKLSAgICAgICAgaWYgKCFzaG9ydGhhbmQu
bGVuZ3RoKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBWZWN0b3I8QW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7Ci0gICAgICAgIGxvbmdo
YW5kV3JhcHBlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOwot
ICAgICAgICBmb3IgKGF1dG8gbG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKLSAgICAgICAgICAgIHVu
c2lnbmVkIHdyYXBwZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOwotICAg
ICAgICAgICAgaWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4
KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVy
dHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdKTsKLSAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMu
dW5jaGVja2VkQXBwZW5kKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsK
LSAgICAgICAgfQotCi0gICAgICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQo
bWFrZVVuaXF1ZTxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUo
bG9uZ2hhbmRXcmFwcGVycykpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0
eUlEKSA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7Ci0gICAgfQotfQot
Ci1zdGF0aWMgYm9vbCBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhh
c2hTZXQ8Q1NTUHJvcGVydHlJRD4mIHByb3BlcnR5U2V0KQotewotICAgIGlmICghd3JhcHBlci0+
aXNTaG9ydGhhbmRXcmFwcGVyKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNob3J0
aGFuZFByb3BlcnR5V3JhcHBlciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0
aGFuZFByb3BlcnR5V3JhcHBlcio+KHdyYXBwZXIpOwotICAgIGJvb2wgY29udGFpbmVkID0gZmFs
c2U7Ci0gICAgZm9yIChhdXRvJiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3Bl
cnR5V3JhcHBlcnMoKSkgewotICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJv
cGVydGllcyhwcm9wZXJ0eSwgY3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBl
ci0+cHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7
Ci0gICAgfQotCi0gICAgaWYgKGNvbnRhaW5lZCkKLSAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdy
YXBwZXItPnByb3BlcnR5KCkpOwotCi0gICAgcmV0dXJuIGNvbnRhaW5lZDsKLX0KLQotLy8gUmV0
dXJucyB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwotdm9pZCBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIENTU1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
Ci17Ci0gICAgQVNTRVJUKHByb3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLQotICAgIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldy
YXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICBpZiAo
d3JhcHBlcikgewotICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dy
ZXNzKTsKLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIs
IGRzdCwgcHJvZ3Jlc3MpOwotI2VuZGlmCi0gICAgfQotfQotCi1ib29sIENTU1Byb3BlcnR5QW5p
bWF0aW9uOjppc1Byb3BlcnR5QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCi17Ci0gICAg
cmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBl
ckZvclByb3BlcnR5KHByb3ApOwotfQotCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmlt
YXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCi17Ci0gICAg
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0
aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwotICAg
IHJldHVybiB3cmFwcGVyID8gd3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFs
c2U7Ci19Ci0KLS8vIE5vdGU6IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQg
ZnJvbSBwYXVzZVRyYW5zaXRpb25BdFRpbWUoKS4KLUhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NT
UHJvcGVydHlBbmltYXRpb246OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHko
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBw
ZXJNYXAmIG1hcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7
Ci0KLSAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKLSAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbWFwLnNpemUoKTsgKytpKQotICAgICAgICBnYXRoZXJFbmNs
b3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkp
LCBmb3VuZFByb3BlcnRpZXMpOwotCi0gICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKLX0KLQot
Ym9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQotewotICAg
IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAg
ICBpZiAod3JhcHBlcikKLSAgICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKLSAg
ICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVy
dHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24o
KS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0gICAgICAgIHJl
dHVybiB3cmFwcGVyLT5jYW5JbnRlcnBvbGF0ZShhLCBiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19
Ci0KLUNTU1Byb3BlcnR5SUQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRl
eChpbnQgaSwgT3B0aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5kKQotewotICAgIENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFw
OjpzaW5nbGV0b24oKTsKLQotICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
aSkgPj0gbWFwLnNpemUoKSkKLSAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKLQot
ICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZv
ckluZGV4KGkpOwotICAgIGlzU2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVy
KCk7Ci0gICAgcmV0dXJuIHdyYXBwZXItPnByb3BlcnR5KCk7Ci19Ci0KLWludCBDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6Z2V0TnVtUHJvcGVydGllcygpCi17Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkuc2l6ZSgpOwotfQotCi19CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2RlMmM4NzU4MzIzODBjNTNmNTBhNTVmMGVk
NDRlZjZkODQ0NDE5Yi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5o
CisrKyAvZGV2L251bGwKQEAgLTEsNTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAw
NyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAq
IDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAq
IDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFt
ZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3Ig
cHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhv
dXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5E
IEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1F
RC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAq
IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNTU1By
b3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgV2Vi
Q29yZSB7Ci0KLWNsYXNzIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQ7Ci1jbGFzcyBSZW5kZXJT
dHlsZTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb24gewotcHVibGljOgotICAgIHN0YXRp
YyBib29sIGlzUHJvcGVydHlBbmltYXRhYmxlKENTU1Byb3BlcnR5SUQpOwotICAgIHN0YXRpYyBi
b29sIGFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKENTU1Byb3BlcnR5SUQpOwotICAg
IHN0YXRpYyBib29sIHByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOwotICAgIHN0YXRpYyBib29sIGNhblByb3Bl
cnR5QmVJbnRlcnBvbGF0ZWQoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKTsKLSAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCBnZXRQcm9wZXJ0
eUF0SW5kZXgoaW50LCBPcHRpb25hbDxib29sPiYgaXNTaG9ydGhhbmQpOwotICAgIHN0YXRpYyBp
bnQgZ2V0TnVtUHJvcGVydGllcygpOwotCi0gICAgc3RhdGljIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4gYW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsK
LQotICAgIC8vIFJldHVybiB0cnVlIGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0
aW9uIHRpbWVycwotICAgIHN0YXRpYyB2b2lkIGJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiwgQ1NTUHJvcGVydHlJRCwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDkzYzQ5YmNmNmQ5MWY0ZGNkZjU0NjcxNGE1NDM2ODNlMTJkNDc5NzYuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDU4NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0g
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRp
b24uaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5j
bHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVz
LmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgi
Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0
cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUNvbXBvc2l0ZUFuaW1hdGlvbjo6Q29t
cG9zaXRlQW5pbWF0aW9uKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25D
b250cm9sbGVyKQotICAgIDogbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xs
ZXIpCi17Ci0gICAgbV9zdXNwZW5kZWQgPSBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuaXNTdXNwZW5k
ZWQoKSAmJiAhbV9hbmltYXRpb25Db250cm9sbGVyLmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1
c3BlbmRlZCgpOwotfQotCi1Db21wb3NpdGVBbmltYXRpb246On5Db21wb3NpdGVBbmltYXRpb24o
KQotewotICAgIC8vIFRvc3MgdGhlIHJlZnMgdG8gYWxsIGFuaW1hdGlvbnMsIGJ1dCBtYWtlIHN1
cmUgd2UgcmVtb3ZlIHRoZW0gZnJvbQotICAgIC8vIGFueSB3YWl0aW5nIGxpc3RzIGZpcnN0Lgot
Ci0gICAgY2xlYXJFbGVtZW50KCk7Ci0gICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOwotICAgIG1f
a2V5ZnJhbWVBbmltYXRpb25zLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9u
OjpjbGVhckVsZW1lbnQoKQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgLy8gQ2xlYXIgdGhlIHJlbmRlcmVycyBmcm9tIGFsbCBydW5uaW5nIGFuaW1hdGlv
bnMsIGluIGNhc2Ugd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YKLSAgICAgICAgLy8gYW4gYW5pbWF0
aW9uIGNhbGxiYWNrIChzZWUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMDUyKQotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZh
bHVlcygpKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZCgqdHJhbnNpdGlvbik7Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigp
OwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0
eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsK
LSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxC
ZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0gICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFu
c2l0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpCi17Ci0gICAgLy8gSWYgY3VycmVudFN0
eWxlIGlzIG51bGwgb3IgdGhlcmUgYXJlIG5vIG9sZCBvciBuZXcgdHJhbnNpdGlvbnMsIGp1c3Qg
c2tpcCBpdAotICAgIGlmICghY3VycmVudFN0eWxlIHx8ICghdGFyZ2V0U3R5bGUudHJhbnNpdGlv
bnMoKSAmJiBtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAg
IC8vIE1hcmsgYWxsIGV4aXN0aW5nIHRyYW5zaXRpb25zIGFzIG5vIGxvbmdlciBhY3RpdmUuIFdl
IHdpbGwgbWFyayB0aGUgc3RpbGwgYWN0aXZlIG9uZXMKLSAgICAvLyBpbiB0aGUgbmV4dCBsb29w
IGFuZCB0aGVuIHRvc3MgdGhlIG9uZXMgdGhhdCBkaWRuJ3QgZ2V0IG1hcmtlZC4KLSAgICBmb3Ig
KGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKQotICAgICAgICB0cmFu
c2l0aW9uLT5zZXRBY3RpdmUoZmFsc2UpOwotICAgICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IG1vZGlmaWVkQ3VycmVudFN0eWxlOwotICAgIAotICAgIC8vIENoZWNrIHRv
IHNlZSBpZiB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCi0gICAgaWYg
KHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7
IGkgPCB0YXJnZXRTdHlsZS50cmFuc2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAg
ICAgYXV0byYgYW5pbWF0aW9uID0gdGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9u
KGkpOwotICAgICAgICAgICAgYm9vbCBpc0FjdGl2ZVRyYW5zaXRpb24gPSBhbmltYXRpb24uZHVy
YXRpb24oKSB8fCBhbmltYXRpb24uZGVsYXkoKSA+IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbW9k
ZSA9IGFuaW1hdGlvbi5wcm9wZXJ0eSgpLm1vZGU7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBB
bmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpOb25lIHx8IG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFu
c2l0aW9uTW9kZTo6VW5rbm93blByb3BlcnR5KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3AgPSBhbmltYXRpb24ucHJvcGVydHkoKS5p
ZDsKLQotICAgICAgICAgICAgYm9vbCBhbGwgPSBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlv
bk1vZGU6OkFsbDsKLQotICAgICAgICAgICAgLy8gSGFuZGxlIGJvdGggdGhlICdhbGwnIGFuZCBz
aW5nbGUgcHJvcGVydHkgY2FzZXMuIEZvciB0aGUgc2luZ2xlIHByb3AgY2FzZSwgd2UgbWFrZSBv
bmx5IG9uZSBwYXNzCi0gICAgICAgICAgICAvLyB0aHJvdWdoIHRoZSBsb29wLgotICAgICAgICAg
ICAgZm9yIChpbnQgcHJvcGVydHlJbmRleCA9IDA7IHByb3BlcnR5SW5kZXggPCBDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6Z2V0TnVtUHJvcGVydGllcygpOyArK3Byb3BlcnR5SW5kZXgpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYWxsKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgbmV4
dCBwcm9wZXJ0eSB3aGljaCBpcyBub3QgYSBzaG9ydGhhbmQuCi0gICAgICAgICAgICAgICAgICAg
IE9wdGlvbmFsPGJvb2w+IGlzU2hvcnRoYW5kOwotICAgICAgICAgICAgICAgICAgICBwcm9wID0g
Q1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChwcm9wZXJ0eUluZGV4LCBp
c1Nob3J0aGFuZCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChpc1Nob3J0aGFuZCAmJiAqaXNT
aG9ydGhhbmQpCi0gICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgICAgICBpZiAocHJvcCA9PSBDU1NQcm9wZXJ0eUludmFsaWQp
IHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFhbGwpCi0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIC8vIEltcGxpY2l0QW5pbWF0aW9u
cyBhcmUgYWx3YXlzIGhhc2hlZCBieSBhY3R1YWwgcHJvcGVydGllcywgbmV2ZXIgYW5pbWF0ZUFs
bC4KLSAgICAgICAgICAgICAgICBBU1NFUlQocHJvcCA+PSBmaXJzdENTU1Byb3BlcnR5ICYmIHBy
b3AgPCAoZmlyc3RDU1NQcm9wZXJ0eSArIG51bUNTU1Byb3BlcnRpZXMpKTsKLQotICAgICAgICAg
ICAgICAgIC8vIElmIHRoZXJlIGlzIGEgcnVubmluZyBhbmltYXRpb24gZm9yIHRoaXMgcHJvcGVy
dHksIHRoZSB0cmFuc2l0aW9uIGlzIG92ZXJyaWRkZW4KLSAgICAgICAgICAgICAgICAvLyBhbmQg
d2UgaGF2ZSB0byB1c2UgdGhlIHVuYW5pbWF0ZWRTdHlsZSBmcm9tIHRoZSBhbmltYXRpb24uIFdl
IGRvIHRoZSB0ZXN0Ci0gICAgICAgICAgICAgICAgLy8gYWdhaW5zdCB0aGUgdW5hbmltYXRlZCBz
dHlsZSBoZXJlLCBidXQgd2UgIm92ZXJyaWRlIiB0aGUgdHJhbnNpdGlvbiBsYXRlci4KLSAgICAg
ICAgICAgICAgICBhdXRvKiBrZXlmcmFtZUFuaW1hdGlvbiA9IGFuaW1hdGlvbkZvclByb3BlcnR5
KHByb3ApOwotICAgICAgICAgICAgICAgIGF1dG8qIGZyb21TdHlsZSA9IGtleWZyYW1lQW5pbWF0
aW9uID8gJmtleWZyYW1lQW5pbWF0aW9uLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1cnJlbnRTdHls
ZTsKLQotICAgICAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNp
dGlvbiBmb3IgdGhpcyBwcm9wCi0gICAgICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGlt
cGxBbmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBl
cXVhbCA9IHRydWU7Ci0KLSAgICAgICAgICAgICAgICBpZiAoaW1wbEFuaW0pIHsKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UgYXJlIHBvc3QgYWN0aXZlIGRvbid0IGJvdGhlciBzZXR0aW5n
IHRoZSBhY3RpdmUgZmxhZy4gVGhpcyB3aWxsIGNhdXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IHRoaXMgYW5pbWF0aW9uIHRvIGdldCByZW1vdmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlv
bi4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbXBsQW5pbS0+cG9zdEFjdGl2ZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgaW1wbEFuaW0tPnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYmUgYSB0cmFu
c2l0aW9uIHRoYXQgaXMganVzdCBmaW5pc2hpbmcuIFRoYXQgd291bGQgYmUgdGhlIGNhc2UKLSAg
ICAgICAgICAgICAgICAgICAgLy8gaWYgaXQgd2VyZSBwb3N0QWN0aXZlLiBCdXQgd2Ugc3RpbGwg
bmVlZCB0byBjaGVjayBmb3IgZXF1YWxpdHkgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAv
LyBpdCBjb3VsZCBiZSBqdXN0IGZpbmlzaGluZyBBTkQgY2hhbmdpbmcgdG8gYSBuZXcgZ29hbCBz
dGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhp
cyBpbXBsQW5pbSBtaWdodCBhbHNvIG5vdCBiZSBhbiBhbHJlYWR5IHJ1bm5pbmcgdHJhbnNpdGlv
bi4gSXQgbWlnaHQgYmUKLSAgICAgICAgICAgICAgICAgICAgLy8gbmV3bHkgYWRkZWQgdG8gdGhl
IGxpc3QgaW4gYSBwcmV2aW91cyBpdGVyYXRpb24uIFRoaXMgd291bGQgaGFwcGVuIGlmCi0gICAg
ICAgICAgICAgICAgICAgIC8vIHlvdSBoYXZlIGJvdGggYW4gZXhwbGljaXQgdHJhbnNpdGlvbi1w
cm9wZXJ0eSBhbmQgJ2FsbCcgaW4gdGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgICAgLy8gbGlz
dC4gSW4gdGhpcyBjYXNlLCB0aGUgbGF0dGVyIG9uZSBvdmVycmlkZXMgdGhlIGVhcmxpZXIgb25l
LCBzbyB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBiZWhhdmUgYXMgdGhvdWdoIHRoaXMgaXMg
YSBydW5uaW5nIGFuaW1hdGlvbiBiZWluZyByZXBsYWNlZC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKCFpbXBsQW5pbS0+aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKHByb3AsICZ0YXJnZXRTdHlsZSkp
IHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEZvciBhY2NlbGVyYXRlZCBhbmltYXRpb25z
IHdlIG5lZWQgdG8gcmV0dXJuIGEgbmV3IFJlbmRlclN0eWxlIHdpdGggdGhlIF9jdXJyZW50XyB2
YWx1ZQotICAgICAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHByb3BlcnR5LCBzbyB0aGF0
IHJlc3RhcnRlZCB0cmFuc2l0aW9ucyB1c2UgdGhlIGNvcnJlY3Qgc3RhcnRpbmcgcG9pbnQuCi0g
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlv
bk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3ApICYmIGltcGxBbmltLT5pc0FjY2VsZXJhdGVk
KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVkQ3VycmVudFN0
eWxlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtb2RpZmllZEN1cnJlbnRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cigqY3VycmVudFN0eWxlKTsKLQotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGltcGxBbmltLT5ibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKHByb3As
IG1vZGlmaWVkQ3VycmVudFN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0K
LSAgICAgICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgZXhpc3Rp
bmcgSW1wbGljaXRBbmltYXRpb24gJXAgZm9yIHByb3BlcnR5ICVzIiwgaW1wbEFuaW0sIGdldFBy
b3BlcnR5TmFtZShwcm9wKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Db250
cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqaW1wbEFuaW0pOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBlcXVhbCA9IGZhbHNlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBh
IHRyYW5zaXRpb24gaWYgaXQgaXMgYWN0aXZlIGFuZCB0aGUgcHJvcGVydGllcyBkb24ndCBtYXRj
aAotICAgICAgICAgICAgICAgICAgICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRpb24gfHwgQ1NT
UHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5bGUsICZ0YXJn
ZXRTdHlsZSkgfHwgIUNTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xh
dGVkKHByb3AsIGZyb21TdHlsZSwgJnRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgICAgICAvLyBXZSBjYW4gYmUgaW4gdGhpcyBsb29wIHdpdGggYW4gaW5hY3Rp
dmUgdHJhbnNpdGlvbiAoIWlzQWN0aXZlVHJhbnNpdGlvbikuIFdlIG5lZWQKLSAgICAgICAgICAg
ICAgICAvLyB0byBkbyB0aGF0IHRvIGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgY2FuY2VsaW5nIGEg
dHJhbnNpdGlvbi4gQnV0IHdlIGRvbid0IHdhbnQgdG8KLSAgICAgICAgICAgICAgICAvLyBzdGFy
dCBvbmUgb2YgdGhlIGluYWN0aXZlIHRyYW5zaXRpb25zLiBTbyBzaG9ydCBjaXJjdWl0IHRoYXQg
aGVyZS4gKFNlZQotICAgICAgICAgICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjQ3ODc+Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbCAmJiBpc0Fj
dGl2ZVRyYW5zaXRpb24pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJh
bnNpdGlvbgotICAgICAgICAgICAgICAgICAgICBhdXRvIGltcGxpY2l0QW5pbWF0aW9uID0gSW1w
bGljaXRBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIHByb3AsIGVsZW1lbnQsICp0aGlzLCBt
b2RpZmllZEN1cnJlbnRTdHlsZSA/ICptb2RpZmllZEN1cnJlbnRTdHlsZSA6ICpmcm9tU3R5bGUp
OwotICAgICAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQgJiYgaW1wbGljaXRBbmltYXRp
b24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdEFuaW1hdGlv
bi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6UGF1c2VkKTsKLQotICAgICAg
ICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24g
JXAgb24gZWxlbWVudCAlcCBmb3IgcHJvcGVydHkgJXMgZHVyYXRpb24gJS4yZiBkZWxheSAlLjJm
IiwgaW1wbGljaXRBbmltYXRpb24ucHRyKCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUocHJv
cCksIGFuaW1hdGlvbi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSk7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fdHJhbnNpdGlvbnMuc2V0KHByb3AsIFdURk1vdmUoaW1wbGljaXRBbmltYXRp
b24pKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5l
ZWQgb25lIHBhc3MgZm9yIHRoZSBzaW5nbGUgcHJvcCBjYXNlCi0gICAgICAgICAgICAgICAgaWYg
KCFhbGwpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAg
ICB9Ci0gICAgfQotCi0gICAgLy8gTWFrZSBhIGxpc3Qgb2YgdHJhbnNpdGlvbnMgdG8gYmUgcmVt
b3ZlZAotICAgIFZlY3RvcjxpbnQ+IHRvQmVSZW1vdmVkOwotICAgIGZvciAoYXV0byYgdHJhbnNp
dGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2l0aW9u
LT5hY3RpdmUoKSkgewotICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQoKnRyYW5zaXRpb24pOwotICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBw
ZW5kKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkpOwotICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICJSZW1vdmluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAg
Zm9yIHByb3BlcnR5ICVzIiwgdHJhbnNpdGlvbi5nZXQoKSwgJmVsZW1lbnQsIGdldFByb3BlcnR5
TmFtZSh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpKSk7Ci0gICAgICAgIH0KLSAgICB9
Ci0KLSAgICAvLyBOb3cgcmVtb3ZlIHRoZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSBsaXN0Ci0gICAg
Zm9yIChhdXRvIHByb3BlcnR5VG9SZW1vdmUgOiB0b0JlUmVtb3ZlZCkKLSAgICAgICAgbV90cmFu
c2l0aW9ucy5yZW1vdmUocHJvcGVydHlUb1JlbW92ZSk7Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5p
bWF0aW9uOjp1cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
KQotewotICAgIC8vIE5vdGhpbmcgdG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9u
cywgYW5kIGRpZG4ndCBoYXZlIGFueSBiZWZvcmUKLSAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlv
bnMuaXNFbXB0eSgpICYmICF0YXJnZXRTdHlsZS5oYXNBbmltYXRpb25zKCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAg
ICAKLSAgICBpZiAoY3VycmVudFN0eWxlICYmIGN1cnJlbnRTdHlsZS0+aGFzQW5pbWF0aW9ucygp
ICYmIHRhcmdldFN0eWxlLmhhc0FuaW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+YW5pbWF0
aW9ucygpKSA9PSAqKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkpCi0gICAgICAgIHJldHVybjsK
LQotICAgIEFuaW1hdGlvbk5hbWVNYXAgbmV3QW5pbWF0aW9uczsKLQotICAgIC8vIFRvc3MgdGhl
IGFuaW1hdGlvbiBvcmRlciBtYXAuCi0gICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNs
ZWFyKCk7Ci0KLSAgICBzdGF0aWMgTWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21T
dHJpbmc+IG5vbmUoIm5vbmUiLCBBdG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0g
ICAgCi0gICAgLy8gTm93IG1hcmsgYW55IHN0aWxsIGFjdGl2ZSBhbmltYXRpb25zIGFzIGFjdGl2
ZSBhbmQgYWRkIGFueSBuZXcgYW5pbWF0aW9ucy4KLSAgICBpZiAodGFyZ2V0U3R5bGUuYW5pbWF0
aW9ucygpKSB7Ci0gICAgICAgIGludCBudW1BbmltcyA9IHRhcmdldFN0eWxlLmFuaW1hdGlvbnMo
KS0+c2l6ZSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFuaW1zOyArK2kpIHsK
LSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9IHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKS0+
YW5pbWF0aW9uKGkpOwotICAgICAgICAgICAgQXRvbVN0cmluZyBhbmltYXRpb25OYW1lKGFuaW1h
dGlvbi5uYW1lKCkpOwotCi0gICAgICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlkQW5pbWF0
aW9uKCkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGlzIG5hbWUu
Ci0gICAgICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1f
a2V5ZnJhbWVBbmltYXRpb25zLmdldChhbmltYXRpb25OYW1lLmltcGwoKSk7Ci0gICAgICAgICAg
ICBpZiAoa2V5ZnJhbWVBbmltKSB7Ci0gICAgICAgICAgICAgICAgbmV3QW5pbWF0aW9ucy5hZGQo
a2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgpLCBrZXlmcmFtZUFuaW0pOwotCi0gICAgICAgICAg
ICAgICAgaWYgKGtleWZyYW1lQW5pbS0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgICAgIC8vIEFuaW1hdGlvbnMgbWF0Y2gsIGJ1dCBw
bGF5IHN0YXRlcyBtYXkgZGlmZmVyLiBVcGRhdGUgaWYgbmVlZGVkLgotICAgICAgICAgICAgICAg
IGtleWZyYW1lQW5pbS0+dXBkYXRlUGxheVN0YXRlKGFuaW1hdGlvbi5wbGF5U3RhdGUoKSk7Ci0K
LSAgICAgICAgICAgICAgICAvLyBTZXQgdGhlIHNhdmVkIGFuaW1hdGlvbiB0byB0aGlzIG5ldyBv
bmUsIGp1c3QgaW4gY2FzZSB0aGUgcGxheSBzdGF0ZSBoYXMgY2hhbmdlZC4KLSAgICAgICAgICAg
ICAgICBrZXlmcmFtZUFuaW0tPnNldEFuaW1hdGlvbihhbmltYXRpb24pOwotICAgICAgICAgICAg
fSBlbHNlIGlmICgoYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkpICYm
IGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpICYmIGFuaW1hdGlvbk5hbWUgIT0gbm9uZSkgewot
ICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbSA9IEtleWZyYW1lQW5pbWF0aW9uOjpjcmVhdGUo
YW5pbWF0aW9uLCBlbGVtZW50LCAqdGhpcywgdGFyZ2V0U3R5bGUpOwotICAgICAgICAgICAgICAg
IExPRyhBbmltYXRpb25zLCAiQ3JlYXRpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgb24gZWxlbWVu
dCAlcCB3aXRoIGtleWZyYW1lcyAlcywgZHVyYXRpb24gJS4yZiwgZGVsYXkgJS4yZiwgaXRlcmF0
aW9ucyAlLjJmIiwga2V5ZnJhbWVBbmltLmdldCgpLCAmZWxlbWVudCwgYW5pbWF0aW9uLm5hbWUo
KS51dGY4KCkuZGF0YSgpLCBhbmltYXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCks
IGFuaW1hdGlvbi5pdGVyYXRpb25Db3VudCgpKTsKLQotICAgICAgICAgICAgICAgIGlmIChtX3N1
c3BlbmRlZCkgewotICAgICAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVwZGF0ZVBsYXlT
dGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0gICAgICAgICAgICAgICAgICAgIExP
RyhBbmltYXRpb25zLCAiICAoY3JlYXRlZCBpbiBzdXNwZW5kZWQvcGF1c2VkIHN0YXRlKSIpOwot
ICAgICAgICAgICAgICAgIH0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAgZm9y
IChhdXRvIHByb3BlcnR5SUQgOiBrZXlmcmFtZUFuaW0tPmtleWZyYW1lcygpLnByb3BlcnRpZXMo
KSkKLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIgIHByb3BlcnR5ICVzIiwg
Z2V0UHJvcGVydHlOYW1lKHByb3BlcnR5SUQpKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAg
bmV3QW5pbWF0aW9ucy5zZXQoa2V5ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgpLCBrZXlmcmFtZUFu
aW0pOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBBZGQgdGhp
cyB0byB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KLSAgICAgICAgICAgIGlmIChrZXlmcmFtZUFu
aW0pCi0gICAgICAgICAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmFwcGVuZChr
ZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBsKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAg
IC8vIE1ha2UgYSBsaXN0IG9mIGFuaW1hdGlvbnMgdG8gYmUgcmVtb3ZlZC4KLSAgICBmb3IgKGF1
dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAg
IGlmICghbmV3QW5pbWF0aW9ucy5jb250YWlucyhhbmltYXRpb24tPm5hbWUoKS5pbXBsKCkpKSB7
Ci0gICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZCgqYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSBl
bGVtZW50ICVwIiwgYW5pbWF0aW9uLmdldCgpLCAmZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgc3RkOjpzd2FwKG5ld0FuaW1hdGlvbnMsIG1fa2V5ZnJhbWVBbmltYXRpb25z
KTsKLX0KLQotQW5pbWF0aW9uVXBkYXRlIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUpCi17Ci0gICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRp
b25zIGlmIHdlIGRvbid0IGhhdmUgYSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgotICAgIHVw
ZGF0ZVRyYW5zaXRpb25zKGVsZW1lbnQsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAg
IHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhlbGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0
eWxlKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAg
ICBPcHRpb25TZXQ8QW5pbWF0aW9uSW1wYWN0PiBpbWFwY3Q7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGU7Ci0KLSAgICBpZiAoY3VycmVudFN0eWxlKSB7
Ci0gICAgICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgdHJhbnNpdGlvbiBvYmplY3RzIHJlYWR5LCBs
ZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQotICAg
ICAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KLSAgICAg
ICAgYm9vbCBjaGVja0ZvclN0YWNraW5nQ29udGV4dCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1
dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBh
dXRvIGNoYW5nZXMgPSB0cmFuc2l0aW9uLT5hbmltYXRlKCp0aGlzLCB0YXJnZXRTdHlsZSwgYW5p
bWF0ZWRTdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hh
bmdlOjpTdHlsZUJsZW5kZWQpKQotICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhY2tpbmdDb250
ZXh0IHw9IFdpbGxDaGFuZ2VEYXRhOjpwcm9wZXJ0eUNyZWF0ZXNTdGFja2luZ0NvbnRleHQodHJh
bnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSk7Ci0KLSAgICAgICAgICAgIGlmIChjaGFuZ2Vz
LmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYgdHJhbnNpdGlv
bi0+YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICBpbWFwY3Qu
YWRkKEFuaW1hdGlvbkltcGFjdDo6UmVxdWlyZXNSZWNvbXBvc2l0ZSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBpZiAoYW5pbWF0ZWRTdHlsZSAmJiBjaGVja0ZvclN0YWNraW5nQ29udGV4dCkgewot
ICAgICAgICAgICAgLy8gTm90ZSB0aGF0IHRoaXMgaXMgc2ltaWxhciB0byBjb2RlIGluIFN0eWxl
OjpBZGp1c3Rlcjo6YWRqdXN0KCkgYnV0IG9ubHkgbmVlZHMgdG8gY29uc3VsdAotICAgICAgICAg
ICAgLy8gYW5pbWF0YWJsZSBwcm9wZXJ0aWVzIHRoYXQgY2FuIHRyaWdnZXIgc3RhY2tpbmcgY29u
dGV4dC4KLSAgICAgICAgICAgIGlmIChhbmltYXRlZFN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmCi0g
ICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRTdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3Bl
cnR5KCkKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0eWxlLT5oYXNNYXNrKCkKLSAgICAg
ICAgICAgICAgICB8fCBhbmltYXRlZFN0eWxlLT5jbGlwUGF0aCgpCi0gICAgICAgICAgICAgICAg
fHwgYW5pbWF0ZWRTdHlsZS0+Ym94UmVmbGVjdCgpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0
ZWRTdHlsZS0+aGFzRmlsdGVyKCkKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAg
ICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0JhY2tkcm9wRmlsdGVyKCkKLSNlbmRpZgot
ICAgICAgICAgICAgICAgICkKLSAgICAgICAgICAgIGltYXBjdC5hZGQoQW5pbWF0aW9uSW1wYWN0
OjpGb3JjZXNTdGFja2luZ0NvbnRleHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93
IHRoYXQgd2UgaGF2ZSBhbmltYXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91
dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAvLyB0byBmaWxsIGluIGEg
UmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2tl
eWZyYW1lQW5pbWF0aW9uT3JkZXJNYXApIHsKLSAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0
aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZSk7Ci0gICAg
ICAgIGlmIChrZXlmcmFtZUFuaW0pIHsKLSAgICAgICAgICAgIGF1dG8gY2hhbmdlcyA9IGtleWZy
YW1lQW5pbS0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAg
ICAgICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRl
Q2hhbmdlKSAmJiBrZXlmcmFtZUFuaW0tPmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkpCi0g
ICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OlJlcXVpcmVzUmVjb21w
b3NpdGUpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hhbmdl
OjpTdHlsZUJsZW5kZWQpICYmIGtleWZyYW1lQW5pbS0+dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQo
KSkKLSAgICAgICAgICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3Rh
Y2tpbmdDb250ZXh0KTsKLQotICAgICAgICAgICAgbV9oYXNBbmltYXRpb25UaGF0RGVwZW5kc09u
TGF5b3V0IHw9IGtleWZyYW1lQW5pbS0+ZGVwZW5kc09uTGF5b3V0KCk7Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICByZXR1cm4geyBXVEZNb3ZlKGFuaW1hdGVkU3R5bGUpLCBpbWFwY3QgfTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFu
aW1hdGVkU3R5bGUoKSBjb25zdAotewotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4g
cmVzdWx0U3R5bGU7Ci0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52
YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHls
ZSk7Ci0KLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAg
ICBmb3IgKGF1dG8mIG5hbWUgOiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXApIHsKLSAgICAg
ICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5ZnJh
bWVBbmltYXRpb25zLmdldChuYW1lKTsKLSAgICAgICAgaWYgKGtleWZyYW1lQW5pbWF0aW9uKQot
ICAgICAgICAgICAga2V5ZnJhbWVBbmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5
bGUpOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gcmVzdWx0U3R5bGU7Ci19Ci0KLU9wdGlvbmFs
PFNlY29uZHM+IENvbXBvc2l0ZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAot
ewotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgYXQgd2hpY2ggbmV4dCBzZXJ2aWNlIGlzIHJlcXVp
cmVkLiBXVEY6Om51bGxvcHQgbWVhbnMgbm8gc2VydmljZSBpcyByZXF1aXJlZC4gMCBtZWFucwot
ICAgIC8vIHNlcnZpY2UgaXMgcmVxdWlyZWQgbm93LCBhbmQgPiAwIG1lYW5zIHNlcnZpY2UgaXMg
cmVxdWlyZWQgdGhhdCBtYW55IHNlY29uZHMgaW4gdGhlIGZ1dHVyZS4KLSAgICBPcHRpb25hbDxT
ZWNvbmRzPiBtaW5UOwotICAgIAotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkg
ewotICAgICAgICAgICAgT3B0aW9uYWw8U2Vjb25kcz4gdCA9IHRyYW5zaXRpb24tPnRpbWVUb05l
eHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAoIXQpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQgfHwgdC52YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQot
ICAgICAgICAgICAgICAgIG1pblQgPSB0LnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAobWluVC52
YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAgICAgICByZXR1cm4gMF9zOwotICAgICAgICB9Ci0g
ICAgfQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChh
dXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAg
ICAgICAgT3B0aW9uYWw8U2Vjb25kcz4gdCA9IGFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2Uo
KTsKLSAgICAgICAgICAgIGlmICghdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgICAgIGlmICghbWluVCB8fCB0LnZhbHVlKCkgPCBtaW5ULnZhbHVlKCkpCi0gICAgICAgICAg
ICAgICAgbWluVCA9IHQudmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChtaW5ULnZhbHVlKCkgPT0g
MF9zKQotICAgICAgICAgICAgICAgIHJldHVybiAwX3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAg
ICByZXR1cm4gbWluVDsKLX0KLQotS2V5ZnJhbWVBbmltYXRpb24qIENvbXBvc2l0ZUFuaW1hdGlv
bjo6YW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsK
LSAgICBLZXlmcmFtZUFuaW1hdGlvbiogcmVzdWx0ID0gbnVsbHB0cjsKLQotICAgIC8vIFdlIHdh
bnQgdG8gc2VuZCBiYWNrIHRoZSBsYXN0IGFuaW1hdGlvbiB3aXRoIHRoZSBwcm9wZXJ0eSBpZiB0
aGVyZSBhcmUgbXVsdGlwbGVzLgotICAgIC8vIFNvIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdo
IGFsbCBhbmltYXRpb25zCi0gICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAg
ICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygp
KSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShw
cm9wZXJ0eSkpCi0gICAgICAgICAgICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uLmdldCgpOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBDb21wb3NpdGVB
bmltYXRpb246OmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JiBi
b3VuZHMpIGNvbnN0Ci17Ci0gICAgLy8gSWYgbW9yZSB0aGFuIG9uZSB0cmFuc2l0aW9uIGFuZCBh
bmltYXRpb24gYWZmZWN0IHRyYW5zZm9ybSwgZ2l2ZSB1cC4KLSAgICBib29sIHNlZW5UcmFuc2Zv
cm1BbmltYXRpb24gPSBmYWxzZTsKLSAgICAKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1f
a2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghYW5pbWF0aW9uLT5o
YXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc2VlblRyYW5zZm9ybUFuaW1hdGlvbikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0g
dHJ1ZTsKLQotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3Jt
QW5pbWF0aW9uKGJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0g
ICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAg
ICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSAhPSBDU1NQcm9wZXJ0eVRy
YW5zZm9ybSB8fCAhdHJhbnNpdGlvbi0+aGFzU3R5bGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVl
OwotCi0gICAgICAgIGlmIChzZWVuVHJhbnNmb3JtQW5pbWF0aW9uKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+Y29tcHV0ZUV4dGVudE9mVHJh
bnNmb3JtQW5pbWF0aW9uKGJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
fQotICAgIAotICAgIHJldHVybiB0cnVlOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6
c3VzcGVuZEFuaW1hdGlvbnMoKQotewotICAgIGlmIChtX3N1c3BlbmRlZCkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgbV9zdXNwZW5kZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVB
bmltYXRpb25zLnZhbHVlcygpKQotICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3Rh
dGUoQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQpOwotICAgIH0KLQotICAgIGlmICghbV90cmFu
c2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90
cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmhhc1N0
eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1h
dGlvblBsYXlTdGF0ZTo6UGF1c2VkKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21w
b3NpdGVBbmltYXRpb246OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIGlmICghbV9zdXNwZW5k
ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0KLSAgICBp
ZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0
aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChh
bmltYXRpb24tPnBsYXlTdGF0ZVBsYXlpbmcoKSkKLSAgICAgICAgICAgICAgICBhbmltYXRpb24t
PnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBsYXlpbmcpOwotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBm
b3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAg
ICAgICBpZiAodHJhbnNpdGlvbi0+aGFzU3R5bGUoKSkKLSAgICAgICAgICAgICAgICB0cmFuc2l0
aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAg
ICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGlj
aXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi17Ci0gICAgaWYgKCFtX3RyYW5z
aXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3Ry
YW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0
aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5z
ZXRPdmVycmlkZGVuKHRydWUpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbXBvc2l0
ZUFuaW1hdGlvbjo6cmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAg
ICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewot
ICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVy
dHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7Ci0g
ICAgICAgIH0KLSAgICB9Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGlu
Z1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBj
b25zdAotewotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9y
IChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAg
ICAgICAgICAgaWYgKGFuaW1hdGlvbi0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNj
ZWxlcmF0ZWRPbmx5KSkKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQot
ICAgIH0KLQotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAg
ICAgaWYgKHRyYW5zaXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJh
dGVkT25seSkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VB
bmltYXRpb25BdFRpbWUoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpCi17Ci0gICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgUmVmUHRyPEtl
eWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQo
bmFtZS5pbXBsKCkpOwotICAgIGlmICgha2V5ZnJhbWVBbmltIHx8ICFrZXlmcmFtZUFuaW0tPnJ1
bm5pbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAga2V5ZnJhbWVBbmltLT5mcmVl
emVBdFRpbWUodCk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0
aW9uOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgZG91Ymxl
IHQpCi17Ci0gICAgaWYgKChwcm9wZXJ0eSA8IGZpcnN0Q1NTUHJvcGVydHkpIHx8IChwcm9wZXJ0
eSA+PSBmaXJzdENTU1Byb3BlcnR5ICsgbnVtQ1NTUHJvcGVydGllcykpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlv
bnMuZ2V0KHByb3BlcnR5KTsKLSAgICBpZiAoIWltcGxBbmltKSB7Ci0gICAgICAgIC8vIENoZWNr
IHRvIHNlZSBpZiB0aGlzIHByb3BlcnR5IGlzIGJlaW5nIGFuaW1hdGVkIHZpYSBhIHNob3J0aGFu
ZC4KLSAgICAgICAgLy8gVGhpcyBjb2RlIGlzIG9ubHkgdXNlZCBmb3IgdGVzdGluZywgc28gcGVy
Zm9ybWFuY2UgaXMgbm90IGNyaXRpY2FsIGhlcmUuCi0gICAgICAgIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4gc2hvcnRoYW5kUHJvcGVydGllcyA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRh
YmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgICAgYm9vbCBh
bnlQYXVzZWQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBzaG9ydGhh
bmRQcm9wZXJ0aWVzKSB7Ci0gICAgICAgICAgICBpZiAocGF1c2VUcmFuc2l0aW9uQXRUaW1lKHBy
b3BlcnR5SUQsIHQpKQotICAgICAgICAgICAgICAgIGFueVBhdXNlZCA9IHRydWU7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGFueVBhdXNlZDsKLSAgICB9Ci0KLSAgICBpZiAoIWltcGxBbmlt
LT5ydW5uaW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGlmICgodCA+PSAwLjAp
ICYmICh0IDw9IGltcGxBbmltLT5kdXJhdGlvbigpKSkgewotICAgICAgICBpbXBsQW5pbS0+ZnJl
ZXplQXRUaW1lKHQpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4g
ZmFsc2U7Ci19Ci0KLXVuc2lnbmVkIENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgCi0gICAg
bV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYg
KGFuaW1hdGlvbi0+cnVubmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0KLSAg
ICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAg
ICAgIGlmICh0cmFuc2l0aW9uLT5ydW5uaW5nKCkpCi0gICAgICAgICAgICArK2NvdW50OwotICAg
IH0KLSAgICAKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1h
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0MjI2OTIzOTZkMmZiYTY4ODBkMWNk
OWY5YzhkNjliODJlN2IwYzUuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9u
LmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAK
LSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAK
LSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUg
bmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ug
b3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdp
dGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIg
QU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xB
SU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsK
LSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJJbXBsaWNpdEFuaW1hdGlvbi5oIgot
I2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
LSNpbmNsdWRlIDx3dGYvdGV4dC9BdG9tU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7Ci1jbGFzcyBDU1NBbmltYXRp
b25Db250cm9sbGVyOwotY2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwot
Ci0vLyBBIENvbXBvc2l0ZUFuaW1hdGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBhbmlt
YXRpb25zIHRoYXQgYXJlIHJ1bm5pbmcKLS8vIG9uIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQsIHN1
Y2ggYXMgYSBudW1iZXIgb2YgcHJvcGVydGllcyB0cmFuc2l0aW9uaW5nIGF0IG9uY2UuCi1jbGFz
cyBDb21wb3NpdGVBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxDb21wb3NpdGVBbmltYXRp
b24+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMg
UmVmPENvbXBvc2l0ZUFuaW1hdGlvbj4gY3JlYXRlKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgQ29tcG9zaXRlQW5pbWF0aW9uKGFuaW1hdGlvbkNvbnRyb2xsZXIpKTsKLSAgICB9Owot
Ci0gICAgfkNvbXBvc2l0ZUFuaW1hdGlvbigpOwotICAgIAotICAgIHZvaWQgY2xlYXJFbGVtZW50
KCk7Ci0KLSAgICBBbmltYXRpb25VcGRhdGUgYW5pbWF0ZShFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGUoKSBjb25zdDsK
LSAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0Jikg
Y29uc3Q7Ci0KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0
OwotICAgIAotICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250
cm9sbGVyKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9Ci0KLSAgICB2
b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0g
ICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9Ci0gICAg
Ci0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3QgIHsgcmV0dXJuICFtX3RyYW5zaXRpb25z
LmlzRW1wdHkoKSB8fCAhbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBi
b29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgYm9vbCBhY2NlbGVyYXRlZE9u
bHkpIGNvbnN0OwotCi0gICAgS2V5ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbkZvclByb3BlcnR5
KENTU1Byb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgdm9pZCBvdmVycmlkZUltcGxpY2l0QW5pbWF0
aW9ucyhDU1NQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFu
aW1hdGlvbnMoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1l
KGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNp
dGlvbkF0VGltZShDU1NQcm9wZXJ0eUlELCBkb3VibGUpOwotICAgIHVuc2lnbmVkIG51bWJlck9m
QWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0OwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25UaGF0RGVw
ZW5kc09uTGF5b3V0KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBbmltYXRpb25UaGF0RGVwZW5kc09u
TGF5b3V0OyB9Ci0KLXByaXZhdGU6Ci0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKEVsZW1l
bnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYg
dGFyZ2V0U3R5bGUpOwotICAgIHZvaWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQm
LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFy
Z2V0U3R5bGUpOwotICAgIAotICAgIHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNp
dEFuaW1hdGlvbj4+IENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNo
TWFwPEF0b21TdHJpbmdJbXBsKiwgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPj4gQW5pbWF0aW9u
TmFtZU1hcDsKLQotICAgIGJvb2wgbV9zdXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9o
YXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0IHsgZmFsc2UgfTsKLQotICAgIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlJiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7Ci0gICAgQ1NTUHJv
cGVydHlUcmFuc2l0aW9uc01hcCBtX3RyYW5zaXRpb25zOwotICAgIEFuaW1hdGlvbk5hbWVNYXAg
bV9rZXlmcmFtZUFuaW1hdGlvbnM7Ci0gICAgVmVjdG9yPEF0b21TdHJpbmdJbXBsKj4gbV9rZXlm
cmFtZUFuaW1hdGlvbk9yZGVyTWFwOwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0NTM5ZjZhNTNlYzUxNTBjOTA3MzdkMjBl
MWJiMmE1YmI0MGEwOWE4Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDM3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAot
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAot
ICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBu
YW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBv
ciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0
aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwot
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRl
ICJJbXBsaWNpdEFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUg
IkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVk
ZSAiQ29udGVudENoYW5nZU9ic2VydmVyLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJFdmVudE5hbWVz
LmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlN0eWxlUGVuZGlu
Z1Jlc291cmNlcy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUltcGxpY2l0QW5pbWF0aW9u
OjpJbXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3Bl
cnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1h
dGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQot
ICAgIDogQW5pbWF0aW9uQmFzZSh0cmFuc2l0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRp
b24pCi0gICAgLCBtX2Zyb21TdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZnJvbVN0eWxlKSkK
LSAgICAsIG1fdHJhbnNpdGlvblByb3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKS5pZCkKLSAg
ICAsIG1fYW5pbWF0aW5nUHJvcGVydHkoYW5pbWF0aW5nUHJvcGVydHkpCi17Ci0jaWYgUExBVEZP
Uk0oSU9TX0ZBTUlMWSkKLSAgICBlbGVtZW50LmRvY3VtZW50KCkuY29udGVudENoYW5nZU9ic2Vy
dmVyKCkuZGlkQWRkVHJhbnNpdGlvbihlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSNlbmRpZgotICAg
IEFTU0VSVChhbmltYXRpbmdQcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eUludmFsaWQpOwotfQotCi1J
bXBsaWNpdEFuaW1hdGlvbjo6fkltcGxpY2l0QW5pbWF0aW9uKCkKLXsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQotICAg
ICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZFJlbW92
ZVRyYW5zaXRpb24oKmVsZW1lbnQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotI2VuZGlmCi0gICAg
Ly8gLy8gTWFrZSBzdXJlIHRvIHRlbGwgdGhlIHJlbmRlcmVyIHRoYXQgd2UgYXJlIGVuZGluZy4g
VGhpcyB3aWxsIG1ha2Ugc3VyZSBhbnkgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBhcmUgcmVtb3Zl
ZC4KLSAgICBpZiAoIXBvc3RBY3RpdmUoKSkKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci19Ci0K
LWJvb2wgSW1wbGljaXRBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3Vt
ZW50OjpMaXN0ZW5lclR5cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVs
ZW1lbnQoKS0+ZG9jdW1lbnQoKS5oYXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwotfQot
Ci1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29t
cG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB0
YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkK
LXsKLSAgICAvLyBJZiB3ZSBnZXQgdGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwg
aXQgbWVhbnMgd2UgYXJlIGNsZWFuaW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCi0g
ICAgLy8gU28ganVzdCByZXR1cm4uIEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xlYW5lZCB1
cC4KLSAgICBpZiAocG9zdEFjdGl2ZSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQW5p
bWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBzdGF0ZSgpOwotCi0gICAgLy8gUmVzZXQgdG8gc3RhcnQg
dGhlIHRyYW5zaXRpb24gaWYgd2UgYXJlIG5ldwotICAgIGlmIChpc05ldygpKQotICAgICAgICBy
ZXNldCh0YXJnZXRTdHlsZSwgY29tcG9zaXRlQW5pbWF0aW9uKTsKLQotICAgIC8vIFJ1biBhIGN5
Y2xlIG9mIGFuaW1hdGlvbi4KLSAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5k
ZXIgc3R5bGUsIHNvIG1ha2Ugb25lIGlmIG5lZWRlZAotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkK
LSAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHls
ZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1f
YW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIG1fZnJvbVN0eWxlLmdldCgp
LCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotICAgIC8vIEZJWE1FOiB3ZSBhbHNvIG5l
ZWQgdG8gZGV0ZWN0IGNhc2VzIHdoZXJlIHdlIGhhdmUgdG8gc29mdHdhcmUgYW5pbWF0ZSBmb3Ig
b3RoZXIgcmVhc29ucywKLSAgICAvLyBzdWNoIGFzIGEgY2hpbGQgdXNpbmcgaW5oZXJpdGluZyB0
aGUgdHJhbnNmb3JtLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5
MDIKLQotICAgIC8vIEZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCi0gICAgZmlyZUFu
aW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0KLSAgICBPcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4g
Y2hhbmdlKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCk7Ci0gICAgaWYgKHN0YXRlKCkgIT0g
b2xkU3RhdGUpCi0gICAgICAgIGNoYW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6U3RhdGVDaGFuZ2Up
OwotCi0gICAgaWYgKChpc1BhdXNlZFN0YXRlKG9sZFN0YXRlKSB8fCBpc1J1bm5pbmdTdGF0ZShv
bGRTdGF0ZSkpICE9IChpc1BhdXNlZFN0YXRlKHN0YXRlKCkpIHx8IGlzUnVubmluZ1N0YXRlKHN0
YXRlKCkpKSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpSdW5uaW5nU3RhdGVD
aGFuZ2UpOwotCi0gICAgcmV0dXJuIGNoYW5nZTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlv
bjo6Z2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlKQotewotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgYW5pbWF0ZWRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cigqbV90b1N0eWxlKTsKLQotICAgIENTU1Byb3BlcnR5
QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgbV9hbmltYXRpbmdQcm9wZXJ0eSwgYW5p
bWF0ZWRTdHlsZS5nZXQoKSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJv
Z3Jlc3MoKSk7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRpb246OmNvbXB1dGVFeHRlbnRPZlRy
YW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJU
KGhhc1N0eWxlKCkpOwotCi0gICAgaWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsgLy8gTm9uLWJveGVzIGRvbid0IGdldCB0cmFuc2Zvcm1lZDsKLQot
ICAgIEFTU0VSVChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNmb3JtKTsK
LQotICAgIFJlbmRlckJveCYgYm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7
Ci0gICAgRmxvYXRSZWN0IHJlbmRlcmVyQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhib3gu
Ym9yZGVyQm94UmVjdCgpLCBib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQot
ICAgIExheW91dFJlY3Qgc3RhcnRCb3VuZHMgPSBib3VuZHM7Ci0gICAgTGF5b3V0UmVjdCBlbmRC
b3VuZHMgPSBib3VuZHM7Ci0KLSAgICBpZiAodHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkp
IHsKLSAgICAgICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0
KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRy
YW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICptX3RvU3R5bGUsIGVuZEJvdW5kcykpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb21wdXRlVHJh
bnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICptX2Zyb21TdHlsZSwgc3RhcnRC
b3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghY29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4KHJlbmRlcmVyQm94LCAqbV90b1N0eWxlLCBlbmRC
b3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvdW5kcyA9
IHVuaW9uUmVjdChzdGFydEJvdW5kcywgZW5kQm91bmRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBj
b25zdAotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9w
ZXJ0eUlzQWNjZWxlcmF0ZWQobV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgSW1wbGlj
aXRBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlm
IChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiByZW5k
ZXJlci0+c3RhcnRUcmFuc2l0aW9uKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHksIG1f
ZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0K
LQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAg
ICAgcmVuZGVyZXItPnRyYW5zaXRpb25QYXVzZWQodGltZU9mZnNldCwgbV9hbmltYXRpbmdQcm9w
ZXJ0eSk7Ci0gICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0g
ICAgaWYgKCFwYXVzZWQoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkp
OwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjbGVhcigpCi17Ci0jaWYgUExBVEZPUk0o
SU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAg
ICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1v
dmVUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAg
IEFuaW1hdGlvbkJhc2U6OmNsZWFyKCk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmVu
ZEFuaW1hdGlvbihib29sKQotewotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRl
cmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFuc2l0aW9uRmluaXNoZWQobV9hbmltYXRpbmdQ
cm9wZXJ0eSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246Om9uQW5pbWF0aW9uRW5kKGRv
dWJsZSBlbGFwc2VkVGltZSkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChh
dXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVu
dCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEZpbmlzaFRyYW5zaXRpb24oKmVsZW1lbnQs
IG1fYW5pbWF0aW5nUHJvcGVydHkpOwotI2VuZGlmCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGtleWZy
YW1lIGFuaW1hdGlvbiBvbiB0aGlzIHByb3BlcnR5LCB0aGlzIHRyYW5zaXRpb24gaXMgYmVpbmcg
b3ZlcnJpZGRlbi4gVGhlIGtleWZyYW1lCi0gICAgLy8gYW5pbWF0aW9uIGtlZXBzIGFuIHVuYW5p
bWF0ZWQgc3R5bGUgaW4gY2FzZSBhIHRyYW5zaXRpb24gc3RhcnRzIHdoaWxlIHRoZSBrZXlmcmFt
ZSBhbmltYXRpb24gaXMKLSAgICAvLyBydW5uaW5nLiBCdXQgbm93IHRoYXQgdGhlIHRyYW5zaXRp
b24gaGFzIGNvbXBsZXRlZCwgd2UgbmVlZCB0byB1cGRhdGUgdGhpcyBzdHlsZSB3aXRoIGl0cyBu
ZXcKLSAgICAvLyBkZXN0aW5hdGlvbi4gSWYgd2UgZGlkbid0LCB0aGUgbmV4dCB0aW1lIHRocm91
Z2ggd2Ugd291bGQgdGhpbmsgYSB0cmFuc2l0aW9uIGhhZCBzdGFydGVkCi0gICAgLy8gKGNvbXBh
cmluZyB0aGUgb2xkIHVuYW5pbWF0ZWQgc3R5bGUgd2l0aCB0aGUgbmV3IGZpbmFsIHN0eWxlIG9m
IHRoZSB0cmFuc2l0aW9uKS4KLSAgICBpZiAoYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVB
bmltYXRpb24tPmFuaW1hdGlvbkZvclByb3BlcnR5KG1fYW5pbWF0aW5nUHJvcGVydHkpKQotICAg
ICAgICBhbmltYXRpb24tPnNldFVuYW5pbWF0ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIo
Km1fdG9TdHlsZSkpOwotCi0gICAgc2VuZFRyYW5zaXRpb25FdmVudChldmVudE5hbWVzKCkudHJh
bnNpdGlvbmVuZEV2ZW50LCBlbGFwc2VkVGltZSk7Ci0gICAgZW5kQW5pbWF0aW9uKCk7Ci19Ci0K
LWJvb2wgSW1wbGljaXRBbmltYXRpb246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0
cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgaWYgKGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KSB7Ci0gICAgICAgIERvY3VtZW50
OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OlRSQU5TSVRJT05FTkRfTElT
VEVORVI7Ci0KLSAgICAgICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3RlbmVy
VHlwZSkpIHsKLSAgICAgICAgICAgIFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5h
bWVTdHJpbmcobV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgICAgIGF1dG8gZWxlbWVudCA9IG1h
a2VSZWZQdHIodGhpcy0+ZWxlbWVudCgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50
IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1l
bnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgICAgICAvLyBTY2hlZHVsZSBl
dmVudCBoYW5kbGluZwotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5hZGRFdmVudFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgcHJv
cGVydHlOYW1lLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9y
aWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBl
dmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCi0g
ICAgICAgICAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAg
ICAgICAgICAgcmV0dXJuIHRydWU7IC8vIERpZCBkaXNwYXRjaCBhbiBldmVudAotICAgICAgICB9
Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBEaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQK
LX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLXsKLSAgICBBU1NFUlQo
bV9mcm9tU3R5bGUpOwotCi0gICAgbV90b1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHRv
KTsKLQotICAgIGlmIChlbGVtZW50KCkpCi0gICAgICAgIFN0eWxlOjpsb2FkUGVuZGluZ1Jlc291
cmNlcygqbV90b1N0eWxlLCBlbGVtZW50KCktPmRvY3VtZW50KCksIGVsZW1lbnQoKSk7Ci0KLSAg
ICAvLyBSZXN0YXJ0IHRoZSB0cmFuc2l0aW9uLgotICAgIGlmIChtX2Zyb21TdHlsZSAmJiBtX3Rv
U3R5bGUgJiYgIWNvbXBvc2l0ZUFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpKQotICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1hdGlvbiwgLTEp
OwotCi0gICAgLy8gU2V0IHRoZSB0cmFuc2Zvcm0gYW5pbWF0aW9uIGxpc3QuCi0gICAgdmFsaWRh
dGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKTsKLSAgICBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVu
Y3Rpb25MaXN0cygpOwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2hlY2tGb3JN
YXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2VuZGlmCi0gICAgY2hlY2tG
b3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotfQotCi12b2lkIEltcGxpY2l0
QW5pbWF0aW9uOjpzZXRPdmVycmlkZGVuKGJvb2wgYikKLXsKLSAgICBpZiAoYiA9PSBtX292ZXJy
aWRkZW4pCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fb3ZlcnJpZGRlbiA9IGI7Ci0gICAgdXBk
YXRlU3RhdGVNYWNoaW5lKG1fb3ZlcnJpZGRlbiA/IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNl
T3ZlcnJpZGUgOiBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSwgLTEpOwotfQot
Ci1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSkgY29uc3QKLXsKLSAgICByZXR1cm4gKG1fYW5pbWF0aW5nUHJvcGVydHkgPT0gcHJv
cGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjppc1RhcmdldFByb3BlcnR5RXF1
YWwoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCi17
Ci0gICAgLy8gV2UgY2FuIGdldCBoZXJlIGZvciBhIHRyYW5zaXRpb24gdGhhdCBoYXMgbm90IHN0
YXJ0ZWQgeWV0LiBUaGlzIHdvdWxkIG1ha2UgbV90b1N0eWxlIHVuc2V0IGFuZCBudWxsLiAKLSAg
ICAvLyBTbyB3ZSBjaGVjayB0aGF0IGhlcmUgKHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTI2NzA2PikKLSAgICBpZiAoIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0Vx
dWFsKHByb3AsIG1fdG9TdHlsZS5nZXQoKSwgdGFyZ2V0U3R5bGUpOwotfQotCi12b2lkIEltcGxp
Y2l0QW5pbWF0aW9uOjpibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQgcHJv
cCwgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSkKLXsKLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIg
YWRkIGEgdHJhbnNpdGlvbiB3aXRoIGEgMCBkdXJhdGlvbiBhbmQgZGVsYXkuIEJ1dCBpZiB3ZSBl
dmVyIGRpZAotICAgIC8vIGl0IHdvdWxkIGhhdmUgYSBudWxsIHRvU3R5bGUuIFNvIGp1c3QgaW4g
Y2FzZSwgbGV0J3MgY2hlY2sgdGhhdCBoZXJlLiAoU2VlCi0gICAgLy8gPGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc4Nz4KLSAgICBpZiAoIW1fdG9TdHlsZSkKLSAg
ICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIHByb3AsIGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1f
dG9TdHlsZS5nZXQoKSwgcHJvZ3Jlc3MoKSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246
OnZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0
aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotICAgIAotICAgIGlmICghbV9mcm9tU3R5bGUgfHwgIW1f
dG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zKiB2YWwgPSAmbV9mcm9tU3R5bGUtPnRyYW5zZm9ybSgpOwotICAgIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMqIHRvVmFsID0gJm1fdG9TdHlsZS0+dHJhbnNmb3JtKCk7Ci0KLSAg
ICBpZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICB2YWwgPSB0b1ZhbDsK
LQotICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsK
LSAgICAgICAgCi0gICAgLy8gQW4gZW1wdHkgdHJhbnNmb3JtIGxpc3QgbWF0Y2hlcyBhbnl0aGlu
Zy4KLSAgICBpZiAodmFsICE9IHRvVmFsICYmICF0b1ZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHko
KSAmJiAhdmFsLT5vcGVyYXRpb25zTWF0Y2goKnRvVmFsKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgLy8gVHJhbnNmb3JtIGxpc3RzIG1hdGNoLgotICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0
c01hdGNoID0gdHJ1ZTsKLX0KLQotc3RhdGljIGJvb2wgZmlsdGVyT3BlcmF0aW9uc01hdGNoKGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMqIGZyb21PcGVyYXRpb25zLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB0b09wZXJhdGlvbnMpCi17Ci0gICAgaWYgKGZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25z
KCkuaXNFbXB0eSgpKQotICAgICAgICBmcm9tT3BlcmF0aW9ucyA9ICZ0b09wZXJhdGlvbnM7Ci0K
LSAgICBpZiAoZnJvbU9wZXJhdGlvbnMtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmIChmcm9tT3BlcmF0aW9ucyAhPSAmdG9PcGVyYXRpb25z
ICYmICF0b09wZXJhdGlvbnMub3BlcmF0aW9ucygpLmlzRW1wdHkoKSAmJiAhZnJvbU9wZXJhdGlv
bnMtPm9wZXJhdGlvbnNNYXRjaCh0b09wZXJhdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Y2hlY2tG
b3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25M
aXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmls
dGVyT3BlcmF0aW9uc01hdGNoKCZtX2Zyb21TdHlsZS0+ZmlsdGVyKCksIG1fdG9TdHlsZS0+Zmls
dGVyKCkpOwotfQotCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLXZvaWQgSW1wbGljaXRB
bmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKQot
ewotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsKLQotICAg
IGlmICghbV9mcm9tU3R5bGUgfHwgIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9iYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRj
aCgmbV9mcm9tU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCksIG1fdG9TdHlsZS0+YmFja2Ryb3BGaWx0
ZXIoKSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRj
aGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxp
c3RzTWF0Y2ggPSBmYWxzZTsKLQotICAgIGlmICghbV9mcm9tU3R5bGUgfHwgIW1fdG9TdHlsZSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9
IGZpbHRlck9wZXJhdGlvbnNNYXRjaCgmbV9mcm9tU3R5bGUtPmFwcGxlQ29sb3JGaWx0ZXIoKSwg
bV90b1N0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCkpOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBJ
bXBsaWNpdEFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwotICAgIGlmICgh
dCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJTEVSKE1TVkMp
ICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7Ci0jZWxzZQot
ICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFsdWUgb2YgMCBt
ZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB0aGlzIGlzIGFuIGFjY2VsZXJhdGVkIGFuaW1h
dGlvbiB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9mIHRoZSB0cmFu
c2l0aW9uLgotICAgIGlmIChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0
eUlzQWNjZWxlcmF0ZWQobV9hbmltYXRpbmdQcm9wZXJ0eSkgJiYgaXNBY2NlbGVyYXRlZCgpKSB7
Ci0gICAgICAgIGJvb2wgaXNMb29waW5nOwotICAgICAgICBnZXRUaW1lVG9OZXh0RXZlbnQodC52
YWx1ZSgpLCBpc0xvb3BpbmcpOwotICAgIH0KLSAgICByZXR1cm4gdDsKLX0KLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
SW1wbGljaXRBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxp
Y2l0QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYjg0YWRjZWNm
OTI4ZDg0ZTE1YTQwYzVjODg1NzYwNWYzZTY0NjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGlj
aXRBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxl
Iikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQg
dG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMg
c29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoK
LSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRP
UlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJF
Ci0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0j
aW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIK
LSNpbmNsdWRlICJEb2N1bWVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJl
bmRlckVsZW1lbnQ7Ci0KLS8vIEFuIEltcGxpY2l0QW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUg
b2YgYSB0cmFuc2l0aW9uIG9mIGEgc3BlY2lmaWMgQ1NTIHByb3BlcnR5Ci0vLyBmb3IgYSBzaW5n
bGUgUmVuZGVyRWxlbWVudC4KLWNsYXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1h
dGlvbkJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8SW1wbGljaXRBbmltYXRpb24+IGNy
ZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQ
cm9wZXJ0eSwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVB
bmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tU3R5bGUpCi0gICAgewotICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBJbXBsaWNpdEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGlu
Z1Byb3BlcnR5LCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwotICAg
IH07Ci0gICAgCi0gICAgQ1NTUHJvcGVydHlJRCB0cmFuc2l0aW9uUHJvcGVydHkoKSBjb25zdCB7
IHJldHVybiBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsgfQotICAgIENTU1Byb3BlcnR5SUQgYW5pbWF0
aW5nUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGluZ1Byb3BlcnR5OyB9Ci0KLSAg
ICB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBl
bmRBbmltYXRpb24oYm9vbCBmaWxsaW5nRm9yd2FyZHMgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0KLSAg
ICBPcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBj
b25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpOwotICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJl
c2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0KLSAgICBi
b29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Qg
b3ZlcnJpZGU7Ci0KLSAgICBib29sIGFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3Q7
Ci0KLSAgICB2b2lkIHNldE92ZXJyaWRkZW4oYm9vbCk7Ci0gICAgYm9vbCBvdmVycmlkZGVuKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9vdmVycmlkZGVuOyB9Ci0KLSAgICBib29sIGFmZmVj
dHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFz
U3R5bGUoKSBjb25zdCB7IHJldHVybiBtX2Zyb21TdHlsZSAmJiBtX3RvU3R5bGU7IH0KLQotICAg
IGJvb2wgaXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0
eWxlKik7Ci0KLSAgICB2b2lkIGJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoQ1NTUHJvcGVydHlJ
RCwgUmVuZGVyU3R5bGUqKTsKLQotICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb05leHRTZXJ2
aWNlKCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7IHJldHVybiBt
X2FjdGl2ZTsgfQotICAgIHZvaWQgc2V0QWN0aXZlKGJvb2wgYikgeyBtX2FjdGl2ZSA9IGI7IH0K
LQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiAqbV9mcm9tU3R5bGU7IH0KLQotICAgIHZvaWQgY2xlYXIoKSBvdmVycmlkZTsK
LQotcHJvdGVjdGVkOgotICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1l
bnQ6Okxpc3RlbmVyVHlwZSkgY29uc3Q7ICAgIAotICAgIGJvb2wgc2VuZFRyYW5zaXRpb25FdmVu
dChjb25zdCBBdG9tU3RyaW5nJiwgZG91YmxlIGVsYXBzZWRUaW1lKTsKLQotICAgIHZvaWQgdmFs
aWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKTsKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICB2
b2lkIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRp
ZgotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
Ci1wcml2YXRlOgotICAgIEltcGxpY2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIENTU1By
b3BlcnR5SUQsIEVsZW1lbnQmLCBDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHls
ZSYpOwotICAgIHZpcnR1YWwgfkltcGxpY2l0QW5pbWF0aW9uKCk7Ci0KLSAgICAvLyBUaGUgdHdv
IHN0eWxlcyB0aGF0IHdlIGFyZSBibGVuZGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IG1fZnJvbVN0eWxlOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV90
b1N0eWxlOwotCi0gICAgQ1NTUHJvcGVydHlJRCBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsgLy8gVHJh
bnNpdGlvbiBwcm9wZXJ0eSBhcyBzcGVjaWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLgotICAgIENT
U1Byb3BlcnR5SUQgbV9hbmltYXRpbmdQcm9wZXJ0eTsgLy8gU3BlY2lmaWMgcHJvcGVydHkgZm9y
IHRoaXMgSW1wbGljaXRBbmltYXRpb24KLQotICAgIGJvb2wgbV9hY3RpdmUgeyB0cnVlIH07IC8v
IFVzZWQgZm9yIGN1bGxpbmcgdGhlIGxpc3Qgb2YgdHJhbnNpdGlvbnMuCi0gICAgYm9vbCBtX292
ZXJyaWRkZW4geyBmYWxzZSB9OyAvLyBUcnVlIHdoZW4gdGhlcmUgaXMgYSBrZXlmcmFtZSBhbmlt
YXRpb24gdGhhdCBvdmVycmlkZXMgdGhlIHRyYW5zaXRpb25pbmcgcHJvcGVydHkKLX07Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
YjFiNTcxNTA3NzIzODc3YjVlYmYzMzJiYjA4Yzg1MDk3Nzc5ODhjNC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0g
KgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9m
IEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJp
YnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVk
Ci0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRl
biBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElF
RAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICog
T04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLQot
I2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NT
UHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5j
bHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2lu
Y2x1ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5j
bHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIK
LSNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCi0jaW5jbHVkZSAiU3R5bGVTY29wZS5oIgotI2lu
Y2x1ZGUgIlRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldpbGxDaGFu
Z2VEYXRhLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotS2V5ZnJhbWVBbmltYXRpb246Oktl
eWZyYW1lQW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVt
ZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVy
U3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9uLCBl
bGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2tleWZyYW1lcyhhbmltYXRpb24u
bmFtZSgpKQotICAgICwgbV91bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKHVu
YW5pbWF0ZWRTdHlsZSkpCi17Ci0gICAgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0KLSAgICAv
LyBVcGRhdGUgdGhlIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0VmFsaWQgZmxhZyBiYXNlZCBvbiB3
aGV0aGVyIHRoZSBmdW5jdGlvbiBsaXN0cyBpbiB0aGUga2V5ZnJhbWVzIG1hdGNoLgotICAgIHZh
bGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRl
ckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNr
Rm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNo
ZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotICAgIGZvciAoYXV0
byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygpKSB7Ci0gICAgICAgIGlmIChX
aWxsQ2hhbmdlRGF0YTo6cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHByb3BlcnR5SUQp
KQotICAgICAgICAgICAgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCA9IHRydWU7Ci0gICAgICAg
IAotICAgICAgICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJ
c0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKQotICAgICAgICAgICAgbV9oYXNBY2NlbGVyYXRlZFBy
b3BlcnR5ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChtX3RyaWdnZXJzU3RhY2tpbmdD
b250ZXh0ICYmIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSkKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgIH0KLQotICAgIGNvbXB1dGVMYXlvdXREZXBlbmRlbmN5KCk7Ci19Ci0KLUtleWZyYW1lQW5p
bWF0aW9uOjp+S2V5ZnJhbWVBbmltYXRpb24oKQotewotICAgIC8vIE1ha2Ugc3VyZSB0byB0ZWxs
IHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1cmUgYW55
IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0QWN0aXZl
KCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9u
Ojpjb21wdXRlTGF5b3V0RGVwZW5kZW5jeSgpCi17Ci0gICAgaWYgKCFtX2tleWZyYW1lcy5jb250
YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgaSsrKSB7Ci0gICAgICAgIGF1dG8qIGtleWZy
YW1lU3R5bGUgPSBtX2tleWZyYW1lc1tpXS5zdHlsZSgpOwotICAgICAgICBpZiAoIWtleWZyYW1l
U3R5bGUpIHsKLSAgICAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAg
Y29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGtleWZyYW1lU3R5bGUtPmhhc1RyYW5z
Zm9ybSgpKSB7Ci0gICAgICAgICAgICBhdXRvJiB0cmFuc2Zvcm1PcGVyYXRpb25zID0ga2V5ZnJh
bWVTdHlsZS0+dHJhbnNmb3JtKCk7Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJh
dGlvbiA6IHRyYW5zZm9ybU9wZXJhdGlvbnMub3BlcmF0aW9ucygpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG9wZXJhdGlvbi0+aXNUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgYXV0byB0cmFuc2xhdGlvbiA9IGRvd25jYXN0PFRyYW5zbGF0
ZVRyYW5zZm9ybU9wZXJhdGlvbj4ob3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHRyYW5zbGF0aW9uLT54KCkuaXNQZXJjZW50KCkgfHwgdHJhbnNsYXRpb24tPnkoKS5p
c1BlcmNlbnQoKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbV9kZXBlbmRzT25MYXlvdXQg
PSB0cnVlOwotICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fQotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpmZXRjaEludGVydmFsRW5kcG9pbnRzRm9y
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqJiBmcm9t
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9nKSBjb25zdAot
ewotICAgIHNpemVfdCBudW1LZXlmcmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgaWYg
KCFudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEZpbmQgdGhlIGZpcnN0
IGtleQotICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IGdldEVsYXBzZWRUaW1lKCk7Ci0gICAgaWYg
KG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICYmIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
ICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZpbml0ZSkKLSAgICAgICAgZWxhcHNlZFRp
bWUgPSBzdGQ6Om1pbihlbGFwc2VkVGltZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgKiBtX2Fu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSk7Ci0KLSAgICBjb25zdCBkb3VibGUgZnJhY3Rpb25h
bFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZSgxLCBlbGFwc2VkVGltZSwgMCk7Ci0gICAgQVNT
RVJUKCFtX2tleWZyYW1lc1swXS5rZXkoKSk7Ci0gICAgQVNTRVJUKG1fa2V5ZnJhbWVzW21fa2V5
ZnJhbWVzLnNpemUoKSAtIDFdLmtleSgpID09IDEpOwotCi0gICAgaW50IHByZXZJbmRleCA9IC0x
OwotICAgIGludCBuZXh0SW5kZXggPSAtMTsKLSAgICAvLyBGSVhNRTogd2l0aCBhIGxvdCBvZiBr
ZXlzLCB0aGlzIGxpbmVhciBzZWFyY2ggd2lsbCBiZSBzbG93LiBXZSBjb3VsZCBiaW5hcnkgc2Vh
cmNoLgotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAg
ICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYgY3VycktleUZyYW1lID0gbV9rZXlmcmFtZXNbaV07
Ci0KLSAgICAgICAgaWYgKCFjdXJyS2V5RnJhbWUuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSkp
Ci0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCBj
dXJyS2V5RnJhbWUua2V5KCkpIHsKLSAgICAgICAgICAgIG5leHRJbmRleCA9IGk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICBwcmV2SW5kZXggPSBpOwotICAgIH0KLQot
ICAgIGlmIChwcmV2SW5kZXggPT0gLTEpCi0gICAgICAgIHByZXZJbmRleCA9IDA7Ci0gICAgaWYg
KG5leHRJbmRleCA9PSAtMSkKLSAgICAgICAgbmV4dEluZGV4ID0gbV9rZXlmcmFtZXMuc2l6ZSgp
IC0gMTsKLQotICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIHByZXZLZXlmcmFtZSA9IG1fa2V5ZnJh
bWVzW3ByZXZJbmRleF07Ci0gICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYgbmV4dEtleWZyYW1lID0g
bV9rZXlmcmFtZXNbbmV4dEluZGV4XTsKLQotICAgIGZyb21TdHlsZSA9IHByZXZLZXlmcmFtZS5z
dHlsZSgpOwotICAgIHRvU3R5bGUgPSBuZXh0S2V5ZnJhbWUuc3R5bGUoKTsKLQotICAgIGRvdWJs
ZSBvZmZzZXQgPSBwcmV2S2V5ZnJhbWUua2V5KCk7Ci0gICAgZG91YmxlIHNjYWxlID0gMS4wIC8g
KG5leHRJbmRleCA9PSBwcmV2SW5kZXggPyAgMSA6IChuZXh0S2V5ZnJhbWUua2V5KCkgLSBwcmV2
S2V5ZnJhbWUua2V5KCkpKTsKLQotICAgIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zmc2V0LCBw
cmV2S2V5ZnJhbWUudGltaW5nRnVuY3Rpb24oKSk7Ci19Ci0KLU9wdGlvblNldDxBbmltYXRlQ2hh
bmdlPiBLZXlmcmFtZUFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBv
c2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQotewotICAgIEFuaW1hdGlvblN0YXRl
IG9sZFN0YXRlID0gc3RhdGUoKTsKLQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgZmlyZSB0aGUg
c3RhcnQgdGltZW91dCBpZiBuZWVkZWQgKEZJWE1FOiB0aGlzIGZ1bmN0aW9uIG5lZWRzIGEgYmV0
dGVyIG5hbWUpLgotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwotCi0gICAgLy8g
SWYgd2UgaGF2ZSBub3QgeWV0IHN0YXJ0ZWQsIHdlIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBzdGFy
dCB0aW1lLCBzbyBqdXN0IHN0YXJ0IHRoZSBhbmltYXRpb24gaWYgbmVlZGVkLgotICAgIGlmIChp
c05ldygpKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0gQW5pbWF0
aW9uUGxheVN0YXRlOjpQbGF5aW5nICYmICFjb21wb3NpdGVBbmltYXRpb24uaXNTdXNwZW5kZWQo
KSkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpT
dGFydEFuaW1hdGlvbiwgLTEpOwotICAgICAgICBlbHNlIGlmIChtX2FuaW1hdGlvbi0+cGxheVN0
YXRlKCkgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQpCi0gICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkLCAtMSk7Ci0g
ICAgfQotCi0gICAgLy8gSWYgd2UgZ2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRv
bmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVhbmluZyB1cCBhIGp1c3QtZmluaXNoZWQgYW5pbWF0aW9u
LgotICAgIC8vIElmIHNvLCB3ZSBuZWVkIHRvIHNlbmQgYmFjayB0aGUgdGFyZ2V0U3R5bGUuCi0g
ICAgaWYgKHBvc3RBY3RpdmUoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAg
ICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHRhcmdldFN0eWxl
KTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBhcmUgd2FpdGlu
ZyBmb3IgdGhlIHN0YXJ0IHRpbWVyLCB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgc3R5bGUg
eWV0LgotICAgIC8vIFNwZWNpYWwgY2FzZSAxIC0gaWYgdGhlIGRlbGF5IHRpbWUgaXMgMCwgdGhl
biB3ZSBkbyB3YW50IHRvIHNldCB0aGUgZmlyc3QgZnJhbWUgb2YgdGhlCi0gICAgLy8gYW5pbWF0
aW9uIHJpZ2h0IGF3YXkuIFRoaXMgYXZvaWRzIGEgZmxhc2ggd2hlbiB0aGUgYW5pbWF0aW9uIHN0
YXJ0cy4KLSAgICAvLyBTcGVjaWFsIGNhc2UgMiAtIGlmIHRoZXJlIGlzIGEgYmFja3dhcmRzIGZp
bGwgbW9kZSwgdGhlbiB3ZSB3YW50IHRvIGNvbnRpbnVlCi0gICAgLy8gdGhyb3VnaCB0byB0aGUg
c3R5bGUgYmxlbmQgc28gdGhhdCB3ZSBnZXQgdGhlIGZyb21TdHlsZS4KLSAgICBpZiAod2FpdGlu
Z1RvU3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9uLT5m
aWxsc0JhY2t3YXJkcygpKQotICAgICAgICByZXR1cm4geyB9OwotICAgIAotICAgIC8vIElmIHdl
IGhhdmUgbm8ga2V5ZnJhbWVzLCBkb24ndCBhbmltYXRlLgotICAgIGlmICghbV9rZXlmcmFtZXMu
c2l6ZSgpKSB7Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0
OjpFbmRBbmltYXRpb24sIC0xKTsKLSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICAv
LyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCi0gICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQg
YSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9uZSBpZiBuZWVkZWQuCi0gICAgaWYgKCFhbmlt
YXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRy
KHRhcmdldFN0eWxlKTsKLQotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGJlIG1vcmUgZWZmaWNp
ZW50IGFib3V0IGRldGVybWluaW5nIHdoaWNoIGtleWZyYW1lcyB3ZSBhcmUgYW5pbWF0aW5nIGJl
dHdlZW4uCi0gICAgLy8gV2Ugc2hvdWxkIGNhY2hlIHRoZSBsYXN0IHBhaXIgb3Igc29tZXRoaW5n
LgotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygpKSB7
Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNzIGJldHdlZW4K
LSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgZG91YmxlIHBy
b2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KHBy
b3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0gICAgICAgIENTU1By
b3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVydHlJRCwgYW5pbWF0
ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0g
ICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hhbmdlOjpTdHlsZUJs
ZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAgICBjaGFuZ2UuYWRk
KEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQYXVzZWRTdGF0ZShv
bGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQYXVzZWRTdGF0ZShz
dGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAgIGNoYW5nZS5hZGQo
QW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJldHVybiBjaGFuZ2U7
Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICAvLyBJZiB3ZSdyZSBk
b25lLCBvciBpbiB0aGUgZGVsYXkgcGhhc2UgYW5kIHdlJ3JlIG5vdCBiYWNrd2FyZHMgZmlsbGlu
ZywgdGVsbCB0aGUgY2FsbGVyIHRvIHVzZSB0aGUgY3VycmVudCBzdHlsZS4KLSAgICBpZiAocG9z
dEFjdGl2ZSgpIHx8ICh3YWl0aW5nVG9TdGFydCgpICYmIG1fYW5pbWF0aW9uLT5kZWxheSgpID4g
MCAmJiAhbV9hbmltYXRpb24tPmZpbGxzQmFja3dhcmRzKCkpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYg
KCFhbmltYXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNs
b25lUHRyKHJlbmRlcmVyKCktPnN0eWxlKCkpOwotCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQg
OiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gR2V0IHRoZSBmcm9tL3Rv
IHN0eWxlcyBhbmQgcHJvZ3Jlc3MgYmV0d2VlbgotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUg
PSBudWxscHRyOwotICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwOwotICAgICAgICBmZXRjaElu
dGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkocHJvcGVydHlJRCwgZnJvbVN0eWxlLCB0b1N0eWxl
LCBwcm9ncmVzcyk7Ci0KLSAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVy
dGllcyh0aGlzLCBwcm9wZXJ0eUlELCBhbmltYXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUsIHRv
U3R5bGUsIHByb2dyZXNzKTsKLSAgICB9Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmNv
bXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0
Ci17Ci0gICAgQVNTRVJUKG1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlU
cmFuc2Zvcm0pKTsKLQotICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAg
ICAgcmV0dXJuIHRydWU7IC8vIE5vbi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAg
ICBhdXRvJiBib3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcigpKTsKLSAgICBhdXRv
IHJlbmRlcmVyQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhib3guYm9yZGVyQm94UmVjdCgp
LCBib3guZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAgIExheW91dFJlY3Qg
Y3VtdWxhdGl2ZUJvdW5kczsKLQotICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX2tleWZyYW1l
cy5rZXlmcmFtZXMoKSkgewotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSoga2V5ZnJhbWVTdHls
ZSA9IGtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICAgICAgaWYgKCFrZXlmcmFtZS5jb250YWluc1By
b3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGZp
cnN0IGtleWZyYW1lIGlzIG1pc3NpbmcgdHJhbnNmb3JtIHN0eWxlLCB1c2UgdGhlIGN1cnJlbnQg
c3R5bGUuCi0gICAgICAgICAgICBpZiAoIWtleWZyYW1lLmtleSgpKQotICAgICAgICAgICAgICAg
IGtleWZyYW1lU3R5bGUgPSAmYm94LnN0eWxlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLQotICAgICAgICBhdXRvIGtleWZyYW1lQm91
bmRzID0gYm91bmRzOwotICAgICAgICAKLSAgICAgICAgYm9vbCBjYW5Db21wdXRlOwotICAgICAg
ICBpZiAodHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkpCi0gICAgICAgICAgICBjYW5Db21w
dXRlID0gY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJv
eCwgKmtleWZyYW1lU3R5bGUsIGtleWZyYW1lQm91bmRzKTsKLSAgICAgICAgZWxzZQotICAgICAg
ICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChyZW5k
ZXJlckJveCwgKmtleWZyYW1lU3R5bGUsIGtleWZyYW1lQm91bmRzKTsKLSAgICAgICAgCi0gICAg
ICAgIGlmICghY2FuQ29tcHV0ZSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAg
Ci0gICAgICAgIGN1bXVsYXRpdmVCb3VuZHMudW5pdGUoa2V5ZnJhbWVCb3VuZHMpOwotICAgIH0K
LQotICAgIGJvdW5kcyA9IGN1bXVsYXRpdmVCb3VuZHM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgS2V5ZnJhbWVBbmltYXRpb246Omhhc0FuaW1hdGlvbkZvclByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmNvbnRhaW5z
UHJvcGVydHkocHJvcGVydHkpOwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzdGFydEFu
aW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0QW5pbWF0aW9u
KHRpbWVPZmZzZXQsIG1fYW5pbWF0aW9uLCBtX2tleWZyYW1lcyk7Ci0gICAgcmV0dXJuIGZhbHNl
OwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpwYXVzZUFuaW1hdGlvbihkb3VibGUgdGlt
ZU9mZnNldCkKLXsKLSAgICBpZiAoIWVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIt
PmFuaW1hdGlvblBhdXNlZCh0aW1lT2Zmc2V0LCBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCkp
OwotCi0gICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAg
aWYgKCFwYXVzZWQoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwot
fQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCBmaWxsaW5nRm9y
d2FyZHMpCi17Ci0gICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlm
IChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5h
bmltYXRpb25GaW5pc2hlZChtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCkpOwotCi0gICAgLy8g
UmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgaWYgKCFmaWxsaW5n
Rm9yd2FyZHMgJiYgIXBhdXNlZCgpKQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1l
bnQoKSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxp
c3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlKSBjb25zdAotewotICAg
IHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKGxpc3RlbmVyVHlw
ZSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om9uQW5pbWF0aW9uU3RhcnQoZG91Ymxl
IGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5p
bWF0aW9uc3RhcnRFdmVudCwgZWxhcHNlZFRpbWUpOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgc2Vu
ZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVudCwgZWxh
cHNlZFRpbWUpOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChk
b3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMo
KS5hbmltYXRpb25lbmRFdmVudCwgZWxhcHNlZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbihtX2Fu
aW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6
c2VuZEFuaW1hdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVs
YXBzZWRUaW1lKQotewotICAgIERvY3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlOwot
ICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlv
bkV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZl
bnQpCi0gICAgICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05JVEVSQVRJT05f
TElTVEVORVI7Ci0gICAgZWxzZSBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRB
bmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVu
ZEV2ZW50KQotICAgICAgICBsaXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9ORU5EX0xJ
U1RFTkVSOwotICAgIGVsc2UgewotICAgICAgICBBU1NFUlQoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25TdGFydEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVz
KCkuYW5pbWF0aW9uc3RhcnRFdmVudCk7Ci0gICAgICAgIGlmIChtX3N0YXJ0RXZlbnREaXNwYXRj
aGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBtX3N0YXJ0RXZlbnREaXNw
YXRjaGVkID0gdHJ1ZTsKLSAgICAgICAgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElP
TlNUQVJUX0xJU1RFTkVSOwotICAgIH0KLQotICAgIGlmIChzaG91bGRTZW5kRXZlbnRGb3JMaXN0
ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAgIC8vIERpc3BhdGNoIHRoZSBldmVudAotICAg
ICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVsZW1lbnQoKSk7Ci0KLSAgICAg
ICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNo
ZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgICAgIGlm
ICghZWxlbWVudCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTY2hl
ZHVsZSBldmVudCBoYW5kbGluZwotICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0
aW9uQ29udHJvbGxlcigpLmFkZEV2ZW50VG9EaXNwYXRjaCgqZWxlbWVudCwgZXZlbnRUeXBlLCBt
X2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCksIGVsYXBzZWRUaW1lKTsKLQotICAgICAgICAvLyBS
ZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICAgICAgaWYgKChldmVu
dFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50IHx8IGV2ZW50VHlw
ZSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQpICYmIGVsZW1lbnQtPnJlbmRlcmVy
KCkpCi0gICAgICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQuZ2V0KCkpOwotCi0g
ICAgICAgIHJldHVybiB0cnVlOyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICB9Ci0KLSAg
ICByZXR1cm4gZmFsc2U7IC8vIERpZCBub3QgZGlzcGF0Y2ggYW4gZXZlbnQKLX0KLQotdm9pZCBL
ZXlmcmFtZUFuaW1hdGlvbjo6b3ZlcnJpZGVBbmltYXRpb25zKCkKLXsKLSAgICAvLyBUaGlzIHdp
bGwgb3ZlcnJpZGUgaW1wbGljaXQgYW5pbWF0aW9ucyB0aGF0IG1hdGNoIHRoZSBwcm9wZXJ0aWVz
IGluIHRoZSBrZXlmcmFtZSBhbmltYXRpb24KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1f
a2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkKLSAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPm92
ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpyZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3
aWxsIHJlc3VtZSBvdmVycmlkZGVuIGltcGxpY2l0IGFuaW1hdGlvbnMKLSAgICBmb3IgKGF1dG8g
cHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkKLSAgICAgICAgY29tcG9zaXRl
QW5pbWF0aW9uKCktPnJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMocHJvcGVydHlJ
RCk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmFmZmVjdHNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWlu
c1Byb3BlcnR5KHByb3BlcnR5KTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzb2x2
ZUtleWZyYW1lU3R5bGVzKCkKLXsKLSAgICBpZiAoIWVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgaWYgKGF1dG8qIHN0eWxlU2NvcGUgPSBTdHlsZTo6U2NvcGU6OmZvck9yZGluYWwo
KmVsZW1lbnQoKSwgbV9hbmltYXRpb24tPm5hbWVTdHlsZVNjb3BlT3JkaW5hbCgpKSkKLSAgICAg
ICAgc3R5bGVTY29wZS0+cmVzb2x2ZXIoKS5rZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbigqZWxl
bWVudCgpLCBtX3VuYW5pbWF0ZWRTdHlsZS5nZXQoKSwgbV9rZXlmcmFtZXMpOwotCi0gICAgLy8g
RW5zdXJlIHJlc291cmNlIGxvYWRzIGZvciBhbGwgdGhlIGZyYW1lcy4KLSAgICBmb3IgKGF1dG8m
IGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8q
IHN0eWxlID0gY29uc3RfY2FzdDxSZW5kZXJTdHlsZSo+KGtleWZyYW1lLnN0eWxlKCkpKQotICAg
ICAgICAgICAgU3R5bGU6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCpzdHlsZSwgZWxlbWVudCgpLT5k
b2N1bWVudCgpLCBlbGVtZW50KCkpOwotICAgIH0KLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlv
bjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKQotewotICAgIG1fdHJhbnNmb3JtRnVu
Y3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgCi0gICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUo
KSA8IDIgfHwgIW1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zv
cm0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBFbXB0eSB0cmFuc2Zvcm1zIG1hdGNoIGFu
eXRoaW5nLCBzbyBmaW5kIHRoZSBmaXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhlIHJlZmVyZW5j
ZQotICAgIHNpemVfdCBudW1LZXlmcmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgc2l6
ZV90IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID0gbnVtS2V5ZnJhbWVzOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAg
ICBjb25zdCBLZXlmcmFtZVZhbHVlJiBjdXJyZW50S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tpXTsK
LSAgICAgICAgaWYgKGN1cnJlbnRLZXlmcmFtZS5zdHlsZSgpLT50cmFuc2Zvcm0oKS5vcGVyYXRp
b25zKCkuc2l6ZSgpKSB7Ci0gICAgICAgICAgICBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJh
bWVJbmRleCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAK
LSAgICBpZiAoZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPT0gbnVtS2V5ZnJh
bWVzKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMqIGZpcnN0VmFsID0gJm1fa2V5ZnJhbWVzW2ZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlm
cmFtZUluZGV4XS5zdHlsZSgpLT50cmFuc2Zvcm0oKTsKLSAgICAKLSAgICAvLyBTZWUgaWYgdGhl
IGtleWZyYW1lcyBhcmUgdmFsaWQKLSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3ROb25FbXB0eVRy
YW5zZm9ybUtleWZyYW1lSW5kZXggKyAxOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAg
ICAgY29uc3QgS2V5ZnJhbWVWYWx1ZSYgY3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07
Ci0gICAgICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9ICZjdXJyZW50S2V5ZnJh
bWUuc3R5bGUoKS0+dHJhbnNmb3JtKCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBbiBlbXRweSB0
cmFuc2Zvcm0gbGlzdCBtYXRjaGVzIGFueXRoaW5nLgotICAgICAgICBpZiAodmFsLT5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAg
ICBpZiAoIWZpcnN0VmFsLT5vcGVyYXRpb25zTWF0Y2goKnZhbCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSB0cnVlOwot
fQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rp
b25MaXN0cyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Y29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgKGNvbnN0IFJlbmRlclN0eWxlJik+JiBmaWx0ZXJzR2V0dGVy
KSBjb25zdAotewotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1l
cy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAvLyBFbXB0eSBmaWx0ZXJzIG1hdGNoIGFueXRoaW5nLCBzbyBmaW5kIHRoZSBmaXJzdCBu
b24tZW1wdHkgZW50cnkgYXMgdGhlIHJlZmVyZW5jZQotICAgIHNpemVfdCBudW1LZXlmcmFtZXMg
PSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgc2l6ZV90IGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUlu
ZGV4ID0gbnVtS2V5ZnJhbWVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlm
cmFtZXM7ICsraSkgewotICAgICAgICBpZiAoZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNbaV0u
c3R5bGUoKSkub3BlcmF0aW9ucygpLnNpemUoKSkgewotICAgICAgICAgICAgZmlyc3ROb25FbXB0
eUtleWZyYW1lSW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9
Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1l
cykKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgZmlyc3RWYWwgPSBmaWx0ZXJz
R2V0dGVyKCptX2tleWZyYW1lc1tmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleF0uc3R5bGUoKSk7
Ci0gICAgCi0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ICsg
MTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGF1dG8mIHZhbHVlID0gZmlsdGVy
c0dldHRlcigqbV9rZXlmcmFtZXNbaV0uc3R5bGUoKSk7Ci0KLSAgICAgICAgLy8gQW4gZW10cHkg
ZmlsdGVyIGxpc3QgbWF0Y2hlcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKHZhbHVlLm9wZXJhdGlv
bnMoKS5pc0VtcHR5KCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWZp
cnN0VmFsLm9wZXJhdGlvbnNNYXRjaCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246
OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENT
U1Byb3BlcnR5RmlsdGVyLCBbXSAoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSAtPiBjb25zdCBG
aWx0ZXJPcGVyYXRpb25zJiB7Ci0gICAgICAgIHJldHVybiBzdHlsZS5maWx0ZXIoKTsKLSAgICB9
KTsKLX0KLQotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAg
ICBtX2JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gY2hlY2tGb3JNYXRjaGluZ0Zp
bHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciwgW10gKGNv
bnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAg
ICAgICByZXR1cm4gc3R5bGUuYmFja2Ryb3BGaWx0ZXIoKTsKLSAgICB9KTsKLX0KLSNlbmRpZgot
Ci12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5j
dGlvbkxpc3RzKCkKLXsKLSAgICBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gY2hl
Y2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmls
dGVyLCBbXSAoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSAtPiBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB7Ci0gICAgICAgIHJldHVybiBzdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCk7Ci0gICAgfSk7
Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IEtleWZyYW1lQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2Vy
dmljZSgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4gdCA9IEFuaW1hdGlvbkJhc2U6OnRpbWVU
b05leHRTZXJ2aWNlKCk7Ci0gICAgaWYgKCF0IHx8IHQudmFsdWUoKSAhPSAwX3MgfHwgcHJlQWN0
aXZlKCkpCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgX01TQ19WRVIgPj0gMTkyMAotICAgICAgICBy
ZXR1cm4gV1RGTW92ZSh0KTsKLSNlbHNlCi0gICAgICAgIHJldHVybiB0OwotI2VuZGlmCi0KLSAg
ICAvLyBBIHJldHVybiB2YWx1ZSBvZiAwIG1lYW5zIHdlIG5lZWQgc2VydmljZS4gQnV0IGlmIHdl
IG9ubHkgaGF2ZSBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHdlIAotICAgIC8vIG9ubHkgbmVlZCBz
ZXJ2aWNlIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zaXRpb24uCi0gICAgYm9vbCBhY2NlbGVyYXRl
ZFByb3BlcnRpZXNPbmx5ID0gdHJ1ZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6
IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoIUNTU1Byb3BlcnR5QW5p
bWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0eUlEKSB8fCAh
aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBhY2NlbGVyYXRlZFByb3BlcnRpZXNPbmx5
ID0gZmFsc2U7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
IChhY2NlbGVyYXRlZFByb3BlcnRpZXNPbmx5KSB7Ci0gICAgICAgIGJvb2wgaXNMb29waW5nOwot
ICAgICAgICBnZXRUaW1lVG9OZXh0RXZlbnQodC52YWx1ZSgpLCBpc0xvb3BpbmcpOwotICAgIH0K
LQotICAgIHJldHVybiB0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNDkyZTM5MTU1YzRhOWI3OGMxYzZkNmZlZTFjMmVlM2UwYmI2
YmYzOC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTEzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xhc3MgUmVuZGVy
U3R5bGU7Ci0KLS8vIEEgS2V5ZnJhbWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBl
eHBsaWNpdCBhbmltYXRpb24gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCi1jbGFzcyBLZXlm
cmFtZUFuaW1hdGlvbiBmaW5hbCA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgUmVmPEtleWZyYW1lQW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBh
bmltYXRpb24sIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRl
QW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBl
bGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwotICAgIH0KLSAg
ICAKLSAgICBPcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gYW5pbWF0ZShDb21wb3NpdGVBbmltYXRp
b24mLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5k
ZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwotICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+Jikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNvbXB1dGVF
eHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0K
LSAgICBjb25zdCBLZXlmcmFtZUxpc3QmIGtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5
ZnJhbWVzOyB9Ci0KLSAgICBjb25zdCBBdG9tU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4g
bV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpOyB9Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvbkZv
clByb3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgYm9vbCB0cmlnZ2Vyc1N0YWNr
aW5nQ29udGV4dCgpIGNvbnN0IHsgcmV0dXJuIG1fdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQ7IH0K
LSAgICBib29sIGRlcGVuZHNPbkxheW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVwZW5kc09uTGF5
b3V0OyB9Ci0gICAgYm9vbCBhZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBzZXRVbmFuaW1hdGVk
U3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSkgeyBtX3VuYW5pbWF0ZWRT
dHlsZSA9IFdURk1vdmUoc3R5bGUpOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0
ZWRTdHlsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX3VuYW5pbWF0ZWRTdHlsZTsgfQot
Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBvdmVycmlkZTsKLQot
cHJpdmF0ZToKLSAgICBLZXlmcmFtZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBFbGVtZW50
JiwgQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHls
ZSk7Ci0gICAgdmlydHVhbCB+S2V5ZnJhbWVBbmltYXRpb24oKTsKLQotICAgIHZvaWQgb25Bbmlt
YXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgb25Bbmlt
YXRpb25JdGVyYXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9u
QW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdGFy
dEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYXVzZUFu
aW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRBbmltYXRp
b24oYm9vbCBmaWxsaW5nRm9yd2FyZHMgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG92
ZXJyaWRlQW5pbWF0aW9ucygpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFu
aW1hdGlvbnMoKSBvdmVycmlkZTsKLQotICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVu
ZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3RlbmVyVHlwZSkgY29uc3Q7Ci0gICAgYm9v
bCBzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYsIGRvdWJsZSBlbGFwc2VkVGlt
ZSk7Ci0KLSAgICBib29sIGFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdCBvdmVy
cmlkZTsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uRm9yTWF0cml4QW5pbWF0
aW9uKGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIExheW91dFJlY3QmKSBjb25zdDsKLQot
ICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uRm9yTWF0Y2hpbmdUcmFuc2Zvcm1MaXN0
cyhjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAg
ICB2b2lkIGNvbXB1dGVMYXlvdXREZXBlbmRlbmN5KCk7Ci0gICAgdm9pZCByZXNvbHZlS2V5ZnJh
bWVTdHlsZXMoKTsKLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCk7Ci0g
ICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2lmIEVOQUJM
RShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0
ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdDb2xv
ckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSAgICBib29sIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJG
dW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5SUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Y29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgKGNvbnN0IFJlbmRlclN0eWxlJik+JikgY29uc3Q7Ci0gICAgCi0gICAg
Ly8gR2V0IHRoZSBzdHlsZXMgZm9yIHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUg
Y3VycmVudCBhbmltYXRpb24gdGltZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KLSAg
ICB2b2lkIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBj
b25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqJiB0b1N0eWxl
LCBkb3VibGUmIHByb2dyZXNzKSBjb25zdDsKLQotICAgIEtleWZyYW1lTGlzdCBtX2tleWZyYW1l
czsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdW5hbmltYXRlZFN0eWxlOyAv
LyBUaGUgc3R5bGUganVzdCBiZWZvcmUgd2Ugc3RhcnRlZCBhbmltYXRpb24KLQotICAgIGJvb2wg
bV9zdGFydEV2ZW50RGlzcGF0Y2hlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3RyaWdnZXJzU3Rh
Y2tpbmdDb250ZXh0IHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0
eSB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2RlcGVuZHNPbkxheW91dCB7IGZhbHNlIH07Ci19Owot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9HcmFwaGljc0xheWVyLmgKaW5kZXggN2U0ZmUzZmQwMGNhNTlkOWI3ODJhOGEwNDBm
NGQ1Yjc5MTgwOWZlNi4uZWUzNDdiYTg1MzI2MWM5NjJlYTk5NDJiNjgzZjJhMmRhOTEyYWQxMSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIu
aApAQCAtNDc0LDkgKzQ3NCw3IEBAIHB1YmxpYzoKICAgICAvLyBUcmFuc2l0aW9ucyBhcmUgaWRl
bnRpZmllZCBieSBhIHNwZWNpYWwgYW5pbWF0aW9uIG5hbWUgdGhhdCBjYW5ub3QgY2xhc2ggd2l0
aCBhIGtleWZyYW1lIGlkZW50aWZpZXIuCiAgICAgc3RhdGljIFN0cmluZyBhbmltYXRpb25OYW1l
Rm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5SUQpOwogCi0gICAgLy8gUmV0dXJuIHRydWUg
aWYgdGhlIGFuaW1hdGlvbiBpcyBoYW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uIElm
IHRoaXMgcmV0dXJucwotICAgIC8vIGZhbHNlLCB0aGUgYW5pbWF0aW9uIHdpbGwgYmUgcnVuIGJ5
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBoYW5kbGUgYm90
aCB0cmFuc2l0aW9ucyBhbmQga2V5ZnJhbWUgYW5pbWF0aW9ucy4KKyAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB0aGUgYW5pbWF0aW9uIGlzIGhhbmRsZWQgYnkgdGhlIGNvbXBvc2l0aW5nIHN5c3RlbS4K
ICAgICB2aXJ0dWFsIGJvb2wgYWRkQW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0Jiwg
Y29uc3QgRmxvYXRTaXplJiAvKmJveFNpemUqLywgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3Ry
aW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKSAgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiAv
KmFuaW1hdGlvbk5hbWUqLywgZG91YmxlIC8qdGltZU9mZnNldCovKSB7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcmVtb3ZlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8pIHsg
fQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllckNsaWVudC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllckNsaWVudC5oCmluZGV4IDc5YTNmNTM5NjNiZjQ3YjYwMTQ4MDBhNzUzMjM0ZDZhMWQxM2Ex
ZDQuLjU2NDg1OGUyYWFhOTFhNWVlYjdmOGEyNDU5YjE2YTAwM2I4ZjRmYjIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50
LmgKQEAgLTkzLDcgKzkzLDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCB0aWxlZEJhY2tp
bmdVc2FnZUNoYW5nZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGJvb2wgLyp1c2luZ1RpbGVkQmFj
a2luZyovKSB7IH0KICAgICAKICAgICAvLyBDYWxsYmFjayBmb3Igd2hlbiBoYXJkd2FyZS1hY2Nl
bGVyYXRlZCBhbmltYXRpb24gc3RhcnRlZC4KLSAgICB2aXJ0dWFsIHZvaWQgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlv
bktleSovLCBNb25vdG9uaWNUaW1lIC8qdGltZSovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgbm90
aWZ5QW5pbWF0aW9uRW5kZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGNvbnN0IFN0cmluZyYgLyph
bmltYXRpb25LZXkqLykgeyB9CiAKICAgICAvLyBOb3RpZmljYXRpb24gdGhhdCBhIGxheWVyIHBy
b3BlcnR5IGNoYW5nZWQgdGhhdCByZXF1aXJlcyBhIHN1YnNlcXVlbnQgY2FsbCB0byBmbHVzaENv
bXBvc2l0aW5nU3RhdGUoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXggNDcyMGUxMjk5ZWE2NGI0Y2JiZGY5
ZmUwZWMyYjQzZGZjZTViNGIxZS4uZmU3ODNmYWE3MzE5ZjkyMGMxNmMzMzNlYzk2ODIwNjM1NmYy
ZTU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3Jh
cGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC0xMTA4LDEyICsxMTA4LDYgQEAgdm9pZCBHcmFwaGlj
c0xheWVyQ0E6OnJlbW92ZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiAg
ICAgbm90ZUxheWVyUHJvcGVydHlDaGFuZ2VkKEFuaW1hdGlvbkNoYW5nZWQgfCBDb3ZlcmFnZVJl
Y3RDaGFuZ2VkKTsKIH0KIAotdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFu
aW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lKQotewotICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwg
IkdyYXBoaWNzTGF5ZXJDQSAiIDw8IHRoaXMgPDwgIiBpZCAiIDw8IHByaW1hcnlMYXllcklEKCkg
PDwgIiBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkICIgPDwgYW5pbWF0aW9uS2V5KTsK
LSAgICBjbGllbnQoKS5ub3RpZnlBbmltYXRpb25TdGFydGVkKHRoaXMsIGFuaW1hdGlvbktleSwg
c3RhcnRUaW1lKTsKLX0KLQogdm9pZCBHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFu
aW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KQogewogICAgIExPR19XSVRI
X1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIkdyYXBoaWNzTGF5ZXJDQSAiIDw8IHRoaXMg
PDwgIiBpZCAiIDw8IHByaW1hcnlMYXllcklEKCkgPDwgIiBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRp
b25FbmRlZCAiIDw8IGFuaW1hdGlvbktleSk7CkBAIC0zMDQwLDkgKzMwMzQsNyBAQCB2b2lkIEdy
YXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNOZWVkc0Rpc3BsYXkoKQogCiBzdGF0aWMgYm9v
bCBpc0tleWZyYW1lKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBsaXN0KQogewotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGxpc3Quc2l6ZSgpID4gMTsKLSAg
ICByZXR1cm4gbGlzdC5zaXplKCkgPiAyOworICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDE7CiB9
CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVBbmltYXRpb25Gcm9tS2V5ZnJhbWVzKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1hdGlvbiogYW5pbWF0
aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIFNlY29uZHMgdGltZU9mZnNldCkKQEAg
LTMyOTMsMzkgKzMyODUsMjkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnNldHVwQW5pbWF0aW9u
KFBsYXRmb3JtQ0FBbmltYXRpb24qIHByb3BlcnR5QW5pbSwgY29uc3QgQW4KICAgICBwcm9wZXJ0
eUFuaW0tPnNldEFkZGl0aXZlKGFkZGl0aXZlKTsKICAgICBwcm9wZXJ0eUFuaW0tPnNldEZpbGxN
b2RlKGZpbGxNb2RlKTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkx
OAotICAgICAgICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRoZSBvbmx5IHNjZW5hcmlvIHdoZXJl
IEFuaW1hdGlvbjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKLSAgICAgICAgLy8gaXRzIG1vZGUgc2V0
IHRvIFNpbmdsZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGRvbid0IHNldCB0aGUgYW5pbWF0
aW9uLXdpZGUKLSAgICAgICAgLy8gdGltaW5nIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGEgQ29y
ZSBBbmltYXRpb24gbGltaXRhdGlvbi4KLSAgICAgICAgaWYgKGFuaW0tPnByb3BlcnR5KCkubW9k
ZSAhPSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkKLSAgICAgICAg
ICAgIHByb3BlcnR5QW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oYW5pbS0+dGltaW5nRnVuY3Rpb24o
KSk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjE1OTE4CisgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBpcyB0aGUgb25seSBzY2Vu
YXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZlCisgICAgLy8gaXRzIG1v
ZGUgc2V0IHRvIFNpbmdsZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGRvbid0IHNldCB0aGUg
YW5pbWF0aW9uLXdpZGUKKyAgICAvLyB0aW1pbmcgZnVuY3Rpb24gdG8gd29yayBhcm91bmQgYSBD
b3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgorICAgIGlmIChhbmltLT5wcm9wZXJ0eSgpLm1vZGUg
IT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkpCisgICAgICAgIHBy
b3BlcnR5QW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oYW5pbS0+dGltaW5nRnVuY3Rpb24oKSk7CiB9
CiAKIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBHcmFwaGljc0xheWVyQ0E6OnRpbWluZ0Z1bmN0aW9u
Rm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUmIGFuaW1WYWx1ZSwgY29uc3Qg
QW5pbWF0aW9uJiBhbmltKQogewotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAg
ICAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9k
ZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdGdW5jdGlvbigpKSB7Ci0gICAgICAgICAg
ICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkx
OAotICAgICAgICAgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3
aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZlCi0gICAgICAgICAgICAvLyBpdHMg
bW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgY2hvc2Ugbm90IHRv
IHNldCBzZXQgdGhlCi0gICAgICAgICAgICAvLyBhbmltYXRpb24td2lkZSB0aW1pbmcgZnVuY3Rp
b24sIHNvIHdlIHNldCBpdCBvbiB0aGUgc2luZ2xlIGtleWZyYW1lIGludGVydmFsCi0gICAgICAg
ICAgICAvLyB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24uCi0gICAg
ICAgICAgICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKLSAgICAgICAgfQotICAgICAg
ICBpZiAoYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAgICAgICByZXR1cm4gKmFu
aW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpOwotICAgICAgICBpZiAoYW5pbS5kZWZhdWx0VGltaW5n
RnVuY3Rpb25Gb3JLZXlmcmFtZXMoKSkKLSAgICAgICAgICAgIHJldHVybiAqYW5pbS5kZWZhdWx0
VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKTsKLSAgICAgICAgcmV0dXJuIExpbmVhclRpbWlu
Z0Z1bmN0aW9uOjpzaGFyZWRMaW5lYXJUaW1pbmdGdW5jdGlvbigpOworICAgIGlmIChhbmltLnBy
b3BlcnR5KCkubW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0
eSAmJiBhbmltLnRpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKKyAgICAgICAgLy8gQSBDU1Mg
VHJhbnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5
KCkgd2lsbCBoYXZlCisgICAgICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4g
SW4gdGhpcyBjYXNlLCB3ZSBjaG9zZSBub3QgdG8gc2V0IHNldCB0aGUKKyAgICAgICAgLy8gYW5p
bWF0aW9uLXdpZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQgb24gdGhlIHNpbmdsZSBr
ZXlmcmFtZSBpbnRlcnZhbAorICAgICAgICAvLyB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0
aW9uIGxpbWl0YXRpb24uCisgICAgICAgIHJldHVybiAqYW5pbS50aW1pbmdGdW5jdGlvbigpOwog
ICAgIH0KLQogICAgIGlmIChhbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKSkKICAgICAgICAgcmV0
dXJuICphbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKTsKLSAgICBpZiAoYW5pbS5pc1RpbWluZ0Z1
bmN0aW9uU2V0KCkpCi0gICAgICAgIHJldHVybiAqYW5pbS50aW1pbmdGdW5jdGlvbigpOwotICAg
IHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0VGltaW5nRnVuY3Rpb24o
KTsKKyAgICBpZiAoYW5pbS5kZWZhdWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKSkKKyAg
ICAgICAgcmV0dXJuICphbmltLmRlZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZyYW1lcygpOwor
ICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVkTGluZWFyVGltaW5nRnVuY3Rp
b24oKTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbkVuZHBvaW50cyhj
b25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1h
dGlvbiwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYmFzaWNBbmltKQpAQCAtMzM0NiwxMSArMzMyOCw2
IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5
ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAg
Ly8gVGhpcyBjb2RlcGF0aCBpcyB1c2VkIGZvciAyLWtleWZyYW1lIGFuaW1hdGlvbnMsIHNvIHdl
IHN0aWxsIG5lZWQgdG8gbG9vayBpbiB0aGUgc3RhcnQKLSAgICAvLyBmb3IgYSB0aW1pbmcgZnVu
Y3Rpb24uIEV2ZW4gaW4gdGhlIHJldmVyc2luZyBhbmltYXRpb24gY2FzZSwgdGhlIGZpcnN0IGtl
eWZyYW1lIHByb3ZpZGVzIHRoZSB0aW1pbmcgZnVuY3Rpb24uCi0gICAgaWYgKCFSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkKLSAgICAgICAgYmFzaWNBbmltLT5zZXRUaW1pbmdGdW5jdGlvbigmdGltaW5n
RnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxpc3QuYXQoMCksICphbmltYXRpb24pLCAh
Zm9yd2FyZHMpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM0NDAsMTEgKzM0MTcsNiBA
QCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0VHJhbnNmb3JtQW5pbWF0aW9uRW5kcG9pbnRzKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YQogICAgICAgICB9CiAgICAgfQogCi0gICAgLy8gVGhp
cyBjb2RlcGF0aCBpcyB1c2VkIGZvciAyLWtleWZyYW1lIGFuaW1hdGlvbnMsIHNvIHdlIHN0aWxs
IG5lZWQgdG8gbG9vayBpbiB0aGUgc3RhcnQKLSAgICAvLyBmb3IgYSB0aW1pbmcgZnVuY3Rpb24u
IEV2ZW4gaW4gdGhlIHJldmVyc2luZyBhbmltYXRpb24gY2FzZSwgdGhlIGZpcnN0IGtleWZyYW1l
IHByb3ZpZGVzIHRoZSB0aW1pbmcgZnVuY3Rpb24uCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkKLSAgICAgICAgYmFzaWNBbmltLT5zZXRUaW1pbmdGdW5jdGlvbigmdGltaW5nRnVuY3Rp
b25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxpc3QuYXQoMCksICphbmltYXRpb24pLCAhZm9yd2Fy
ZHMpOwotCiAgICAgYXV0byB2YWx1ZUZ1bmN0aW9uID0gZ2V0VmFsdWVGdW5jdGlvbk5hbWVGb3JU
cmFuc2Zvcm1PcGVyYXRpb24odHJhbnNmb3JtT3BUeXBlKTsKICAgICBpZiAodmFsdWVGdW5jdGlv
biAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCiAgICAgICAgIGJhc2lj
QW5pbS0+c2V0VmFsdWVGdW5jdGlvbih2YWx1ZUZ1bmN0aW9uKTsKQEAgLTM1NTEsMTEgKzM1MjMs
NiBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0RmlsdGVyQW5pbWF0aW9uRW5kcG9pbnRzKGNv
bnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZQogICAgIGJhc2ljQW5pbS0+c2V0RnJvbVZhbHVl
KGZyb21PcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7CiAgICAgYmFzaWNB
bmltLT5zZXRUb1ZhbHVlKHRvT3BlcmF0aW9uLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgp
OwogCi0gICAgLy8gVGhpcyBjb2RlcGF0aCBpcyB1c2VkIGZvciAyLWtleWZyYW1lIGFuaW1hdGlv
bnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8gbG9vayBpbiB0aGUgc3RhcnQKLSAgICAvLyBmb3IgYSB0
aW1pbmcgZnVuY3Rpb24uIEV2ZW4gaW4gdGhlIHJldmVyc2luZyBhbmltYXRpb24gY2FzZSwgdGhl
IGZpcnN0IGtleWZyYW1lIHByb3ZpZGVzIHRoZSB0aW1pbmcgZnVuY3Rpb24uCi0gICAgaWYgKCFS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgYmFzaWNBbmltLT5zZXRUaW1pbmdGdW5jdGlv
bigmdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxpc3QuYXQoMCksICphbmlt
YXRpb24pLCAhZm9yd2FyZHMpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKaW5k
ZXggZmU3ZGM1NmE0N2YzZmJlNzhkMTMxYWFhNmRjMjk2NDZlMGVjMzJiZC4uZjI2ZTUxYWRmY2Zm
NmIzNmY4ODgzZDRmNjY0Y2M3NTY3YWJiZjEzYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmgKQEAgLTE5NSw3ICsxOTUs
NiBAQCBwcml2YXRlOgogICAgIGJvb2wgcGxhdGZvcm1DQUxheWVyUmVzcG9uZHNUb0xheW91dENo
YW5nZXMoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBmYWxzZTsgfQogICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgcGxhdGZvcm1DQUxheWVyQ3VzdG9tU3VibGF5ZXJzQ2hhbmdlZChQbGF0Zm9ybUNB
TGF5ZXIqKSBvdmVycmlkZTsKIAotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxhdGZvcm1DQUxh
eWVyQW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbktleSwgTW9ub3Rvbmlj
VGltZSBiZWdpblRpbWUpIG92ZXJyaWRlOwogICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxhdGZv
cm1DQUxheWVyQW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXkpIG92ZXJy
aWRlOwogICAgIENvbXBvc2l0aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbiBwbGF0Zm9ybUNBTGF5
ZXJDb250ZW50c09yaWVudGF0aW9uKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gY29udGVudHNP
cmllbnRhdGlvbigpOyB9CiAgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJQ
YWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IEZs
b2F0UmVjdCYgY2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpIG92ZXJyaWRlOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxh
eWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuaAppbmRleCA1MDRiMDFjMjQ0NGU5ZTk1OWMxOGMzNDZjYjVlYjdiZWNhMGQ2Mzc0Li4zNmJi
YzIwYTg0MWQyOWYzNzc2YzUzNjU1MWZkMDZkZDBkZGZhMmZiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaApAQCAtMTAz
LDcgKzEwMyw2IEBAIHB1YmxpYzoKICAgICBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKCkg
Y29uc3QgeyByZXR1cm4gbV9vd25lcjsgfQogICAgIHZpcnR1YWwgdm9pZCBzZXRPd25lcihQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSB7IG1fb3duZXIgPSBvd25lcjsgfQogCi0gICAgdmly
dHVhbCB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1Rp
bWUgYmVnaW5UaW1lKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0
IFN0cmluZyYga2V5KSA9IDA7CiAKICAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNEaXNwbGF5KCkg
PSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxh
dGZvcm1DQUxheWVyQ2xpZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaAppbmRleCA2Nzc4ZGU3MTljNTBlMWE0NWZjODI0NmQ3
M2E5MDhhYmZiYWQxMzA2Li40Y2QwODQzYjVlZDlhNjRkY2JkNzBkYTJkYTRjYjJlYWZkMTA4M2Vl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9y
bUNBTGF5ZXJDbGllbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9QbGF0Zm9ybUNBTGF5ZXJDbGllbnQuaApAQCAtNDAsNyArNDAsNiBAQCBwdWJsaWM6CiAKICAg
ICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQ3VzdG9tU3VibGF5ZXJzQ2hhbmdlZChQbGF0
Zm9ybUNBTGF5ZXIqKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmlt
YXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25LZXkqLywgTW9ub3RvbmljVGlt
ZSkgeyB9CiAgICAgdmlydHVhbCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvbkVuZGVkKGNv
bnN0IFN0cmluZyYgLyphbmltYXRpb25LZXkqLykgeyB9CiAgICAgdmlydHVhbCBHcmFwaGljc0xh
eWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29u
dGVudHNPcmllbnRhdGlvbigpIGNvbnN0IHsgcmV0dXJuIEdyYXBoaWNzTGF5ZXI6OkNvbXBvc2l0
aW5nQ29vcmRpbmF0ZXNPcmllbnRhdGlvbjo6VG9wRG93bjsgfQogICAgIHZpcnR1YWwgdm9pZCBw
bGF0Zm9ybUNBTGF5ZXJQYWludENvbnRlbnRzKFBsYXRmb3JtQ0FMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYsIGNvbnN0IEZsb2F0UmVjdCYgaW5DbGlwLCBHcmFwaGljc0xheWVyUGFpbnRCZWhhdmlv
cikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKaW5kZXggOTkyMmY0OGZiNzBk
MDljZTA4ZjYyZjRkMWEzN2IzODQ5NTkxOGVmMi4uNWIyMTYzZWMwMjk3N2RkOTQ2YzE3MDI2ZWUx
MmY0YTNjMDFmZmVhOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCkBAIC02Myw3
ICs2Myw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJp
bmcmIGtleSwgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3Zl
QW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICBSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBv
dmVycmlkZTsKLSAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBrZXksIE1v
bm90b25pY1RpbWUgYmVnaW5UaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVk
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKIAogICAgIHZvaWQgc2V0TWFzayhQbGF0Zm9y
bUNBTGF5ZXIqKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KaW5k
ZXggMjg4NDZmNmI5MTU2MTFiOTJlZjc0MGQ5M2E5ODFkMDAwM2E1YjY5Yy4uNTk1NDFmODc3NGY4
MzJmYTdjZGU2MDkwN2MxZGViY2M1OTU1NTk2ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KQEAgLTk5LDU2ICs5OSwxOCBAQCBSZWY8UGxhdGZvcm1DQUxheWVyQ29jb2E+IFBs
YXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdAogICAg
IHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKChfX2JyaWRnZSBDQUxh
eWVyICopcGxhdGZvcm1MYXllciwgb3duZXIpKTsKIH0KIAotc3RhdGljIE1vbm90b25pY1RpbWUg
bWVkaWFUaW1lVG9DdXJyZW50VGltZShDRlRpbWVJbnRlcnZhbCB0KQotewotICAgIHJldHVybiBN
b25vdG9uaWNUaW1lOjpub3coKSArIFNlY29uZHModCAtIENBQ3VycmVudE1lZGlhVGltZSgpKTsK
LX0KLQogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQogCi0vLyBEZWxlZ2F0ZSBmb3IgYW5pbWF0aW9u
RGlkU3RhcnQgY2FsbGJhY2sKIEBpbnRlcmZhY2UgV2ViQW5pbWF0aW9uRGVsZWdhdGUgOiBOU09i
amVjdCB7CiAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyKiBtX293bmVyOwogfQogCi0tICh2
b2lkKWFuaW1hdGlvbkRpZFN0YXJ0OihDQUFuaW1hdGlvbiAqKWFuaW07CiAtICh2b2lkKXNldE93
bmVyOihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIqKW93bmVyOwogCiBAZW5kCiAKIEBpbXBsZW1l
bnRhdGlvbiBXZWJBbmltYXRpb25EZWxlZ2F0ZQogCi0tICh2b2lkKWFuaW1hdGlvbkRpZFN0YXJ0
OihDQUFuaW1hdGlvbiAqKWFuaW1hdGlvbgotewotICAgIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgV2ViVGhyZWFkTG9jaygpOwotI2VuZGlm
Ci0gICAgaWYgKCFtX293bmVyKQotICAgICAgICByZXR1cm47Ci0KLSAgICBNb25vdG9uaWNUaW1l
IHN0YXJ0VGltZTsKLSAgICBpZiAoaGFzRXhwbGljaXRCZWdpblRpbWUoYW5pbWF0aW9uKSkgewot
ICAgICAgICAvLyBXZSBkb24ndCBrbm93IHdoYXQgdGltZSBDQSB1c2VkIHRvIGNvbW1pdCB0aGUg
YW5pbWF0aW9uLCBzbyBqdXN0IHVzZSB0aGUgY3VycmVudCB0aW1lCi0gICAgICAgIC8vIChldmVu
IHRob3VnaCB0aGlzIHdpbGwgYmUgc2xpZ2h0bHkgb2ZmKS4KLSAgICAgICAgc3RhcnRUaW1lID0g
bWVkaWFUaW1lVG9DdXJyZW50VGltZShDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci0gICAgfSBlbHNl
Ci0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVudFRpbWUoW2FuaW1hdGlvbiBi
ZWdpblRpbWVdKTsKLQotICAgIENBTGF5ZXIgKmxheWVyID0gbV9vd25lci0+cGxhdGZvcm1MYXll
cigpOwotCi0gICAgU3RyaW5nIGFuaW1hdGlvbktleTsKLSAgICBmb3IgKE5TU3RyaW5nICprZXkg
aW4gW2xheWVyIGFuaW1hdGlvbktleXNdKSB7Ci0gICAgICAgIGlmIChbbGF5ZXIgYW5pbWF0aW9u
Rm9yS2V5OmtleV0gPT0gYW5pbWF0aW9uKSB7Ci0gICAgICAgICAgICBhbmltYXRpb25LZXkgPSBr
ZXk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghYW5p
bWF0aW9uS2V5LmlzRW1wdHkoKSkKLSAgICAgICAgbV9vd25lci0+YW5pbWF0aW9uU3RhcnRlZChh
bmltYXRpb25LZXksIHN0YXJ0VGltZSk7Ci19Ci0KIC0gKHZvaWQpYW5pbWF0aW9uRGlkU3RvcDoo
Q0FBbmltYXRpb24gKilhbmltYXRpb24gZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQKIHsKICAgICB1
c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKQEAgLTM5MywxMiArMzU1LDYgQEAgUGxhdGZvcm1DQUxh
eWVyQ29jb2E6On5QbGF0Zm9ybUNBTGF5ZXJDb2NvYSgpCiAgICAgICAgIFtzdGF0aWNfY2FzdDxX
ZWJUaWxlZEJhY2tpbmdMYXllciAqPihtX2xheWVyLmdldCgpKSBpbnZhbGlkYXRlXTsKIH0KIAot
dm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcm
IGFuaW1hdGlvbktleSwgTW9ub3RvbmljVGltZSBiZWdpblRpbWUpCi17Ci0gICAgaWYgKG1fb3du
ZXIpCi0gICAgICAgIG1fb3duZXItPnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQoYW5p
bWF0aW9uS2V5LCBiZWdpblRpbWUpOwotfQotCiB2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbktleSkKIHsKICAgICBpZiAobV9v
d25lcikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuY3BwCmluZGV4IGM1YmM0N2ExNDJlM2RmMTc4OGY0
M2NlZmU3ZGUzODMyNDE1YjRkZjMuLjRiNjAwNTlmZTE0ZGFkN2RiMTJjZjEwYWEzODlkYjA1Njk5
OGU2ZDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9DQUNGTGF5ZXJUcmVlSG9zdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmNwcApAQCAtMjA4LDkgKzIwOCw4IEBAIFBs
YXRmb3JtQ0FMYXllciogQ0FDRkxheWVyVHJlZUhvc3Q6OnJvb3RMYXllcigpIGNvbnN0CiAgICAg
cmV0dXJuIG1fcm9vdExheWVyLmdldCgpOwogfQogCi12b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojph
ZGRQZW5kaW5nQW5pbWF0ZWRMYXllcihQbGF0Zm9ybUNBTGF5ZXImIGxheWVyKQordm9pZCBDQUNG
TGF5ZXJUcmVlSG9zdDo6YWRkUGVuZGluZ0FuaW1hdGVkTGF5ZXIoUGxhdGZvcm1DQUxheWVyJikK
IHsKLSAgICBtX3BlbmRpbmdBbmltYXRlZExheWVycy5hZGQoJmxheWVyKTsKIH0KIAogdm9pZCBD
QUNGTGF5ZXJUcmVlSG9zdDo6c2V0Um9vdENoaWxkTGF5ZXIoUGxhdGZvcm1DQUxheWVyKiBsYXll
cikKQEAgLTMxMywyNiArMzEyLDYgQEAgdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6Zmx1c2hQZW5k
aW5nTGF5ZXJDaGFuZ2VzTm93KCkKICAgICBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMgPSBmYWxz
ZTsKIH0KIAotdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6Y29udGV4dERpZENoYW5nZSgpCi17Ci0g
ICAgLy8gQWxsIHBlbmRpbmcgYW5pbWF0aW9ucyB3aWxsIGhhdmUgYmVlbiBzdGFydGVkIHdpdGgg
dGhlIGZsdXNoLiBGaXJlIHRoZSBhbmltYXRpb25TdGFydGVkIGNhbGxzLgotICAgIG5vdGlmeUFu
aW1hdGlvbnNTdGFydGVkKCk7Ci19Ci0KLXZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6Om5vdGlmeUFu
aW1hdGlvbnNTdGFydGVkKCkKLXsKLSAgICAvLyBTZW5kIGN1cnJlbnRUaW1lIHRvIHRoZSBwZW5k
aW5nIGFuaW1hdGlvbnMuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IENBQ0YgaW4gYSBjYWxs
YmFjawotICAgIC8vIHdoaWNoIG9jY3VycyBhZnRlciB0aGUgZHJhd0luQ29udGV4dCBjYWxscy4g
U28gY3VycmVudFRpbWUgaXMgdmVyeSBjbG9zZSB0byB0aGUgdGltZQotICAgIC8vIHRoZSBhbmlt
YXRpb25zIGFjdHVhbGx5IHN0YXJ0Ci0gICAgTW9ub3RvbmljVGltZSBjdXJyZW50VGltZSA9IE1v
bm90b25pY1RpbWU6Om5vdygpOwotCi0gICAgSGFzaFNldDxSZWZQdHI8UGxhdGZvcm1DQUxheWVy
PiA+OjppdGVyYXRvciBlbmQgPSBtX3BlbmRpbmdBbmltYXRlZExheWVycy5lbmQoKTsKLSAgICBm
b3IgKEhhc2hTZXQ8UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gPjo6aXRlcmF0b3IgaXQgPSBtX3Bl
bmRpbmdBbmltYXRlZExheWVycy5iZWdpbigpOyBpdCAhPSBlbmQ7ICsraXQpCi0gICAgICAgICgq
aXQpLT5hbmltYXRpb25TdGFydGVkKFN0cmluZygpLCBjdXJyZW50VGltZSk7Ci0KLSAgICBtX3Bl
bmRpbmdBbmltYXRlZExheWVycy5jbGVhcigpOwotfQotCiBDR1JlY3QgQ0FDRkxheWVyVHJlZUhv
c3Q6OmJvdW5kcygpIGNvbnN0CiB7CiAgICAgUkVDVCBjbGllbnRSZWN0OwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3QuaAppbmRleCBjNzY3MWEwNzQ5OWFjNzhkNjQ1N2RiM2I2Y2IzZGM0NmVmMDNhYTg0Li41
NTFiNDJhMWFkOTc0MDBiM2YyMGY5OTI2YmQzZDNhZWVkZTIxOTJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhvc3QuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJl
ZUhvc3QuaApAQCAtMTAxLDcgKzEwMSw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBpbml0aWFsaXpl
KCk7CiAKICAgICAvLyBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0Ci0gICAgdmlydHVhbCB2b2lk
IGFkZFBlbmRpbmdBbmltYXRlZExheWVyKFBsYXRmb3JtQ0FMYXllciYpOwogICAgIHZpcnR1YWwg
dm9pZCBsYXllclRyZWVEaWRDaGFuZ2UoKTsKIAogCkBAIC0xMTUsNyArMTE0LDYgQEAgcHJpdmF0
ZToKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX3Jvb3RMYXllcjsKICAgICBSZWZQdHI8
UGxhdGZvcm1DQUxheWVyPiBtX3Jvb3RDaGlsZExheWVyOwogICAgIFJlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IG1fZGVidWdJbmZvTGF5ZXI7Ci0gICAgSGFzaFNldDxSZWZQdHI8UGxhdGZvcm1DQUxh
eWVyPiA+IG1fcGVuZGluZ0FuaW1hdGVkTGF5ZXJzOwogICAgIEhXTkQgbV93aW5kb3cgeyBudWxs
cHRyIH07CiAgICAgYm9vbCBtX3Nob3VsZEZsdXNoUGVuZGluZ0dyYXBoaWNzTGF5ZXJDaGFuZ2Vz
IHsgZmFsc2UgfTsKICAgICBib29sIG1faXNGbHVzaGluZ0xheWVyQ2hhbmdlcyB7IGZhbHNlIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUxheWVyV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCmluZGV4IDkzMTZmM2FjYTM2MjZkOWNmOTBkM2Uy
Yzc1YjQwMzFjNWVlYWFiYWQuLjUzMjI1OTk5MTQ1MjkxYmEzNWM4MzU5MDk2M2ZmNzEyZGQ4ZWE4
NTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCkBAIC0zMzIsMTEgKzMzMiw2IEBAIHZv
aWQgUGxhdGZvcm1DQUxheWVyV2luOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXksIFBsYXRmb3JtQ0FBbmltYXRpCiAKICAgICBDQUNGTGF5ZXJBZGRBbmltYXRpb24obV9sYXll
ci5nZXQoKSwga2V5LmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCksIGRvd25jYXN0PFBsYXRmb3JtQ0FB
bmltYXRpb25XaW4+KGFuaW1hdGlvbikucGxhdGZvcm1BbmltYXRpb24oKSk7CiAgICAgc2V0TmVl
ZHNDb21taXQoKTsKLQotICAgIC8vIFRlbGwgdGhlIGhvc3QgYWJvdXQgaXQgc28gd2UgY2FuIGZp
cmUgdGhlIHN0YXJ0IGFuaW1hdGlvbiBldmVudAotICAgIEFic3RyYWN0Q0FDRkxheWVyVHJlZUhv
c3QqIGhvc3QgPSBsYXllclRyZWVIb3N0Rm9yTGF5ZXIodGhpcyk7Ci0gICAgaWYgKGhvc3QpCi0g
ICAgICAgIGhvc3QtPmFkZFBlbmRpbmdBbmltYXRlZExheWVyKCp0aGlzKTsKIH0KIAogdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OnJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtl
eSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9H
cmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCmluZGV4IGI3MjQz
ZTk5NGMwMDRkMjIxNWRjYjk0YzFlNGVlYmRhMGU5MjU0MDguLmE4Mzk0OWI0ZTk0MzIxNjZlN2Uy
MTc4M2E0ZjMwY2NlYWI1NDU4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dyYXBoaWNzTGF5ZXJUZXh0dXJl
TWFwcGVyLmNwcApAQCAtNDY3LDkgKzQ2Nyw2IEBAIHZvaWQgR3JhcGhpY3NMYXllclRleHR1cmVN
YXBwZXI6OmNvbW1pdExheWVyQ2hhbmdlcygpCiAgICAgaWYgKG1fY2hhbmdlTWFzayAmIEFuaW1h
dGlvbkNoYW5nZSkKICAgICAgICAgbV9sYXllci5zZXRBbmltYXRpb25zKG1fYW5pbWF0aW9ucyk7
CiAKLSAgICBpZiAobV9jaGFuZ2VNYXNrICYgQW5pbWF0aW9uU3RhcnRlZCkKLSAgICAgICAgY2xp
ZW50KCkubm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCAiIiwgbV9hbmltYXRpb25TdGFydFRp
bWUpOwotCiAgICAgbV9jaGFuZ2VNYXNrID0gTm9DaGFuZ2VzOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCmluZGV4IGUy
ODcyMjg0ZGQ0ZWFiOTFjZGRmZTZmNWQ4YTU4OTMzYWZkYzAwNDIuLjZkZmViMjE2NjU1NjhiYTJi
ZjI3M2ExYWY4ZjI2NDQ0NDNmMzZlYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGlu
YXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuY3BwCkBAIC0xMzksNyArMTM5LDYgQEAgQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXIoVHlwZSBsYXll
clR5cGUsIEdyYXBoaWNzTGF5ZXIKICAgICAsIG1fc2hvdWxkVXBkYXRlUGxhdGZvcm1MYXllcihm
YWxzZSkKICAgICAsIG1fY29vcmRpbmF0b3IoMCkKICAgICAsIG1fY29tcG9zaXRlZE5hdGl2ZUlt
YWdlUHRyKDApCi0gICAgLCBtX2FuaW1hdGlvblN0YXJ0ZWRUaW1lcigqdGhpcywgJkNvb3JkaW5h
dGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQpCiAgICAgLCBtX3Jl
cXVlc3RQZW5kaW5nVGlsZUNyZWF0aW9uVGltZXIoUnVuTG9vcDo6bWFpbigpLCB0aGlzLCAmQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyOjpyZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyRmly
ZWQpCiB7CiAgICAgc3RhdGljIE5pY29zaWE6OlBsYXRmb3JtTGF5ZXI6OkxheWVySUQgbmV4dExh
eWVySUQgPSAxOwpAQCAtMTM4OCw3ICsxMzg3LDYgQEAgYm9vbCBDb29yZGluYXRlZEdyYXBoaWNz
TGF5ZXI6OmFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAog
CiAgICAgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkgLSBT
ZWNvbmRzKGRlbGF5QXNOZWdhdGl2ZVRpbWVPZmZzZXQpOwogICAgIG1fYW5pbWF0aW9ucy5hZGQo
Tmljb3NpYTo6QW5pbWF0aW9uKGtleWZyYW1lc05hbWUsIHZhbHVlTGlzdCwgYm94U2l6ZSwgKmFu
aW0sIGxpc3RzTWF0Y2gsIG1fbGFzdEFuaW1hdGlvblN0YXJ0VGltZSwgMF9zLCBOaWNvc2lhOjpB
bmltYXRpb246OkFuaW1hdGlvblN0YXRlOjpQbGF5aW5nKSk7Ci0gICAgbV9hbmltYXRpb25TdGFy
dGVkVGltZXIuc3RhcnRPbmVTaG90KDBfcyk7CiAgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwog
ICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTQxNywxMSArMTQxNSw2IEBAIHZvaWQgQ29vcmRpbmF0
ZWRHcmFwaGljc0xheWVyOjpyZXN1bWVBbmltYXRpb25zKCkKICAgICBkaWRDaGFuZ2VBbmltYXRp
b25zKCk7CiB9CiAKLXZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphbmltYXRpb25TdGFy
dGVkVGltZXJGaXJlZCgpCi17Ci0gICAgY2xpZW50KCkubm90aWZ5QW5pbWF0aW9uU3RhcnRlZCh0
aGlzLCAiIiwgbV9sYXN0QW5pbWF0aW9uU3RhcnRUaW1lKTsKLX0KLQogdm9pZCBDb29yZGluYXRl
ZEdyYXBoaWNzTGF5ZXI6OnJlcXVlc3RQZW5kaW5nVGlsZUNyZWF0aW9uVGltZXJGaXJlZCgpCiB7
CiAgICAgbm90aWZ5Rmx1c2hSZXF1aXJlZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NM
YXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5h
dGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCmluZGV4IGVlOGY1Nzg3OWFkYTZjOTFmMDM5
OTE5MmVmOTVjOTI0ZWNlMTNlNDEuLmQ5MjZjNzAyMzU1NDgxZDdhMWM3MTYwYzRiNDgxOTQxNDI4
NjkyMzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFw
aGljc0xheWVyLmgKQEAgLTE5MSw3ICsxOTEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgc2V0U2hv
dWxkVXBkYXRlVmlzaWJsZVJlY3QoKTsKICAgICBmbG9hdCBlZmZlY3RpdmVDb250ZW50c1NjYWxl
KCk7CiAKLSAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKCk7CiAgICAgdm9pZCBy
ZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyRmlyZWQoKTsKIAogICAgIGJvb2wgZmlsdGVy
c0NhbkJlQ29tcG9zaXRlZChjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikgY29uc3Q7CkBAIC0yMjUs
NyArMjI0LDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8SW1hZ2U+IG1fY29tcG9zaXRlZEltYWdl
OwogICAgIE5hdGl2ZUltYWdlUHRyIG1fY29tcG9zaXRlZE5hdGl2ZUltYWdlUHRyOwogCi0gICAg
VGltZXIgbV9hbmltYXRpb25TdGFydGVkVGltZXI7CiAgICAgUnVuTG9vcDo6VGltZXI8Q29vcmRp
bmF0ZWRHcmFwaGljc0xheWVyPiBtX3JlcXVlc3RQZW5kaW5nVGlsZUNyZWF0aW9uVGltZXI7CiAg
ICAgTmljb3NpYTo6QW5pbWF0aW9ucyBtX2FuaW1hdGlvbnM7CiAgICAgTW9ub3RvbmljVGltZSBt
X2xhc3RBbmltYXRpb25TdGFydFRpbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5jcHAKaW5kZXggZDYzNTgxMTliNGNjNzE0ZTFkZTU4MTY0NjM4NWNiZWUzMmRjODUw
My4uZGZkMGJkOTkxMDNkMGM5ZDNhZDdmNzE2ZDc4YjFjZjBjN2Q0ODAyYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2Vu
ZGlmCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCisj
aW5jbHVkZSAiRG9jdW1lbnRUaW1lbGluZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJh
dG9yLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9s
bGVyLmgiCkBAIC02Niw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgog
I2VuZGlmCiAjaW5jbHVkZSAiUmVuZGVyRnJhZ21lbnRDb250YWluZXIuaCIKKyNpbmNsdWRlICJS
ZW5kZXJTdHlsZS5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUg
IlJlbmRlclRhYmxlQ2VsbC5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkBAIC0yMjkw
LDQgKzIyOTIsMTcgQEAgdm9pZCBSZW5kZXJFbGVtZW50OjpyZXNldFRleHRBdXRvc2l6aW5nKCkK
IH0KICNlbmRpZiAvLyBFTkFCTEUoVEVYVF9BVVRPU0laSU5HKQogCitzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IFJlbmRlckVsZW1lbnQ6OmFuaW1hdGVkU3R5bGUoKQoreworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVzdWx0OworCisgICAgaWYgKGF1dG8qIHRpbWVsaW5l
ID0gZG9jdW1lbnRUaW1lbGluZSgpKQorICAgICAgICByZXN1bHQgPSB0aW1lbGluZS0+YW5pbWF0
ZWRTdHlsZUZvclJlbmRlcmVyKCp0aGlzKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICBy
ZXN1bHQgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoc3R5bGUoKSk7CisKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRl
eCBlMGE2MmQwZWUyNjBjNzQ4NDNkMGU5ZTE0ZjJmMmYzN2IzMmQ0ODJjLi5iYTM0OGI3YTUzOTA4
ZjkxMDlkNzVhNDRmZTBlYmFhMTc1ZDU1NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmgKQEAgLTMwLDYgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xh
c3MgQ29udHJvbFN0YXRlczsKIGNsYXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckJsb2Nr
OworY2xhc3MgUmVuZGVyU3R5bGU7CiBjbGFzcyBSZW5kZXJUcmVlQnVpbGRlcjsKIAogY2xhc3Mg
UmVuZGVyRWxlbWVudCA6IHB1YmxpYyBSZW5kZXJPYmplY3QgewpAQCAtMjI2LDE1ICsyMjcsMTIg
QEAgcHVibGljOgogICAgIFJlbmRlck9iamVjdCogYXR0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5k
ZXJQdHI8UmVuZGVyT2JqZWN0PiBjaGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAg
ICAgUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gZGV0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5kZXJP
YmplY3QmKTsKIAotICAgIHZpcnR1YWwgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlIC8qIHRp
bWVPZmZzZXQgKi8sIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiAvKiBmcm9tU3R5
bGUgKi8sIGNvbnN0IFJlbmRlclN0eWxlKiAvKiB0b1N0eWxlICovKSB7IHJldHVybiBmYWxzZTsg
fQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zmc2V0
ICovLCBDU1NQcm9wZXJ0eUlEKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvbkZpbmlz
aGVkKENTU1Byb3BlcnR5SUQpIHsgfQotCiAgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9u
KGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlmcmFt
ZUxpc3QmKSB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25QYXVz
ZWQoZG91YmxlIC8qIHRpbWVPZmZzZXQgKi8sIGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9
CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgLyogbmFt
ZSAqLykgeyB9CiAKICAgICB2aXJ0dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3Rvbmlj
VGltZSA9IE1vbm90b25pY1RpbWUoKSkgeyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiBhbmltYXRlZFN0eWxlKCk7CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxh
ZyB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA3ZDA3Y2Ri
ZDg0OTcwMjg1M2UxYjkyNWEwYmJjOThkN2RkYWZhNzY2Li5hMGUwZTIzZThjZjhkNmUyNjg5ZjFj
YmI2MjZjOWFhYWQ1ZTVkNGEwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ci5jcHAKQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCiAjaW5j
bHVkZSAiQm94U2hhcGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAj
aW5jbHVkZSAiQ1NTRmlsdGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2lu
Y2x1ZGUgIkNocm9tZS5oIgpAQCAtMTMyNywyMSArMTMyNiwxMCBAQCBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6QXBwbHlUcmFu
c2Zvcm1PcgogCiAgICAgYXV0byYgcmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5k
ZXJlcigpKTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAo
YXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgewotICAgICAg
ICAgICAgaWYgKHRpbWVsaW5lLT5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVy
ZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKSB7Ci0gICAgICAgICAgICAgICAg
VHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVG
b3JSZW5kZXJlcihyZW5kZXJlcigpKTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcGl4ZWxT
bmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVy
ZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSks
IHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAg
ICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybShjdXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3Jk
ZXJSZWN0LCBhcHBseU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFi
bGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwotICAgICAgICAgICAg
ICAgIHJldHVybiBjdXJyVHJhbnNmb3JtOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5u
aW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5
VHJhbnNmb3JtKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1l
bnRUaW1lbGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+aXNSdW5uaW5nQWNjZWxlcmF0
ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKSkg
ewogICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmxl
Z2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigp
LmFuaW1hdGVkU3R5bGUoKTsKICAgICAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3Jk
ZXJSZWN0ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRy
YW5zZm9ybUJveFRvQ1NTQm94VHlwZShzdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBzdHlsZS0+YXBw
bHlUcmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlP
cmlnaW4pOwogICAgICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwg
Y2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwpAQCAtMTM0OSwxMSArMTMzNywxMCBAQCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3VycmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6
QXBwbHlUcmFuc2Zvcm1PcgogICAgICAgICB9CiAgICAgfQogCi0KICAgICAvLyBtX3RyYW5zZm9y
bSBpbmNsdWRlcyB0cmFuc2Zvcm0tb3JpZ2luLCBzbyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUg
dHJhbnNmb3JtIGhlcmUuCiAgICAgaWYgKGFwcGx5T3JpZ2luID09IFJlbmRlclN0eWxlOjpFeGNs
dWRlVHJhbnNmb3JtT3JpZ2luKSB7CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJU
cmFuc2Zvcm07Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSBy
ZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5k
ZXJlcigpKTsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJl
bmRlcmVyKCkuYW5pbWF0ZWRTdHlsZSgpOwogICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVk
Qm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJv
eCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRl
ckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICByZW5kZXJCb3gu
c3R5bGUoKS5hcHBseVRyYW5zZm9ybShjdXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJS
ZWN0LCBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdpbik7CiAgICAgICAgIG1ha2VN
YXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsK
QEAgLTYxNjUsMjAgKzYxNTIsMTMgQEAgYm9vbCBSZW5kZXJMYXllcjo6Z2V0T3ZlcmxhcEJvdW5k
c0luY2x1ZGluZ0NoaWxkcmVuQWNjb3VudGluZ0ZvclRyYW5zZm9ybUFuaW1hdGkKICAgICBib3Vu
ZHMgPSBjYWxjdWxhdGVMYXllckJvdW5kcyh0aGlzLCBMYXlvdXRTaXplKCksIGJvdW5kc0ZsYWdz
KTsKICAgICAKICAgICBMYXlvdXRSZWN0IGFuaW1hdGVkQm91bmRzID0gYm91bmRzOwotICAgIGlm
IChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBy
ZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgewotICAgICAgICAgICAgaWYgKHRpbWVsaW5l
LT5jb21wdXRlRXh0ZW50T2ZBbmltYXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3VuZHMpKSB7
Ci0gICAgICAgICAgICAgICAgYm91bmRzID0gYW5pbWF0ZWRCb3VuZHM7Ci0gICAgICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ugewot
ICAgICAgICBpZiAocmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5jb21wdXRlRXh0ZW50T2ZB
bmltYXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3VuZHMpKSB7CisgICAgaWYgKGF1dG8qIHRp
bWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKKyAgICAgICAgaWYgKHRp
bWVsaW5lLT5jb21wdXRlRXh0ZW50T2ZBbmltYXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3Vu
ZHMpKSB7CiAgICAgICAgICAgICBib3VuZHMgPSBhbmltYXRlZEJvdW5kczsKICAgICAgICAgICAg
IHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNl
OwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcu
Y3BwCmluZGV4IDRkNTQ3YzRiN2ZkZDFhZTQwOWE2Y2U2ZjgyOTJmNmE2Y2QzMDMyNmYuLmI3Mzgw
ZmVkZjc5MDNiMGE3ZjBmMTE0ZThiMjE2NWJjZjQ4YzM1NTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXJCYWNraW5nLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5o
IgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1
ZGUgIkNhY2hlZEltYWdlLmgiCkBAIC0xMjUxLDExICsxMjUwLDggQEAgdm9pZCBSZW5kZXJMYXll
ckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5j
ZXN0b3IpCiAgICAgY29uc3QgYXV0byBkZXZpY2VTY2FsZUZhY3RvciA9IHRoaXMtPmRldmljZVNj
YWxlRmFjdG9yKCk7CiAKICAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5p
bWF0aW9uID0gZmFsc2U7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAg
IGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQotICAg
ICAgICAgICAgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSB0aW1lbGlu
ZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENT
U1Byb3BlcnR5VHJhbnNmb3JtKTsKLSAgICB9IGVsc2UKLSAgICAgICAgaXNSdW5uaW5nQWNjZWxl
cmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSk7CisgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1
bWVudFRpbWVsaW5lKCkpCisgICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5p
bWF0aW9uID0gdGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJl
cihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CiAKICAgICB1cGRhdGVUcmFuc2Zv
cm0oc3R5bGUpOwogICAgIHVwZGF0ZU9wYWNpdHkoc3R5bGUpOwpAQCAtMzY0OCw5OSArMzY0NCw2
IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjphbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUpCiAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5n
R2VvbWV0cnlVcGRhdGUoKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJh
bnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpCi17Ci0g
ICAgYm9vbCBkaWRBbmltYXRlID0gZmFsc2U7Ci0KLSAgICBBU1NFUlQocHJvcGVydHkgIT0gQ1NT
UHJvcGVydHlJbnZhbGlkKTsKLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eU9wYWNp
dHkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBvcGFjaXR5QW5pbSA9IHRvU3R5bGUtPnRy
YW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAgICBpZiAob3Bh
Y2l0eUFuaW0gJiYgIW9wYWNpdHlBbmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAg
ICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qgb3BhY2l0eVZlY3RvcihBbmltYXRlZFByb3BlcnR5
T3BhY2l0eSk7Ci0gICAgICAgICAgICBvcGFjaXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZs
b2F0QW5pbWF0aW9uVmFsdWU+KDAsIGNvbXBvc2l0aW5nT3BhY2l0eShmcm9tU3R5bGUtPm9wYWNp
dHkoKSkpKTsKLSAgICAgICAgICAgIG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8Rmxv
YXRBbmltYXRpb25WYWx1ZT4oMSwgY29tcG9zaXRpbmdPcGFjaXR5KHRvU3R5bGUtPm9wYWNpdHko
KSkpKTsKLSAgICAgICAgICAgIC8vIFRoZSBib3hTaXplIHBhcmFtIGlzIG9ubHkgdXNlZCBmb3Ig
dHJhbnNmb3JtIGFuaW1hdGlvbnMgKHdoaWNoIGNhbiBvbmx5IHJ1biBvbiBSZW5kZXJCb3hlcyks
IHNvIHdlIHBhc3MgYW4gZW1wdHkgc2l6ZSBoZXJlLgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhp
Y3NMYXllci0+YWRkQW5pbWF0aW9uKG9wYWNpdHlWZWN0b3IsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5
QW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQ
cm9wZXJ0eU9wYWNpdHkpLCB0aW1lT2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVu
c3VyZSB0aGF0IHRoZSBjb3JyZWN0IG9wYWNpdHkgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRp
b24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIG9wYWNpdHkuCi0gICAgICAgICAgICAgICAgdXBk
YXRlT3BhY2l0eSgqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHkgPT0g
Q1NTUHJvcGVydHlUcmFuc2Zvcm0gJiYgbV9vd25pbmdMYXllci5oYXNUcmFuc2Zvcm0oKSkgewot
ICAgICAgICBjb25zdCBBbmltYXRpb24qIHRyYW5zZm9ybUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0
aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwotICAgICAgICBpZiAodHJhbnNm
b3JtQW5pbSAmJiAhdHJhbnNmb3JtQW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAg
ICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0IHRyYW5zZm9ybVZlY3RvcihBbmltYXRlZFByb3Bl
cnR5VHJhbnNmb3JtKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVZlY3Rvci5pbnNlcnQobWFrZVVu
aXF1ZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZT4oMCwgZnJvbVN0eWxlLT50cmFuc2Zvcm0oKSkp
OwotICAgICAgICAgICAgdHJhbnNmb3JtVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPFRyYW5zZm9y
bUFuaW1hdGlvblZhbHVlPigxLCB0b1N0eWxlLT50cmFuc2Zvcm0oKSkpOwotICAgICAgICAgICAg
aWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKHRyYW5zZm9ybVZlY3Rvciwgc25hcHBl
ZEludFJlY3QocmVuZGVyQm94KCktPmJvcmRlckJveFJlY3QoKSkuc2l6ZSgpLCB0cmFuc2Zvcm1B
bmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFBy
b3BlcnR5VHJhbnNmb3JtKSwgdGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBl
bnN1cmUgdGhhdCB0aGUgY29ycmVjdCB0cmFuc2Zvcm0gaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmlt
YXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIHRyYW5zZm9ybS4KLSAgICAgICAgICAgICAg
ICB1cGRhdGVUcmFuc2Zvcm0oKnRvU3R5bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3Bl
cnR5ID09IENTU1Byb3BlcnR5RmlsdGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzRmlsdGVyKCkpIHsK
LSAgICAgICAgY29uc3QgQW5pbWF0aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlv
bkZvclByb3BlcnR5KENTU1Byb3BlcnR5RmlsdGVyKTsKLSAgICAgICAgaWYgKGZpbHRlckFuaW0g
JiYgIWZpbHRlckFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBL
ZXlmcmFtZVZhbHVlTGlzdCBmaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcik7Ci0g
ICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0aW9u
VmFsdWU+KDAsIGZyb21TdHlsZS0+ZmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGZpbHRlclZlY3Rv
ci5pbnNlcnQobWFrZVVuaXF1ZTxGaWx0ZXJBbmltYXRpb25WYWx1ZT4oMSwgdG9TdHlsZS0+Zmls
dGVyKCkpKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihm
aWx0ZXJWZWN0b3IsIEZsb2F0U2l6ZSgpLCBmaWx0ZXJBbmltLCBHcmFwaGljc0xheWVyOjphbmlt
YXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5RmlsdGVyKSwgdGltZU9mZnNl
dCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmaWx0
ZXIgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFs
IGZpbHRlci4KLSAgICAgICAgICAgICAgICB1cGRhdGVGaWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAg
ICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
ICAgIH0KLQotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgaWYgKHByb3BlcnR5ID09
IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIgJiYgbV9vd25pbmdMYXllci5oYXNCYWNr
ZHJvcEZpbHRlcigpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbiogYmFja2Ryb3BGaWx0ZXJB
bmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QmFj
a2Ryb3BGaWx0ZXIpOwotICAgICAgICBpZiAoYmFja2Ryb3BGaWx0ZXJBbmltICYmICFiYWNrZHJv
cEZpbHRlckFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlm
cmFtZVZhbHVlTGlzdCBiYWNrZHJvcEZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5V2Via2l0
QmFja2Ryb3BGaWx0ZXIpOwotICAgICAgICAgICAgYmFja2Ryb3BGaWx0ZXJWZWN0b3IuaW5zZXJ0
KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+YmFja2Ryb3BG
aWx0ZXIoKSkpOwotICAgICAgICAgICAgYmFja2Ryb3BGaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VV
bmlxdWU8RmlsdGVyQW5pbWF0aW9uVmFsdWU+KDEsIHRvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkp
KTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihiYWNrZHJv
cEZpbHRlclZlY3RvciwgRmxvYXRTaXplKCksIGJhY2tkcm9wRmlsdGVyQW5pbSwgR3JhcGhpY3NM
YXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJh
Y2tkcm9wRmlsdGVyKSwgdGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1
cmUgdGhhdCB0aGUgY29ycmVjdCBiYWNrZHJvcCBmaWx0ZXIgaXMgdmlzaWJsZSB3aGVuIHRoZSBh
bmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIGJhY2tkcm9wIGZpbHRlci4KLSAgICAg
ICAgICAgICAgICB1cGRhdGVCYWNrZHJvcEZpbHRlcnMoKnRvU3R5bGUpOwotICAgICAgICAgICAg
ICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
I2VuZGlmCi0KLSAgICBpZiAoZGlkQW5pbWF0ZSkKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXRO
ZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwotCi0gICAgcmV0dXJuIGRpZEFuaW1h
dGU7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKGRvdWJs
ZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIEFuaW1hdGVkUHJv
cGVydHlJRCBhbmltYXRlZFByb3BlcnR5ID0gY3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkocHJv
cGVydHkpOwotICAgIGlmIChhbmltYXRlZFByb3BlcnR5ICE9IEFuaW1hdGVkUHJvcGVydHlJbnZh
bGlkKQotICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnBhdXNlQW5pbWF0aW9uKEdyYXBoaWNzTGF5
ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKGFuaW1hdGVkUHJvcGVydHkpLCB0aW1lT2Zm
c2V0KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnRyYW5zaXRpb25GaW5pc2hlZChD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBhbmltYXRl
ZFByb3BlcnR5ID0gY3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkocHJvcGVydHkpOwotICAgIGlm
IChhbmltYXRlZFByb3BlcnR5ICE9IEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAg
IG1fZ3JhcGhpY3NMYXllci0+cmVtb3ZlQW5pbWF0aW9uKEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlv
bk5hbWVGb3JUcmFuc2l0aW9uKGFuaW1hdGVkUHJvcGVydHkpKTsKLSAgICAgICAgbV9vd25pbmdM
YXllci5zZXROZWVkc1Bvc3RMYXlvdXRDb21wb3NpdGluZ1VwZGF0ZSgpOwotICAgIH0KLX0KLQot
dm9pZCBSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3Jh
cGhpY3NMYXllciosIGNvbnN0IFN0cmluZyYsIE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBp
ZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZW5kZXJlcigpLmxlZ2FjeUFuaW1h
dGlvbigpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQocmVuZGVyZXIoKSwgdGltZSk7Ci19Ci0KIHZv
aWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlGbHVzaFJlcXVpcmVkKGNvbnN0IEdyYXBoaWNz
TGF5ZXIqKQogewogICAgIGlmIChyZW5kZXJlcigpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgp
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2lu
Zy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCmluZGV4
IDljNzY0N2JiMjY3NmIzZmMxZjkyNmZhZDkyODQ3ZDhmOGVhN2MwZjAuLjgzYTJhOTUxOGY2ZjM2
Y2I3YjBkODRkNjI4NmYzN2U5MDAwMjhlMTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTE4NCwxMSArMTg0LDcgQEAgcHVibGljOgogICAg
IC8vIE5vdGlmaWNhdGlvbiBmcm9tIHRoZSByZW5kZXJlciB0aGF0IGl0cyBjb250ZW50IGNoYW5n
ZWQuCiAgICAgdm9pZCBjb250ZW50Q2hhbmdlZChDb250ZW50Q2hhbmdlVHlwZSk7CiAKLSAgICAv
LyBJbnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlv
bnMgYW5kIHRyYW5zaXRpb25zCi0gICAgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlLCBDU1NQ
cm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHls
ZSogdG9TdHlsZSk7Ci0gICAgdm9pZCB0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0
LCBDU1NQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0
eUlEKTsKLQorICAgIC8vIEludGVyZmFjZSB0byBzdGFydCwgZmluaXNoLCBzdXNwZW5kIGFuZCBy
ZXN1bWUgYW5pbWF0aW9ucwogICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZz
ZXQsIGNvbnN0IEFuaW1hdGlvbiYsIGNvbnN0IEtleWZyYW1lTGlzdCYpOwogICAgIHZvaWQgYW5p
bWF0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBTdHJpbmcmIG5hbWUpOwogICAg
IHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBuYW1lKTsKQEAgLTIyNiw3ICsy
MjIsNiBAQCBwdWJsaWM6CiAKICAgICAvLyBHcmFwaGljc0xheWVyQ2xpZW50IGludGVyZmFjZQog
ICAgIHZvaWQgdGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBi
b29sIC8qdXNpbmdUaWxlZEJhY2tpbmcqLykgb3ZlcnJpZGU7Ci0gICAgdm9pZCBub3RpZnlBbmlt
YXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bktleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5
Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAgICAgdm9pZCBu
b3RpZnlGbHVzaEJlZm9yZURpc3BsYXlSZWZyZXNoKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBvdmVy
cmlkZTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21w
b3NpdG9yLmNwcAppbmRleCAxODQxZjk2ZjBiNjI5OGNhNTIzZWQ3ZjFlNjk4OWYyYzI3NmRkZDc1
Li5mMjM5YzRhNDQ4MGFlZTcyYTM5MmIzNmM1MjQ1YjdjZDQxZDYyZDM3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcApAQCAtMjgs
NyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgogCiAjaW5jbHVk
ZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAtNTYwLDkgKzU1
OSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5n
ZXMoYm9vbCBpc0ZsdXNoUm9vdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGF1dG8m
IGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKLSAgICBBbmltYXRpb25VcGRh
dGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmZnJhbWVWaWV3LmZyYW1lKCkubGVnYWN5QW5p
bWF0aW9uKCkpOwotCiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJzKTsKICAgICB7CiAgICAg
ICAgIFNldEZvclNjb3BlPGJvb2w+IGZsdXNoaW5nTGF5ZXJzU2NvcGUobV9mbHVzaGluZ0xheWVy
cywgdHJ1ZSk7CkBAIC04MTksOCArODE1LDYgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1cGRhdGUKIAog
ICAgICsrbV9jb21wb3NpdGluZ1VwZGF0ZUNvdW50OwogCi0gICAgQW5pbWF0aW9uVXBkYXRlQmxv
Y2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKS5mcmFtZSgp
LmxlZ2FjeUFuaW1hdGlvbigpKTsKLQogICAgIFNldEZvclNjb3BlPGJvb2w+IHBvc3RMYXlvdXRD
aGFuZ2UobV9pblBvc3RMYXlvdXRVcGRhdGUsIHRydWUpOwogCiAjaWYgIUxPR19ESVNBQkxFRApA
QCAtMjk3NywxNyArMjk3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJl
c0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplCiAgICAgICAgIH0K
ICAgICB9CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8mIGFuaW1Db250cm9sbGVyID0gcmVuZGVyZXIubGVnYWN5QW5pbWF0
aW9uKCk7Ci0gICAgcmV0dXJuIChhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJl
bmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgICYmICh1c2VzQ29t
cG9zaXRpbmcoKSB8fCAobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xpZW50OjpBbmlt
YXRlZE9wYWNpdHlUcmlnZ2VyKSkpCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmlu
Z0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5RmlsdGVyKQotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmlu
Z0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXIpCi0jZW5kaWYKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0
aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOworICAgIHJldHVy
biBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVpcmVzQ29tcG9z
aXRpbmdGb3JUcmFuc2Zvcm0oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVyZXIpIGNvbnN0
CkBAIC0zNTE1LDEwICszNDk5LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmlzUnVu
bmluZ1RyYW5zZm9ybUFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0JgogICAgICAgICAg
ICAgcmV0dXJuIGVmZmVjdHNTdGFjay0+aXNDdXJyZW50bHlBZmZlY3RpbmdQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRyYW5zZm9ybSk7CiAgICAgfQogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIubGVnYWN5QW5p
bWF0aW9uKCkuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm0pOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gSWYgYW4gZWxlbWVudCBo
YXMgY29tcG9zaXRlZCBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLCB0aG9zZSBjaGlsZHJlbiBy
ZW5kZXIgaW4gZnJvbnQgb2YgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggY2ZlY2FlNDRkM2RkODg2YWQ2NDc0OTdi
OWExMWI4NDBlNGQxNWQ2Yi4uY2FlOGY3MmYzNmNkODUzMmEyNTk4YjQ4YjZiZWJmODM1MzhmNDQ3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVs
T2JqZWN0LmNwcApAQCAtMjUwLDI3ICsyNTAsNiBAQCB2b2lkIFJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OmNvbXB1dGVSZXBhaW50TGF5b3V0UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJNb2RlbE9iagog
ICAgICAgICBzZXRSZXBhaW50TGF5b3V0UmVjdHMoUmVwYWludExheW91dFJlY3RzKCp0aGlzLCBy
ZXBhaW50Q29udGFpbmVyLCBnZW9tZXRyeU1hcCkpOwogfQogCi1ib29sIFJlbmRlckxheWVyTW9k
ZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlkLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSogdG9TdHlsZSkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmco
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBsYXllcigpLT5iYWNraW5nKCkt
PnN0YXJ0VHJhbnNpdGlvbih0aW1lT2Zmc2V0LCBwcm9wZXJ0eUlkLCBmcm9tU3R5bGUsIHRvU3R5
bGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRpb25QYXVzZWQo
ZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBpZiAo
IWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGxh
eWVyKCktPmJhY2tpbmcoKS0+dHJhbnNpdGlvblBhdXNlZCh0aW1lT2Zmc2V0LCBwcm9wZXJ0eUlk
KTsKLX0KLQotdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9uRmluaXNoZWQo
Q1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQotewotICAgIGlmICghbGF5ZXIoKSB8fCAhbGF5ZXIo
KS0+YmFja2luZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIoKS0+YmFja2luZygpLT50
cmFuc2l0aW9uRmluaXNoZWQocHJvcGVydHlJZCk7Ci19Ci0KIGJvb2wgUmVuZGVyTGF5ZXJNb2Rl
bE9iamVjdDo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlv
biYgYW5pbWF0aW9uLCBjb25zdCBLZXlmcmFtZUxpc3QmIGtleWZyYW1lcykKIHsKICAgICBpZiAo
IWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2FkY2E2ZDUwNDM3
NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLmQ5NzgxY2VjYzg5N2MzNTg2OWE3NzI5YmExY2QwZTc2
ZTE5NDFmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXll
ck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
TW9kZWxPYmplY3QuaApAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0UmVw
YWludExheW91dFJlY3RzKGNvbnN0IFJlcGFpbnRMYXlvdXRSZWN0cyYpOwogICAgIHZvaWQgY2xl
YXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIAotICAgIGJvb2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJs
ZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2l0
aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEKSBvdmVycmlkZTsKLSAg
ICB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKSBvdmVycmlkZTsKLQogICAg
IGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiYs
IGNvbnN0IEtleWZyYW1lTGlzdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0aW9uUGF1c2Vk
KGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRlOwogICAgIHZv
aWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAxOTEyNWZlZjc5ZmZlMjYwMDRm
ZmU5OTg3ZTFmZjBiMzQwZGRmOWFkLi41MDA5YWQxN2JhOWNiN2I2MjMwZmMxYzNkZmU0YzZkZjBh
Zjc3Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCkBAIC00Niw3
ICs0Niw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNz
IEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBD
b2xvcjsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIERvY3VtZW50OwpAQCAtNzA2LDcgKzcwNSw2IEBA
IHB1YmxpYzoKICAgICB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNvbnN0IEludFJl
Y3QqID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGltYWdlQ2hhbmdlZChX
cmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9CiAKLSAgICBDU1NB
bmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSBjb25zdDsKICAgICBEb2N1bWVu
dFRpbWVsaW5lKiBkb2N1bWVudFRpbWVsaW5lKCkgY29uc3Q7CiAKICAgICAvLyBNYXAgcG9pbnRz
IGFuZCBxdWFkcyB0aHJvdWdoIGVsZW1lbnRzLCBwb3RlbnRpYWxseSB2aWEgM2QgdHJhbnNmb3Jt
cy4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGNhbGwgdGhlc2UgZGlyZWN0bHk7IHVzZQpAQCAt
OTczLDExICs5NzEsNiBAQCBpbmxpbmUgUGFnZSYgUmVuZGVyT2JqZWN0OjpwYWdlKCkgY29uc3QK
ICAgICByZXR1cm4gKmZyYW1lKCkucGFnZSgpOwogfQogCi1pbmxpbmUgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlciYgUmVuZGVyT2JqZWN0OjpsZWdhY3lBbmltYXRpb24oKSBjb25zdAotewotICAgIHJl
dHVybiBmcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpOwotfQotCiBpbmxpbmUgRG9jdW1lbnRUaW1l
bGluZSogUmVuZGVyT2JqZWN0Ojpkb2N1bWVudFRpbWVsaW5lKCkgY29uc3QKIHsKICAgICByZXR1
cm4gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAppbmRleCA4YTdm
ZDY1OGIyZGQ5OTA3MDk3MDUyZDExM2JkY2Y4N2RkODE4ZDg2Li5iMTMyOGFhOTk5OTk2M2ZjMjRm
YzU5ZWVlYjhmY2Q1YWRlMmRmZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKQEAgLTI3LDcgKzI3LDYgQEAK
ICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgogCiAjaW5jbHVkZSAiQVhPYmplY3RDYWNo
ZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDb21w
b3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlSXRlcmF0
b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNTU2LDcgKzU1NSw2IEBAIHZvaWQgUmVu
ZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3QsIFRlYXJkb3du
VHlwZSB0ZWFyZG93blR5CiAKICAgICBhdXRvJiBkb2N1bWVudCA9IHJvb3QuZG9jdW1lbnQoKTsK
ICAgICBhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50LmV4aXN0aW5nVGltZWxpbmUoKTsKLSAgICBh
dXRvJiBhbmltYXRpb25Db250cm9sbGVyID0gZG9jdW1lbnQuZnJhbWUoKS0+bGVnYWN5QW5pbWF0
aW9uKCk7ICAgIAogCiAgICAgYXV0byBwb3AgPSBbJl0gKHVuc2lnbmVkIGRlcHRoKSB7CiAgICAg
ICAgIHdoaWxlICh0ZWFyZG93blN0YWNrLnNpemUoKSA+IGRlcHRoKSB7CkBAIC01NzUsNyArNTcz
LDYgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMoRWxlbWVudCYg
cm9vdCwgVGVhcmRvd25UeXBlIHRlYXJkb3duVHkKICAgICAgICAgICAgICAgICAgICAgZWxzZSBp
ZiAodGVhcmRvd25UeXBlID09IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGVDYW5jZWxpbmdB
bmltYXRpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUtPmNhbmNlbERlY2xh
cmF0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgV2ViQW5pbWF0aW9uOjpTaWxlbnRs
eTo6Tm8pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhbmltYXRpb25Db250
cm9sbGVyLmNhbmNlbEFuaW1hdGlvbnMoZWxlbWVudCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGU6CiAgICAgICAg
ICAgICAgICAgaWYgKHRpbWVsaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNw
cAppbmRleCA4Y2UwNzUyYTYzNjZkODMzMDAyNjJiMDJlZTA4M2VlNTlmYzEwNzM4Li5hM2ViZjZm
YjY3ZjFmYTYxMmJmMDY0NjdhN2Q1OGQ4OWEzZWI5OWE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9T
dHlsZUFkanVzdGVyLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgog
I2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKIAotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIK
ICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKICNp
bmNsdWRlICJFbGVtZW50LmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5jbHVkZSAiU1ZHVVJJUmVm
ZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5j
bHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogbmFtZXNw
YWNlIFN0eWxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJl
c29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApp
bmRleCBiODVjZjQ2NmMxNzNiODgwM2Y3NWUzNzYyNWJmMDI1ODZlZjkwYWU1Li5mN2ZmZDQ0Zjlh
YTRiOTcxZGQ5ZjFiNjZhYzUyZTAzM2VmNjdmZjU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUv
U3R5bGVUcmVlUmVzb2x2ZXIuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRl
ICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVl
SXRlcmF0b3IuaCIKQEAgLTU0LDYgKzUzLDcgQEAKICNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgi
CiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNpbmNsdWRlICJX
ZWJBbmltYXRpb25UeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTMxMiwyNiAr
MzEyLDIzIEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXRlZEVsZW1l
bnRVcGRhdGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAKICAgICBPcHRpb25TZXQ8QW5pbWF0
aW9uSW1wYWN0PiBhbmltYXRpb25JbXBhY3Q7CiAKLSAgICAvLyBOZXcgY29kZSBwYXRoIGZvciBD
U1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zLgotICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkgewotICAgICAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBh
bnkgbmV3IENTUyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50IGhhcyBhIG1hdGNo
aW5nIFdlYkFuaW1hdGlvbgotICAgICAgICAvLyBvbiB0aGUgZG9jdW1lbnQgdGltZWxpbmUuIE5v
dGUgdGhhdCB3ZSBnZXQgdGltZWxpbmUoKSBvbiB0aGUgRG9jdW1lbnQgaGVyZSBiZWNhdXNlIHdl
IG5lZWQgYSB0aW1lbGluZSBjcmVhdGVkCi0gICAgICAgIC8vIGluIGNhc2Ugbm8gV2ViIEFuaW1h
dGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSlMgQVBJLgotICAgICAgICBpZiAo
ZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkt
PnByaW50aW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChvbGRTdHlsZSAmJiAob2xkU3R5bGUtPmhh
c1RyYW5zaXRpb25zKCkgfHwgbmV3U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkpKQotICAgICAgICAg
ICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1l
bnQoZWxlbWVudCwgKm9sZFN0eWxlLCAqbmV3U3R5bGUpOwotCi0gICAgICAgICAgICAvLyBUaGUg
b3JkZXIgaW4gd2hpY2ggQ1NTIFRyYW5zaXRpb25zIGFuZCBDU1MgQW5pbWF0aW9ucyBhcmUgdXBk
YXRlZCBtYXR0ZXJzIHNpbmNlIENTUyBUcmFuc2l0aW9ucyBkZWZpbmUgdGhlIGFmdGVyLWNoYW5n
ZSBzdHlsZQotICAgICAgICAgICAgLy8gdG8gdXNlIENTUyBBbmltYXRpb25zIGFzIGRlZmluZWQg
aW4gdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4gQXMgc3VjaCwgd2UgdXBkYXRlIENT
UyBBbmltYXRpb25zIGFmdGVyIENTUyBUcmFuc2l0aW9ucwotICAgICAgICAgICAgLy8gc3VjaCB0
aGF0IHdoZW4gQ1NTIFRyYW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5pbWF0aW9ucyBk
YXRhIGlzIHRoZSBzYW1lIGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50
LgotICAgICAgICAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5pbWF0aW9ucygp
KSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgLy8gRklY
TUU6IFJlbW92ZSB0aGlzIGhhY2sgYW5kIHBhc3MgdGhlIHBhcmVudCBzdHlsZSB2aWEgdXBkYXRl
Q1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQuCi0gICAgICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZl
ci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMoJnBhcmVudCgpLnN0eWxlKTsKLQot
ICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NBbmltYXRpb25z
Rm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0eWxlKTsKLQotICAgICAgICAgICAg
ICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVzKG51
bGxwdHIpOwotICAgICAgICAgICAgfQorICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IGFueSBuZXcgQ1NTIGFuaW1hdGlvbiBvY2N1cmluZyBvbiB0aGlzIGVsZW1lbnQgaGFz
IGEgbWF0Y2hpbmcgV2ViQW5pbWF0aW9uCisgICAgLy8gb24gdGhlIGRvY3VtZW50IHRpbWVsaW5l
LiBOb3RlIHRoYXQgd2UgZ2V0IHRpbWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhlcmUgYmVjYXVz
ZSB3ZSBuZWVkIGEgdGltZWxpbmUgY3JlYXRlZAorICAgIC8vIGluIGNhc2Ugbm8gV2ViIEFuaW1h
dGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSlMgQVBJLgorICAgIGlmIChlbGVt
ZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdElu
QmFja0ZvcndhcmRDYWNoZSAmJiAhZWxlbWVudC5kb2N1bWVudCgpLnJlbmRlclZpZXcoKS0+cHJp
bnRpbmcoKSkgeworICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0
aW9ucygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKKyAgICAgICAgICAgIG1fZG9j
dW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwg
Km9sZFN0eWxlLCAqbmV3U3R5bGUpOworCisgICAgICAgIC8vIFRoZSBvcmRlciBpbiB3aGljaCBD
U1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25zIGFyZSB1cGRhdGVkIG1hdHRlcnMgc2lu
Y2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxlCisgICAgICAg
IC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBzdHls
ZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9ucyBhZnRlciBD
U1MgVHJhbnNpdGlvbnMKKyAgICAgICAgLy8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRyYW5zaXRpb25z
IGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5pbWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1lIGFzIGR1cmlu
ZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LgorICAgICAgICBpZiAoKG9sZFN0eWxl
ICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zKCkpIHx8IG5ld1N0eWxlLT5oYXNBbmltYXRpb25z
KCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIGFuZCBwYXNzIHRo
ZSBwYXJlbnQgc3R5bGUgdmlhIHVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50LgorICAgICAg
ICAgICAgc2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMo
JnBhcmVudCgpLnN0eWxlKTsKKworICAgICAgICAgICAgbV9kb2N1bWVudC50aW1lbGluZSgpLnVw
ZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsIG9sZFN0eWxlLCAqbmV3U3R5bGUp
OworCisgICAgICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZv
cktleWZyYW1lcyhudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzQ3LDE3ICszNDQs
NiBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBk
YXRlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdAogICAgIH0gZWxzZQogICAgICAgICBlbGVtZW50
LnNldExhc3RTdHlsZUNoYW5nZUV2ZW50U3R5bGUobnVsbHB0cik7CiAKLSAgICAvLyBPbGQgY29k
ZSBwYXRoIGZvciBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zLgotICAgIGlmICgh
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byYgYW5pbWF0aW9uQ29udHJvbGxl
ciA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCk7Ci0KLSAgICAgICAgYXV0
byBhbmltYXRpb25VcGRhdGUgPSBhbmltYXRpb25Db250cm9sbGVyLnVwZGF0ZUFuaW1hdGlvbnMo
ZWxlbWVudCwgKm5ld1N0eWxlLCBvbGRTdHlsZSk7Ci0gICAgICAgIGFuaW1hdGlvbkltcGFjdC5h
ZGQoYW5pbWF0aW9uVXBkYXRlLmltcGFjdCk7Ci0KLSAgICAgICAgaWYgKGFuaW1hdGlvblVwZGF0
ZS5zdHlsZSkKLSAgICAgICAgICAgIG5ld1N0eWxlID0gV1RGTW92ZShhbmltYXRpb25VcGRhdGUu
c3R5bGUpOwotICAgIH0KLQogICAgIGlmIChhbmltYXRpb25JbXBhY3QpCiAgICAgICAgIEFkanVz
dGVyOjphZGp1c3RBbmltYXRlZFN0eWxlKCpuZXdTdHlsZSwgcGFyZW50Qm94U3R5bGUoKSwgYW5p
bWF0aW9uSW1wYWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5n
cy5jcHAKaW5kZXggYjM3NmJmNmMxNzVkNTQ1OWE0ZTBiNDYzY2E0OGI5YmYwY2E2Njc5OS4uNmE1
YjZmNGFlNDIwMjljZTY2MDhjMDRiYzkyNjRmZDAzNmZlZDhkMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCkBAIC0xMDI5LDExICsxMDI5LDYgQEAgdm9p
ZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRGb3JjZWRTdXBwb3J0c0hpZ2hEeW5hbWljUmFuZ2VWYWx1
ZShJbnRlcm5hbFNldHRpbmdzOjoKICAgICBzZXR0aW5ncygpLnNldEZvcmNlZFN1cHBvcnRzSGln
aER5bmFtaWNSYW5nZVZhbHVlKGludGVybmFsU2V0dGluZ3NUb1NldHRpbmdzVmFsdWUodmFsdWUp
KTsKIH0KIAotYm9vbCBJbnRlcm5hbFNldHRpbmdzOjp3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkKLXsKLSAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIHZv
aWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vzc2lvbihib29s
IHNob3VsZCkKIHsKICNpZiBFTkFCTEUoVklERU8pIHx8IEVOQUJMRShXRUJfQVVESU8pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaCBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCmluZGV4IGI1MjdlMTU1YzkwZDQ2
NjhlMzEyNGM1ZTliNDhiZmUwZDBlMzk1NzIuLmY2NWE3NDEzNDlmZmNhMjliMTk1NWM2NzRhYTQ4
MzNkNzIzNjU3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5o
CkBAIC0xMzUsOCArMTM1LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNldFBpY3R1cmVJ
blBpY3R1cmVBUElFbmFibGVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIHNldEZldGNoQVBJS2Vl
cEFsaXZlRW5hYmxlZChib29sKTsKIAotICAgIHN0YXRpYyBib29sIHdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlv
U2Vzc2lvbihib29sKTsKICAgICAKICAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NBUElQZXJQYWdl
U2NvcGVFbmFibGVkKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0
aW5ncy5pZGwKaW5kZXggNDFhMjdkNjJlMjc2NDY0YWFlNWUxMjhiOGU5YmUxZWNmOTFmZWRmZi4u
NWNjNjJmMzI1YTJmNjg5NjAwZTNiZjg4Y2VhMDVjNjU2ZmFlNGVmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCkBAIC0xMTcsOCArMTE3LDYgQEAgZW51
bSBGb250TG9hZFRpbWluZ092ZXJyaWRlIHsgIkJsb2NrIiwgIlN3YXAiLCAiRmFpbHVyZSIgfTsK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBzZXRTaG91bGRNYW5hZ2VBdWRpb1Nl
c3Npb25DYXRlZ29yeShib29sZWFuIHNob3VsZCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1
bmRlZmluZWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2xlYW4gZW5hYmxlZCk7
CiAKLSAgICBbRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zXSBib29sZWFuIHdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLQogICAgIHVuZGVmaW5lZCBzZXRTaG91bGRE
ZWFjdGl2YXRlQXVkaW9TZXNzaW9uKGJvb2xlYW4gc2hvdWxkRGVhY3RpdmF0ZSk7CiAgICAgCiAg
ICAgdW5kZWZpbmVkIHNldFN0b3JhZ2VBY2Nlc3NBUElQZXJQYWdlU2NvcGVFbmFibGVkKGJvb2xl
YW4gZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMWQxNGQ3
MGVkOGYxMmExZTZkM2QwZjI1NWNiMWJhMGY1MDc4M2U4Yy4uN2M0ZGYwM2U1ZTE4NGI1YjU5Yzkw
ZDQ2ZjY2ZWNlMTA2OGQ2ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApA
QCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKICNpbmNsdWRl
ICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2lu
Y2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NLZXlmcmFtZXNS
dWxlLmgiCiAjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQ
YXJzZXIuaCIKQEAgLTEwNjksOSArMTA2OCw3IEBAIGJvb2wgSW50ZXJuYWxzOjphbmltYXRpb25X
aXRoSWRFeGlzdHMoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKIAogdW5zaWduZWQgSW50ZXJuYWxz
OjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewotICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRpbWVsaW5l
KCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRm9yVGVzdGluZygpOwotICAgIHJldHVybiBmcmFt
ZSgpLT5sZWdhY3lBbmltYXRpb24oKS5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUoKS0+
ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRpbWVsaW5lKCku
bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRm9yVGVzdGluZygpOwogfQogCiBFeGNlcHRpb25Pcjxi
b29sPiBJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBjb25zdApAQCAtMTA4MCw5
ICsxMDc3LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjphbmltYXRpb25zQXJlU3Vz
cGVuZGVkKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkK
ICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZG9jdW1lbnQtPmVuc3Vy
ZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7Ci0gICAgcmV0
dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRpb25zQXJlU3Vz
cGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIHJldHVybiBkb2N1bWVudC0+ZW5zdXJl
VGltZWxpbmVzQ29udHJvbGxlcigpLmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsKIH0KIAogZG91
YmxlIEludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QKQEAgLTEwOTEsMTUgKzEw
ODYsOSBAQCBkb3VibGUgSW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwoKSBjb25zdAogICAg
IGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJTkZJTklUWTsKIAotICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byB0aW1lbGluZSA9IGRvY3VtZW50
LT5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAgICByZXR1cm4gdGltZWxpbmUtPmFuaW1h
dGlvbkludGVydmFsKCkuc2Vjb25kcygpOwotICAgICAgICByZXR1cm4gSU5GSU5JVFk7Ci0gICAg
fQotCi0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJuIElORklOSVRZ
OwotICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0
aW9uSW50ZXJ2YWwoKS52YWx1ZSgpOworICAgIGlmIChhdXRvIHRpbWVsaW5lID0gZG9jdW1lbnQt
PmV4aXN0aW5nVGltZWxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5hbmltYXRpb25J
bnRlcnZhbCgpLnNlY29uZHMoKTsKKyAgICByZXR1cm4gSU5GSU5JVFk7CiB9CiAKIEV4Y2VwdGlv
bk9yPHZvaWQ+IEludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdApAQCAtMTEwOCwx
OSArMTA5NywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1c3BlbmRBbmltYXRp
b25zKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKICAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGlu
ZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgZm9yIChGcmFtZSog
ZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50
cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZy
YW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGlu
ZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5k
QW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLQotICAgICAgICBmb3IgKEZyYW1lKiBm
cmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRy
YXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJh
bWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigp
LnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotICAgICAgICB9CisgICAg
ZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygp
OworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFt
ZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKERvY3VtZW50
KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQtPmVu
c3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIH0KIAog
ICAgIHJldHVybiB7IH07CkBAIC0xMTMyLDczICsxMTEyLDE3IEBAIEV4Y2VwdGlvbk9yPHZvaWQ+
IEludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVudCB8
fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAg
ICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFuaW1hdGlvbnMo
KTsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7
IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYg
KERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAg
IGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5pbWF0aW9ucygp
OwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmxl
Z2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci0K
LSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZy
YW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGZy
YW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1l
bnQpOwotICAgICAgICB9CisgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIo
KS5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewor
ICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAg
ICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFuaW1h
dGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRpb25Pcjxib29s
PiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYg
YW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCkKLXsKLSAg
ICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwotICAgIHJldHVybiBmcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5wYXVz
ZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBBdG9tU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVz
ZVRpbWUpOwotfQotCi1FeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9u
QXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91Ymxl
IHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCkKLXsK
LSAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OwotCi0gICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUiICYmIHBzZXVk
b0lkICE9ICJhZnRlciIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKLQotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9
PSAiYmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC5hZnRl
clBzZXVkb0VsZW1lbnQoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAgICAgIHJldHVy
biBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIHJldHVybiBmcmFtZSgp
LT5sZWdhY3lBbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZSgqcHNldWRvRWxlbWVudCwg
QXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8
Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCku
cGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgcGF1c2VUaW1lKTsK
LX0KLQotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVP
blBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHBhdXNlVGltZSwg
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCkKLXsKLSAgICBpZiAocGF1
c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwotCi0gICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUiICYmIHBzZXVkb0lkICE9ICJhZnRl
ciIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQot
ICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9PSAiYmVmb3JlIiA/
IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC5hZnRlclBzZXVkb0VsZW1l
bnQoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIHJldHVybiBmcmFtZSgpLT5sZWdhY3lBbmlt
YXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoKnBzZXVkb0VsZW1lbnQsIHByb3BlcnR5LCBw
YXVzZVRpbWUpOwotfQotCiBWZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4g
SW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1l
bnQpCiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQogICAgIFZlY3RvcjxJbnRlcm5hbHM6OkFjY2VsZXJhdGVkQW5pbWF0aW9uPiBhbmltYXRp
b25zOwogICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uQXNQYWlyIDogZWxlbWVudC5kb2N1
bWVudCgpLnRpbWVsaW5lKCkuYWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWVudChlbGVtZW50
KSkKICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQoeyBhbmltYXRpb25Bc1BhaXIuZmlyc3QsIGFu
aW1hdGlvbkFzUGFpci5zZWNvbmQgfSk7CkBAIC0xMjA3LDkgKzExMzEsNyBAQCBWZWN0b3I8SW50
ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gSW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1h
dGlvbnNGb3JFbGVtZQogCiB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9mQW5pbWF0aW9uVGlt
ZWxpbmVJbnZhbGlkYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJl
ck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zRm9yVGVzdGluZygpOwotICAgIHJldHVy
biAwOworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9m
QW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zRm9yVGVzdGluZygpOwogfQogCiBkb3VibGUg
SW50ZXJuYWxzOjp0aW1lVG9OZXh0QW5pbWF0aW9uVGljayhXZWJBbmltYXRpb24mIGFuaW1hdGlv
bikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDM3MTE3NmY2YzJhM2M3
ODdlMDM2ZjUyMjY2MjU4MzVmZGMxM2VlOGEuLmQxN2NkZWQxZDIxOWU2NTM4Y2MxNDgxMzNjNTZl
ZmIxMmFhYzVhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAtMjMzLDE0ICsy
MzMsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8Ym9vbD4gYW5pbWF0aW9uc0FyZVN1c3Bl
bmRlZCgpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1c3BlbmRBbmltYXRpb25zKCkg
Y29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0Owot
ICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYpOwotICAg
IEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYsIGNv
bnN0IFN0cmluZyYgcHNldWRvSWQpOwogICAgIGRvdWJsZSBhbmltYXRpb25zSW50ZXJ2YWwoKSBj
b25zdDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgRXhjZXB0aW9uT3I8
Ym9vbD4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50Jik7Ci0gICAgRXhjZXB0aW9uT3I8Ym9v
bD4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJv
cGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHBzZXVkb0lk
KTsKLQogICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAgc3RydWN0IEFjY2VsZXJh
dGVkQW5pbWF0aW9uIHsKICAgICAgICAgU3RyaW5nIHByb3BlcnR5OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuaWRsCmluZGV4IDhkMWFkNDJmZDVhN2I1MDA0Y2IwOGZhNjZlZWY3NGFiYzQ2
NDhkNDMuLmZkNjdlNzEyMmFjZDQxNmJjZGQ3MDRlYTVkMDAzNTVmOWM2OGIwNDIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTMxNSwxNCArMzE1LDggQEAgZW51bSBDb250
ZW50U2l6ZUNhdGVnb3J5IHsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBzdXNw
ZW5kQW5pbWF0aW9ucygpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHJlc3Vt
ZUFuaW1hdGlvbnMoKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gYW5pbWF0aW9u
c0FyZVN1c3BlbmRlZCgpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZUFu
aW1hdGlvbkF0VGltZU9uRWxlbWVudChET01TdHJpbmcgYW5pbWF0aW9uTmFtZSwgdW5yZXN0cmlj
dGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW01heVRocm93RXhj
ZXB0aW9uXSBib29sZWFuIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KERPTVN0
cmluZyBhbmltYXRpb25OYW1lLCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVu
dCBlbGVtZW50LCBET01TdHJpbmcgcHNldWRvSWQpOwogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBk
b3VibGUgYW5pbWF0aW9uc0ludGVydmFsOwogCi0gICAgLy8gQ1NTIFRyYW5zaXRpb24gdGVzdGlu
Zy4KLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eU5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1
c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVh
biBwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoRE9NU3RyaW5nIHByb3BlcnR5
LCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50LCBET01TdHJp
bmcgcHNldWRvSWQpOwotCiAgICAgLy8gV2ViIEFuaW1hdGlvbnMgdGVzdGluZy4KICAgICBzZXF1
ZW5jZTxBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWVu
dChFbGVtZW50IGVsZW1lbnQpOwogICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvU2hhcmVk
L1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
cy55YW1sCmluZGV4IGE4MTQyMmM5YjFkNzBlMDBjZjVhZjIyN2IzYmQ3YTJiZjZjYjNjZDkuLmJk
MTFmYTYxYmU0YWNmYzFlYjcyYjg0ZTE5YTcxZjA3YmFhNmQyYzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNlL1dlYktpdC9T
aGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAtMTQwNSwyMiArMTQwNSw2IEBAIENTU09NVmll
d1Ntb290aFNjcm9sbGluZ0VuYWJsZWQ6CiAgIGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkVu
YWJsZSBET00gQVBJIGFuZCBDU1MgcHJvcGVydHkgZm9yICdzbW9vdGgnIHNjcm9sbCBiZWhhdmlv
ciIKICAgY2F0ZWdvcnk6IGV4cGVyaW1lbnRhbAogCi1XZWJBbmltYXRpb25zRW5hYmxlZDoKLSAg
dHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJsZU5hbWU6ICJX
ZWIgQW5pbWF0aW9ucyIKLSAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiV2ViIEFuaW1hdGlv
bnMgcHJvdG90eXBlIgotICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCi0gIHdlYmNvcmVCaW5kaW5n
OiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KLVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ6Ci0gIHR5cGU6IGJvb2wKLSAgZGVmYXVsdFZhbHVlOiB0cnVlCi0gIGh1bWFuUmVhZGFi
bGVOYW1lOiAiQ1NTIEFuaW1hdGlvbnMgdmlhIFdlYiBBbmltYXRpb25zIgotICBodW1hblJlYWRh
YmxlRGVzY3JpcHRpb246ICJFeHBvc2UgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9u
cyB0aHJvdWdoIGdldEFuaW1hdGlvbnMoKSIKLSAgY2F0ZWdvcnk6IGV4cGVyaW1lbnRhbAotICB3
ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwotCiBXZWJBbmltYXRpb25zQ29t
cG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgZGVmYXVsdFZhbHVlOiBE
RUZBVUxUX0VYUEVSSU1FTlRBTF9GRUFUVVJFU19FTkFCTEVECmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IGViYzJkMjdhZjc3NGU4MzI1
ZDVhZGIzYTk0NDYwMzE2NjMxMDAwM2UuLjE3ZGNmMzgzZTU1MDdlMWI3MGQwZGU4MzEzMTdkZGQx
YzdmOWNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVy
ZW5jZXMuY3BwCkBAIC00ODYsMjYgKzQ4Niw2IEBAIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFjY2Vs
ZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCiAg
ICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFjY2VsZXJhdGVkMmRDYW52YXNFbmFi
bGVkKCk7CiB9CiAKLXZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKFdL
UHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKLXsKLSAgICB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChmbGFnKTsKLX0KLQotYm9v
bCBXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBw
cmVmZXJlbmNlc1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2Vi
QW5pbWF0aW9uc0VuYWJsZWQoKTsKLX0KLQotdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVm
LCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChmbGFnKTsKLX0KLQotYm9vbCBXS1ByZWZlcmVuY2Vz
R2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIHZvaWQgV0tQcmVmZXJlbmNl
c1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNS
ZWYsIGJvb2wgZmxhZykKIHsKICAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXROZWVkc1Np
dGVTcGVjaWZpY1F1aXJrcyhmbGFnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCmluZGV4IDdlMTRhMmFjNDVjYjFi
ZjVmYWUwMzkxNGVjOTI4YjkxMzJmYmM1NjEuLjIxZGYzNzQ4NjZjZDI1ODI5Nzk3YzcyOWIzODI2
MWQ1OGYwZmI2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dL
UHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaApAQCAtOTcsMTQgKzk3LDYgQEAgV0tfRVhQT1JU
IGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkdMRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIFdL
X0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5hYmxlZChX
S1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRB
Y2NlbGVyYXRlZDJEQ2FudmFzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIAotLy8gRGVmYXVs
dHMgdG8gZmFsc2UKLVdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25z
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwotV0tfRVhQT1JUIGJvb2wgV0tQ
cmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwotCi0v
LyBEZWZhdWx0cyB0byBmYWxzZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFn
KTsKLVdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwotCiAvLyBEZWZhdWx0cyB0byBmYWxzZS4K
IFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhX
S1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRO
ZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KaW5kZXggMTNhODgx
MGMzYWY0YjczZmUyZTBiMmJiZGQ3ZThiNTc2ODYxMmRhNi4uZGFkYTkxMzNmY2Q5NzNiZjVmYjY2
MDAyYjUzOTE5OTZlMjA5ZWNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KQEAgLTE0MzAsMTYgKzE0MzAsNiBAQCAtIChCT09M
KV92aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQKICAgICByZXR1
cm4gX3ByZWZlcmVuY2VzLT52aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlDb21wb3NpdGluZ0Vu
YWJsZWQoKTsKIH0KIAotLSAodm9pZClfc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZDooQk9PTCllbmFibGVkCi17Ci0gICAgX3ByZWZlcmVuY2VzLT5zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCi0tIChCT09MKV93ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+d2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQotCiAtICh2b2lkKV9zZXREZXZp
Y2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZDooQk9PTCllbmFibGVkCiB7CiAjaWYgRU5BQkxFKERF
VklDRV9PUklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggYTM0OTg5NTY5MjY5NDQ3ODUz
NmM0YTQ0NDVlNWE4MGU0NDNmMTg3Mi4uNTg0MDRhNjg0NWQ3YTQ5YzhhNzZhYWVhZjg4NGRmMmEw
ZTMzY2RkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dL
UHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Nv
Y29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTE1MSw3ICsxNTEsNiBAQCB0eXBlZGVmIE5T
X0VOVU0oTlNJbnRlZ2VyLCBfV0tFZGl0YWJsZUxpbmtCZWhhdmlvcikgewogQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQ6
KSBCT09MIF9sb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0U2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0OikgQk9PTCBfc2hvdWxkSWdub3JlTWV0
YVZpZXdwb3J0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRWaWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3Bs
YXlDb21wb3NpdGluZ0VuYWJsZWQ6KSBCT09MIF92aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlD
b21wb3NpdGluZ0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ6KSBCT09MIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5
IChub25hdG9taWMsIHNldHRlcj1fc2V0RGV2aWNlT3JpZW50YXRpb25FdmVudEVuYWJsZWQ6KSBC
T09MIF9kZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29z
KDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0
TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6KSBCT09MIF9uZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyBX
S19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTMuMCkpOwogQHByb3BlcnR5IChu
b25hdG9taWMsIHNldHRlcj1fc2V0SXRwRGVidWdNb2RlRW5hYmxlZDopIEJPT0wgX2l0cERlYnVn
TW9kZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygxMy4wKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAppbmRleCBiNmVj
NTJkYjgyMWQ5NjUxZWEyMmQ4ZjBjM2UyZjM1NmNjYWZkNTZhLi5mNWZjYzdmYmI1MTM4NjU5Y2Jk
ZTg3MDFlYmQxYmMzYmJhMmIzNWYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVE
cmF3aW5nQXJlYVByb3h5LmgKQEAgLTQ4LDcgKzQ4LDYgQEAgcHVibGljOgogICAgIGNvbnN0IFJl
bW90ZUxheWVyVHJlZUhvc3QmIHJlbW90ZUxheWVyVHJlZUhvc3QoKSBjb25zdCB7IHJldHVybiAq
bV9yZW1vdGVMYXllclRyZWVIb3N0OyB9CiAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbW90ZUxheWVy
VHJlZUhvc3Q+IGRldGFjaFJlbW90ZUxheWVyVHJlZUhvc3QoKTsKIAotICAgIHZvaWQgYWNjZWxl
cmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtl
eSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRp
b25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXkpOwogCiAgICAgVHJh
bnNhY3Rpb25JRCBuZXh0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JRCgpIGNvbnN0IHsgcmV0dXJuIG1f
cGVuZGluZ0xheWVyVHJlZVRyYW5zYWN0aW9uSUQubmV4dCgpOyB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2lu
Z0FyZWFQcm94eS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCmluZGV4IDY0OWEwODQ4MGNiYzlmN2Qx
MWRmM2I3YjYzNTQ2ZWJmZmFlZDYwNjguLmNhNWY5YmRhMjMzMWQ2MjRlNjNmYjRmOTdlZDFhZjJl
MDA4ZDVhMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5Lm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYVBy
b3h5Lm1tCkBAIC0yNzUsMTEgKzI3NSw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0Fy
ZWFQcm94eTo6Y29tbWl0TGF5ZXJUcmVlKGNvbnN0IFJlbW90ZUxheWVyVHJlZVRyYW5zCiAgICAg
fQogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmFjY2VsZXJhdGVk
QW5pbWF0aW9uRGlkU3RhcnQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1v
bm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIHNlbmQoTWVzc2FnZXM6OkRyYXdpbmdBcmVh
OjpBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGtleSwgc3RhcnRUaW1lKSk7
Ci19Ci0KIHZvaWQgUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRB
bmltYXRpb25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAg
ICAgc2VuZChNZXNzYWdlczo6RHJhd2luZ0FyZWE6OkFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5k
KGxheWVySUQsIGtleSkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0LmgKaW5kZXggZThhMzA3OGU0
ODBkMjEyZDQ2Y2Q2MzhlMjhkZDk1ZDI1ZjhmODIxZC4uNjNlMmFiNzk2NDZlMjI1NWY0ZmYzMmFl
YTkyN2FhZGM4MjMzZjVjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVt
b3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oCkBAIC02MCw3ICs2
MCw2IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEhhc2hNYXA8V2ViQ29yZTo6R3JhcGhpY3NMYXll
cjo6UGxhdGZvcm1MYXllcklELCBSZXRhaW5QdHI8V0tBbmltYXRpb25EZWxlZ2F0ZT4+IExheWVy
QW5pbWF0aW9uRGVsZWdhdGVNYXA7CiAgICAgTGF5ZXJBbmltYXRpb25EZWxlZ2F0ZU1hcCYgYW5p
bWF0aW9uRGVsZWdhdGVzKCkgeyByZXR1cm4gbV9hbmltYXRpb25EZWxlZ2F0ZXM7IH0KIAotICAg
IHZvaWQgYW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklELCBDQUFuaW1hdGlvbiAqLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSk7CiAgICAgdm9p
ZCBhbmltYXRpb25EaWRFbmQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
LCBDQUFuaW1hdGlvbiAqKTsKIAogICAgIHZvaWQgZGV0YWNoRnJvbURyYXdpbmdBcmVhKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlSG9zdC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJl
ZS9SZW1vdGVMYXllclRyZWVIb3N0Lm1tCmluZGV4IGUyNGE4ZmZlNGYzMDViY2Q0MDcwYTMxNmYy
ZWNjOWM5NDg3OGM2MTMuLjM1YzAzYzg3NmY3OTE1OTRhMmJiYmM4MzhiYmI1NDNiYTRkZWNlYmMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVIb3N0Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxh
eWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0Lm1tCkBAIC0xNTMsMjcgKzE1Myw2IEBAIHZvaWQg
UmVtb3RlTGF5ZXJUcmVlSG9zdDo6bGF5ZXJXaWxsQmVSZW1vdmVkKFdlYkNvcmU6OkdyYXBoaWNz
TGF5ZXI6OlBsYXRmb3JtTGF5CiAgICAgbV9ub2Rlcy5yZW1vdmUobGF5ZXJJRCk7CiB9CiAKLXZv
aWQgUmVtb3RlTGF5ZXJUcmVlSG9zdDo6YW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhp
Y3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIENBQW5pbWF0aW9uICphbmltYXRpb24s
IE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIGlmICghbV9kcmF3aW5nQXJlYSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgQ0FMYXllciAqbGF5ZXIgPSBsYXllckZvcklEKGxheWVySUQp
OwotICAgIGlmICghbGF5ZXIpCi0gICAgICAgIHJldHVybjsKLQotICAgIFN0cmluZyBhbmltYXRp
b25LZXk7Ci0gICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRpb25LZXlzXSkg
ewotICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFuaW1hdGlvbikg
ewotICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5KCkpCi0gICAg
ICAgIG1fZHJhd2luZ0FyZWEtPmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkU3RhcnQobGF5ZXJJRCwg
YW5pbWF0aW9uS2V5LCBzdGFydFRpbWUpOwotfQotCiB2b2lkIFJlbW90ZUxheWVyVHJlZUhvc3Q6
OmFuaW1hdGlvbkRpZEVuZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxheWVySUQg
bGF5ZXJJRCwgQ0FBbmltYXRpb24gKmFuaW1hdGlvbikKIHsKICAgICBpZiAoIW1fZHJhd2luZ0Fy
ZWEpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUv
SW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA0MTljMTVmOTcwMTdkZGJkMmRiOGIzODcwNjgz
NzUwYWEwMzRlZjExLi5iZTVkZWQ1NzgzNzIyMDU0MGUwMTMyYzcyZTgyYzY0MWZhYzNmZjk0IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0
ZWRCdW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTE4NywxMiArMTg3LDYgQEAgdm9pZCBJbmplY3RlZEJ1
bmRsZTo6b3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoV2ViUGFnZUdyb3VwUHJv
eHkqIHBhZ2UKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChwcmVmZXJlbmNlID09ICJXZWJLaXRX
ZWJBbmltYXRpb25zRW5hYmxlZCIpCi0gICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZW5hYmxlZCk7Ci0KLSAgICBp
ZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCIpCi0gICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsKLQogICAgIGlmIChw
cmVmZXJlbmNlID09ICJXZWJLaXRDYWNoZUFQSUVuYWJsZWQiKQogICAgICAgICBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldENhY2hlQVBJRW5hYmxlZChlbmFibGVk
KTsKIApAQCAtNTg5LDE2ICs1ODMsNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRUYWJLZXlD
eWNsZXNUaHJvdWdoRWxlbWVudHMoV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGVkKQogICAgIHBh
Z2UtPmNvcmVQYWdlKCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhlbmFibGVkKTsK
IH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9vbCBl
bmFibGVkKQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRCdW5k
bGU6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVkKQot
ewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsKLX0KLQogdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6c2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCBlbmFibGVk
KQogewogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
aCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5oCmluZGV4IDA5YTEyNWNhNGM5NmNjM2EwMzJhZTU4YTRlYmJjMmJjNDNjNzVmYmYuLmMwMWRl
ODBmY2NiY2UzZDM1YmUzMmFmN2EwZGE0YjNjM2MxZGY2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCkBA
IC0xNDIsOCArMTQyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNUaHJv
dWdoRWxlbWVudHMoV2ViUGFnZSosIGJvb2wgZW5hYmxlZCk7CiAgICAgdm9pZCBzZXRTZXJpYWxM
b2FkaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGJv
b2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChib29s
KTsKICAgICB2b2lkIHNldEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKGJvb2wpOwog
ICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCmluZGV4IGNlNzc1OGQwYjk0Njhk
OWI3ZjZmODQ1YjRkZWFmNTY3MTI3NGZlY2QuLmIwOTE3NmYyMTJiZGFiMzY5OGQwNjZiZjNjZjEx
ZmUwMTBkMDcyYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L0RyYXdpbmdBcmVhLmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJh
d2luZ0FyZWEuaApAQCAtOTUsNyArOTUsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHNl
dFZpZXdFeHBvc2VkUmVjdChPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJlY3Q+KSA9IDA7CiAgICAg
dmlydHVhbCBPcHRpb25hbDxXZWJDb3JlOjpGbG9hdFJlY3Q+IHZpZXdFeHBvc2VkUmVjdCgpIGNv
bnN0ID0gMDsKIAotICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0
KHVpbnQ2NF90IC8qbGF5ZXJJRCovLCBjb25zdCBTdHJpbmcmIC8qa2V5Ki8sIE1vbm90b25pY1Rp
bWUgLypzdGFydFRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0
aW9uRGlkRW5kKHVpbnQ2NF90IC8qbGF5ZXJJRCovLCBjb25zdCBTdHJpbmcmIC8qa2V5Ki8pIHsg
fQogICAgIHZpcnR1YWwgdm9pZCBhZGRGZW5jZShjb25zdCBXVEY6Ok1hY2hTZW5kUmlnaHQmKSB7
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2lu
Z0FyZWEubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3
aW5nQXJlYS5tZXNzYWdlcy5pbgppbmRleCBmMjA3ZTEwN2U5NTI3MGE3ZjkxODljYmE5YWI2Nzc1
MzRhYTIyNzkyLi4xM2E3M2ZmMDVmOTA4NDk4Yzg5MjM4OGVjMjJjY2M2M2MzZTFjZDg1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5tZXNz
YWdlcy5pbgorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJl
YS5tZXNzYWdlcy5pbgpAQCAtMzcsNyArMzcsNiBAQCBtZXNzYWdlcyAtPiBEcmF3aW5nQXJlYSBO
b3RSZWZDb3VudGVkIHsKICAgICBBZGp1c3RUcmFuc2llbnRab29tKGRvdWJsZSBzY2FsZSwgV2Vi
Q29yZTo6RmxvYXRQb2ludCBvcmlnaW4pCiAgICAgQ29tbWl0VHJhbnNpZW50Wm9vbShkb3VibGUg
c2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQgb3JpZ2luKQogICAgIAotICAgIEFjY2VsZXJhdGVk
QW5pbWF0aW9uRGlkU3RhcnQodWludDY0X3QgbGF5ZXJJRCwgU3RyaW5nIGtleSwgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWUpCiAgICAgQWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQodWludDY0X3Qg
bGF5ZXJJRCwgU3RyaW5nIGtleSkKICAgICAKICAgICBBZGRUcmFuc2FjdGlvbkNhbGxiYWNrSUQo
V2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCmluZGV4IGRlN2Q3MjgwMjkyZDA1MGQ3MmQw
NmFjOTRhYjkzMWNmMjNmYTRlOGUuLmVlMzU1MjkyYTczMjU5ZTMxNjRlN2Q1NTc2YjUwZTcxM2Y4
ZjZkODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlLm1tCkBAIC00MSwxMSArNDEsNiBAQAogI2ltcG9ydCA8d3RmL2NvY29hL1ZlY3RvckNv
Y29hLmg+CiAjaW1wb3J0IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CiAKLXN0YXRpYyBNb25vdG9u
aWNUaW1lIG1lZGlhVGltZVRvQ3VycmVudFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKLXsKLSAgICBy
ZXR1cm4gV1RGOjpNb25vdG9uaWNUaW1lOjpub3coKSArIFNlY29uZHModCAtIENBQ3VycmVudE1l
ZGlhVGltZSgpKTsKLX0KLQogc3RhdGljIE5TU3RyaW5nICogY29uc3QgV0tFeHBsaWNpdEJlZ2lu
VGltZUZsYWcgPSBAIldLUGxhdGZvcm1DQUFuaW1hdGlvbkV4cGxpY2l0QmVnaW5UaW1lRmxhZyI7
CiAKIEBpbnRlcmZhY2UgV0tBbmltYXRpb25EZWxlZ2F0ZSAoKSA8Q0FBbmltYXRpb25EZWxlZ2F0
ZT4KQEAgLTY3LDI0ICs2Miw2IEBAIC0gKHZvaWQpaW52YWxpZGF0ZQogICAgIF9sYXllclRyZWVI
b3N0ID0gbnVsbHB0cjsKIH0KIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRp
b24gKilhbmltYXRpb24KLXsKLSAgICBpZiAoIV9sYXllclRyZWVIb3N0KQotICAgICAgICByZXR1
cm47Ci0KLSAgICBib29sIGhhc0V4cGxpY2l0QmVnaW5UaW1lID0gW1thbmltYXRpb24gdmFsdWVG
b3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddIGJvb2xWYWx1ZV07Ci0gICAgTW9ub3Rvbmlj
VGltZSBzdGFydFRpbWU7Ci0KLSAgICBpZiAoaGFzRXhwbGljaXRCZWdpblRpbWUpIHsKLSAgICAg
ICAgLy8gV2UgZG9uJ3Qga25vdyB3aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1h
dGlvbiwgc28ganVzdCB1c2UgdGhlIGN1cnJlbnQgdGltZQotICAgICAgICAvLyAoZXZlbiB0aG91
Z2ggdGhpcyB3aWxsIGJlIHNsaWdodGx5IG9mZikuCi0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlh
VGltZVRvQ3VycmVudFRpbWUoQ0FDdXJyZW50TWVkaWFUaW1lKCkpOwotICAgIH0gZWxzZQotICAg
ICAgICBzdGFydFRpbWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5U
aW1lXSk7Ci0KLSAgICBfbGF5ZXJUcmVlSG9zdC0+YW5pbWF0aW9uRGlkU3RhcnQoX2xheWVySUQs
IGFuaW1hdGlvbiwgc3RhcnRUaW1lKTsKLX0KLQogLSAodm9pZClhbmltYXRpb25EaWRTdG9wOihD
QUFuaW1hdGlvbiAqKWFuaW1hdGlvbiBmaW5pc2hlZDooQk9PTClmaW5pc2hlZAogewogICAgIGlm
ICghX2xheWVyVHJlZUhvc3QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUuY3BwCmluZGV4IGE1OTE3MTliZGE5MGEzOWNkYTQwYmE0MTk4OWVkYTJkNGUwNjMw
NDMuLjIxMGE2NjgxNThlMDRiNjk3ZjdiMmUxZTUxMjZiZTI4NDYwNmZjODEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwCkBAIC0zOTYsMTYgKzM5
Niw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc0VxdWl2YWxlbnRMYXllcihjb25zdCBQbGF0Zm9y
bUNBTGF5ZXIqIGxheWVyLCBHcmFwaGljc0xheWVyCiAgICAgcmV0dXJuIGxheWVySUQgPT0gbmV3
TGF5ZXJJRDsKIH0KIAotdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUgYmVnaW5UaW1lKQotewotICAgIGF1
dG8gaXQgPSBtX2FuaW1hdGlvbnMuZmluZChrZXkpOwotICAgIGlmIChpdCAhPSBtX2FuaW1hdGlv
bnMuZW5kKCkpCi0gICAgICAgIGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KCpp
dC0+dmFsdWUpLmRpZFN0YXJ0KGN1cnJlbnRUaW1lVG9NZWRpYVRpbWUoYmVnaW5UaW1lKSk7Ci0g
ICAgCi0gICAgaWYgKG1fb3duZXIpCi0gICAgICAgIG1fb3duZXItPnBsYXRmb3JtQ0FMYXllckFu
aW1hdGlvblN0YXJ0ZWQoa2V5LCBiZWdpblRpbWUpOwotfQotCiB2b2lkIFBsYXRmb3JtQ0FMYXll
clJlbW90ZTo6YW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgaWYgKG1f
b3duZXIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKaW5k
ZXggMGMwYTA4MmJlOGY5YjhiYzc1ZjAzOGIwN2U3NWQ5OWE5M2VhMjY5ZC4uZWFjN2I3YzkyMDQ1
ZjJjM2UxYTVlZmMyZmU2ZjliNTZjODIyYTQyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaApAQCAtNjcsNyArNjcsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3Jt
Q0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCBhbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNU
aW1lIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBT
dHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldE1hc2soV2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyKikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVy
VHJlZUNvbnRleHQuaAppbmRleCA0ZjdiOTgzY2Q4MGVhNTU3NWQ4YjM5MDMzMjU2ZGMwMWExN2M5
YWUwLi44ZjBkMTEzN2Q0MTYyY2MyN2YyNmNkNDM0MjAwY2JkMzZmZmIzNjU0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKQEAgLTY2LDcgKzY2LDYg
QEAgcHVibGljOgogICAgIHZvaWQgbGF5ZXJQcm9wZXJ0eUNoYW5nZWRXaGlsZUJ1aWxkaW5nVHJh
bnNhY3Rpb24oUGxhdGZvcm1DQUxheWVyUmVtb3RlJik7CiAKICAgICAvLyBGcm9tIHRoZSBVSSBw
cm9jZXNzCi0gICAgdm9pZCBhbmltYXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZSk7CiAgICAgdm9pZCBhbmltYXRpb25EaWRFbmQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6
UGxhdGZvcm1MYXllcklELCBjb25zdCBTdHJpbmcmIGtleSk7CiAKICAgICB2b2lkIHdpbGxTdGFy
dEFuaW1hdGlvbk9uTGF5ZXIoUGxhdGZvcm1DQUxheWVyUmVtb3RlJik7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dC5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90
ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCmluZGV4IDUyMjA1NWUyZDk1Njdj
NmRlMzE2ODczNWFiMzg3YjA2ZmFkNTcwZDYuLjc2M2Y5NTQyYjhhNTAyNzMyMWJjMjY4N2Q3YTJk
MDllMjcwZGI1ZGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tCisrKyBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVD
b250ZXh0Lm1tCkBAIC0xNzQsMTMgKzE3NCw2IEBAIHZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dDo6d2lsbFN0YXJ0QW5pbWF0aW9uT25MYXllcihQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIGxhCiAg
ICAgbV9sYXllcnNXaXRoQW5pbWF0aW9ucy5hZGQobGF5ZXIubGF5ZXJJRCgpLCAmbGF5ZXIpOwog
fQogCi12b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OmFuaW1hdGlvbkRpZFN0YXJ0KFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBjb25zdCBTdHJpbmcm
IGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpCi17Ci0gICAgYXV0byBpdCA9IG1fbGF5ZXJz
V2l0aEFuaW1hdGlvbnMuZmluZChsYXllcklEKTsKLSAgICBpZiAoaXQgIT0gbV9sYXllcnNXaXRo
QW5pbWF0aW9ucy5lbmQoKSkKLSAgICAgICAgaXQtPnZhbHVlLT5hbmltYXRpb25TdGFydGVkKGtl
eSwgc3RhcnRUaW1lKTsKLX0KLQogdm9pZCBSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRp
b25EaWRFbmQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQs
IGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIGF1dG8gaXQgPSBtX2xheWVyc1dpdGhBbmltYXRp
b25zLmZpbmQobGF5ZXJJRCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaCBiL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXll
clRyZWVEcmF3aW5nQXJlYS5oCmluZGV4IGI3MGVlZTJjZjY5OWY4NGJiMWY3Y2E2NjA5NWMwMTFm
ZGU2MTEyMzguLmZmYzNlNmU3YjJjYzYyMDhhYmM1MGQ3YWU4MTM1MDEyN2JhNGQ2ZjggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5oCkBA
IC05Miw3ICs5Miw2IEBAIHByaXZhdGU6CiAgICAgdm9pZCBzZXRWaWV3RXhwb3NlZFJlY3QoT3B0
aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0Pikgb3ZlcnJpZGU7CiAgICAgT3B0aW9uYWw8V2ViQ29y
ZTo6RmxvYXRSZWN0PiB2aWV3RXhwb3NlZFJlY3QoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X3ZpZXdFeHBvc2VkUmVjdDsgfQogCi0gICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0
YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIHN0
YXJ0VGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1
aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKICAgICBXZWJD
b3JlOjpGbG9hdFJlY3QgZXhwb3NlZENvbnRlbnRSZWN0KCkgY29uc3Qgb3ZlcnJpZGU7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0gYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW0KaW5k
ZXggMjZjMzc0NzZjN2IwMWRlZjhiNDZmMWNkYjEwM2ZmODU5YWRhYTMxZC4uYTUzYzJlMTMwM2Yy
YzRmMDg3NjliZjI3YjY1MjcwM2ViZmEwNDI4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVy
VHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQpAQCAtMjIyLDExICsyMjIsNiBAQCB2
b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjpmb3JjZVJlcGFpbnQoKQogICAgIHVwZGF0
ZVJlbmRlcmluZygpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2Nl
bGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYg
a2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBtX3JlbW90ZUxheWVyVHJlZUNv
bnRleHQtPmFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGtleSwgc3RhcnRUaW1lKTsKLX0KLQog
dm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRF
bmQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgbV9yZW1vdGVM
YXllclRyZWVDb250ZXh0LT5hbmltYXRpb25EaWRFbmQobGF5ZXJJRCwga2V5KTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlz
UHJpdmF0ZS5oCmluZGV4IGUyM2I4NDA2OGYyNDBjZTIxYmJhZDE3MDRiOWUzNmM3ZGFlNDFkZWIu
LjFiY2E3YmZhODdiY2YzOTA5YTQ3NzZlZjk0OTk1ZjBlMTliYTAwMjAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1By
aXZhdGUuaApAQCAtNTIsNyArNTIsNiBAQAogI2RlZmluZSBXZWJLaXRKYXZhRW5hYmxlZFByZWZl
cmVuY2VLZXkgQCJXZWJLaXRKYXZhRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SmF2YVNjcmlwdEVu
YWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiCiAjZGVmaW5lIFdl
YktpdEphdmFTY3JpcHRNYXJrdXBFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEphdmFTY3Jp
cHRNYXJrdXBFbmFibGVkIgotI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZl
cmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktp
dFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0
V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktp
dFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0Q1NT
Q3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q1NT
Q3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQiCkBAIC0yMDUsNyArMjA0LDYgQEAKICNk
ZWZpbmUgV2ViS2l0Q29sb3JGaWx0ZXJFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdENvbG9y
RmlsdGVyRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5E
YXJrTW9kZVByZWZlcmVuY2VLZXkgQCJXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRh
cmtNb2RlIgogI2RlZmluZSBXZWJLaXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWRQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkIgotI2RlZmluZSBXZWJLaXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdENTU1NoYWRvd1Bh
cnRzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NTaGFkb3dQYXJ0c0VuYWJsZWQiCiAj
ZGVmaW5lIFdlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkUHJl
ZmVyZW5jZUtleSBAIldlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFi
bGVkIgogI2RlZmluZSBXZWJLaXRXZWJTUUxFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YlNRTEVuYWJsZWQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQ
cmVmZXJlbmNlcy5tbQppbmRleCA1N2I2NDg2ZTk5MzdmYzFiZGFiZWFiZTMwYWNhMWIyN2E5NjA5
YjVjLi5hZGFkZTk3MDA0MTY3YTg0ZmM1ZWYxZTQ4ODgwNjBkMmUxOTMyY2UwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTYz
Niw3ICs2MzYsNiBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgQE5PLCBXZWJLaXREaWFs
b2dFbGVtZW50RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBOTywgV2ViS2l0SGlnaGxp
Z2h0QVBJRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMsIFdlYktpdE1vZGVybk1l
ZGlhQ29udHJvbHNFbmFibGVkUHJlZmVyZW5jZUtleSwKLSAgICAgICAgQFlFUywgV2ViS2l0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZ
RVMsIFdlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkUHJlZmVy
ZW5jZUtleSwKIAogI2lmIEVOQUJMRShXRUJHTDIpCkBAIC02NTgsNyArNjU3LDYgQEAgKyAodm9p
ZClpbml0aWFsaXplCiAgICAgICAgIEBOTywgV2ViS2l0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVk
UHJlZmVyZW5jZUtleSwKICNlbmRpZgogICAgICAgICBATk8sIFdlYktpdERpcmVjdG9yeVVwbG9h
ZEVuYWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVTLCBXZWJLaXRXZWJBbmltYXRpb25z
RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMsIFdlYktpdFN5bnRoZXRpY0VkaXRp
bmdDb21tYW5kc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlM
WSkKQEAgLTMxNzYsMTYgKzMxNzQsNiBAQCAtICh2b2lkKXNldENTU09NVmlld1Ntb290aFNjcm9s
bGluZ0VuYWJsZWQ6KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JL
ZXk6V2ViS2l0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZFByZWZlcmVuY2VLZXldOwog
fQogCi0tIChCT09MKXdlYkFuaW1hdGlvbnNFbmFibGVkCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9i
b29sVmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsK
LX0KLQotLSAodm9pZClzZXRXZWJBbmltYXRpb25zRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAg
W3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxl
ZFByZWZlcmVuY2VLZXldOwotfQotCiAtIChCT09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVy
YXRpb25zRW5hYmxlZAogewogICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktp
dFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXldOwpA
QCAtMzI0NiwxNiArMzIzNCw2IEBAIC0gKHZvaWQpc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQ6KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0
TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAotLSAoQk9PTCl3
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9i
b29sVmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFBy
ZWZlcmVuY2VLZXldOwotfQotCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JL
ZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXld
OwotfQotCiAtIChCT09MKWludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZAogewogICAgIHJldHVy
biBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxl
ZFByZWZlcmVuY2VLZXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2Vi
Vmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggNzMwZWI2YmYxZjJkNjdiZjQ3MTI3
MGM5NTk1Y2JkMmQzYzk4NGQwNS4uYjk4N2M5YzI4OGQ3YjUzMDczNDUzNjNhOWM4MjQ4OWRhY2Uy
MTM0OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC01NjQsOSArNTY0LDYgQEAgZXh0ZXJuIE5TU3RyaW5n
ICpXZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gV0VC
S0lUX0RFUFIKIC0gKHZvaWQpc2V0RGlyZWN0b3J5VXBsb2FkRW5hYmxlZDooQk9PTClmbGFnOwog
LSAoQk9PTClkaXJlY3RvcnlVcGxvYWRFbmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlv
bnNFbmFibGVkOihCT09MKWZsYWc7Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNFbmFibGVkOwotCiAt
ICh2b2lkKXNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDooQk9PTClm
bGFnOwogLSAoQk9PTCl3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7CiAK
QEAgLTU4NSw5ICs1ODIsNiBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVN
b2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBXRUJLSVRfREVQUgogLSAodm9pZClzZXRN
b2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZDooQk9PTClmbGFnOwogLSAoQk9PTCltb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZDsKIAotLSAodm9pZClzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkOihCT09MKWZsYWc7Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ7Ci0KIC0gKHZvaWQpc2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOihCT09M
KWZsYWc7CiAtIChCT09MKWludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDRlYzAyMzdhNzRjN2M0OWRk
ZTgyODU5Y2U1ODllMTc0Y2Q1ZTk0MDUuLmNlNGNiM2Q0YzA2ODExODk2MjYyY2E4OTUyMDYzN2Qx
M2U1MWVhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0K
QEAgLTEzMiw3ICsxMzIsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3Rv
cmFnZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZENhY2hlLmg+CiAjaW1wb3J0IDxX
ZWJDb3JlL0JhY2tGb3J3YXJkQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9DU1NBbmlt
YXRpb25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlU3RvcmFnZVByb3ZpZGVy
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1h
Yy5oPgpAQCAtMzMzNCw3ICszMzMzLDYgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihX
ZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAKICAgICBzZXR0aW5ncy5zZXRJbnRlcmFjdGl2
ZUZvcm1WYWxpZGF0aW9uRW5hYmxlZChbc2VsZiBpbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5h
YmxlZF0pOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0
TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW3ByZWZlcmVuY2VzIG1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkXSk7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk7CiAKICAgICBSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldENhY2hlQVBJRW5hYmxlZChbcHJlZmVyZW5jZXMg
Y2FjaGVBUElFbmFibGVkXSk7CiAKQEAgLTMzNTgsNyArMzM1Niw2IEBAIC0gKHZvaWQpX3ByZWZl
cmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogICAgIHNldHRpbmdz
LnNldERvd25sb2FkQXR0cmlidXRlRW5hYmxlZChbcHJlZmVyZW5jZXMgZG93bmxvYWRBdHRyaWJ1
dGVFbmFibGVkXSk7CiAjZW5kaWYKIAotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1h
dGlvbnNFbmFibGVkXSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS5zZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoW3ByZWZlcmVu
Y2VzIHdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZF0pOwogICAgIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc011dGFi
bGVUaW1lbGluZXNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zTXV0YWJsZVRpbWVs
aW5lc0VuYWJsZWRdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50
ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kv
d2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwKaW5kZXggOWE4NzVkNDc5
ZTdiZmFkNzM2MWE2ZjJmOGE0ZDMxOTMzN2VlNTdmMi4uYjBiZDA1ZjI1MDU4MmUxNDdhNmE3ZmJk
YTNiNmRiZjRiNmFiNjA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50
ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCkBAIC0xODMsMTYg
KzE4MywxMiBAQCBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTMgOiBJV2ViUHJlZmVy
ZW5jZXNQcml2YXRlMgogICAgIEhSRVNVTFQgc2V0Q3VzdG9tRWxlbWVudHNFbmFibGVkKFtpbl0g
Qk9PTCBlbmFibGVkKTsKICAgICBIUkVTVUxUIG1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKFtv
dXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7CiAgICAgSFJFU1VMVCBzZXRNb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7Ci0gICAgSFJFU1VMVCB3ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7Ci0g
ICAgSFJFU1VMVCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtpbl0gQk9P
TCBlbmFibGVkKTsKIH0KIAogW3V1aWQoRjk1ODJENzItNjM0OC00NUIxLUFCMDktMzlFMzM0NTlC
NUI5KV0KIGludGVyZmFjZSBJV2ViUHJlZmVyZW5jZXNQcml2YXRlNCA6IElXZWJQcmVmZXJlbmNl
c1ByaXZhdGUzCiB7CiAgICAgSFJFU1VMVCBzZXRBcHBsaWNhdGlvbklkKFtpbl0gQlNUUiBhcHBs
aWNhdGlvbklkKTsKLSAgICBIUkVTVUxUIHdlYkFuaW1hdGlvbnNFbmFibGVkKFtvdXQsIHJldHZh
bF0gQk9PTCopOwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoW2luXSBCT09M
IGVuYWJsZWQpOwogICAgIEhSRVNVTFQgdXNlclRpbWluZ0VuYWJsZWQoW291dCwgcmV0dmFsXSBC
T09MKik7CiAgICAgSFJFU1VMVCBzZXRVc2VyVGltaW5nRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxl
ZCk7CiAgICAgSFJFU1VMVCByZXNvdXJjZVRpbWluZ0VuYWJsZWQoW291dCwgcmV0dmFsXSBCT09M
Kik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJp
dmF0ZS5oCmluZGV4IDJhMjEyMWFkYjk2ODY5ODQxMjFjMGU0YmE4ZGFmZmNhN2JjYzZjYWIuLjky
MTdiODVlNDk3ZGExM2RhNzY4MjI5NWIyZGU3NjJhMmRlNzE2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC0xODgsMTQg
KzE4OCwxMCBAQAogCiAjZGVmaW5lIFdlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkUHJl
ZmVyZW5jZUtleSAiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiCiAKLSNkZWZpbmUg
V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRp
b25zRW5hYmxlZCIKLQogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0
aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3Bl
cmF0aW9uc0VuYWJsZWQiCiAKICNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1l
bGluZXNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1l
bGluZXNFbmFibGVkIgogCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkIgotCiAjZGVmaW5lIFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFi
bGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJs
ZWQiCiAKICNkZWZpbmUgV2ViS2l0VXNlclRpbWluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJL
aXRVc2VyVGltaW5nRW5hYmxlZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L1dlYlByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVu
Y2VzLmNwcAppbmRleCA5ZDliMGRmZTExOWJjZjE4YmU0MDM1NjEyNDU2ZWI2YTgzZWJhZWM4Li5m
NzQyNmE5NTYzZDlmZGJiYmE1NzY0YjE2N2M1YzAxYmFkMWIzODY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0zMTEsMTQgKzMxMSwxMCBAQCB2b2lk
IFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVmYXVsdFNldHRpbmdzKCkKIAogICAgIENGRGlj
dGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRDdXN0b21FbGVtZW50c0VuYWJs
ZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAotICAgIENGRGljdGlvbmFyeUFk
ZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVu
Y2VLZXkpLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0KICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZh
dWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVk
UHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNF
bmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKLSAgICBDRkRpY3Rpb25h
cnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwotCiAgICAgQ0ZEaWN0
aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKICAgICBD
RkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0VXNlclRpbWluZ0VuYWJs
ZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKQEAgLTIxMzgsMjAgKzIxMzQsNiBA
QCBIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjptb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChfT3V0
XyBCT09MKiBlbmFibGVkKQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlByZWZl
cmVuY2VzOjp3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKF9PdXRfIEJPT0wqIGVu
YWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwot
ICAgICplbmFibGVkID0gYm9vbFZhbHVlRm9yS2V5KFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJF
U1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZChCT09MIGVuYWJsZWQpCi17Ci0gICAgc2V0Qm9vbFZhbHVlKFdlYktpdFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKLSAgICByZXR1cm4g
U19PSzsKLX0KLQogSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6ZmV0Y2hBUElLZWVwQWxpdmVFbmFi
bGVkKF9PdXRfIEJPT0wqIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKQpAQCAtMjM0MCwy
MCArMjMyMiw2IEBAIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldEFwcGxpY2F0aW9uSWQoQlNU
UiBhcHBsaWNhdGlvbklkKQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlByZWZl
cmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZChCT09MIGVuYWJsZWQpCi17Ci0gICAgc2V0
Qm9vbFZhbHVlKFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwgZW5hYmxl
ZCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OndlYkFu
aW1hdGlvbnNFbmFibGVkKF9PdXRfIEJPT0wqIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVk
KQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICplbmFibGVkID0gYm9vbFZhbHVlRm9y
S2V5KFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSk7Ci0gICAgcmV0dXJu
IFNfT0s7Ci19Ci0KIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldFdlYkFuaW1hdGlvbnNDb21w
b3NpdGVPcGVyYXRpb25zRW5hYmxlZChCT09MIGVuYWJsZWQpCiB7CiAgICAgc2V0Qm9vbFZhbHVl
KFdlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VL
ZXksIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJl
ZmVyZW5jZXMuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmgKaW5k
ZXggMjQzN2IwZTc2Mjg5NTA2YzI2NDA0ODg2YmQyYzAzZjU4MzI1M2M1MS4uMjEyOTA1Y2IxYmE2
MDA5NDAzODY5NTM5MTc4YTNmZWE3MDNhMzhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJQcmVmZXJlbmNlcy5oCkBAIC0yMzYsMTMgKzIzNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0Q3VzdG9tRWxlbWVudHNFbmFibGVkKEJPT0wp
OwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBtb2Rlcm5NZWRpYUNvbnRy
b2xzRW5hYmxlZChfT3V0XyBCT09MKik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIHNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKEJPT0wpOwotICAgIHZpcnR1YWwg
SFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKF9PdXRfIEJPT0wqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChCT09MKTsKICAgICAKICAgICAv
LyBJV2ViUHJlZmVyZW5jZXNQcml2YXRlNAogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSBzZXRBcHBsaWNhdGlvbklkKEJTVFIpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSB3ZWJBbmltYXRpb25zRW5hYmxlZChfT3V0XyBCT09MKik7Ci0gICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKEJP
T0wpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB1c2VyVGltaW5nRW5h
YmxlZChfT3V0XyBCT09MKik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHNldFVzZXJUaW1pbmdFbmFibGVkKEJPT0wpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSByZXNvdXJjZVRpbWluZ0VuYWJsZWQoX091dF8gQk9PTCopOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJWaWV3LmNwcAppbmRleCBiNmEyODNjOTNlODgyYTNlMjFkNDE2OGM0YjMxY2I4
NDlkMTVkMWFjLi4yZTI1YmU5NmIyYWQ0NWI1ZjRlNWUzMTg4ZDYyYzE0ZTAyZTk5ZDkxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNTI0NCwxMSArNTI0NCw2IEBAIEhSRVNV
TFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKElXZWJOb3RpZmljYXRpb24qIG5v
dGlmaWNhdGlvbikKICAgICAgICAgcmV0dXJuIGhyOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoISFlbmFi
bGVkKTsKIAotICAgIGhyID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zRW5hYmxlZCgmZW5h
YmxlZCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLSAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNFbmFi
bGVkKCEhZW5hYmxlZCk7Ci0KICAgICBociA9IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0Nv
bXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCZlbmFibGVkKTsKICAgICBpZiAoRkFJTEVEKGhyKSkK
ICAgICAgICAgcmV0dXJuIGhyOwpAQCAtNTI1OSwxMSArNTI1NCw2IEBAIEhSRVNVTFQgV2ViVmll
dzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlv
bikKICAgICAgICAgcmV0dXJuIGhyOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkKCEhZW5h
YmxlZCk7CiAKLSAgICBociA9IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZCgmZW5hYmxlZCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVy
biBocjsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoISFlbmFibGVkKTsKLQogICAgIGhyID0g
cHJlZnNQcml2YXRlLT5DU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCgmZW5hYmxl
ZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKZGlmZiAtLWdpdCBh
L1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZmE3MDk0N2MzODM4MmZj
MDMwYzIxYWU3ZTZiZTI1ZTFiMjZlZTNlLi44MzMwNzUyMWM4ODQyYjIwOGUyOGRmY2UzM2MyNDM1
YWY2Y2JlZmM2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDktMTYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRz
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjYwOAor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdl
IG5vdyBoYXZlIGEgc2luZ2xlIGFuaW1hdGlvbiBlbmdpbmUsIHRoZSBydW50aW1lIGZsYWdzIHRv
IG9wdGlvbmFsbHkgZW5hYmxlIHRoZSBXZWIgQW5pbWF0aW9ucyBlbmdpbmUgYXJlCisgICAgICAg
IG5vdCBuZWVkZWQgYW55bW9yZSBhbmQgYXJlIG5vdyByZW1vdmVkLgorCisgICAgICAgICogRHVt
cFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoVGVzdE9wdGlvbnM6OlRlc3RP
cHRpb25zKToKKyAgICAgICAgKFRlc3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9w
dGlvbnMgY29uc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6Cisg
ICAgICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAo
ZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMpOgorICAgICAgICAoc2V0V2ViUHJlZmVyZW5jZXNG
b3JUZXN0T3B0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJU
cmVlLmNwcDoKKyAgICAgICAgKGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKToKKyAgICAgICAg
KHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMpOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBw
ZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRmxhdHBhayBTREtd
IENoZXJyeS1waWNrIE1lc2EgdXNlLWFmdGVyLWZyZWUgZml4ZXMKZGlmZiAtLWdpdCBhL1Rvb2xz
L0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RPcHRpb25zLmNwcAppbmRleCAwNjQ1N2RmZGZkZWVhNTAzMDRlMzMyZDBhMzE4MmY1YWJhNGFm
ODA1Li4wZGJmYWM5ZjNjODc0OTQyY2Q3YjFkZWYxNDA4ODQ4NDMyZTQyNjRmIDEwMDY0NAotLS0g
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKKysrIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCkBAIC0xMjYsOCArMTI2LDYgQEAgVGVzdE9wdGlvbnM6
OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3Ry
aW5nJiBhYnNvbHUKICAgICAgICAgICAgIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNl
Qm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAi
YWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiKQogICAgICAg
ICAgICAgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBw
YXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkg
PT0gImV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIikKLSAg
ICAgICAgICAgIGVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiA9IHBhcnNlQm9vbGVh
blRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJu
YWw6c2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQiKQogICAgICAgICAgICAg
ZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllcyA9IHBhcnNlQm9vbGVhblRlc3RI
ZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ29sb3JG
aWx0ZXIiKQpAQCAtMTY3LDYgKzE2NSw1IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiBib29s
IFRlc3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9w
dGlvbnMmIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiBvdGhlci5sYXllckJhY2tlZFdlYlZp
ZXcgPT0gbGF5ZXJCYWNrZWRXZWJWaWV3Ci0gICAgICAgICYmIG90aGVyLmpzY09wdGlvbnMgPT0g
anNjT3B0aW9ucwotICAgICAgICAmJiBvdGhlci5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb24gPT0gZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uOworICAgICAgICAmJiBv
dGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnM7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuaAppbmRleCBjNWM4Yzg1OTkyZTFjZmYzNzUwODIxYzgxZmYyODQzZGQwOWViOTk3Li5kNzY2
ODE3YjcwNWI0NjI1MGQyZWZmNTUzMzQ2YTdkZDkzN2ViMzY2IDEwMDY0NAotLS0gYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RPcHRpb25zLmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogc3RydWN0IFRlc3RPcHRpb25zIHsKICAg
ICBib29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJs
ZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiB7IHRydWUgfTsKICAgICBib29sIHVzZUFjY2Vs
ZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNl
cnZlciB7IGZhbHNlIH07CiAgICAgYm9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsK
ZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBi
L1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA0NjNjOWI5
MmVlYjVlZWU5N2ExYTcyMGRlZjg1ZmM2MGQ0ODc4NTNjLi42OTE1N2M0MzAwMWM1NDQxNDMwYjEx
MTdjZGEzYWNjNDcwMjc0ZTg5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5k
ZXJUcmVlLm1tCkBAIC04MTQsNyArODE0LDYgQEAgc3RhdGljIHZvaWQgZW5hYmxlRXhwZXJpbWVu
dGFsRmVhdHVyZXMoV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKQogICAgIFtwcmVmZXJlbmNl
cyBzZXRNZWRpYVByZWxvYWRpbmdFbmFibGVkOllFU107CiAgICAgLy8gRklYTUU6IElucHV0RXZl
bnRzCiAgICAgW3ByZWZlcmVuY2VzIHNldEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZDpZRVNdOwot
ICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBbmltYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVm
ZXJlbmNlcyBzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6WUVTXTsK
ICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVk
OllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNF
bmFibGVkOllFU107CkBAIC05NzksNyArOTc4LDYgQEAgc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVy
ZW5jZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKICAgICBwcmVm
ZXJlbmNlcy5pc1NlY3VyZUNvbnRleHRBdHRyaWJ1dGVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVJ
c1NlY3VyZUNvbnRleHRBdHRyaWJ1dGU7CiAgICAgcHJlZmVyZW5jZXMuaW5zcGVjdG9yQWRkaXRp
b25zRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zOwogICAgIHByZWZl
cmVuY2VzLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0g
b3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFsczsK
LSAgICBwcmVmZXJlbmNlcy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkID0gb3B0
aW9ucy5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb247CiAgICAgcHJlZmVyZW5jZXMu
Y29sb3JGaWx0ZXJFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKICAgICBwcmVm
ZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMu
ZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllczsKICAgICBwcmVmZXJlbmNlcy53
ZWJHUFVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJHUFU7CmRpZmYgLS1naXQgYS9Ub29scy9E
dW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBhNzI3MzRmNmY0ZmFmNmFkZTk1N2NjM2Ni
MzQzZDU2N2U0ODdkMzNlLi5kNzQ3MTMxZjkyYmRmZGZiYzM3YTkxYTNmN2U4ZmJiMmY0NmIxNjU5
IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTc5
Niw3ICs3OTYsNiBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyhJV2Vi
UHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKQogICAgIHByZWZzUHJpdmF0ZS0+c2V0VmlzdWFsVmll
d3BvcnRBUElFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U2Ny
b2xsaW5nQVBJRW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldFJlc2l6ZU9ic2Vy
dmVyRW5hYmxlZChUUlVFKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNFbmFi
bGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9w
ZXJhdGlvbnNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9u
c011dGFibGVUaW1lbGluZXNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NT
Q3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQoVFJVRSk7CkBAIC05MDksNyArOTA4LDYg
QEAgc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhJV2ViUHJlZmVy
ZW5jZXMqIHByZWZlcmVuY2VzLCBjb25zdAogewogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQ
cml2YXRlOD4gcHJlZnNQcml2YXRlIHsgUXVlcnksIHByZWZlcmVuY2VzIH07CiAKLSAgICBwcmVm
c1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQob3B0aW9ucy5l
bmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24pOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0
TWVudUl0ZW1FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7CiAg
ICAgcHJlZnNQcml2YXRlLT5zZXRLZXlnZW5FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtl
eWdlbkVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWQob3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhOWFlZDc2
NDliNDhkODk0YWZmYTk0YTA1YjI0ZGJkODg4NDIxYzFhLi42MjMyZWUyNTYyZjFmOWJmOGUyOWY3
ZWY1MDlmZDIzOWQ1Nzc3YTU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysr
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMjAtMDktMTYgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBs
ZWdhY3kgYW5pbWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIxNjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIFJlbW92ZSBhbnkgdXNlIG9mIG5vdy1yZW1vdmVkIHRlc3RpbmcgbWV0aG9k
cyBhbmQgc29tZSBydW50aW1lIGZsYWdzIGZyb20gbGF5b3V0IHRlc3RzLgorCisgICAgICAgICog
YW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAg
ICogYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qczoKKyAgICAg
ICAgKHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KToKKyAgICAgICAgKiBodHRwL3Rlc3Rz
L2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbDoKKyAgICAg
ICAgKiBpbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zv
cm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5odG1sOiBSZW1vdmVkLgorICAgICAg
ICAqIHRyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9j
bGlwLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0
aW9uLWFsbC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJl
bXVsdGlwbGllZC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24t
cm91bmRpbmcuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91
bmQtaW1hZ2UuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1p
bWFnZS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1j
b2xvci5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1s
ZW5ndGguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ct
c2hhZG93Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93
LXN2Zy1sZW5ndGguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3Zl
cmZsb3ctdHJhbnNmb3JtLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1p
bmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9kZWxheS5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRp
b25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pbi1t
YXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMv
bWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWlz
bWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9t
aXhlZC10eXBlLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0
aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXpl
LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dy
b3VuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLW1h
c2stdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFk
b3ctdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxh
eS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXgu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhl
bHBlcnMuanM6CisgICAgICAgICogdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9u
cy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlv
bnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L3RleHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9y
bS1vcC1saXN0LW5vLW1hdGNoLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWhpdC10ZXN0Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1p
bi1kZWxheS1waGFzZS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tb24t
ZWxlbWVudC13aXRoLWNvbnRlbnQuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0
aW9uLXNob3J0aGFuZC1kZWxheS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRp
b24tdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi10by1mcm9tLWF1dG8uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRv
LWZyb20tdW5kZWZpbmVkLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5r
LWNvbG9yLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJv
LWRlbGF5LXN0YXJ0Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1h
bmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sOgorICAgICAgICAqIHdlYmFu
aW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNv
bXBsZXRpb24uaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1h
dGlvbi1zdXNwZW5zaW9uLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRl
ZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWw6CisgICAgICAgICogd2ViYW5p
bWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRp
b24tZWZmZWN0Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVu
dC10aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbDoK
KyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFu
Z2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0
aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVz
LWNyYXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1s
OgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVy
c2FsLWFjY2VsZXJhdGVkLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlm
cmFtZXMtY3Jhc2guaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVy
YXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWw6CisgICAgICAgICogd2Vi
YW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZl
Y3QuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10
aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sOgorCiAy
MDIwLTA5LTE1ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IGxh
enkgaW1hZ2UgbG9hZCBwYWludGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9u
cy9sZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9hbmlt
YXRpb25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA0MDJmOThl
YTMxMTVhYTFkNzc2ZmFmODhlZWRiOTFhMjg3NTFmOTczLi4wOGViYzQ0YzRkMTZkYTY5MjVkNjVl
ZGMxMzE5NGQ4YWQzMjU2NDc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xl
Z2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hbmlt
YXRpb25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xh
eW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMK
aW5kZXggMThhNWEwMTI5ZmY3ZjJhZTI0YmQzM2UzMTllNjA2ZjU3OWFhNDE5ZS4uNmRlMDhkMzg1
NTE4NDQzNjcxMTdmMDA3MjI1NzA5MDNlYWY1YmNmZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
YW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcworKysgYi9MYXlv
dXRUZXN0cy9hbmltYXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCkBA
IC01MTQsMTEgKzUxNCw2IEBAIGZ1bmN0aW9uIGNoZWNrRXhwZWN0ZWRWYWx1ZUNhbGxiYWNrKGV4
cGVjdGVkLCBpbmRleCkKIAogZnVuY3Rpb24gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQo
YW5pbWF0aW9uTmFtZSwgdGltZSwgZWxlbWVudCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlbid0IG9w
dGVkIGludG8gQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucyBhcyBXZWIgQW5pbWF0
aW9ucywgdXNlIHRoZSBpbnRlcm5hbCBBUEkuCi0gICAgaWYgKCdpbnRlcm5hbHMnIGluIHdpbmRv
dyAmJiAhaW50ZXJuYWxzLnNldHRpbmdzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGludGVybmFscy5wYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxl
bWVudChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50KTsKLQotICAgIC8vIE90aGVyd2lzZSwg
dXNlIHRoZSBXZWIgQW5pbWF0aW9ucyBBUEkuCiAgICAgY29uc3QgYW5pbWF0aW9ucyA9IGVsZW1l
bnQuZ2V0QW5pbWF0aW9ucygpOwogICAgIGZvciAobGV0IGFuaW1hdGlvbiBvZiBhbmltYXRpb25z
KSB7CiAgICAgICAgIGlmIChhbmltYXRpb24gaW5zdGFuY2VvZiBDU1NBbmltYXRpb24gJiYgYW5p
bWF0aW9uLmFuaW1hdGlvbk5hbWUgPT0gYW5pbWF0aW9uTmFtZSkgewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtl
eWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nz
cy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbAppbmRleCBjMWM2ZmQ2NzJjNGQwZWY3OWY4YmU3
YmE4ODE5NDlmYjI2ZDk0Yzk5Li5hNWNlMzQyZDUyZWJmYjAwNWZkMDQxYjc4OGZiYjExNmIxNjdm
NmRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25z
L2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rl
c3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBIVE1MPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9ZmFsc2UgXSAtLT4K
KzwhRE9DVFlQRSBIVE1MPgogPHNjcmlwdD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAg
IHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0
ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRp
b25zLWluc2lkZS1pZnJhbWUtaW5uZXIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5r
L3RyYW5zaXRpb25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNp
ZGUtaWZyYW1lLWlubmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDFj
YmM4YmZjNzg0M2MzYmI5ODkzMmZjOWVjOTk3M2JjNTA3MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJh
bnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1p
ZnJhbWUtaW5uZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwhRE9DVFlQ
RT4KLTxodG1sPgotPGhlYWQ+Ci08c3R5bGU+Ci0gICAgI2JhY2tncm91bmQgewotICAgICAgICB3
aWR0aDogMjAwcHg7Ci0gICAgICAgIGhlaWdodDogMjAwcHg7Ci0gICAgICAgIGRpc3BsYXk6IGJs
b2NrOwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKLSAgICB9Ci0gICAgLm92ZXJs
YXkgewotICAgICAgICB3aWR0aDogNTBweDsKLSAgICAgICAgaGVpZ2h0OiA1MHB4OwotICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpOwotICAgICAgICAtd2Vi
a2l0LXRyYW5zaXRpb246IG9wYWNpdHkgMXM7Ci0gICAgfQotCi0gICAgI3BvcHVwIHsKLSAgICAg
ICAgd2lkdGg6IDIwcHg7Ci0gICAgICAgIGhlaWdodDogMjBweDsKLSAgICAgICAgYmFja2dyb3Vu
ZC1jb2xvcjogcmVkOwotICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgICAgIC13ZWJr
aXQtdHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMXM7Ci0gICAgfQotCi0gICAgLnRyYW5z
cGFyZW50IHsKLSAgICAgICAgb3BhY2l0eTogMDsKLSAgICB9Ci0KLSAgICBbaGlkZGVuXSB7Ci0g
ICAgICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgfQotCi0gICAgLm92ZXJsYXkudHJhbnNwYXJlbnQg
LnBhZ2UgewotICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMHB4KTsKLSAg
ICB9Ci0KLTwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0i
dXRmLTgiPgotICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQotICAgIHsKLSAgICAgICAgdmFyIHNvbGlk
X2NvbG9yX292ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29saWRfY29sb3Jfb3Zl
cmxheSIpOwotICAgICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnaGlk
ZGVuJyk7Ci0KLSAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBv
cHVwIik7Ci0gICAgICAgIHBvcHVwLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7Ci0KLSAgICAg
ICAgLy8gTk9URTogVGhpcyBpcyBhIGhhY2t5IHdheSB0byBmb3JjZSB0aGUgY29udGFpbmVyIHRv
IGxheW91dCB3aGljaAotICAgICAgICAvLyB3aWxsIGFsbG93IHVzIHRvIHRyaWdnZXIgdGhlIHdl
YmtpdCB0cmFuc2l0aW9uLgotICAgICAgICAvLyBTZWUgY3JidWcuY29tLzMyNDY4NQotICAgICAg
ICBzb2xpZF9jb2xvcl9vdmVybGF5LnNjcm9sbFRvcDsKLSAgICAgICAgc29saWRfY29sb3Jfb3Zl
cmxheS5jbGFzc0xpc3QucmVtb3ZlKCd0cmFuc3BhcmVudCcpOwotCi0gICAgICAgIC8vIGR1bXAg
dGhlIHBpeGVsIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgaWYgKHdp
bmRvdy5pbnRlcm5hbHMpIHsKLSAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZm9yY2VDb21w
b3NpdGluZ1VwZGF0ZShkb2N1bWVudCk7Ci0gICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnBh
dXNlQW5pbWF0aW9ucygwLjUpOwotICAgICAgICB9Ci0gICAgICAgIHRyaWdnZXJQaXhlbFJlc3Vs
dHMoKTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCkKLSAgICB7
Ci0gICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSgiVHJpZ2dlclBpeGVsUmVzdWx0cyIsICcqJyk7
Ci0gICAgfQotCi0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBydW5UZXN0LCBm
YWxzZSk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBpZD0iYmFja2dyb3VuZCI+
Ci0gICAgPGRpdiBpZD0ic29saWRfY29sb3Jfb3ZlcmxheSIgY2xhc3M9Im92ZXJsYXkgdHJhbnNw
YXJlbnQiIGhpZGRlbj10cnVlPgotICAgICAgICA8ZGl2IGlkPSJwb3B1cCIgY2xhc3M9InBhZ2Ui
IGhpZGRlbj10cnVlPjwvZGl2PgotICAgIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9u
LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBv
c2l0aW9uLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggNjAxY2Q1YTg3ZjIwNDEwNjJmMWE5ZDA5ODAw
OWM1NDdmNTJmMzQ1ZS4uZDkxNGZjYmJlODFkNDdjZGJiMWFlZWJhY2I3OTVhMzc5MzFhNGExYiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10
cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQt
cG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRt
bAppbmRleCBhODM3ZTA1N2RiYzExOGM3NGFiYmI2MDNlZWM1NTZlN2M4ODdlNWE4Li5iYTQwMGNh
YzllYmZlMWNhMTBlMjkwYTc5OGU5OWQ3MmIzNDg4MGJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxlbmRt
b2RlLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUt
dHJhbnNpdGlvbnMuaHRtbAppbmRleCA4OTdjYjQ3ODkwZWNmNDhlMWZkMDA1ODhkNGI4OGM5MTcy
YjI2MTAzLi5hNWJmYTI3ZDNhZDMyMTk5MjA4OTIxNjE1MzBiNWQ3M2UxOWQ1Njk2IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCmluZGV4IGI4YTNm
YjUzZTdiZDZiYjA2ZDE5OWQ5NTVlNDAzYzkxMzcwN2Q1ODkuLjU2M2JhOWM4ZmY0ZjhhYzJkYjNk
NTE0YWIxYjM2MTYyNGNjZTMzMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgt
dHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRo
LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggZmYyM2ZhMDQ1MTIzZWQzMTA1N2U4MjdkNzFhYWRjOTg4
ZDIxMmQ3OC4uYzFmYWE1Y2Y0MjEyMTgwMzViNDEwZTJhZWMyYmQ2MjNiNzQwYTc2ZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0
aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKaW5kZXgg
YjU1ZWRmYjdlYTg0NTU1ZDhhYzQ0YmNhZmZjYTg0MGM3NTc4ZWY1Ni4uNWU2NjQ0YTg4NGZjY2Q2
MDdiYjc2MGIxOThkOTkwZjcxZTI5YWZkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10
cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24u
aHRtbAppbmRleCAzYzdlMjlmMTk3MDEyZGZkZWE0MzA0M2NjMDQyYTcyMWRlMDgxM2UxLi5mZGUx
ZjE3M2FiYzk2YjkxYWE0NmJlZjk3YThmOTA5ZWNmN2QwMWI5IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxo
dG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10
cmFuc2l0aW9uLWFsbC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNp
dGlvbi1hbGwuaHRtbAppbmRleCAzM2M1OTgwZTY4N2FiM2UwMmU3ZTNmMjU3NzZjODczZmQ1ZGU4
YWI5Li5hNDkyZTcxMzM5NDQwMGMyNmQzNDdlODhhZTFkMTNjMzE3ZTNkYzdmIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCmluZGV4IGM3M2ZkNGFh
ODNjZmFkOTViNTBiNmU2MzU5MWU5YWU2Nzk4OTU2ZGQuLjU3YzYzZWM5YThjMWFlMDdkYWQ4YzM3
ODVkZjNiODE0NGI5MjhmMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nv
bG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbAppbmRleCA2ZTc1NmJmMzM3ODNmZDcy
MWYzM2E2N2M4ZmJkNmYyOGYxNTVlNWIwLi5jYWFhMTE1NzlmOWIwZGY4NmUwODE5NGMwZDkwZjFk
ZGY4YjUwMzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLXJvdW5kaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3It
dHJhbnNpdGlvbi1yb3VuZGluZy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWlt
YWdlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQt
aW1hZ2UuaHRtbAppbmRleCA3NmU5ZGIyNmEzYjE0ZDRhMzhhM2NkYWYwMGVmNjZiZmY4ZWRkYjY0
Li5iOGQ3MGEyNzkzNTE1NWJlYWIyOGU3ODVjYWVmOGYyNTM4ZGM5NTZiIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2Uu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sCmluZGV4IDRkYmRmN2E2YjEz
ZjhhZWUwM2E3Nzg5YjM2OGMxMDhlM2QxYTRkZGYuLjg3ZGMwMDdlZGY1ZmI3NmZmMTQ1MWNhOWFm
ZjhjYjljYWFhNDE4OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3Nz
LWZhZGUtYm9yZGVyLWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jv
c3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1j
b2xvci5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93
LWNvbG9yLmh0bWwKaW5kZXggYjc2ZWI2NWFlZDMzYzg0NmM0ZGNlYzQ1Yjk3ZDU0MWEwMzhjZTdi
YS4uNzQ3NGY2NmQxMTZjNmYyYTIzYTJhZjYzM2E1MDQ0ZTI4YzJiNzY3MyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9y
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5j
dWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IENvbG9yczwvdGl0bGU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0
bWwKaW5kZXggNjZmZWJhY2ZmOTdlNDJhNjczYjFkYTU5YWFjMGY2MzcxZjllYzVhZC4uMWI1ZGRh
ZmRmNjQ4ZDlmMTBmMGVjOGYyMGQ5NDliYTM2MTZmZTg0ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJl
emllciB2YWx1ZSBvdmVyZmxvdzogTGVuZ3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKaW5k
ZXggYTk5YTRkYmE3MzZhZmIyZjk1ODA1YWU4ODg1ZTAyYmUwYzBhNzNmOC4uMGJjY2E4OGU4NzE3
ZGFkZjU5ZTNjZWJkMDY5MTljZWFjNGEyYTc2ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFk
b2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2
YWx1ZSBvdmVyZmxvdzogU2hhZG93czwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbApp
bmRleCA3MjAyNDY4MWIzYzNhN2NkZDE5YTI4ZjRjMjgzOGU2MDRhZDViN2NiLi4zNTU1MzAzOWZj
OWRhOGRiNmVlYTMyOTU2ZDkxYWMxZTY0MmNhMWQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJp
Yy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFNWRyBMZW5ndGhzPC90aXRsZT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0u
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFu
c2Zvcm0uaHRtbAppbmRleCA2NjA5NzI1MzRkYzY2MmJjM2I4MGZmNzY0OTM2ZmZiNGFkYTVmMjY4
Li42NTI5MTEyYjExZDY0ZjFlYzQwYWJhYzU3NWE2ODY4MTU0MDVkNTc1IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRy
YW5zZm9ybS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8
dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBUcmFuc2Zvcm1zPC90aXRsZT4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9u
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5o
dG1sCmluZGV4IDc5ODNmZGNlZDIyNjM3MGUxYTM0NDkwMTNlMGM5ODVlMGQ2ZTI4NmMuLjM1MDg3
YzM2NGEzZjFjOThlNDQwZDlhNzk5ZTBiZGQwY2JmMDAwYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9kZWxheS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbApp
bmRleCA5OWMzMWVhODdkYTA5MWQ1ZDY3ZGE1OWYxMWIzZjI2OTNhMGZmNGMwLi4zYTAyYjYyNzk4
MTA1YTM2ZDYwZWVhMTgyMWFmNzAzODBlY2NlYTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9kZWxheS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0
bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvZmxleC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10
cmFuc2l0aW9ucy5odG1sCmluZGV4IDlmYzQ2NjAzN2E1Mzk1MmZkYjkwMGRjMGU5NjNmNDM1MmU5
MTY5NDUuLjYxZjQ1NmFjZTkxNzMwZTdiMjRjZmY2YzU0MThmNzIwNWQ3NTNjZDcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8
aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvZm9udC1mYW1pbHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2RjZDIwZjE1
NzQ5MzdkOWFiY2I3NjZmMmU5MjA3ZGM3OGZkY2M3OC4uMDNmOTUyZGExYjczM2U4NDk2OTE0YzVh
MTc2OWE4MDE3YmM2YzhmZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9u
dC1mYW1pbHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Zy
YW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCAzMGZlY2M2ZDUxZDRjMDZlNjRlYzdhZWYw
MDA5ODUwNDZiYjVmMDhhLi5lOGIxNjIxMGVhNzY1N2U0NzBiMGRhMjgxNDAzOWY4NTUyMmE0MzA5
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0
aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5j
dGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5o
dG1sCmluZGV4IDdkNDczZTkxMjE0NjU4M2Y4MTEwOTNkZTI5N2JlM2FhZjUzOGJiNDguLjllNjZj
ZDRmOTI2MTRlMWU1MDdmMmNmYTY0MjNmN2QyZTYxMDA5ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbAppbmRl
eCA2MDk5MzNmNjA0YTcxNTI4Y2VmNDMxYTdiYTQ5NThiYTcyZTQ3OTVmLi4yMDJlNjRkNjQ0ZGY1
YzhkNWY1ZTRmOTkxODdiNDc3YTNhOGZiZDFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9tYXNrLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRy
YW5zaXRpb25zLmh0bWwKaW5kZXggYmM3YzcxODNlYWYzZjlkOWI0YzA2ODdkYmI5NzY0ZDNhOTcy
ZjUwOC4uMGMzZDM5YWI5ZjIxYWQxZmIwOTc4NjJmMDNlZDEyZWU1ZmNhMTZiMyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAog
PGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1t
YXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9taW4tbWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1sCmluZGV4IDEyMDQxMTdiY2Mz
MjBjMTJhODFlZTJiZWVlMjI4ZTQxMWY5OWI5YzcuLjlkZGYzOTM4YTI5YmYzZTEwYzhjOGI2Yjc0
NmUzMWIwM2Q3NDI2MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1t
YXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxo
dG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWwKaW5kZXggZTJlNWNiMDcyOWQ4MTNkOTg0
NjBiODk4NGE0MTIwYjRmYjllZGUyNy4uODcyM2MyNzQxNjg4YmVkNDkwM2M3OGM4Mjk2ODRiNDVk
NGNjNzYwMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1z
aGFkb3ctc3R5bGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hl
ZC1zaGFkb3ctc3R5bGVzLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ct
dHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hh
ZG93LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggY2I2ZDM0ZDg0NzViZmE2MTEzNmIzNjMzOGJiYzc4
N2UwZThlYzUwOC4uNjg3ZDEwZjEyMDhhODM1Y2QyNWZlOTAwOWQ0NTM3ZDRhMDhjNjcwNCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNp
dGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRv
dy10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sCmluZGV4IDI0ZmIxMWZlZjRlMTg3MmYxNDJiMGY1
NzJkZjU1MWMwNzM5M2IxYmQuLjMzMzIzNjhkNmU0NDg1MjBmYjgxNjgzN2Q0OWY3Yzk3OGU0NDg5
ZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPHN0eWxlPgogI2JveCB7CiAgICAgd2lkdGg6IDEwJTsKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2VkMmQ1
YTIyMjI4MDcwMTdlNTM2OWFkMDFlMTNkYjYxNWYzZTcyZi4uZGM0NDU4ZjJkNTI3Njc2YzhjZDcz
MmUwZTJiZWM5NjBlZDhiM2I2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRt
bD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4K
IDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFj
a2dyb3VuZC1zaXplLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9t
dWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCAyMTNlMjFhZGNl
ZDY2YTdhYWQ2N2VjOGI1Zjk1NjhjN2Y3YmVmZjI0Li4xNGQ3NTFjNjQ5NzMzYzFjMzBhMDdiZGM0
ZmZiOGVlMzYxYzUyMDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0
aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiMjll
ZTczZDM1MGQ5NWIzN2I3MjE3MTg2ZWFhOWJjMjkzMTgwNmM1Li41MDMwNjdjMTY0Y2E2MDc5NTdh
ZDU4ZjM2NmRmZmRhMjc0ZTc1ODU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
PgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sCmluZGV4IDM5MjNkOTNjNmQ4NDUzNGU1Zjdk
NzhlYjlmM2UzNmFkYTRmZDMwMmMuLjVjYmU2OWZjMDQ3NTcyZWFiZTYwYTA0ODdmMTUzNjVhNGNh
OWE5MTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2st
dHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1t
YXNrLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9u
cy5odG1sCmluZGV4IDM0YTBhZDI2M2NhOWYxNThkNzQ5OTA1YTRjNWRmYzY1NTFlOTNlYjYuLjRh
OWQ0ZWM1NjRmMzNjNTU0NzMzMTdlMTE4ZjRmOTA3ZWNlNzUwODggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25l
Z2F0aXZlLWRlbGF5Lmh0bWwKaW5kZXggYzc1YmU3ZjNjYzZkNTkzY2ZkMTA2MmE3NzU2NTc2YjVi
YWE2YTZiNi4uZDMzZTRiNTc2MGY1NTNjN2NjZDcwYjdkNGM3ZDgzNjY1NTNkMWY0ZCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbCBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbAppbmRleCBkODYzNzA1
OWVmNzBmZTdhMjJlYjBjZDIwOTU2ZTdhYmRkODc3MThlLi44NjJiYTAyYjE1ZjYyZWIzNDI4N2Zh
NThmNDRjYjVlYjQ3ZjljOWI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9v
cGFjaXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAog
PGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291
cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCA3ZTc5ZDBjOWUxYjQ5
YThlNzgxNjkzZTg0YmZmNDA5MTgzMjViZmM2Li5mMzU3MzFiNjVmYTRjNzUyZmQxMjYwMmQ3MDFm
YzA5Yjg2MGQwN2VhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJj
ZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC0zODEsMTQgKzM4MSw5
IEBAIGNvbnN0IHByb3BlcnRpZXNSZXF1aXJpbmdQcmVmaXggPSBbIi13ZWJraXQtdGV4dC1zdHJv
a2UtY29sb3IiLCAiLXdlYmtpdC10ZXh0LWZpCiAKIGZ1bmN0aW9uIHBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudCh0cmFuc2l0aW9uUHJvcGVydHksIHRpbWUsIGVsZW1lbnQpCiB7Ci0gICAg
Ly8gSWYgd2UgaGF2ZW4ndCBvcHRlZCBpbnRvIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNp
dGlvbnMgYXMgV2ViIEFuaW1hdGlvbnMsIHVzZSB0aGUgaW50ZXJuYWwgQVBJLgotICAgIGlmICgn
aW50ZXJuYWxzJyBpbiB3aW5kb3cgJiYgIWludGVybmFscy5zZXR0aW5ncy53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbHMucGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KHRyYW5zaXRpb25Qcm9wZXJ0eSwgdGltZSwgZWxlbWVu
dCk7Ci0KICAgICBpZiAodHJhbnNpdGlvblByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4KSAmJiAh
cHJvcGVydGllc1JlcXVpcmluZ1ByZWZpeC5pbmNsdWRlcyh0cmFuc2l0aW9uUHJvcGVydHkpKQog
ICAgICAgICB0cmFuc2l0aW9uUHJvcGVydHkgPSB0cmFuc2l0aW9uUHJvcGVydHkuc3Vic3RyKHBy
ZWZpeC5sZW5ndGgpOwogCi0gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIFdlYiBBbmltYXRpb25z
IEFQSS4KICAgICBjb25zdCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zKCk7CiAg
ICAgZm9yIChsZXQgYW5pbWF0aW9uIG9mIGFuaW1hdGlvbnMpIHsKICAgICAgICAgaWYgKGFuaW1h
dGlvbiBpbnN0YW5jZW9mIENTU1RyYW5zaXRpb24gJiYgYW5pbWF0aW9uLnRyYW5zaXRpb25Qcm9w
ZXJ0eSA9PSB0cmFuc2l0aW9uUHJvcGVydHkpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCA3MDg4MWZlOTAy
MWM4OTUwMTEwNTNmNDJmMWNiYmFhYzQzMjg2MjRkLi5hZWZjOWEwNTM4ZmViMDRmODNhZTE1ZTQ4
YjI1MjM5OWRkODE2NWYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFw
ZS1vdXRzaWRlLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
c2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFu
ZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0
aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbAppbmRleCAzNWM5ZTMyOTFmYWExMjYyMjJkNDQx
MGUyYTJmZTNlNzQ0OWU3ZjljLi5mYWE3NDVjMWIxZTdlMWEzOTFkNjI0Y2ViMWY1MTU0YzNkMDA4
NzI4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVy
LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5k
LWJvcmRlci10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8
aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFu
c2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRp
b25zLmh0bWwKaW5kZXggZDMyMmI0ZTFmNDFjNTVlMDRkMzA5OTM3ZmRkY2JiMTE2NWY5OTdjYy4u
YjU1MWEyY2JjNzY0YmNlMmVjZmRiNTcxNjJiNGExN2EyNGQzMTZkMCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCAzZWU1NWUwMGE0Y2NjMjdkYTQ3
Nzk1NTdjYTNmOTZmZTcwZWNiZmVmLi5iYjk2MmJjYjk3MDQzMjI5NjI5Yjg0YTkyZTRhMGNlMDU4
MDE1NDFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmct
ZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmct
ZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCmlu
ZGV4IDE0NWQ4M2EwMmIwMjJjNjFlNmZhODhkOTQ2NzAzZmJhYTRhYTE5NTEuLjAwNThhYjVkMTQx
NmRhNGI3Y2RlYmJkMmQxNGVhZDI4NjBmN2JjYmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4K
IDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hh
ZG93LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNo
YWRvdy10cmFuc2l0aW9uLmh0bWwKaW5kZXggM2ZjYWQzODgwNmNhNjAwN2JhNzhmNWYwYjQyMDI4
MDE1NDIzYTY1Zi4uNTc5N2U1ZWRlM2RlYWRkNzJkM2MzYWEzNTE1NmExMmExMDRjN2FhYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRp
b24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJh
bnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgICAgPHN0
eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25z
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbAppbmRl
eCA4ZjNkODJmNGU3NWQzNGQ1YWI2ZmIzODdiNDNlZDhiMzViOGVjNGMxLi5hYTM5ODgwNzhmYzll
ZGNhNmUyMGUyMjU4ZjEzZWM5ZTE5ZTlkZTc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9zdmctdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwKaW5kZXggNDc0NGI1
ODVjZWVmYjgxNDVlYjJlNDljNzk2MDFhNjE5MzFkZDFlMS4uMTZmOGFmMTg4MmE1YTc2Y2FkM2Nm
NzM1NDRhZjU5M2E5ZjIwMDcxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RleHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiAg
IDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW1hdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3At
bGlzdC1tYXRjaC5odG1sCmluZGV4IDBmOWM0ODczNGRkZmVkY2Y2ZmNmZmI3ZTM5Nzg5MDU4YWVi
ODE1NDIuLjBkM2YzM2VkMTUyNzkzNDAzMTU5YzMyMjYwZDJiMmZkODAyZDYzNWYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAppbmRl
eCA4NmRlYTdlMGZhNWViZDM1NjdiYzIxNDA4YzA3N2YyYTQ3MjgyYTI3Li5iZjZkMzBkZDNkYTZh
MjhjNzgxNTgwZDY0MWY3YmQyYzJlYzBhOTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbAppbmRleCAwMDdj
ZThkZDA1ODUzNTY3MjdkZTkxNjUxNWZiYjNjYzQyN2IxN2JkLi45NTlhZmQ2MGQwOWIwMTFiY2Uz
YWUxMDZkNjc5Y2E5YjZkMGMzYTlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbAppbmRleCAzZDMy
OWY0NjAyMTk2YWExZjQ5MzQwMDg4MmM4ODgwY2Y0NTgyMzdjLi5lZjgwNmM3MTFhMWUxNWFiZGQz
Nzk2YzVhNTg3MWI2OTEyZGM3ZDM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCmluZGV4IGQ5ZGY4NWMxNDQ3ZjA5YWRlNTJhYWE0MmIw
MWYyMjM4Y2JjYmUzYzcuLjgzYTYwYTZlMmU1NTNmMzdhN2Y1OWU2NzIxYjk4NWJlZDczYTAxNjUg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3Qu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sCmluZGV4
IDkzZTA0ZjJhMzI4ZmYyY2RhMTY1NmE0MzQ5MTA0ZjIxNDIxMDNhYjAuLmZjMmNlOTk1MTBhZGU3
MmQ2Y2U4MTU2OTE3NDViOTkwMDgwYTY4MmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxl
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVt
ZW50LXdpdGgtY29udGVudC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1vbi1lbGVtZW50LXdpdGgtY29udGVudC5odG1sCmluZGV4IDFmMDNlZWE3NzQ5NmY3YjczZmFl
YTdmMmMwY2M3ZDY3ZDg0YTJiYWIuLjNjNDcyOTQ5MTY3ZDY4MzIyYTI3MzcxZWEwNzFmMjc2MTFm
NjUzNjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24t
ZWxlbWVudC13aXRoLWNvbnRlbnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9u
LXNob3J0aGFuZC1kZWxheS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1zaG9ydGhhbmQtZGVsYXkuaHRtbAppbmRleCA2ODczMjI5ZDE0ZDc5NDYzY2UwZjQ0ZGY0NDkw
YWI0OTg3ZGNiYzNjLi5kZjA5ODlkOWY2NGZhN2RlNGU0ZWIzNTA4M2FlOGQ0NDliZWY0NmY2IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1k
ZWxheS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRo
YW5kLWRlbGF5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rp
b24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0
aW9uLmh0bWwKaW5kZXggOTExNzQ5MmIwYmIzYTEyYjgxMDM3ZWQyMjlmYzU5ZTBiNmVjZmQ5OS4u
MDUwYzUyZDMxNzFjODYyOTZmYzI3NjU1Y2IxMzQzYTU0NGYxOWJmNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgog
PGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLXRvLWZyb20tYXV0by5odG1sCmluZGV4IDRlMzdlMTY3ZjQxZjEyM2JlZGVkYjAyODBl
MjFiMDBjOTE2YjA4ZWYuLmQ4NDU5YjcxZDRjODNhOWMzZDdlMzY5MTUzNmY1OGJhNjkwOTRiYTQg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1h
dXRvLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9t
LWF1dG8uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVk
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZp
bmVkLmh0bWwKaW5kZXggMTRlNzhjNTAxNjFkZTgyNDI2ZGFjMmY3OWY0NjQ2OGYwNDI0ZWNlMC4u
NjI4Y2YyNjg1MmVhYThmOTM1NjYyNGQ5MTE5YzZlODc4ZWJhZjc4OCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCisr
KyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sCmluZGV4IDJlYTQ0NmM2YjJm
OTVhYTJjZjNkZWQzNjY3NjFlNDA2NTgzNjJjMmUuLmIxODc4ZDMxOTA1MjE3NjhlNjNiYTVlNWFk
N2M2ZDUzMmRlZTczZTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0
ZWQtbGluay1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQt
bGluay1jb2xvci5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+CisKIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sCmluZGV4IGU2NmFkZjNiMTkwYzllMGQ4
NWVhNzgwMmMxZDk3MWQzOGExY2ZlMmQuLmIyYmNiZjUyNTk3ZGRiM2Q2ZWRmZTg5MGNkZDYwNTZm
NTBlMmQ3ZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRp
b24taW4tbGlzdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRp
b24taW4tbGlzdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24t
emVyby1kZWxheS1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJh
dGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKaW5kZXggNjY2MWY5MWE0MDlhOTFh
YmQzYjljMDVlMTRiYTQ3NDQxMDUzMjQ1MC4uNjA4ZTAwM2Y1YzBkZTdmNjMwMzU4YTZiMDQ3M2E0
MzU5NTQ1YzIyNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJh
dGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3Bs
YXktbm9uZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmlt
YXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sCmluZGV4IDljN2ExM2I0NWI2NDUz
YTg0NWQ1OGUyMDVjOWI0ZTNlYzg1NDY1NGMuLmQxMTVjOTUxMTg0N2NjNWIxYThmNjg4NDk5MzU3
ZTZlYjBhMjAwYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxl
cmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24t
ZGlzcGxheS1ub25lLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQt
YW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbCBiL0xheW91
dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10
cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbAppbmRleCBiMzc2NjgxN2NmNDBlM2Q5ZGFlNjVlNDM5
Y2EyZGZmM2M2OWU1YmI2Li5hMWM4NDhhM2ExNTZhMGEwNGMwMGRiM2Q5Mjc2NGI0ZDA3OWI2MTIz
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1h
dGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRy
YW5zaXRpb24tY29tcGxldGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhl
YWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vs
ZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwKaW5kZXggMDY1NGE2OTVm
NWIyNGJjNDJmY2E3ZjFkMjM4MWRhMGY3MmFiNjg4Yy4uZWZhYTU0MzlkNGZiNzQwYWI1Yzc0MzEw
ZDE0NzY4ODgzYzM2OGZlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9h
Y2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXBy
b3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5z
aXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAppbmRleCBiZWYwODA4ZTk0N2M5NmEwNTRj
MzE4YjkxZDU5YTUyNDAyMWUzYjI3Li5mMzQwMWI2Y2U2NjBmYjYyMDdkOGI5MWYzYzUyNmViZjZj
NmMwN2Q2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVk
LXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHku
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KICAgICBkaXYgewpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1l
LWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFu
aW1hdGlvbi1lZmZlY3QuaHRtbAppbmRleCBiNjA1YzA4OTExYmE2OTMxYjBjZjM4MzViNzljY2Iw
YzRmZjUzNjc0Li45ZGQ1NjE4YmI2NzUwMWVmOTA5ZjYzNzJkMWYxMTkxZjVhZWM5MjY3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUt
YWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3Nz
LWFuaW1hdGlvbi1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0
PXV0Zi04PgogPHRpdGxlPkNyYXNoIGFjY2Vzc2luZyBhIENTU0FuaW1hdGlvbidzIGN1cnJlbnQg
dGltZSBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRp
bWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlz
aGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbAppbmRleCA1OGY2YzQ5YjljOGMw
ODJkZjhjZTkxNmQ4YzYxNjhhMGQ4OThjZTNmLi40MzA2YTE5ZWJiZDNjY2Y4ZGU5OTFiNWM1ODMy
YjRiMTNmN2QwYTFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vz
c2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVt
b3ZhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJl
bnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBh
Y2Nlc3NpbmcgYSBDU1NBbmltYXRpb24ncyBjdXJyZW50IHRpbWUgYWZ0ZXIgcmVtb3ZhbCBvZiBp
dHMgdGFyZ2V0PC90aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9u
LXJlbW92YWwtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1h
dGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRt
bAppbmRleCBkOTgwZDM1NjI4ZTRhYTM5YTE4MzQwMzVkNTdlNDdhZjBjZDFjYmI3Li42NmZiYTU1
MmY4NWRkM2MyODE3ZDcyMTE5ODM3NTYzMmI4ZDY5OTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFu
aW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3Zh
bC1jcmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRh
cmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtl
eWZyYW1lcy1jcmFzaC5odG1sCmluZGV4IDU2MDg3MjEzYTQ1ZWRkNDc2YTA4ZWQ5MzljYzE2YjA4
ZjUxNGNjN2IuLjllNTUzYmRmYmE0YmY2ZTVmMTExM2U4MTg5ZmMyYTAxMzc3NDE4NzYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFy
Z2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0
LWtleWZyYW1lcy1jcmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxl
PgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25z
Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwKaW5k
ZXggODNmZTk1Y2E3ZGYxNjYzYWQ1OTA4YWJlMDRhMzZiZjU3MWE1NTFhZS4uZTVmOTUyMDAwYzZh
NGVlZTVlZmRiMjFhYTZlN2U0NzdkNTliYmEwYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFy
c2V0PXV0Zi04PgogPHRpdGxlPkNTUyBBbmltYXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0
ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmlt
YXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2
ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbAppbmRleCAzMDc4M2E4YmZmMGJiMDFhNGVmYjQwNThiYWRj
NzA5MThhMmU5NzBmLi4wNGRiYWE1M2NhMWQyMzZmZDk4MGJjY2Q3MWNhOGI5YTNhZjkyODc3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZs
aWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD0idXRmLTgiPgogPHRpdGxlPlJldmVy
c2FsIG9mIGFjY2VsZXJhdGVkIGluLWZsaWdodCBDU1MgVHJhbnNpdGlvbnM8L3RpdGxlPgogPHN0
eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sCmluZGV4IDYwYWMzNjVm
MzA1NjU0M2EzZjE4NjU0YjlmN2MyZjNlMTI0N2M1NjIuLjBmNWZmYjNmMjcwODY3YjNhNjNlZTAz
MWEzMjViYmFiYWE0MTc3ZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
ZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBo
dG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4K
IDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9w
YXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1i
eS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCmluZGV4IDRkYmY3MDZlNDE3NGYyOWFiMTk1YjhlMmZm
NTYyYTlkMDkzN2FmN2EuLmZhM2M4NTVkYmNiMjZlOGQ5OTdjMTI1MjQyODgzMmM5MTExODdjOGYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVk
LXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXBy
b3BlcnR5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGJvZHk+CiA8cHJlIGlkPSJyZXN1bHRz
Ij48L3ByZT4KIDxkaXYgaWQ9InRhcmdldCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9w
OiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAwcHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29s
b3I6IGJsYWNrOyI+PC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L3NldHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRl
ci1jbGVhcmluZy1lZmZlY3QuaHRtbAppbmRleCBiZDI0MDY4YmNjNDVkYzM4MjkwODg5ZmQ3YzNh
MzQ2NGNmMjAxN2ViLi5mODBiMDQ3ZjI2NTZmZTU5MTg4MTViMDMyYzg3NTU0ODZlMDdiZmJhIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlv
bi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5D
cmFzaCBzZXR0aW5nIGEgQ1NTIEFuaW1hdGlvbiB0byAibm9uZSIgYWZ0ZXIgc2V0dGluZyBpdHMg
ZWZmZWN0IHRvIG51bGw8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1z
dHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXIt
Y2xlYXJpbmctZWZmZWN0Lmh0bWwKaW5kZXggNGIxNTA0YWJjYWQzZTdkYjA0MTNjZGRiZjMzMzYx
ZWE0OTQ1NGFmMS4uOTMyYmM5MWE3NmVhMTU1ZjlhYjg2ZDhjOTA0ZDhmZWI1MzVjNzc2YiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24t
dGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmct
cHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENT
U0FuaW1hdGlvbidzIHByb3BlcnR5IHZpYSBzdHlsZSBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3Qg
dG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+Cg==
</data>
<flag name="commit-queue"
          id="424477"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408931</attachid>
            <date>2020-09-16 10:06:44 -0700</date>
            <delta_ts>2020-09-16 11:39:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916190642.patch</filename>
            <type>text/plain</type>
            <size>558209</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGZiODMxYjM1OTc3MTBiZmY4YWFkOGY4ZDI5ZTA5
ZDRkYTRiYzNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzLCBzb21lIFJlbmRl
ckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25z
IGFuZCBhCisgICAgICAgIG1lY2hhbmlzbSB0byBub3RpZnkgd2hlbiBhbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkbyBub3QgdXNl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsOgorICAgICAg
ICAqIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9u
UGxheWJhY2tFdmVudEluaXQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcik6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oLgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NUcmFu
c2l0aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGw6CisgICAgICAgICogYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0
aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzdW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBk
b20vUHNldWRvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50Ojpj
bGVhckhvc3RFbGVtZW50KToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJB
bmltYXRpb25TdGFydGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFUaW1lVG9DdXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFuaW1hdGlv
bkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbGVtZW50OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
UGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJl
bmRlcmVycyk6CisgICAgICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgICog
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRy
ZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0
aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAy
MC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl1bMS4xOF0gUmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmQ4OGQwOWM2MGQy
NjllYjhlYjkxZjgxMmMyMTJlNzc5OGNjMTM1OC4uZjIxNmYyOTRmODMxYmQxZDBlYTAwOWJjYWYz
ODFlZmI2NmZlNmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwg
dGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25z
IGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92
ZWQuCisKKyAgICAgICAgV2UgYWxzbyByZW1vdmUgdGhlIG1lY2hhbmlzbSB0byBub3RpZnkgd2hl
biBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9u
IGVuZ2luZSBkbyBub3QgdXNlLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAg
ICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
ZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1ByZWZlcmVu
Y2VzIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVI
b3N0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25E
aWRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpvdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0
YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAobWVkaWFUaW1lVG9DdXJy
ZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0
aW9uRGlkU3RhcnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KTog
RGVsZXRlZC4KKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlM
RUQgaW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3
NDYxM2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24g
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2lu
Y2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxh
Z3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAg
ICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVd
KToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgor
CiAyMDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQ
SQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcy
ZGQ0NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0w
OS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9u
IGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBB
bmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUg
bm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAq
IFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXpl
RGVmYXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBz
ZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAyMGY4YzQxMmFhMjMzNzU1NWIzN2Q1OTQxZTE4YjJlYWRmZDM3YmVmLi41OWY3
OTJhOTQ4N2ZhOThiODE2NTliYTEyMWEyMjBjYzJjMTA0OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vbWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVfRElS
fS9wYWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1NWExOGQzMjA0OGU3NmU2NTFlMDA2MDVmODBiMDVh
MzI3YTExZWUuLmNiNGE5ZGU5Mjc3YWZlOWI3NDRlY2ZlNTQzZDA1Y2RhYTU5YWE1MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtODg5LDkgKzg4OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAgcGFn
ZS9XaW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgK
LSAgICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQyZmEyMTQ2Y2ZiYTlk
OC4uMzg4MjdjNDNjMWM1MWVlMjhlODY5N2Y5Y2RkN2IxZmJhNjhmYmVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNwcAog
YW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmltYXRp
b24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5j
cHAKQEAgLTE2NzUsMTIgKzE2NzYsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5jcHAK
IHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRv
ci5jcHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1wYWdl
L2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAot
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuY3Bw
CiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjY1NTk4
ZjYzNTA0ZDgzNWQ0ZGRhNzNlMjY3ZTYyMjlkMDcxMzNkMi4uMjhlOWYyOTFiZjMwOTlkNmMyNTNi
ZmVmZWJmMGVkMmRmMTliM2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4MjJF
M0M0N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBGcmFt
ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUw
RjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmls
dGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURB
ODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87
IH07CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdFQzdD
NTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9s
bEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsg
fTsKIAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgxODAw
RDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05MTYsMTEgKzkxNSw2IEBACiAJCTMxNkRFNzAyMUU4M0FFMUQw
MDg0QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0
YUNoYW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyogSlND
U1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oICov
OyB9OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3MDBF
NkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZFMTEy
MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEw
QTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFEQTcw
MEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3Np
dGVBbmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxp
Y2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLzsg
fTsKLQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBFNkUx
REE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQxNjYz
NjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8q
IFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVyRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxN0Qz
RkYyMjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JGODkg
LyogSW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIxNTIs
NyBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0
MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1
QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIz
OEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1
MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJG
RjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIz
RUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZH
UHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThB
M0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2IEBA
CiAJCTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAxQjFF
RDcyMkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3N0Q1
MTAyNTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1NTAw
REE0Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQxMkY5
REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAwQzc3
QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJDNjE1
NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAyMTI2
NkUgLyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3NpdGlv
bkV2ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUYyRjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3
QTA5Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JEQiAv
KiBGaWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZp
bHRlcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBs
YXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VDN0M1
MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2VkQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIx
NSwxNiArNzIwOCw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZy
YW1lc1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlmcmFt
ZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NEN0Yw
MEJGNjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENT
U0tleWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDky
MEU2Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRp
b25CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4
IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZFMURB
NzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYw
ODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZy
YW1lQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtl
eWZyYW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUx
MTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2ludGVy
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk4ODMsNiArOTg2Niw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAyQjM4
OEYwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9u
RWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3
MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhU
b3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQ
b2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJB
MDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTk5MSw4ICs5OTc2LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2aWdh
dG9yQ3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZp
Z2F0b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VGNjJG
MTEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURCNzQw
MEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4
RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21w
b3NpdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q29tcG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5
MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0aW9u
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTIsMjYgKzE4Njk1
LDYgQEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKLQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2
MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4IC8q
IENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4
OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUxREE3
MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5MEYz
QUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAotCQkJ
CTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8s
Ci0JCQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
Ki8sCi0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNw
cCAqLywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24u
aCAqLywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24u
Y3BwICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlv
bi5oICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0aW9u
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQzMSw3
ICsyMTM5NCw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUxRDg0
MDBCRjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3OCAv
KiBjb2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAogCQkJ
CTE4QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3NCw2ICsyMTgzNiw4
IEBACiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAgKi8s
CiAJCQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAogCQkJ
CTcxQzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJCTcx
RjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCisJ
CQkJNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8s
CiAJCQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQuaCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5j
cHAgKi8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaCAq
LywKQEAgLTMwMzE1LDcgKzMwMjc5LDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAg
LyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIx
OUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25F
ZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4
IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjk4LDcgKzMwNjYxLDYg
QEAKIAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9z
ZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNB
NkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAvKiBD
b21wb3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3MTEw
MEVCN0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApAQCAt
MzA4MzgsOCArMzA4MDAsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBDcnlw
dG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0MUYz
Q0NFNjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEw
MTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDkwOCw3ICszMDg2OCw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVE
OEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5
MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcxMzQx
RkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzIsNyArMzE2OTIsNiBAQAogCQkJCTU1
QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMzOEMw
MEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzg2
MzNFOTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVudGlm
aWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA5LDcgKzMyNjY4LDYgQEAKIAkJCQk1MTdBNjND
NjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0UgLyog
S2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNCNDFG
OUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcx
MjQ3RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0NjQ3
MTAwMDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1NjIy
ZWNhZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJs
ZS5pZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvd2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1bCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBBbmlt
YXRhYmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dFeGNl
cHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0
PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5p
bWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRB
bmltYXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJkZjFm
ZTJjNjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlhM2M1
MTIzMjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvbkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0
UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3RvbVRv
SlNPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2OTFi
NDg1MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVlMWUw
ZTgzMmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsK
LSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3cs
CiBdIGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNvbnN0
cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5p
dCBldmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBlODIx
ZGI0N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFiYjI2
MDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5
YmFja0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blBsYXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rpb25h
cnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFyeSBB
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBjdXJy
ZW50VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4IDA0
ZmE5NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIxNDNl
ZmM4NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9F
WFBPUlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGltZWxp
bmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAxZTVi
ODg0YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5NmY5
YmU5NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5p
bWF0aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJp
bmc7CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
biwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2ViQW5p
bWF0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9uTmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZmYTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlB
bmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlB
bmltYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JCbGVu
ZGluZy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUgIkZv
bnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUgIklk
ZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVu
ZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dy
ZXNzKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20p
ICogcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jl
c3MpOworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVu
Z3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgp
IHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgo
KSwgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZy
b20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJu
IHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5k
RnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKworc3Rh
dGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisg
ICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsK
KyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jl
c3MpOworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRv
d1N0eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93
RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNv
bnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgpICE9
IHRvLT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8p
OworCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRp
b24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+cmFk
aXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5zcHJl
YWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmltLCBm
cm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5pc1dl
YmtpdEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3Io
KSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rp
b25MaXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRp
b25zKGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50
ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRl
cmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNT
aGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQ
YXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpT
aGFwZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNo
YXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUo
KTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0
aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5jYW5C
bGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBlQ2xp
cFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3Mp
KTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVl
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAg
IHJldHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6
U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAgICAg
cmV0dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKKyAg
ICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZy
b20tPnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUo
KTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICByZXR1
cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7CisgICAg
QVNTRVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBi
bGVuZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMg
YmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0Owor
ICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXpl
X3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0
ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwg
ZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygp
W2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9w
ID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dy
ZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVz
cywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9w
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0ZXJP
cGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0
eUZpbHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElmIHdl
IGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rp
b24gYW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIHN3
aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAgICAg
IGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAg
YnJlYWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJv
cEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAg
IGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0g
YW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0c01h
dGNoKQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwg
dG8sIHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5j
dGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBk
b24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAgIC8v
IEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9IHRv
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRy
PFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NF
UlQoaW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0
ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGltYWdl
VmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRlclZh
bHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVu
dFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFs
dWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9w
ZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0
eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55IG5v
bi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUu
IE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52aXNp
YmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBW
aXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFs
dWVzLgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRvOwor
ICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRV
bmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9m
ZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgp
LCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJsaW5l
T2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29y
YXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25U
aGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFs
dWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERlY29y
YXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVu
Z3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKK3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0
by50b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0s
IGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxl
ZnQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5l
IFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJv
bSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlu
bGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3Qg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBzaXpl
X3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNp
emUoKTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBm
cm9tIDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzID09
IDEgPyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7Cisg
ICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIo
c3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xl
bmd0aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwg
dG9MZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9t
TGVuZ3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVz
dWx0KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5n
dGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21b
aSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdl
KiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVzcyBp
cyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hv
dyB0aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhh
bmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNzKQor
ICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEpCisg
ICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICByZXR1
cm4gdG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8gdG9J
bWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBjcm9z
c2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VW
YWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsK
KyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRl
VmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20s
IFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0
bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2Uo
KTsKKyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRv
KQorICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdv
IGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAgICBp
ZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRl
ZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Cisg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlzPENT
U0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRl
ZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KKyAg
ICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0Zp
bHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIu
ZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNz
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdl
bmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAg
ICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9z
c2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1
ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQp
OworICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3Nz
ZmFkZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jv
c3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAg
fSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNo
ZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2Vu
ZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUo
KTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7
CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAoZnJv
bUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0byku
Y2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJv
bUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3Mp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVu
IGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2Fj
aGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8
U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVy
YXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRkIGlu
dGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAgfQor
CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5k
IGdlbmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBp
czxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQo
YW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2Fj
aGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkg
fHwgIXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1FICg3
NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0
IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmltYWdl
U2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRv
LmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5m
aWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9u
dGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCisg
ICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAx
LjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAgICAg
IHJldHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5j
KGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9t
LmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91
dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOworfQor
CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFyaWF0
aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUoKSAh
PSB0by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAg
ICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBmcm9t
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVtID0g
dG8uYXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCisg
ICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0
IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0u
dmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFn
KCksIGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vu
ZGlmCisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwg
Rm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20p
LCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5l
IE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAg
IHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZs
b2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dy
ZXNzKSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJvcChw
cm9wKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwg
ZG91YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHko
KSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBD
U1NQcm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
UHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkK
KyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgIH0K
KworICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwg
IiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIg
PDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2
YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJlbmRl
clN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+
OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVm
UHRyPFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0
dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0
ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dy
ZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3Nl
dHRlcikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAgICB9
CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChh
LT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYm
KTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9w
ZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVy
YXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBz
YW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBp
cyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0aE9w
ZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBhdGhP
cGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChjbGlw
UGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0
aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5n
cz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJp
YXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNl
dHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25T
ZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAg
cmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAgfQor
fTsKKyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHBy
b3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBp
ZiAoc2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHls
ZUltYWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBy
ZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQorfTsK
KworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xv
ciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJT
dHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9w
YWNpdHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJB
Y2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDogUHJv
cGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0s
IGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQor
ICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVy
dHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9u
SXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gcHJv
cGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIp
CisgICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25z
Jj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgIH0K
K307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0gMDsg
c2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRh
KiBvdGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4g
ZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1h
bCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hT
aGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hh
ZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsK
KworICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAgICBp
ZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAgICBy
ZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2Vi
S2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOwor
CisgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRX
ZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOworfQor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0
YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cwor
ICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3Rz
CisgICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hh
ZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dM
aXN0TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVu
Z3RoKHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChm
cm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3QtPipt
X3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywg
c2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMo
YW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwg
ZmFsc2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBi
ZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVh
bSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IG5ld1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOworCisg
ICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0Ip
OworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxl
bmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0
U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93
UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93
KQorICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQo
V1RGTW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVu
ZGVkU2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0Et
Pm5leHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5l
eHQoKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKKyAg
ICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hh
ZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVyc2Ug
dGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93
RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
ZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93c1tp
XSA9IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOworICAg
ICAgICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3Mo
dG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAgIHNo
YWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVuZ3Ro
ID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBm
cm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAgICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93
c1tpXSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNo
YWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9t
U2hhZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5k
ZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNz
KTsKKyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJl
c2VydmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZN
b3ZlKG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3Zl
KGJsZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0Rh
dGE7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNv
bnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9w
KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZh
bHVlKGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICByZXR1
cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAg
ICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8
PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENv
bG9yJik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRD
b2xvciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlx
dWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAg
LCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3As
IHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUlu
dmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCisg
ICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICB7
CisgICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyYXBw
ZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CisgICAg
fQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
UmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3dy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zpc2l0
ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBw
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1f
dmlzaXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1h
dGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAgICB9
CisgICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0g
ZGVmYXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19ESVNB
QkxFRAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Cisj
ZW5kaWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIg
OiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnBy
b3BlcnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisgICAg
ICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBGaWxs
TGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlciko
KSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChG
aWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdp
blNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKKyAg
ICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5H
ZXR0ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRl
cikKKyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRvTGVu
Z3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRl
cikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYm
IGZyb21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5
ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAgIExl
bmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVkZ2Ug
PSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdl
KSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisgICAg
ICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChm
cm9tTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsK
KyAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aCh0b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9t
RWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8g
dGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAo
ZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0
aCwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwg
IiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
KyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVu
Z3RoU2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVy
KSgpIGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsK
KyAgICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
RmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxM
YXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwg
Y29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAg
PDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUo
YSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNl
bmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0
dGVyKSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Cisg
ICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExh
eWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShi
KSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJz
KHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCit9
OworCitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0
ZXIpKCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVy
c0FjY2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3Nv
cikKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAg
ICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29y
KGFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5
V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHBy
b3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwg
JkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRY
T3JpZ2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxs
TGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdp
biwgRWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAg
ICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXll
clByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVM
ZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBtX2Zp
bGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpz
ZXRJbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byog
ZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5
ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxheWVy
ICYmIHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAg
ICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwor
ICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAgICAg
d2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmls
bExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOworICAg
ICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXllciA9
IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVy
c0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVy
KSgpOworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIp
KCk7CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAg
ICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwg
YUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+
bmV4dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAg
ICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXllcnNH
ZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3Nv
cjsKK307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJz
KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAg
ICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVy
IDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFs
cyhhLCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVy
cykKKyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3Mp
OworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRz
dCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChhdXRv
JiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+bG9n
QmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBW
ZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAgVmVj
dG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9
OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3co
KSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+
ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRG
dW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7CisgICAg
ICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBi
LT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9Cisj
ZW5kaWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwg
U1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29s
b3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09
IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBT
VkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBldmVy
eXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lz
ZQorICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2
ZXIuCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlw
ZTo6UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKwor
ICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7Cisg
ICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRvQ29s
b3IgPSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChiLT4q
bV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4K
KyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGlu
ZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1BhaW50
VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBDb2xv
ciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHls
ZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
Rm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9u
YWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHls
ZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZv
bnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50Owor
ICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAgICAg
ICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAgICAg
aWYgKGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8
IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKwor
ICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAgICAg
ICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8gYmxl
bmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250
SXRhbGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJ
dGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJv
Z3Jlc3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRz
dC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlv
biA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxp
YyhibGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4
aXMoYmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShj
dXJyZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5
YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJldHVy
biBtYXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAgIGlm
IChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1By
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQg
d3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAgICAg
aWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVy
c1t3cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAo
KTsKKyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisKKyAg
ICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlE
IC0gZmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworICAg
IHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4
ID0gVUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAvLyBi
dWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMg
YW5kIGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxl
OjpzZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKKyAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0
eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5k
ZXJTdHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
V2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWlu
V2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgp
LAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgs
ICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAorCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5k
ZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6
bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6
OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lk
dGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVm
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5U
b3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5C
b3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBh
ZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJT
dHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwK
KworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJv
cGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0
eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tn
cm91bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0
eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCisg
ICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1h
Z2UpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFu
dFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwg
JlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJ
bWFnZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAgICAg
IG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFn
ZVNvdXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1h
Z2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94
SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcgRmls
bExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3Jv
dW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxs
TGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5
ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRl
clN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorICAg
ICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVN
YXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5
bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwg
JlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAorICAg
ICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3Bl
cnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRD
b2x1bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBM
ZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0
eWxlOjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNo
b3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0
aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2
ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFj
aW5nKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4
LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZp
ZWRaSW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0
eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5z
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3Ms
ICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVPZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQs
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVj
dGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHls
ZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2lu
WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVj
dGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9y
bU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVu
ZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3Jp
Z2luWSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJh
bnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5
bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3Bl
cnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJU
b3BMZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxl
Ojpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJh
ZGl1cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNp
emU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRp
dXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXpl
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0
eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpYmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRS
ZXR1cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0
eWxlOjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRP
cGFjaXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9y
bSgpLAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9w
ZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVy
KSwKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2VuZGlm
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9y
RmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0
QXBwbGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRo
KENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQ
cm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVu
ZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBl
SW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCisK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3Bl
cnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRM
aW5rQ29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRB
ZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0
ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxs
Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdo
dENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJU
b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9y
ZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNv
bG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGlu
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKworICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAm
UmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJl
bmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAorCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5k
ZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNp
dHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQ
YWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRTdHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZS
ZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hB
cnJheSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ry
b2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5
bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRD
eCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJl
bmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHls
ZTo6c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlS
eCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJl
bmRlclN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQs
ICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJv
a2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJT
dHlsZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJT
dHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29k
Q29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENv
bG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0
b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0
b3BPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRp
bmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQs
ICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2Vs
aW5lU2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFs
dWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5
bGU6OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFy
aWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVu
ZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJv
cGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxl
OjpzZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUo
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4o
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVj
b3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NT
UHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVP
ZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZf
QVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisgICAg
c3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNb
XSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1j
b2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBm
b3IgZm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ss
IC8vIGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAgICAg
ICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRp
dXMsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3Ig
bGlzdC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAgQ1NT
UHJvcGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxl
LAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAgQ1NT
UHJvcGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVz
IHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgLy8K
KyAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgbV9w
cm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisgICAg
Q09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0
YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRh
YmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlXcmFw
cGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXND
b3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8gRmly
c3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1h
cCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4K
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0
aWVzQ291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3
cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAgICAg
bV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Qcm9w
ZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgewor
ICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJv
cGVydGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1dG8g
bG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRl
eCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdyYXBw
ZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVy
SW5kZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1f
cHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhh
bmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykp
KTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
ciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
cio+KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgewor
ICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwg
Y3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBw
cm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KGNvbnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkp
OworCisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5l
ZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENT
U1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKHBy
b3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRv
bigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAgICAg
ICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9HX0RJ
U0FCTEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwor
I2VuZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5
QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3Ap
OworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNB
Y2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2lu
Z2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVyID8g
d3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5vdGU6
IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRp
b25BdFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246
OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9w
ZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMp
OworCisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVy
dHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5J
bnRlcnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5SUQg
Q1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8
Ym9vbD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKwor
ICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAgIGlz
U2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJuIHdy
YXBwZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVt
UHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cDo6c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgwYzUz
ZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVy
dHlJRCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
Q1NTUHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAg
c3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBDU1NQ
cm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0
aGFuZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBz
dGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQcm9w
ZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFiNWFk
ZmQwNmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEzOWIw
NTlmMWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Ry
YW5zaXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9u
LmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwKICAg
ICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1hdGlv
biB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9wZXJ0
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlv
bnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwK
aW5kZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRlNDll
MjAyZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwog
CiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9u
cy10by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJB
bmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50ZXJm
YWNlIERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0
aW1lbGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1l
bnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4YTUz
NGMxZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0YTc4
ZWRlNTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9y
U2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8K
IAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lv
bnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAgIEVu
YWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBE
b2N1bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVudE9y
U2hhZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25zKCk7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxp
bmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCmlu
ZGV4IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEyNTQ0
MjU1ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAog
XSBpbnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAgICBb
Q2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxpbmVP
cHRpb25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5pZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4uZjBm
MzJiMGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVm
IFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNlYzNm
YTg0MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0ZThk
YTAwZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmlt
YXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRs
CkBAIC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwogICAg
IEFjdGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAg
ICAgSW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2Vi
QW5pbWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZjOWE2
ZDRhNTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiArNTAs
MTEgQEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAgfQog
fTsKIAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21wb3Np
dGUgICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAxCit9
OworCiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0aW9u
c01hcmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9IExp
c3RIYXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBhYzBk
ODA1YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uMzY5YjFiZDZjMDZkMGM2NGVjNjIwOTZkZmZjYTM4
YmEzOGEyYTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NT
Qm9yZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94Q29u
dGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRp
b24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEgKzIy
NDYsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5
bGVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Nv
bXBvc2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVk
QW5pbWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICBpZiAoYXV0byB0aW1l
bGluZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAg
ICBvd25lZFN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVy
ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvd25lZFN0eWxlID0gcmVuZGVyZXItPmxl
Z2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIpOworICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVydHlB
bmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKSB7
CisgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0ZWRTdHlsZSgpOwogICAgICAg
ICBpZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBQc2V1ZG9JZDo6Tm9uZSAmJiAhZWxlbWVu
dC5pc1BzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FjaGVk
IHBzZXVkbyBzdHlsZSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIGFuaW1hdGlvbiBoYXMgYmVlbiBy
dW4gYXQgbGVhc3Qgb25jZS4KICAgICAgICAgICAgIHJldHVybiBvd25lZFN0eWxlLT5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IDkwOTZmMjY0Njc5MTMwYTc4NGE1MWE5YWRjOGJhZGViZWM3YzdhYzQuLjI5NDBj
NThiZjE3OGM1MjBhNjA5ZWIxYjczNzczOGViNjY5ZmRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZv
cmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgpAQCAtMTk2Miw3ICsxOTYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29s
dmVTdHlsZVR5cGUgdHlwZSkKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShTdHlsZVJlY2Fs
Y1N0YXJ0LCBTdHlsZVJlY2FsY0VuZCk7CiAKICAgICBSZW5kZXJWaWV3OjpSZXBhaW50UmVnaW9u
QWNjdW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXcoKSk7Ci0gICAg
QW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHVwZGF0ZSBwZXIgdHJlZSBz
Y29wZS4KICAgICB7CkBAIC0yNDIyLDE5ICsyNDIwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmRpZEJl
Y29tZUN1cnJlbnREb2N1bWVudEluRnJhbWUoKQogICAgIC8vIGJlIG91dCBvZiBzeW5jIGlmIHRo
ZSBET00gc3VzcGVuc2lvbiBzdGF0ZSBjaGFuZ2VkIHdoaWxlIHRoZSBkb2N1bWVudCB3YXMgbm90
IGluIHRoZSBmcmFtZSAocG9zc2libHkgaW4gdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hl
LCBvciBzaW1wbHkgbmV3bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAg
ICAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5z
dXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1lbGlu
ZXNDb250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5k
QW5pbWF0aW9ucygpOwogICAgICAgICBzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3Vz
cGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVz
dW1lU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRl
ZCk7Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYg
KG1fdGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRy
b2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhp
cyk7CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3Rp
bWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CiAKQEAgLTI1
MjgsOSArMjUyMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQog
ICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5kZXRh
Y2hGcm9tRG9jdW1lbnQodGhpcyk7Ci0KICNpZiBVU0UoTElCV0VCUlRDKQogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBNb2R1bGVzL21lZGlhc3RyZWFtLgogICAgIGlmIChM
aWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkpIHsKQEAgLTMwNjYsOCArMzA1NSw2
IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICBpZiAoYXV0byogZG9j
dW1lbnRMb2FkZXIgPSBsb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zdGFy
dEljb25Mb2FkaW5nKCk7CiAKLSAgICAgICAgZi0+bGVnYWN5QW5pbWF0aW9uKCkuc3RhcnRBbmlt
YXRpb25zSWZOb3RTdXNwZW5kZWQodGhpcyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBiZSBkaXNwYXRjaGluZyBwZW5kaW5nIGV2ZW50cyBnbG9iYWxseSBvbiBhbGwgRG9jdW1l
bnRzIGhlcmUuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgZG8gdGhpcyB3aGVuIHRoZXJlIGlz
IGEgRnJhbWUsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIEpTIHJlZW50cmFuY3kKICAgICAg
ICAgLy8gYmVsb3cgU1ZHIGZvbnQgcGFyc2luZywgZm9yIGV4YW1wbGUuIDxodHRwczovL3dlYmtp
dC5vcmcvYi8xMzYyNjk+CkBAIC01NDU0LDExICs1NDQxLDggQEAgdm9pZCBEb2N1bWVudDo6cmVz
dW1lKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgQVNTRVJUKG1fZnJhbWUpOwog
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX3RpbWVsaW5l
c0NvbnRyb2xsZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFu
aW1hdGlvbnMoKTsgIAotICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRp
b24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgaWYgKG1fdGltZWxp
bmVzQ29udHJvbGxlcikKKyAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVBbmlt
YXRpb25zKCk7CiAKICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhyZWFzb24pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggOGY4NmZmNDFhNjY0NjgyYzJmYzY4N2UzZWJhNjgzYzUzZmM2Mzg2
YS4uYzViMzMxNmNjZjY0MjE2ZjI5MWU2YmE1NmFiODcwODEzMGY3MTQ2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9u
LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1Bh
cnNlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgpA
QCAtMTE5LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRlICJW
b2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJXZWJB
bmltYXRpb25UeXBlcy5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTGlu
a05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjI4OCw5ICsyMjg4LDYgQEAg
dm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBl
LCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVu
dCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNSZW1v
dmVkKCp0aGlzKTsKIAotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1h
dGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOwotCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5U
X0xBVENISU5HKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFtZS0+cGFnZSgpLT5zY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1BzZXVkb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQu
Y3BwCmluZGV4IDE1ZDgxYzEwNmQ4MDkzNTNmMjFiZTdlYzg0ODNkZDg4Yjc2MjhiMzcuLmRhZDE1
NjZjYzA2YTNkMTRkNmJjYjdjNTA3NmVjYzE4YjZjN2E3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNl
dWRvRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWVs
aW5lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05Myw5ICs5
Miw2IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgaWYgKGF1
dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAgICAgICAgIHRp
bWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAgICAgCi0gICAgaWYgKGF1dG8qIGZy
YW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9u
KCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0
cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCmluZGV4IGNhZGZiOTY5YjJhNGE0Y2Y5
YjU4MThkNzM0NDY2YmEzNGJlYjYyODMuLjA2ZmUxY2IyMGVhZmRlZGJiOGUxYzY3ZDZjYmNiYzY4
YmZmZmUwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKQEAgLTM0LDMgKzM0LDQgQEAK
IAogU2hhZG93Um9vdCBpbmNsdWRlcyBEb2N1bWVudE9yU2hhZG93Um9vdDsKIFNoYWRvd1Jvb3Qg
aW5jbHVkZXMgSW5uZXJIVE1MOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0NhY2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3Bw
CmluZGV4IDQ2OTg1NzRkMzI1MDVlNmY5YzVjM2ExY2JhY2FiZmViMmQwZDQxZGMuLjhkZTI2ZTFi
YzE1MzNmZDBiM2YwNzRmMDZiMWYzNGQzZTgwYjg5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkRnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUu
aCIKIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNp
bmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0yNzMsOCAr
MjcyLDYgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAKICAgICBGcmFtZTo6Y2xlYXJU
aW1lcnMobV92aWV3LmdldCgpLCBtX2RvY3VtZW50LmdldCgpKTsKIAotICAgIG1fdmlldy0+ZnJh
bWUoKS5sZWdhY3lBbmltYXRpb24oKS5kZXRhY2hGcm9tRG9jdW1lbnQobV9kb2N1bWVudC5nZXQo
KSk7Ci0KICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCByZW1vdmVBbGxFdmVu
dExpc3RlbmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNrL2ZvcndhcmQgY2Fj
aGUsIHRoaXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3YXksIGJlY2F1c2Ug
dGhlIGRvY3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01XaW5kb3cgb2JqZWN0
IChkdWUgdG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5yZW1vdmVBbGxFdmVu
dExpc3RlbmVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzYzVhZTQ1ODU0YzcyYmRmNmZi
NzM2NWVmNWYyN2ZhYTZmZGJlNWVjLi5iZDM0OTdjMWEyMjAwMTU2NTZlMDAyMDQ1ZTRlNjE3N2Mz
OTM5OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUg
IkFwcGx5U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oIgpAQCAtMTU2LDcgKzE1NSw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBt
X25hdmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigq
dGhpcykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3Njcmlw
dChtYWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fYW5pbWF0
aW9uQ29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlz
KSkKICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAg
ICAgLCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQogICAgICwg
bV9ldmVudEhhbmRsZXIobWFrZVVuaXF1ZVJlZjxFdmVudEhhbmRsZXI+KCp0aGlzKSkKQEAgLTcz
NywxMSArNzM1LDggQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBE
b2N1bWVudCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+bGF5
b3V0Q29udGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQt
PnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3Bl
bmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmlldy0+ZnJhbWUo
KS5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50
KTsKKyAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LT50aW1lbGluZXNDb250
cm9sbGVyKCkpCisgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAg
ICAgICAgIHZpZXctPmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcigp
OwogICAgIH0KIH0KQEAgLTEwMjksMTEgKzEwMjQsOCBAQCB2b2lkIEZyYW1lOjpyZXN1bWVBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCiAKICAgICAvLyBGcmFtZTo6Y2xlYXJUaW1lcnMo
KSBzdXNwZW5kZWQgYW5pbWF0aW9ucyBhbmQgcGVuZGluZyByZWxheW91dHMuCiAKLSAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IG1f
ZG9jLT50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICB0aW1lbGluZXMtPnJlc3Vt
ZUFuaW1hdGlvbnMoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGVnYWN5QW5pbWF0aW9uKCkucmVz
dW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZG9jLmdldCgpKTsKKyAgICBpZiAoYXV0byogdGlt
ZWxpbmVzID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgdGltZWxpbmVz
LT5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5s
YXlvdXRDb250ZXh0KCkuc2NoZWR1bGVMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA2
OGZkYzExNTVkOTEzZWVjZjI1NzA2YWQ5ODg5YjUwMjFmYWJmMmM0Li41MGM2NWY1ZTViMDc1M2Mx
ZTZkMzA3YjIxM2I1MjAwYzQ1MGFhMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC02Niw3ICs2Niw2
IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xhc3MgRE9NV2luZG93OwogY2xh
c3MgRG9jdW1lbnQ7CkBAIC0xNzQsOCArMTczLDYgQEAgcHVibGljOgogICAgIEZyYW1lU2VsZWN0
aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAg
IGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVu
dCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwotICAgIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0
aW9uQ29udHJvbGxlcjsgfQotICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2Fj
eUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAg
IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAgICAgY29u
c3QgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0K
IApAQCAtMzQ1LDcgKzM0Miw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2Rv
YzsKIAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlx
dWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAj
aWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFE
ZXRlY3Rpb25SZXN1bHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc1YjllMmJm
YzllYWUzZTM1YmVlMThmZWJkNDkxZjQwZjM2N2M2MTYuLmQ0OTI0MWVmMDg4YjgzNzYyNTYwOWQy
YzY1YWJmMjgzNGRhNDE4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01
ODYsOCArNTg1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKCkKIAog
ICAgIEFTU0VSVCghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9zbG93UmVw
YWludE9iamVjdHMgfHwgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0K
LSAgICBBU1NFUlQoIWZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuaGFzQW5pbWF0aW9ucygpKTsK
IH0KIAogdm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQpAQCAtNDQxNyw4ICs0NDE0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmUoKQogICAgIC8vIFN0eWxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIg
c2NyaXB0LCB3aGljaCBjYW4gY2F1c2UgdGhpcyBGcmFtZVZpZXcgdG8gYmUgZGVzdHJveWVkLgog
ICAgIFJlZjxGcmFtZVZpZXc+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lKCkubGVnYWN5QW5pbWF0aW9u
KCkpOwotCiAgICAgdXNpbmcgRGVzY2VuZGFudHNEZXF1ZSA9IERlcXVlPFJlZjxGcmFtZVZpZXc+
LCAxNj47CiAgICAgYXV0byBuZXh0UmVuZGVyZWREZXNjZW5kYW50ID0gW3RoaXNdIChEZXNjZW5k
YW50c0RlcXVlJiBkZXNjZW5kYW50c0RlcXVlKSAtPiBSZWZQdHI8RnJhbWVWaWV3PiB7CiAgICAg
ICAgIGlmIChkZXNjZW5kYW50c0RlcXVlLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDBjOGJlNzk0OTUxYjc4ZTE5Yjc1
OTI4ODViYmY4MzVlYjFjOTUzYjEuLjlmYTUxNzBmYTE1MTVmM2FmYjY3Y2YzMTA3ZDk4Y2ZiOTVl
YjJkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZy
YW1lVmlld0xheW91dENvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0yMDQsNyArMjAzLDYgQEAgdm9pZCBGcmFt
ZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQoKQogICAgIExheW91dFNjb3BlIGxheW91dFNjb3Bl
KCp0aGlzKTsKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlvdXRTdGFydCwgTGF5b3V0
RW5kKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZy
YW1lKCkpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZ2
aWV3KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7CiAgICAgV2Vha1B0cjxSZW5kZXJFbGVt
ZW50PiBsYXlvdXRSb290OwogICAgIAogICAgIG1fbGF5b3V0VGltZXIuc3RvcCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggYTBhNzdkMjg4MzY0ODIxYzUxMGIyZDUxMmJhNzBlNzI5YzIxYjZkNS4u
ZjkyM2JhODkyOTljMDA4ZTEwZjBkMjhlZTgwYTNmM2Y5N2JhYTk4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkJhY2tGb3J3YXJkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTE2NDgsOSArMTY0Nyw2IEBAIHZvaWQgUGFnZTo6aGFu
ZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogICAgIG1f
dGhyb3R0bGluZ1JlYXNvbnMgPSBtX3Rocm90dGxpbmdSZWFzb25zIF4gVGhyb3R0bGluZ1JlYXNv
bjo6TG93UG93ZXJNb2RlOwogICAgIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpLmFkanVzdFJl
bmRlcmluZ1VwZGF0ZUZyZXF1ZW5jeSgpOwogCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkKLSAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCk7Ci0KICAgICB1cGRhdGVET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiB9CiAK
QEAgLTIxODUsMTMgKzIxODEsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChi
b29sIGlzVmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPnNob3coKTsKIAogICAgICAgICBpZiAo
bV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAg
IGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMo
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAg
ICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRy
b2xsZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRpb25z
KCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVu
dChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yMjA5LDEzICsyMjAyLDEwIEBAIHZvaWQg
UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAKICAgICBpZiAoIWlz
VmlzaWJsZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlv
blN1c3BlbnNpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1
bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1l
bGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChE
b2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVz
ID0gZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0
aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBA
IC0yNTYwLDIxICsyNTUwLDE0IEBAIHZvaWQgUGFnZTo6cmVzZXRTZWVuTWVkaWFFbmdpbmVzKCkK
IHZvaWQgUGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQo
KQogewogICAgIGlmICghaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9j
dW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQu
dGltZWxpbmVzQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldHRp
bmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1
bWVBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCku
bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmlt
YXRpb25zKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1l
bnQmIGRvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1l
bnQudGltZWxpbmVzQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGlu
Z3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDA4NDNlZDc2MGNkZWM3M2E5
Y2IxYWZmN2RhMjljY2E0MDI0YTZhNDMuLmU2NGIyZTYxOWIxYWQ0MDFlY2U5OGM3ZWE4NDA5ZWY1
YTk5NmFhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oCkBAIC03MCwxMiArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1NlY3VyZUNvbnRl
eHRBdHRyaWJ1dGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNTZWN1cmVDb250ZXh0QXR0
cmlidXRlRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0QXR0
cmlidXRlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZDsgfQogCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGFyZUVu
YWJsZWQpIHsgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KLSAgICBi
b29sIHdlYkFuaW1hdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRp
b25zRW5hYmxlZDsgfQotCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCAmJiBt
X2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsgfQotCiAgICAgdm9pZCBzZXRX
ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7
IG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkID0gYXJlRW5hYmxl
ZDsgfQogICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJs
ZWQ7IH0KIApAQCAtMzAwLDggKzI5NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTWVudUl0
ZW1FbGVtZW50RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGlyZWN0b3J5VXBsb2Fk
RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgeyB0cnVl
IH07Ci0gICAgYm9vbCBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCB7IHRy
dWUgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFi
bGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGlu
ZXNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbWFnZUJpdG1hcEVuYWJsZWQgeyB0
cnVlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFlNzQzNTk3N2ZhOTI1MGVjMTBj
MTczOTQxNWRlNGNkNGY1NTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNl
KGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVB
bmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkK
LSAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBt
X2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikpCi17Ci0gICAgLy8g
Q29tcHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlv
bkNvdW50KCkgPiAwKQotICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotfQotCi1BbmltYXRpb25C
YXNlOjp+QW5pbWF0aW9uQmFzZSgpID0gZGVmYXVsdDsKLQotY29uc3QgUmVuZGVyU3R5bGUmIEFu
aW1hdGlvbkJhc2U6OmN1cnJlbnRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgp
OwotICAgIHJldHVybiB1bmFuaW1hdGVkU3R5bGUoKTsKLX0KLQotUmVuZGVyRWxlbWVudCogQW5p
bWF0aW9uQmFzZTo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgPyBt
X2VsZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6
OmNsZWFyKCkKLXsKLSAgICBlbmRBbmltYXRpb24oKTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRy
OwotICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRp
b25CYXNlOjpzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
OwotICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1kb3VibGUgQW5pbWF0aW9u
QmFzZTo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKTsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlT
dGF0ZTo6UGxheWluZzsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2go
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0
aW9uLT5hbmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQK
LXN0YXRpYyBjb25zdCBjaGFyKiBuYW1lRm9yU3RhdGUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGU6Ok5ldzogcmV0dXJuICJOZXciOwotICAgIGNhc2UgQW5pbWF0
aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOiByZXR1cm4gIlN0YXJ0V2Fp
dFRpbWVyIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6IHJl
dHVybiAiU3RhcnRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGU6Okxvb3Bpbmc6IHJldHVybiAiTG9vcGluZyI7Ci0gICAgY2FzZSBBbmltYXRpb25C
YXNlOjpBbmltYXRpb25TdGF0ZTo6RW5kaW5nOiByZXR1cm4gIkVuZGluZyI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OiByZXR1cm4gIlBhdXNlZE5l
dyI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRp
bWVyOiByZXR1cm4gIlBhdXNlZFdhaXRUaW1lciI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlBhdXNlZFdh
aXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOiByZXR1cm4gIlBhdXNlZFdhaXRSZXNwb25zZSI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOiByZXR1cm4gIlBh
dXNlZFJ1biI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RG9uZTog
cmV0dXJuICJEb25lIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpG
aWxsaW5nRm9yd2FyZHM6IHJldHVybiAiRmlsbGluZ0ZvcndhcmRzIjsKLSAgICB9Ci0gICAgcmV0
dXJuICIiOwotfQotI2VuZGlmCi0KLSNpZiAhRVJST1JfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBj
aGFyKiBuYW1lRm9yU3RhdGVJbnB1dChBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0
IGlucHV0KQotewotICAgIHN3aXRjaCAoaW5wdXQpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXc6IHJldHVybiAiTWFrZU5ldyI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbjogcmV0
dXJuICJTdGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlJlc3RhcnRBbmltYXRpb24iOwot
ICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lckZp
cmVkOiByZXR1cm4gIlN0YXJ0VGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdHlsZUF2YWlsYWJs
ZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRp
bWVTZXQ6IHJldHVybiAiU3RhcnRUaW1lU2V0IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkOiByZXR1cm4gIkxvb3BUaW1lckZpcmVk
IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVy
RmlyZWQ6IHJldHVybiAiRW5kVGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlOiByZXR1cm4gIlBhdXNlT3ZlcnJpZGUi
OwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3Zl
cnJpZGU6IHJldHVybiAiUmVzdW1lT3ZlcnJpZGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZzogcmV0dXJuICJQbGF5U3RhdGVS
dW5uaW5nIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBs
YXlTdGF0ZVBhdXNlZDogcmV0dXJuICJQbGF5U3RhdGVQYXVzZWQiOwotICAgIGNhc2UgQW5pbWF0
aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uOiByZXR1cm4gIkVuZEFu
aW1hdGlvbiI7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLSNlbmRpZgotCi12b2lkIEFuaW1h
dGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBk
b3VibGUgcGFyYW0pCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRB
bmltYXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3Rh
dGUuCi0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKLSAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0
eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7
Ci0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3Iiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0gV1RG
OjpudWxsb3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAg
bV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlv
biA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFy
dEFuaW1hdGlvbikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25T
dGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFu
aW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAg
bV9zdGFydFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpu
dWxsb3B0OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24o
KTsKLQotICAgICAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5k
QW5pbWF0aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0
YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0
YXRlICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAg
IGVuZEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0
ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1f
YW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3Bv
bnNlLCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKLSAgICAgICAgICAg
IC8vIHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAg
ICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5p
bWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9
PSBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSkgewotICAgICAgICBpZiAobV9h
bmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyB8fCBtX2FuaW1hdGlvblN0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IHRo
ZSBhbmltYXRpb24KLSAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBk
YXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEV4ZWN1dGUgc3RhdGUgbWFjaGluZQotICAgIHN3aXRj
aCAobV9hbmltYXRpb25TdGF0ZSkgewotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpOZXc6
Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRB
bmltYXRpb24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmlu
ZyB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0g
ICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRp
b24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewot
ICAgICAgICAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBTdGFydFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlv
blN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0
YXRlOjpTdGFydFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgYXJlIHBhdXNpbmcgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZC4KLSAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0
YXRlOjpQYXVzZWROZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
TmV3OwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0
ZTo6U3RhcnRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
cGFyYW0gPj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0
ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0
aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRp
b25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlz
LCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxh
YmxlOwotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250
cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRp
b24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFu
Z2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIXBhdXNlZCgpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0
aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNl
bCB0aGUgdGltZXIsIHBhdXNlIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUg
PSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0
aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRUaW1lciIsIHRoaXMsIG5h
bWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0U3R5bGVBdmFpbGFibGU6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1
dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQg
dGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9y
IGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSAodGltZSBp
cyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2Fp
dFJlc3BvbnNlOwotCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYg
KG92ZXJyaWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkgdG8g
c3RhcnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQKLSAg
ICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgotICAg
ICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IFN0YXJ0V2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGlt
ZU9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBmb3IgJ2Fu
aW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9uIGFwcGVhcnMgdG8g
aGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmlt
YXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9
IC1tX2FuaW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVk
ID0gc3RhcnRBbmltYXRpb24odGltZU9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9j
b21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNX
YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAg
ICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3Ig
dGhlIHN0eWxlIHRvIGJlIGF2YWlsYWJsZSBhbmQgd2UgZ290IGEgcGF1c2UuIFBhdXNlIGFuZCB3
YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRp
bWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2Fu
aW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVz
cG9uc2U6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
U3RhcnRUaW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBh
dXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpT
dGFydFRpbWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPiAtMC4wMDEpOyAv
LyBTb21ldGltZXMgQ29yZSBBbmltYXRpb24gZ2l2ZXMgdXMgYSBiZWdpblRpbWUgc2xpZ2h0bHkg
aW50byB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRUaW1lU2V0ICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSBhIHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxy
ZWFkeSBzZXQKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IHRoZSB2YWx1ZSBmb3IgJ2FuaW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5p
bWF0aW9uIGFwcGVhcnMgdG8gaGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAg
ICAgICAgICBpZiAobV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZSgpICsgbV9hbmltYXRpb24tPmRl
bGF5KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm93IHRoYXQg
d2Uga25vdyB0aGUgc3RhcnQgdGltZSwgZmlyZSB0aGUgc3RhcnQgZXZlbnQuCi0gICAgICAgICAg
ICAgICAgb25BbmltYXRpb25TdGFydCgwKTsgLy8gVGhlIGVsYXBzZWRUaW1lIGlzIDAuCi0KLSAg
ICAgICAgICAgICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5k
aW5nIHN0YXRlCi0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsK
LQotICAgICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2Ug
Y2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQot
ICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0
aW5nIGZvciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4g
V2hlbiAKLSAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91
Z2ggdGhlIHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGlt
ZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5p
bWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigw
KSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBQYXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25T
dGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmc6Ci0gICAgICAgICAgICBBU1NF
UlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQgfHwgaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAg
aWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwotICAgICAgICAgICAgICAgIExPRyhBbmlt
YXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTG9vcFRpbWVyRmlyZWQgKHRpbWUgaXMg
JWYpIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KLSAg
ICAgICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRl
Ci0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVu
bmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3Bh
dXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBh
dXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFs
dWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQW5pbWF0aW9uU3RhdGU6OkVuZGluZzoKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAg
ICAgIGlmIChpbnB1dCAhPSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkICYmIGlu
cHV0ICE9IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIlN0YXRlIGlzIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcsIGJ1dCBpbnB1
dCBpcyBub3QgQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCBvciBBbmltYXRpb25T
dGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQuIEl0IGlzICVzLiIsIG5hbWVGb3JTdGF0ZUlucHV0
KGlucHV0KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpFbmRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49
IDApOwotICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCi0gICAg
ICAgICAgICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lICh0aW1lIGlzICVmKSIs
IHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAg
ICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEZpbGxp
bmdGb3J3YXJkcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkZp
bGxpbmdGb3J3YXJkczsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhl
IGZpbmFsIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBh
dXNpbmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAg
ICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAg
ICAgICAgICAgICAgIHBhdXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0g
bV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUo
bV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBB
bmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
fHRoaXN8IG1heSBiZSBkZWxldGVkIGhlcmUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQo
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyk7Ci0gICAgICAg
ICAgICBBU1NFUlQocGF1c2VkKCkpOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwot
ICAgICAgICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAg
ICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgIC8vIHdlIHdlcmUg
d2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdh
aW4KLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
TmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAg
IG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgdXBk
YXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRO
ZXc6Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZToKLSAg
ICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOgotICAg
ICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46Ci0gICAgICAgICAgICAvLyBXZSB0
cmVhdCB0aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhh
dCwgd2hlbiB3ZSBhcmUgaW4KLSAgICAgICAgICAgIC8vIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRX
YWl0UmVzcG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBz
ZW5kIDAgdG8gc3RhcnRBbmltYXRpb24uCi0gICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgY29tZXMgaW4gYW5kIHdlIHdlcmUgaW4gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZFJ1biwgd2Ugd2lsbCBub3RpY2UKLSAgICAgICAgICAgIC8vIHRoYXQg
d2UgaGF2ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQ
YXVzZWQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8
fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpOwotICAgICAgICAgICAgQVNTRVJU
KHBhdXNlZCgpKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlBsYXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25T
dGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIHdlcmUgcGF1c2VkIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQsIGFuZCBub3cgd2UncmUg
c3VwcG9zZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RhcnQsIHNvIGp1bXAgYmFjayB0
byB0aGUgTmV3IHN0YXRlIGFuZCByZXNldC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6TmV3IiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoaW5wdXQsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1l
cwotICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWRSdW4pCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRp
bWUudmFsdWVPcigwKSArIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUu
dmFsdWVPcigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gMDsKLQotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxs
b3B0OwotCi0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRT
dHlsZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSB3ZXJlIGVpdGhlciBydW5uaW5nIG9yIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGlt
ZSByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVp
dGhlciB3YXkgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhbmltYXRpb24gKHBvc3NpYmx5IHdpdGgg
YW4gb2Zmc2V0IGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhZCBhbHJlYWR5IGJlZW4g
cnVubmluZykgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25z
ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFy
ZSBvdmVycmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9u
IHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYW5p
bWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2UgZ290
IHRoZSBjYWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0
aW9uIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBzdGFydCB0aW1l
IGFuZCBqdXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KLSAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biAodGlt
ZSBpcyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsK
LSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNl
ZFJ1bjsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAg
ICAgICBtX3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0g
bV9wYXVzZVRpbWUudmFsdWVPcigwKSArIHBhcmFtOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0
IHdlIGdvdCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IHN0eWxlIGhhcyBiZWVu
IHVwZGF0ZWQuCi0gICAgICAgICAgICAvLyBXZSBtb3ZlIHRvIHRoZSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkV2FpdFJlc3BvbnNlIHN0YXRlCi0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVw
IEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIG92ZXJyaWRl
QW5pbWF0aW9ucygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9u
U3RhdGU6OkZpbGxpbmdGb3J3YXJkczoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RG9u
ZToKLSAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3
ZSBhcmUgZGVsZXRlZAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFuaW1h
dGlvbkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2Nv
bXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIHdh
aXRpbmcgZm9yIHRoZSBkZWxheSB0aW1lIHRvIGV4cGlyZSBhbmQgaXQgaGFzLCBnbyB0byB0aGUg
bmV4dCBzdGF0ZQotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lciAmJiBtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpMb29w
aW5nICYmIG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0
byB0aGUgdGhpcyBwb2ludGVyLCBiZWNhdXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAv
LyBkdXJpbmcgYW4gYW5pbWF0aW9uIGNhbGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4gU2lu
Y2UgdGhlIG93bmVyIGlzIGEgQ29tcG9zaXRlQW5pbWF0aW9uCi0gICAgLy8gYW5kIGl0IHJlZiBj
b3VudHMgdGhpcyBvYmplY3QsIHdlIHdpbGwga2VlcCBhIHJlZiB0byB0aGF0IGluc3RlYWQuIFRo
YXQgd2F5IHRoZSBBbmltYXRpb25CYXNlCi0gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGUgcmVz
b3VyY2VzIG9mIGl0cyBDb21wb3NpdGVBbmltYXRpb24gYXMgbmVlZGVkLgotICAgIFJlZjxBbmlt
YXRpb25CYXNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBSZWY8Q29tcG9zaXRlQW5pbWF0
aW9uPiBwcm90ZWN0Q29tcG9zaXRlQW5pbWF0aW9uKCptX2NvbXBvc2l0ZUFuaW1hdGlvbik7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKLSAgICBpZiAobV9hbmltYXRpb25T
dGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIpIHsKLSAgICAgICAgaWYgKGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPj0gbV9hbmlt
YXRpb24tPmRlbGF5KCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBl
bnN1cmUgdGhhdCBlbGFwc2VkRHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBz
dWdnZXN0cyB0aGF0Ci0gICAgLy8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJl
Z2luQW5pbWF0aW9uVXBkYXRlKCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCi0gICAgLy8gQWxzbyBj
aGVjayBpbiBnZXRUaW1lVG9OZXh0RXZlbnQoKS4KLSAgICBlbGFwc2VkRHVyYXRpb24gPSBzdGQ6
Om1heChlbGFwc2VkRHVyYXRpb24sIDAuMCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGVuZCB0
aW1lb3V0Ci0gICAgaWYgKG1fdG90YWxEdXJhdGlvbiAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90
b3RhbER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGJlIGluIEFu
aW1hdGlvblN0YXRlOjpMb29waW5nIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2tpcCBhCi0gICAgICAg
IC8vIHdob2xlIGl0ZXJhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQganVtcCB0byB0aGUg
ZW5kIHN0YXRlLgotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IEVuZGluZyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOwotCi0gICAgICAg
IC8vIEZpcmUgYW4gZW5kIGV2ZW50Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkLCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlvbiB0aW1lb3V0Ci0gICAg
ICAgIGlmICghbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEhhc24n
dCBiZWVuIHNldCB5ZXQsIHNldCBpdAotICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9
IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0
aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0g
ZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoZWxhcHNlZER1cmF0aW9uID49IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0g
ICAgICAgICAgICAvLyBTZXQgdG8gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICBkb3Vi
bGUgcHJldmlvdXMgPSBtX25leHRJdGVyYXRpb25EdXJhdGlvbi52YWx1ZSgpOwotICAgICAgICAg
ICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChl
bGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1f
bmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBldmVudAotICAgICAgICAgICAg
dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkLCBw
cmV2aW91cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBk
YXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSBwbGF5U3RhdGUpCi17Ci0gICAgaWYgKCFt
X2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2hlbiB3ZSBn
ZXQgaGVyZSwgd2UgY2FuIGhhdmUgb25lIG9mIDQgZGVzaXJlZCBzdGF0ZXM6IHJ1bm5pbmcsIHBh
dXNlZCwgc3VzcGVuZGVkLCBwYXVzZWQgJiBzdXNwZW5kZWQuCi0gICAgLy8gVGhlIHN0YXRlIG1h
Y2hpbmUgY2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQuCi0gICAg
Ly8gU2V0IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgIGJvb2wg
cGF1c2UgPSBwbGF5U3RhdGUgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQgfHwgbV9jb21w
b3NpdGVBbmltYXRpb24tPmlzU3VzcGVuZGVkKCk7Ci0KLSAgICBpZiAocGF1c2UgPT0gcGF1c2Vk
KCkgJiYgIWlzTmV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVN0YXRlTWFjaGlu
ZShwYXVzZSA/ICBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQgOiBBbmltYXRp
b25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nLCAtMSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29u
ZHM+IEFuaW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICAvLyBSZXR1cm5z
IHRoZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0
IG1lYW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlz
IHJlcXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFu
eSBzZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkgfHwg
cG9zdEFjdGl2ZSgpIHx8IGZpbGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRUaW1lcikgewotICAgICAgICBkb3VibGUgdGltZUZyb21Ob3cgPSBtX2FuaW1h
dGlvbi0+ZGVsYXkoKSAtIChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVk
U3RhcnRUaW1lKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KFNlY29uZHMgeyB0aW1lRnJvbU5v
dyB9LCAwX3MpOwotICAgIH0KLSAgICAKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQo
KTsKLSAgICAgICAgCi0gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2Ug
cmlnaHQgYXdheS4KLSAgICByZXR1cm4gMF9zOwotfQotCi0vLyBDb21wdXRlIHRoZSBmcmFjdGlv
bmFsIHRpbWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotLy8gVGhlcmUgaXMgbm8g
bmVlZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBo
YXZlCi0vLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lLgotCi1kb3VibGUg
QW5pbWF0aW9uQmFzZTo6ZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNl
ZFRpbWUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1l
ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+
ZHVyYXRpb24oKSkgOiAxOwotICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0
aGUgY3VycmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0
aGUgZnJhbWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIu
IFNvIHdlIG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3Nz
aWJsZQotICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3Rp
Y2VhYmxlLiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCi0gICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3Ci0gICAgLy8gQVNTRVJU
KGZyYWN0aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCi0gICAg
ICAgIGZyYWN0aW9uYWxUaW1lID0gMDsKLQotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBjb25zdCBpbnQgaW50ZWdyYWxJdGVyYXRp
b25Db3VudCA9IHN0YXRpY19jYXN0PGludD4obV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkp
OwotICAgIGNvbnN0IGJvb2wgaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsID0gbV9hbmltYXRp
b24tPml0ZXJhdGlvbkNvdW50KCkgLSBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50OwotICAgIGlmICht
X2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50
SW5maW5pdGUgJiYgIWl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCkKLSAgICAgICAgaW50ZWdy
YWxUaW1lID0gc3RkOjptaW4oaW50ZWdyYWxUaW1lLCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50IC0g
MSk7Ci0KLSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0KLSAgICBpZiAoKCht
X2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25B
bHRlcm5hdGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgKChtX2FuaW1hdGlv
bi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVS
ZXZlcnNlKSAmJiAhKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCBtX2FuaW1hdGlvbi0+
ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAg
ICAgICBmcmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2Fs
ZSAhPSAxIHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRp
bWUgLSBvZmZzZXQpICogc2NhbGU7Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0K
LWRvdWJsZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZz
ZXQsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAocHJlQWN0aXZlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFw
c2VkVGltZSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9u
KCk7Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKLSAgICAgICAg
ZHVyYXRpb24gKj0gbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoZmls
bGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gZHVyYXRpb247Ci0KLSAgICBk
b3VibGUgZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZShzY2FsZSwgZWxhcHNl
ZFRpbWUsIG9mZnNldCk7Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkg
PiAwICYmIGVsYXBzZWRUaW1lID49IGR1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChXVEY6OmlzSW50
ZWdyYWwoZnJhY3Rpb25hbFRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1l
OwotICAgIH0KLQotICAgIGlmICghdGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHRpbWluZ0Z1bmN0
aW9uID0gbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gdGltaW5n
RnVuY3Rpb24tPnRyYW5zZm9ybVRpbWUoZnJhY3Rpb25hbFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJh
dGlvbigpKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoU2Vj
b25kcyYgdGltZSwgYm9vbCYgaXNMb29waW5nKSBjb25zdAotewotICAgIC8vIERlY2lkZSB3aGVu
IHRoZSBlbmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgY29uc3QgZG91YmxlIGVs
YXBzZWREdXJhdGlvbiA9IHN0ZDo6bWF4KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9z
dGFydFRpbWUudmFsdWVPcigwKSwgMC4wKTsKLSAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsK
LSAgICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb24udmFsdWVPcigw
KTsKLQotICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90
YWxEdXJhdGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9u
LT5kdXJhdGlvbigpID4gMCA/IChtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNl
ZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkpIDogMDsKLSAgICAgICAgbmV4dEl0
ZXJhdGlvblRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgfQotICAg
IAotICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3Rh
bER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUgZW5kIHll
dAotICAgICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKLSAgICAgICAgaXNMb29w
aW5nID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZAot
ICAgICAgICBpc0xvb3BpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdGltZSA9IFNlY29u
ZHMgeyBkdXJhdGlvbkxlZnQgfTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRp
bmdPckxvb3BpbmdTdGF0ZSgpCi17Ci0gICAgU2Vjb25kcyB0OwotICAgIGJvb2wgaXNMb29waW5n
OwotICAgIGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOwotICAgIExPRyhBbmltYXRp
b25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gJXMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9h
bmltYXRpb25TdGF0ZSksIGlzTG9vcGluZyA/ICJMb29waW5nIiA6ICJFbmRpbmciKTsKLSAgICBt
X2FuaW1hdGlvblN0YXRlID0gaXNMb29waW5nID8gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgOiBB
bmltYXRpb25TdGF0ZTo6RW5kaW5nOwotfQotICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZnJlZXpl
QXRUaW1lKGRvdWJsZSB0KQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgLy8gSWYgd2Ug
aGF2ZW4ndCBzdGFydGVkIHlldCwgbWFrZSBpdCBhcyBpZiB3ZSBzdGFydGVkLgotICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmlt
YXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAg
b25BbmltYXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWU6Om5vdygpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobV9zdGFydFRpbWUpOyAvLyBJZiBtX3N0YXJ0VGltZSBpcyB6ZXJvLCB3ZSBo
YXZlbid0IHN0YXJ0ZWQgeWV0LCBzbyB3ZSdsbCBnZXQgYSBiYWQgcGF1c2UgdGltZS4KLSAgICBp
ZiAodCA8PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApICsgdCAtIG1fYW5pbWF0aW9uLT5kZWxheSgpOwotCi0gICAgaWYg
KGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnN1
c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKG1fcGF1c2VUaW1l
LnZhbHVlKCkpKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBk
YXRlVGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS5zZWNvbmRzU2luY2VFcG9j
aCgpLnNlY29uZHMoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1l
KCkgY29uc3QKLXsKLSAgICBpZiAocGF1c2VkKCkpIHsKLSAgICAgICAgZG91YmxlIGRlbGF5T2Zm
c2V0ID0gKCFtX3N0YXJ0VGltZSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApID8gbV9hbmlt
YXRpb24tPmRlbGF5KCkgOiAwOwotICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWUudmFsdWVPcigw
KSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkgLSBkZWxheU9mZnNldDsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fc3RhcnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZl
KCkgfHwgZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBtX3RvdGFsRHVyYXRpb24u
dmFsdWVPcigwKTsKLQotICAgIHJldHVybiBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0RWxhcHNl
ZFRpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhv
ZAotICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwbGF5
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0KLXZvaWQgQW5p
bWF0aW9uQmFzZTo6cGF1c2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRo
b2QKLX0KLQotc3RhdGljIGJvb2wgY29udGFpbnNSb3RhdGlvbihjb25zdCBWZWN0b3I8UmVmUHRy
PFRyYW5zZm9ybU9wZXJhdGlvbj4+JiBvcGVyYXRpb25zKQotewotICAgIGZvciAoY29uc3QgYXV0
byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBl
KCkgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNv
bXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3QgRmxvYXRSZWN0JiBy
ZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBMYXlvdXRSZWN0JiBib3VuZHMp
IGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGZsb2F0Qm91bmRzID0gYm91bmRzOwotICAgIEZsb2F0
UG9pbnQgdHJhbnNmb3JtT3JpZ2luOwotICAgIAotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1Pcmln
aW4gPSBjb250YWluc1JvdGF0aW9uKHN0eWxlLnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKSkgfHwg
c3R5bGUudHJhbnNmb3JtKCkuYWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdpbigpOwotICAgIGlmIChh
cHBseVRyYW5zZm9ybU9yaWdpbikgewotICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSByZW5kZXJl
ckJveC5sb2NhdGlvbigpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnRyYW5zZm9y
bU9yaWdpblhZKCksIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgIC8vIElnbm9yZSB0cmFu
c2Zvcm1PcmlnaW5aIGJlY2F1c2Ugd2UnbGwgYmFpbCBpZiB3ZSBlbmNvdW50ZXIgYW55IDNEIHRy
YW5zZm9ybXMuCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2luKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHN0eWxlLnRyYW5zZm9y
bSgpLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJh
bnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpIHsKLSAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3Qg
dHJlYXQgdGhpcyBhcyBhIGZ1bGwgcm90YXRpb24uIFRoaXMgY291bGQgdGFrZSBhbmdsZSBpbnRv
IGFjY291bnQgdG8gcmVkdWNlIGluZmxhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0g
Ym91bmRzT2ZSb3RhdGluZ1JlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICAgICAgb3Bl
cmF0aW9uLT5hcHBseSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgICAg
ICBpZiAoIXRyYW5zZm9ybS5pc0FmZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYIHx8IG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYXzNEKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29t
cG9zZWQyVHlwZSB0b0RlY29tcDsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZGVjb21wb3Nl
Mih0b0RlY29tcCk7Ci0gICAgICAgICAgICAgICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVz
IGZyb20gdXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgICAgICAgICAg
ICAgaWYgKHRvRGVjb21wLmFuZ2xlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gdHJhbnNmb3JtLm1h
cFJlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFwcGx5VHJh
bnNmb3JtT3JpZ2luKQotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkodHJhbnNmb3JtT3JpZ2lu
KTsKLQotICAgIGJvdW5kcyA9IExheW91dFJlY3QoZmxvYXRCb3VuZHMpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZp
YU1hdHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5k
ZXJlckJveCwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgIGlmICgh
dHJhbnNmb3JtLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5cGUgZnJvbURlY29tcDsKLSAgICB0cmFuc2Zv
cm0uZGVjb21wb3NlMihmcm9tRGVjb21wKTsKLSAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMg
dXMgZnJvbSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICBpZiAoZnJv
bURlY29tcC5hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm91bmRzID0gTGF5
b3V0UmVjdCh0cmFuc2Zvcm0ubWFwUmVjdChib3VuZHMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLQot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQy
MDRlZDc5NmFlNTIxYWE4YjFjOGU0NzI4OTI0MDI0NTRhODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRl
QW5pbWF0aW9uOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheW91
dFJlY3Q7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBU
aW1pbmdGdW5jdGlvbjsKLQotZW51bSBjbGFzcyBBbmltYXRlQ2hhbmdlIHsKLSAgICBTdHlsZUJs
ZW5kZWQgICAgICAgICAgICA9IDEgPDwgMCwgLy8gU3R5bGUgd2FzIGNoYW5nZWQuCi0gICAgU3Rh
dGVDaGFuZ2UgICAgICAgICAgICAgPSAxIDw8IDEsIC8vIEFuaW1hdGlvbiBzdGF0ZSgpIGNoYW5n
ZWQuCi0gICAgUnVubmluZ1N0YXRlQ2hhbmdlICAgICAgPSAxIDw8IDIsIC8vIEFuaW1hdGlvbiAi
cnVubmluZyBvciBwYXVzZWQiIGNoYW5nZWQuCi19OwotCi1lbnVtIGNsYXNzIEFuaW1hdGlvbklt
cGFjdCB7Ci0gICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAgICAgPSAxIDw8IDAsCi0gICAgRm9yY2Vz
U3RhY2tpbmdDb250ZXh0ICAgPSAxIDw8IDEKLX07Ci0KLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxBbmltYXRpb25CYXNlPgotICAgICwgcHVibGljIENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci0g
ICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0
cmFuc2l0aW9uLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0gICAgdmlydHVhbCB+
QW5pbWF0aW9uQmFzZSgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gICAgZG91YmxlIGR1cmF0aW9u
KCkgY29uc3Q7Ci0KLSAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdo
IHRoZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKLSAgICAv
LyB0aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBk
ZWZlcnJlZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KLSAgICAvLyBJZiBzbywgd2Ugc3Rh
eSBpbiB0aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCBy
ZXR1cm5zIHRoZSBzdGFydCB0aW1lKS4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3Vy
cmVudCB0aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byBBbmltYXRp
b25TdGF0ZTo6TG9vcGluZwotICAgIC8vIG9yIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcuCi0gICAg
ZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBOZXcsICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5v
dCBydW5uaW5nIHlldAotICAgICAgICBTdGFydFdhaXRUaW1lciwgICAgICAgICAgICAgLy8gc3Rh
cnQgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZSwgICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0
IGFuaW1hdGlvbnMKLSAgICAgICAgU3RhcnRXYWl0UmVzcG9uc2UsICAgICAgICAgIC8vIGFuaW1h
dGlvbiBzdGFydGVkLCB3YWl0aW5nIGZvciByZXNwb25zZQotICAgICAgICBMb29waW5nLCAgICAg
ICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBs
b29wIHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgRW5kaW5nLCAgICAg
ICAgICAgICAgICAgICAgIC8vIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVy
IHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgUGF1c2VkTmV3LCAgICAgICAgICAg
ICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24gd2FzIGNyZWF0ZWQKLSAgICAg
ICAgUGF1c2VkV2FpdFRpbWVyLCAgICAgICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmlt
YXRpb24gc3RhcnRlZAotICAgICAgICBQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGUsICAgLy8gaW4g
cGF1c2UgbW9kZSB3aGVuIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwCi0gICAgICAgIFBhdXNlZFdh
aXRSZXNwb25zZSwgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcg
c3RhdGUKLSAgICAgICAgUGF1c2VkUnVuLCAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBw
YXVzZWQgd2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQotICAgICAgICBEb25lLCAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQg
YW5kIHJlbW92ZWQKLSAgICAgICAgRmlsbGluZ0ZvcndhcmRzICAgICAgICAgICAgIC8vIGFuaW1h
dGlvbiBoYXMgZW5kZWQgYW5kIGlzIHJldGFpbmluZyBpdHMgZmluYWwgdmFsdWUKLSAgICB9Owot
Ci0gICAgZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZUlucHV0IDogdWludDhfdCB7Ci0gICAgICAg
IE1ha2VOZXcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0ZQot
ICAgICAgICBTdGFydEFuaW1hdGlvbiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQK
LSAgICAgICAgUmVzdGFydEFuaW1hdGlvbiwgIC8vIGZvcmNlIGEgcmVzdGFydCBmcm9tIGFueSBz
dGF0ZQotICAgICAgICBTdGFydFRpbWVyRmlyZWQsICAgLy8gc3RhcnQgdGltZXIgZmlyZWQKLSAg
ICAgICAgU3R5bGVBdmFpbGFibGUsICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFy
dCBhbmltYXRpbmcKLSAgICAgICAgU3RhcnRUaW1lU2V0LCAgICAgIC8vIG1fc3RhcnRUaW1lIHdh
cyBzZXQKLSAgICAgICAgTG9vcFRpbWVyRmlyZWQsICAgIC8vIGxvb3AgdGltZXIgZmlyZWQKLSAg
ICAgICAgRW5kVGltZXJGaXJlZCwgICAgIC8vIGVuZCB0aW1lciBmaXJlZAotICAgICAgICBQYXVz
ZU92ZXJyaWRlLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQotICAg
ICAgICBSZXN1bWVPdmVycmlkZSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9u
Ci0gICAgICAgIFBsYXlTdGF0ZVJ1bm5pbmcsICAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5u
aW5nCi0gICAgICAgIFBsYXlTdGF0ZVBhdXNlZCwgICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4g
cGF1c2VkCi0gICAgICAgIEVuZEFuaW1hdGlvbiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBh
bnkgc3RhdGUKLSAgICB9OwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIEFu
aW1hdGlvblN0YXRlOjpOZXcgdG8gc3RhcnQgYW5pbWF0aW9uCi0gICAgdm9pZCB1cGRhdGVTdGF0
ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCwgZG91YmxlIHBhcmFtKTsKLQotICAgIC8vIEFu
aW1hdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKLSAgICB2b2lkIG9u
QW5pbWF0aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLSAgICB7Ci0g
ICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVT
ZXQsIHN0YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgfQotCi0g
ICAgLy8gQ2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQotICAgIHZvaWQg
dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSk7Ci0gICAgYm9vbCBwbGF5U3RhdGVQ
bGF5aW5nKCkgY29uc3Q7Ci0KLSAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyIHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgcHJlQWN0aXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0VGltZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGUgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0UmVzcG9uc2U7Ci0gICAgfQotCi0gICAgYm9vbCBwb3N0QWN0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotICAgIGJv
b2wgZmlsbGluZ0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25z
dCB7IHJldHVybiAhcG9zdEFjdGl2ZSgpICYmICFwcmVBY3RpdmUoKTsgfQotICAgIGJvb2wgcnVu
bmluZygpIGNvbnN0IHsgcmV0dXJuICFpc05ldygpICYmICFwb3N0QWN0aXZlKCk7IH0KLSAgICBi
b29sIHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNQ
YXVzZWRTdGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZE5ldyAmJiBzdGF0ZSA8PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVu
OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNSdW5uaW5nU3RhdGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUp
IHsgcmV0dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJs
ZSAmJiBzdGF0ZSA8IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0KLSAgICBib29sIGluUGF1c2Vk
U3RhdGUoKSBjb25zdCB7IHJldHVybiBpc1BhdXNlZFN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpOyB9
Ci0gICAgYm9vbCBpblJ1bm5pbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUnVubmluZ1N0YXRl
KG1fYW5pbWF0aW9uU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0
YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6OlN0YXJ0V2FpdFJlc3BvbnNlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRTdHlsZUF2YWlsYWJsZTsgfQotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0FjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBkb3VibGUgcHJvZ3Jlc3MoZG91Ymxl
IHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51
bGxwdHIpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKLQotICAgIHZp
cnR1YWwgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYp
IGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVk
KCk7Ci0KLSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBjb25zdDsK
LQotICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
YXRpb247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
bikgeyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsgfQot
Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhp
cyB3aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCi0gICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFu
ZCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKLSAg
ICAvLyBzZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBp
dCB3aWxsIHByb2JhYmx5IG5vdCBnZXQKLSAgICAvLyBiYWNrIHRoZSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdGFydFRpbWVTZXQgaW5wdXQuCi0gICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFu
c2l0aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PwotICAgIHZpcnR1YWwgYm9vbCBhZmZl
Y3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCAvKnByb3BlcnR5Ki8pIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYWNj
ZWxlcmF0ZWRPbmx5ICYmICFtX2lzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCFhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBpblJ1bm5pbmdTdGF0ZSgpIHx8IGlu
UGF1c2VkU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNN
YXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01h
dGNoOyB9Ci0gICAgYm9vbCBmaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2lmIEVOQUJMRShGSUxU
RVJTX0xFVkVMXzIpCi0gICAgYm9vbCBiYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0
Y2g7IH0KLSNlbmRpZgotICAgIGJvb2wgY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9
Ci0KLSAgICAvLyBGcmVlemUgdGhlIGFuaW1hdGlvbjsgdXNlZCBieSBEdW1wUmVuZGVyVHJlZS4K
LSAgICB2b2lkIGZyZWV6ZUF0VGltZShkb3VibGUgdCk7Ci0KLSAgICAvLyBQbGF5IGFuZCBwYXVz
ZSBBUEkKLSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0gICAgCi0gICAgZG91
YmxlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIGNvbnN0OwotICAgIAotICAgIGRvdWJsZSBn
ZXRFbGFwc2VkVGltZSgpIGNvbnN0OwotICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3
aWxsIGFkanVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KLSAgICB2
b2lkIHNldEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0gICAgCi0gICAgdm9pZCBzdHlsZUF2YWlsYWJs
ZSgpIAotICAgIHsKLSAgICAgICAgQVNTRVJUKHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKTsK
LSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZh
aWxhYmxlLCAtMSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJy
aWRlQW5pbWF0aW9ucygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5p
bWF0aW9ucygpIHsgfQotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRp
b24oKSB7IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgfQotCi0gICAgLy8gVGhlc2UgYXJl
IGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMg
Y2FuIGRvIGFueSBleHRyYSB3b3JrCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQo
ZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9u
SXRlcmF0aW9uKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBv
bkFuaW1hdGlvbkVuZChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICAKLSAgICAvLyB0
aW1lT2Zmc2V0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgd2hlbiB0aGUgYW5p
bWF0aW9uIHNob3VsZCBzdGFydC4gTmVnYXRpdmUgdmFsdWVzIGFyZSBPSy4KLSAgICAvLyBSZXR1
cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhwZWN0IGFuIGFzeW5jaHJvbm91cyBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKCkgY2FsbGJhY2suCi0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5p
bWF0aW9uKGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyB0
aW1lT2Zmc2V0IGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhbmltYXRpb24gaXMgYmVpbmcgcGF1
c2VkLgotICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgLyp0aW1lT2Zmc2V0
Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKmZpbGxpbmdGb3J3
YXJkcyovID0gZmFsc2UpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSYgdW5h
bmltYXRlZFN0eWxlKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3Bp
bmdTdGF0ZSgpOwotCi0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvblN0YXRlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxj
KEVsZW1lbnQqKTsKLSAgICAKLSAgICB2b2lkIGdldFRpbWVUb05leHRFdmVudChTZWNvbmRzJiB0
aW1lLCBib29sJiBpc0xvb3BpbmcpIGNvbnN0OwotCi0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1l
KGRvdWJsZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBkb3VibGUgb2Zmc2V0KSBjb25zdDsK
LQotICAgIC8vIFRoZXNlIHJldHVybiB0cnVlIGlmIHdlIGNhbiBlYXNpbHkgY29tcHV0ZSBhIGJv
dW5kaW5nIGJveCBieSBhcHBseWluZyB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gdG8gdGhlIGJvdW5k
cyByZWN0LgotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlz
dChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91
dFJlY3QmIGJvdW5kcykgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRW
aWFNYXRyaXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUm
LCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2lz
QWNjZWxlcmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3Rz
TWF0Y2ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBm
YWxzZSB9OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgYm9vbCBtX2JhY2tkcm9w
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBDb21wb3Np
dGVBbmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAvLyBJZGVhbGx5IHRoaXMgd291bGQg
YmUgYSByZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xlYXJlZCBpZiBhbiBhbmltYXRpb24g
aXMgZGVzdHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFjay4KLSAgICBSZWY8QW5pbWF0aW9u
PiBtX2FuaW1hdGlvbjsKLQotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV9zdGFydFRpbWU7Ci0gICAg
T3B0aW9uYWw8ZG91YmxlPiBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFy
dFRpbWUgeyAwIH07Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3RvdGFsRHVyYXRpb247Ci0gICAg
T3B0aW9uYWw8ZG91YmxlPiBtX25leHRJdGVyYXRpb25EdXJhdGlvbjsKLQotICAgIEFuaW1hdGlv
blN0YXRlIG1fYW5pbWF0aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07Ci0gICAgYm9v
bCBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMmFjOWRhNzhkMzI2YzU4NDE1MmYyMzlmMjdkZTgzNDEyZjYxNzQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw4MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1
ZGUgIkFuaW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNT
U1Byb3BlcnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVHJhbnNpdGlvbkV2ZW50LmgiCi0j
aW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbGxvdyBhIGxpdHRsZSBt
b3JlIHRoYW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBsZWFzdCBoaXQgdGhhdCBmcmFt
ZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9uVGltZXJEZWxheSB7IDE1X21z
IH07Ci0vLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gMzBmcHMgdG8gbWFrZSBzdXJlIHdlIGNh
biBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5p
bWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSB7IDMwX21zIH07Ci0KLWNsYXNzIEFuaW1hdGlvblBy
aXZhdGVVcGRhdGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJs
b2NrKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQot
ICAgICAgICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAg
IHsKLSAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7
Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2soKQotICAgIHsK
LSAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAg
IH0KLSAgICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25D
b250cm9sbGVyOwotfTsKLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fYW5pbWF0aW9uVGlt
ZXIoKnRoaXMsICZDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJG
aXJlZCkKLSAgICAsIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKnRoaXMsICZDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJG
aXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRl
Q291bnQoMCkKLSAgICAsIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24oZmFsc2Up
Ci0gICAgLCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChmYWxzZSkKLXsKLX0K
LQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5DU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSgpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBjb21w
b3NpdGUgYW5pbWF0aW9ucyBoZXJlIGJlY2F1c2UgdGhlCi0gICAgLy8gZGVzdHJ1Y3RvciBvZiBD
b21wb3NpdGVBbmltYXRpb24gd2lsbCBjYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBiYWNrLgot
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9ucy5jbGVhcigpOwotfQotCi1Db21wb3NpdGVBbmltYXRp
b24mIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRp
b24oRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnNldEhhc0NTU0FuaW1hdGlvbigp
OwotCi0gICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJlKCZlbGVt
ZW50LCBbJl0gewotICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRo
aXMpOwotICAgIH0pOwotCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVu
dCgmZWxlbWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
c3VzcGVuZEFuaW1hdGlvbnMoKTsKLQotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoRWxlbWVu
dCYgZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNDU1NBbmltYXRpb24oKSA9PSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuY29udGFpbnMoJmVsZW1lbnQpKTsKLQotICAgIGlmICghZWxl
bWVudC5oYXNDU1NBbmltYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1l
bnQuY2xlYXJIYXNDU1NBbmltYXRpb24oKTsKLQotICAgIGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuZmluZCgmZWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HKEFuaW1hdGlvbnMs
ICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAmZWxl
bWVudCk7Ci0KLSAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChj
b25zdCBFdmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluZm8uZWxlbWVu
dC5wdHIoKSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rp
c3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjdXJyZW50RWxlbWVudCkgewotICAg
ICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0g
ICAgCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBh
cmUgc3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIGludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCi0gICAgLy8gRklYTUU6IFRoZSBjb2Rl
IGJlbG93IGRvZXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cyBy
ZWdhcmRpbmcgc3VzcGVuZGVkIHN0YXRlLgotICAgIGF1dG8mIGFuaW1hdGlvbiA9ICppdC0+dmFs
dWU7Ci0gICAgYm9vbCByZXN1bHQgPSBhbmltYXRpb24uaXNTdXNwZW5kZWQoKTsKLSAgICBhbmlt
YXRpb24uY2xlYXJFbGVtZW50KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMucmVtb3Zl
KGl0KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2Fs
bFNldENoYW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBBbmltYXRpb25Q
cml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotICAgIGJvb2wgY2FsbGVkU2V0Q2hhbmdlZCA9IGZhbHNl
OwotCi0gICAgZm9yIChhdXRvJiBjb21wb3NpdGVBbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqY29tcG9z
aXRlQW5pbWF0aW9uLnZhbHVlOwotICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1N1c3BlbmRlZCgp
ICYmIGFuaW1hdGlvbi5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlm
ICh0ICYmICghdGltZVRvTmV4dFNlcnZpY2UgfHwgdC52YWx1ZSgpIDwgdGltZVRvTmV4dFNlcnZp
Y2UudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0LnZhbHVl
KCk7Ci0gICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYgdGltZVRvTmV4dFNlcnZp
Y2UudmFsdWUoKSA9PSAwX3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQg
IT0gQ2FsbFNldENoYW5nZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9zaXRlQW5p
bWF0aW9uLmtleTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
OwotICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoY2FsbGVkU2V0Q2hhbmdlZCkKLSAgICAgICAgbV9mcmFtZS5kb2N1
bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdGltZVRvTmV4dFNl
cnZpY2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFu
aW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE9wdGlvbmFs
PFNlY29uZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotCi0gICAgY29uc3QgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVt
ZW50KTsKLSAgICBpZiAoIWNvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKSAmJiBjb21w
b3NpdGVBbmltYXRpb24tPmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdGltZVRvTmV4dFNlcnZp
Y2UgPSBjb21wb3NpdGVBbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBpZiAo
IXRpbWVUb05leHRTZXJ2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hbmltYXRp
b25UaW1lci5pc0FjdGl2ZSgpICYmIChtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkg
fHwgbV9hbmltYXRpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCkgPD0gdGltZVRvTmV4dFNlcnZp
Y2UudmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNh
bGxTZXRDaGFuZ2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgT3B0aW9uYWw8
U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFu
Z2VkKTsKLQotICAgIExPRyhBbmltYXRpb25zLCAidXBkYXRlQW5pbWF0aW9uVGltZXI6IHRpbWVU
b05leHRTZXJ2aWNlIGlzICUuMmYiLCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZU9yKFNlY29uZHMg
eyAtMSB9KS52YWx1ZSgpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2VydmljZSwgd2Ug
d2FudCB0byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5nCi0gICAgaWYg
KCF0aW1lVG9OZXh0U2VydmljZSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3YW50IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdl
IHN0YXJ0IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRp
bmcKLSAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byog
cGFnZSA9IG1fZnJhbWUucGFnZSgpOwotICAgICAgICBib29sIHNob3VsZFRocm90dGxlID0gcGFn
ZSAmJiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgU2Vjb25kcyBkZWxh
eSA9IHNob3VsZFRocm90dGxlID8gYW5pbWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSA6IGFuaW1h
dGlvblRpbWVyRGVsYXk7Ci0KLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZl
KCkgfHwgbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IGRlbGF5KQotICAgICAg
ICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhkZWxheSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gc3RhcnQgYSBvbmUt
c2hvdCB0aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVk
KCkKLXsKLSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKLXsKLSAg
ICAvLyBQcm90ZWN0IHRoZSBmcmFtZSBmcm9tIGdldHRpbmcgZGVzdHJveWVkIGluIHRoZSBldmVu
dCBoYW5kbGVyCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICBib29s
IHVwZGF0ZVN0eWxlID0gIW1fZXZlbnRzVG9EaXNwYXRjaC5pc0VtcHR5KCkgfHwgIW1fZWxlbWVu
dENoYW5nZXNUb0Rpc3BhdGNoLmlzRW1wdHkoKTsKLQotICAgIC8vIGZpcmUgYWxsIHRoZSBldmVu
dHMKLSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RGTW92
ZShtX2V2ZW50c1RvRGlzcGF0Y2gpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHNUb0Rp
c3BhdGNoKSB7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBldmVudC5lbGVtZW50OwotICAg
ICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZl
bnQpCi0gICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNl
dWRvRWxlbWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgp
KSwgV1RGOjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVs
ZW1lbnQuZGlzcGF0Y2hFdmVudChBbmltYXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlw
ZSwgZXZlbnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0Vs
ZW1lbnROYW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6bnVsbG9wdCwgbnVs
bHB0cikpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBt
X2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwotCi0gICAgaWYgKHVwZGF0ZVN0eWxl
KQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLX0K
LQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlcigpCi17Ci0gICAgaWYgKCFtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNw
YXRjaGVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNo
ZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQot
ewotICAgIG1fZXZlbnRzVG9EaXNwYXRjaC5hcHBlbmQoeyBlbGVtZW50LCBldmVudFR5cGUsIG5h
bWUsIGVsYXBzZWRUaW1lIH0pOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNo
ZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVu
dENoYW5nZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRDaGFu
Z2VzVG9EaXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5n
ZXNUb0Rpc3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9
PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBzdGFydFVwZGF0ZVN0eWxl
SWZOZWVkZWREaXNwYXRjaGVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJlZCgpCi17Ci0gICAgT3B0aW9uYWw8U2Vj
b25kcz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2Vk
KTsKLQotICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT52aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIC8vIFdlIG5l
ZWQgdG8ga2VlcCB0aGUgZnJhbWUgYWxpdmUsIHNpbmNlIGl0IG93bnMgdXMuCi0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICAvLyBUaGUgYW5pbWF0aW9uIHRpbWVyIG1p
Z2h0IGZpcmUgYmVmb3JlIHRoZSBsYXlvdXQgdGltZXIsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3
ZSBtaWdodCBjcmVhdGUgc29tZSBhbmltYXRpb25zIHdpdGggaW5jb3JyZWN0Ci0gICAgLy8gdmFs
dWVzIGlmIHdlIGRvbid0IGxheW91dCBmaXJzdC4KLSAgICBpZiAobV9yZXF1aXJlc0xheW91dCkg
ewotICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS5kb2N1bWVudCgpLT52aWV3
KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAg
ICAgICAgICAgZnJhbWVWaWV3LT5mb3JjZUxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1f
cmVxdWlyZXNMYXlvdXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYW5pbWF0
aW9uVXBkYXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBu
bwotICAgIC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zKQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhp
cyk7Ci0KLSAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0
Q2hhbmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVu
IGRvIGFuIGltbWVkaWF0ZQotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQuIEl0IHdpbGwgdGhl
biBjYWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0
aW9uVGltZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdh
eSwgdG8gYXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlv
biBjb21wbGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0g
ICAgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFy
ZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiBhbmlt
YXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0g
ICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYW5p
bWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSk7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0
aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5n
ZXQocmVuZGVyZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJv
cGVydHksIHRydWUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1
cGRhdGVUaHJvdHRsaW5nU3RhdGUoKQotewotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0K
LSAgICBmb3IgKGF1dG8qIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7
IGNoaWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGRGcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFu
aW1hdGlvbkludGVydmFsKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBJTkZJTklUWSB9OwotCi0gICAgcmV0
dXJuIFNlY29uZHMgeyBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQot
ewotICAgIGlmIChpc1N1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdXNwZW5k
QW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2
ZXJzZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLQot
ICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIWlzU3VzcGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2Zy
YW1lLmRvY3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVzCi0gICAgZm9yIChG
cmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmxlZ2FjeUFuaW1h
dGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsK
LX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uc0FyZVN1
c3BlbmRlZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gaXNT
dXNwZW5kZWQoKSB8fCBtX3N1c3BlbmRlZERvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmRldGFjaEZyb21Eb2N1bWVu
dChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMucmVtb3Zl
KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3Vz
cGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYg
KGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci0KLSAgICBB
bmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9y
IChhdXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYg
KCZhbmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5p
bWF0aW9uLnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFu
aW1hdGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAg
aWYgKCFhbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBkZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgQW5p
bWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAo
YXV0byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgm
YW5pbWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1h
dGlvbi52YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1h
dGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0
YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBp
ZiAoIWFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkgfHwgYWxsb3dz
TmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJlc3VtZUFuaW1hdGlvbnNG
b3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sIGFsbG93ZWQp
Ci17Ci0gICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBhbGxvd2VkOwot
fQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0
VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkK
LXsKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNv
bXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBh
dXNlQW5pbWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0g
ICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3Np
dGVBbmltYXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRy
YW5zaXRpb25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIGVs
ZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRl
ZERpc3BhdGNoZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1Nb25vdG9uaWNUaW1lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0
aW9uVXBkYXRlQ291bnQpOwotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpCi0g
ICAgICAgIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7
Ci0KLSAgICByZXR1cm4gbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUudmFsdWUoKTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5BbmltYXRpb25VcGRhdGUo
KQotewotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KQotICAgICAgICBtX2Jl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICArK21fYmVnaW5Bbmlt
YXRpb25VcGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6ZW5kQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVw
ZGF0ZUNvdW50ID4gMCk7Ci0gICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCA9PSAx
KSB7Ci0gICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgICAgIGlmICghbV93YWl0aW5nRm9y
QXN5bmNTdGFydE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICB9Ci0gICAgLS1tX2JlZ2luQW5pbWF0aW9u
VXBkYXRlQ291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
Y2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIExPRyhB
bmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgcmVjZWl2ZWRTdGFy
dFRpbWVSZXNwb25zZSAlZiIsIHRoaXMsIHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRz
KCkpOwotCi0gICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwot
ICAgIHN0YXJ0VGltZVJlc3BvbnNlKHRpbWUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRlZFN0eWxlRm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmlt
YXRpb25VcGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBhdXRvIGFuaW1hdGluZ1N0eWxlID0gYW5p
bWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7Ci0gICAgaWYgKCFhbmltYXRpbmdTdHlsZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFuaW1hdGluZ1N0eWxlOwot
fQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZB
bmltYXRpb24oRWxlbWVudCYgZWxlbWVudCwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewot
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgh
YW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBmYWxz
ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbi0+Y29tcHV0
ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcyk7Ci19Ci0KLXVuc2lnbmVkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1l
bnQqIGRvY3VtZW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAg
ICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAg
ICBpZiAoJmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAg
ICBjb3VudCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwot
ICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2Um
IGFuaW1hdGlvbikKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UucmVtb3ZlKCZhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5h
ZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1h
dGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUo
JmFuaW1hdGlvblRvUmVtb3ZlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6c3R5bGVBdmFpbGFibGUoKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0
ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3YWl0
aW5nQW5pbWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKQotICAgICAgICB3YWl0
aW5nQW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25C
YXNlJiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQotewotICAgIC8vIElmIHdpbGxH
ZXRSZXNwb25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3
YWl0aW5nIGZvciBhIHJlc3BvbnNlCi0gICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNh
bGwgdG8gbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2Ug
ZG9uJ3QgbmVlZCB0byBhZGQgaXQgdG8gdGhpcyBsaXN0LiBXZSBqdXN0IHNldCBhIHdhaXRpbmdG
b3JBUmVzcG9uc2UgZmxhZyAKLSAgICAvLyB3aGljaCBzYXlzIHdlIGFyZSB3YWl0aW5nIGZvciB0
aGUgcmVzcG9uc2UuIElmIHdpbGxHZXRSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24g
Ci0gICAgLy8gaXMgbm90IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJh
dGhlciBmb3IgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCBmb3IgCi0gICAgLy8gYW5vdGhlciBh
bmltYXRpb24gdG8gd2hpY2ggaXQgd2lsbCBzeW5jLgotICAgIC8vCi0gICAgLy8gV2hlbiBlbmRB
bmltYXRpb25VcGRhdGUoKSBpcyBjYWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5n
Rm9yQVJlc3BvbnNlIGZsYWcgaXMKLSAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4g
YW5kIHdpbGwgZG8gb3VyIHdvcmsgd2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNh
bGwKLSAgICAvLyBjb21lcyBpbi4gSWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRp
bmcgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCwgc28gd2Ugd2lsbAotICAgIC8vIGRvIG91ciB3
b3JrIHJpZ2h0IGF3YXkuIEluIGJvdGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFy
dFJlc3BvbnNlKCkgbWV0aG9kCi0gICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJz
dCBjYXNlIHdlIHNlbmQgaW4gdGhlIHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgp
LgotICAgIC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKS4KLSAgICAvLwotICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6
ZSBhbGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUg
c2FtZSAKLSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgotICAgIC8vCi0KLSAgICBp
ZiAod2lsbEdldFJlc3BvbnNlKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZp
Y2F0aW9uID0gdHJ1ZTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZS5hZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFu
aW1hdGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICBp
ZiAobV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKLSAg
ICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShNb25v
dG9uaWNUaW1lIHRpbWUpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5k
IHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLQotICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9u
IDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKQotICAgICAgICBhbmlt
YXRpb24tPm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsKLSAgICAKLSAgICBtX2FuaW1h
dGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKLSAgICBtX3dhaXRpbmdG
b3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYg
YW5pbWF0aW9uKQotewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9u
KTsKLQotICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7
Ci0gICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5p
bWF0aW9uKTsKLQotICAgIGJvb2wgYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0g
ZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+d2FpdGluZ0ZvclN0
YXJ0VGltZSgpICYmIGFuaW1hdGlvbi0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBh
bnlBbmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFueUFuaW1hdGlvbnNXYWl0aW5nRm9y
QXN5bmNTdGFydCkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9
IGZhbHNlOwotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9s
bGVyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZGF0YShtYWtlVW5pcXVlPENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlPihmcmFtZSkpCi17Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
On5DU1NBbmltYXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBp
ZiAoIW1fZGF0YS0+Y2xlYXIoZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChl
bGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0
ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIGVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlKCk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0ZSBDU1NBbmltYXRpb25Db250cm9s
bGVyOjp1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
JiBuZXdTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGJvb2wgaGFz
T3JIYWRBbmltYXRpb25zID0gKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zT3JU
cmFuc2l0aW9ucygpKSB8fCBuZXdTdHlsZS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpOwot
ICAgIGlmICghaGFzT3JIYWRBbmltYXRpb25zKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
aWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8g
RG9uJ3QgcnVuIHRyYW5zaXRpb25zIHdoZW4gcHJpbnRpbmcuCi0gICAgaWYgKGVsZW1lbnQuZG9j
dW1lbnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9t
IGEgaGFzaHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQotICAgIC8vIGFnYWluc3QgdGhlIGFu
aW1hdGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gSWYgZGVz
dGluYXRpb24gdmFsdWVzCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0
aW9uLiBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgot
ICAgIC8vIGEgbmV3IHN0eWxlLgotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVB
bmltYXRpb24gPSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAg
ICBhdXRvIHVwZGF0ZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9sZFN0
eWxlLCBuZXdTdHlsZSk7Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKLSAgICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUu
YW5pbWF0aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewot
ICAgICAgICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKLSAg
ICAgICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5
b3V0KCkpCi0gICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAg
IG1fZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAg
ICBmcmFtZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXBk
YXRlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKLQotICAgIGlmIChy
ZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIu
ZWxlbWVudCgpKQotICAgICAgICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVt
ZW50KCpyZW5kZXJlci5lbGVtZW50KCkpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJl
c3VsdCA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBMYXlvdXRSZWN0JiBib3Vu
ZHMpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0
aW9ucygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RhdGEtPmNvbXB1
dGVFeHRlbnRPZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwotfQotCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIExPRyhB
bmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlciAlcCBub3RpZnlBbmltYXRpb25TdGFy
dGVkIG9uIHJlbmRlcmVyICVwLCB0aW1lPSVmIiwgdGhpcywgJnJlbmRlcmVyLCBzdGFydFRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIFVOVVNFRF9QQVJBTShyZW5kZXJl
cik7Ci0KLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlz
KTsKLSAgICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKLX0K
LQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBB
bmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1
cm4gbV9kYXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBuYW1lLCB0KTsKLX0KLQot
dW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5udW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmlt
YXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9kYXRhLT5wYXVzZVRyYW5zaXRp
b25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHksIHQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJl
ci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJl
bmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNS
dW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIu
c3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJl
bmRlcmVyKHJlbmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmlzU3VzcGVu
ZGVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMoKQotewotICAgIExPRyhBbmltYXRpb25zLCAiY29udHJvbGxlciBpcyBzdXNwZW5kaW5nIGFu
aW1hdGlvbnMiKTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFu
aW1hdGlvbnMsICJjb250cm9sbGVyIGlzIHJlc3VtaW5nIGFuaW1hdGlvbnMiKTsKLSAgICBtX2Rh
dGEtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVy
OjphbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RhdGEtPmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3Bl
bmRlZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbGxvd3NOZXdBbmltYXRpb25z
V2hpbGVTdXNwZW5kZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6c2VydmljZUFuaW1hdGlvbnMoKQotewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxs
YmFja0ZpcmVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlVGhy
b3R0bGluZ1N0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwot
fQotCi1TZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbkludGVydmFsKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25JbnRlcnZhbCgpOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1
bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9u
c0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRp
b25Db250cm9sbGVyOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewot
ICAgIHJldHVybiBtX2RhdGEtPmRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJzdXNwZW5kaW5nIGFu
aW1hdGlvbnMgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIG1fZGF0YS0+c3VzcGVu
ZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICBMT0coQW5pbWF0aW9ucywgInJlc3VtaW5nIGFuaW1hdGlvbnMgZm9yIGRvY3Vt
ZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVw
ZGF0ZUJsb2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50
KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1h
dGlvbnNJZk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1h
dGlvbnMsICJhbmltYXRpb25zIG1heSBzdGFydCBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7
Ci0KLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsK
LSAgICBtX2RhdGEtPnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKGRvY3VtZW50KTsKLX0K
LQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17
Ci0gICAgbV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5lbmRB
bmltYXRpb25VcGRhdGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBw
b3J0c0FjY2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
KQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0
eUlzQWNjZWxlcmF0ZWQocHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6Omhhc0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmhhc0FuaW1h
dGlvbnMoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2Q2MDU4NDUzOThhYThlNzVhOWE1MjY1ZTAwZWY2NGQ2
MjIyODEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9u
QmFzZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJFbGVtZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIExheW91dFJlY3Q7Ci1j
bGFzcyBSZW5kZXJFbGVtZW50OwotCi1zdHJ1Y3QgQW5pbWF0aW9uVXBkYXRlIHsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIE9wdGlvblNldDxBbmltYXRpb25J
bXBhY3Q+IGltcGFjdDsKLQotfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcihGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7
Ci0KLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYpOwotICAgIEFuaW1hdGlvblVw
ZGF0ZSB1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwotCi0g
ICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5z
Zm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCi0gICAgLy8gdXNpbmcgdGhlIGdp
dmVuIHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBSZXR1cm4gZmFsc2Ug
aWYgdGhlcmUgaXMgc29tZQotICAgIC8vIHRyYW5zZm9ybSBhbmltYXRpb24gYnV0IHdlIHdlcmUg
dW5hYmxlIHRvIGNoZWFwbHkgY29tcHV0ZSBpdHMgYWZmZWN0IG9uIHRoZSBleHRlbnQuCi0gICAg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3Qm
KSBjb25zdDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gYWNjZWxlcmF0ZWQgYW5p
bWF0aW9uIG9yIHRyYW5zaXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgdG8gYW5pbWF0ZS4KLSAg
ICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYsIE1vbm90b25pY1Rp
bWUgc3RhcnRUaW1lKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRpb25B
dFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8g
YmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRy
YW5zaXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0
KTsgLy8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJl
IHVzZWQgb25seSBmb3IgdGVzdGluZwotICAgIAotICAgIC8vICJSdW5uaW5nIiBoZXJlIG1lYW5z
IHRoZSBhbmltYXRpb24gaXMgcnVubmluZyBvciBwYXVzZWQuCi0gICAgYm9vbCBpc1J1bm5pbmdB
bmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsK
LSAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJF
bGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzU3VzcGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5p
bWF0aW9ucygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwot
ICAgIHZvaWQgc2VydmljZUFuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBhbmltYXRpb25JbnRlcnZhbCgp
IGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRp
b25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFuaW1h
dGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNo
RnJvbURvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1
c3BlbmRlZChEb2N1bWVudCopOwotCi0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwot
ICAgIHZvaWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwot
ICAgIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3Bl
cnR5KENTU1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlPiBtX2RhdGE7Ci19OwotCi1jbGFzcyBBbmltYXRpb25VcGRhdGVCbG9jayB7Ci1w
dWJsaWM6Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlciog
YW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5p
bWF0aW9uQ29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xs
ZXIpCi0gICAgICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmJlZ2luQW5pbWF0aW9uVXBk
YXRlKCk7Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25VcGRhdGVCbG9jaygpCi0gICAgewot
ICAgICAgICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICAgICAgbV9hbmltYXRp
b25Db250cm9sbGVyLT5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250cm9sbGVyOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQzMjAzNzdkZWNjOWM1MzRkZWViN2I0ZTk1Y2UwZWQyZDg1YWVkYjEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9u
QmFzZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBEb2N1bWVu
dDsKLWNsYXNzIEZyYW1lOwotCi1lbnVtIFNldENoYW5nZWQgeyBEb05vdENhbGxTZXRDaGFuZ2Vk
LCBDYWxsU2V0Q2hhbmdlZCB9OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgdW50aWwgdGhl
IG5leHQgYW5pbWF0aW9uIG5lZWRzIHRvIGJlIHNlcnZpY2VkLCBvciAtMSBpZiB0aGVyZSBhcmUg
bm9uZS4KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQg
Y2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVwZGF0ZUFu
aW1hdGlvblRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFu
Z2VkKTsKLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9u
KEVsZW1lbnQmKTsKLSAgICBib29sIGNsZWFyKEVsZW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRl
U3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnRVcGRhdGVTdHls
ZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwotICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1l
bnQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91
YmxlIGVsYXBzZWRUaW1lKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKEVs
ZW1lbnQmKTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzU3VzcGVuZGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlv
bnMoKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZy
YW1lQ2FsbGJhY2tGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsK
LSAgICBTZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN1c3Bl
bmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3Bl
bmRlZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5v
dFN1c3BlbmRlZChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KERvY3Vt
ZW50Kik7Ci0KLSAgICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxl
bWVudCYsIENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0
ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25z
dDsKLQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShF
bGVtZW50JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwotICAgIHVuc2lnbmVk
IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yRWxlbWVudChFbGVtZW50Jik7
Ci0KLSAgICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVj
dCYpIGNvbnN0OwotCi0gICAgTW9ub3RvbmljVGltZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KTsKLSAgICAKLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRB
bmltYXRpb25VcGRhdGUoKTsKLSAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9u
b3RvbmljVGltZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoQW5pbWF0aW9uQmFzZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3Bv
bnNlKTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChBbmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxl
bWVudChFbGVtZW50Jik7Ci0KLSAgICBib29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3Bl
bmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVk
OyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7
Ci0KLSAgICB2b2lkIHNldFJlcXVpcmVzTGF5b3V0KCkgeyBtX3JlcXVpcmVzTGF5b3V0ID0gdHJ1
ZTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAg
dm9pZCBzdHlsZUF2YWlsYWJsZSgpOwotICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxl
KCk7Ci0gICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLQotICAgIEhh
c2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21w
b3NpdGVBbmltYXRpb25zOwotICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7Ci0gICAgVGltZXIg
bV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKLSAgICBGcmFtZSYgbV9mcmFtZTsKLQot
ICAgIHN0cnVjdCBFdmVudFRvRGlzcGF0Y2ggewotICAgICAgICBSZWY8RWxlbWVudD4gZWxlbWVu
dDsKLSAgICAgICAgQXRvbVN0cmluZyBldmVudFR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwot
ICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWU7Ci0gICAgfTsKLSAgICBWZWN0b3I8RXZlbnRUb0Rp
c3BhdGNoPiBtX2V2ZW50c1RvRGlzcGF0Y2g7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9l
bGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2g7Ci0gICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3VzcGVu
ZGVkRG9jdW1lbnRzOwotCi0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gbV9iZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWU7Ci0KLSAgICB1c2luZyBBbmltYXRpb25zU2V0ID0gSGFzaFNldDxSZWZQ
dHI8QW5pbWF0aW9uQmFzZT4+OwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlOwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZVJlc3BvbnNlOwotCi0gICAgaW50IG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLQot
ICAgIGJvb2wgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbjsKLSAgICBib29sIG1f
aXNTdXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZXF1aXJlc0xheW91dCB7IGZhbHNl
IH07Ci0KLSAgICAvLyBVc2VkIHRvIGZsYWcgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHBy
ZXZpb3VzIGJ1Z2d5Ci0gICAgLy8gYmVoYXZpb3Igb2YgYWxsb3dpbmcgbmV3IHRyYW5zaXRpb25z
IGFuZCBhbmltYXRpb25zIHRvCi0gICAgLy8gcnVuIGV2ZW4gd2hlbiB0aGlzIG9iamVjdCBpcyBz
dXNwZW5kZWQuCi0gICAgYm9vbCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWJlNzU5YjA4MTYwOWJmNTMzMzQwZDMwYTAyNjE0NzM3NjUwNTAwNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxODcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgi
Ci0KLSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJD
U1NDcm9zc2ZhZGVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNs
dWRlICJDbGlwUGF0aE9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKLSNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKLSNpbmNsdWRlICJGb250VGFnZ2VkU2V0
dGluZ3MuaCIKLSNpbmNsdWRlICJHYXBMZW5ndGguaCIKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYXRyaXgz
RFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0j
aW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlckNv
bXBhcmlzb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5l
IGludCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9t
LCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8s
IHByb2dyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJl
dHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNz
KTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0K
LQotc3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQot
c3RhdGljIGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05v
cm1hbCgpKSA/IHRvIDogYmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNz
KTsKLX0KLQotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBM
ZW5ndGhTaXplJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiB7IGJsZW5kRnVu
YyhhbmltLCBmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
U2hhZG93U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17
Ci0gICAgaWYgKGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGRvdWJsZSBm
cm9tVmFsID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91Ymxl
IHRvVmFsID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSBy
ZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICBy
ZXR1cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5z
ZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dE
YXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAg
IEFTU0VSVChmcm9tICYmIHRvKTsKLSAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUo
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKLQotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5s
b2NhdGlvbigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+
cmFkaXVzKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5z
cHJlYWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUo
KSwgdG8tPnN0eWxlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFk
b3coKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNz
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHBy
b2dyZXNzKQotewotICAgIGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRj
aCgpKQotICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBw
cm9ncmVzcyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24o
ZnJvbSwgcHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRv
d25jYXN0PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgp
LnNpemUoKSA6IExheW91dFNpemUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQ
YXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IENsaXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0K
LSAgICAvLyBPdGhlciBjbGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBu
b3QgYmUgYW5pbWF0ZWQuCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlv
bjo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCi0gICAg
ICAgIHJldHVybiB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25j
YXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7Ci0gICAgY29u
c3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+
KCp0bykuYmFzaWNTaGFwZSgpOwotCi0gICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFw
ZSkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0
aW9uOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87
Ci0KLSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRv
LT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiB0bzsK
LQotICAgIGlmIChmcm9tLT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCi0gICAgICAgIHJldHVy
biB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgp
OwotICAgIGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0KLSAgICBp
ZiAoIWZyb21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0g
ICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJv
Z3Jlc3MpLCB0by0+Y3NzQm94KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmls
dGVyT3BlcmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dy
ZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQotewotICAgIEFTU0VSVCh0b09w
KTsKLSAgICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0
aHJvdWdoKTsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVy
T3BlcmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLSAgICBzaXplX3Qg
ZnJvbVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvU2l6ZSA9
IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9t
U2l6ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/
IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6
IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBi
bGVuZEZ1bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJv
bU9wID8gYmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDog
MCk7Ci0gICAgICAgIGlmIChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQub3BlcmF0aW9u
cygpLmFwcGVuZChibGVuZGVkT3ApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8g
aWRlbnRpdHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0
aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZy
b21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCi17
Ci0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGZ1bmN0aW9uIGxpc3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlv
bi4KLSAgICAKLSAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNo
ID0gYW5pbS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tk
cm9wRmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5j
dGlvbkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1By
b3BlcnR5QXBwbGVDb2xvckZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9y
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdHNNYXRjaCkKLSAgICAg
ICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVz
cyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMg
ZG9uJ3QgbWF0Y2gsIHdlIGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhh
dmUgYSB3YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4gQ1NTLgotICAgICAgICAvLyBGb3Igbm93IHdl
J2xsIGp1c3QgZmFpbCB0byBhbmltYXRlLgotICAgICAgICByZXN1bHQgPSB0bzsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdl
PiBibGVuZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNo
ZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsK
LSAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9u
cyhhbmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotCi0gICAgYXV0byBpbWFnZVZhbHVlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1
dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBm
aWx0ZXJSZXN1bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwotCi0gICAgYXV0byByZXN1bHQg
PSBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92
ZShmaWx0ZXJWYWx1ZSkpOwotICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZp
bHRlclJlc3VsdCk7Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZN
b3ZlKHJlc3VsdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlz
aWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEFueSBub24temVybyByZXN1
bHQgbWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAg
ZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQotICAgIC8vIGludmlzaWJsZS4gVGhlIGlu
dmlzaWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6
Q29sbGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KLSAgICBk
b3VibGUgZnJvbVZhbCA9IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0g
ICAgZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0g
ICAgaWYgKGZyb21WYWwgPT0gdG9WYWwpCi0gICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUg
cmVzdWx0ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAg
cmV0dXJuIHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmls
aXR5OjpWaXNpYmxlID8gdG8gOiBmcm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0VW5kZXJs
aW5lT2Zmc2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zm
c2V0JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYg
dG8uaXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0
ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3Ro
VmFsdWUoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3Jl
YXRlV2l0aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3Qg
VGV4dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYg
dG8uaXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpj
cmVhdGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxl
bmd0aFZhbHVlKCksIHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzOjpjcmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3Ro
Qm94JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAg
TGVuZ3RoQm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHBy
b2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0
KCksIHRvLnJpZ2h0KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVu
YyhhbmltLCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAotICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dy
ZXNzKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTVkdMZW5ndGhW
YWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNW
R0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9y
PFNWR0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdM
ZW5ndGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgc2l6ZV90IGZyb21MZW5n
dGggPSBmcm9tLnNpemUoKTsKLSAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7Ci0gICAg
aWYgKCFmcm9tTGVuZ3RoKQotICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOwot
ICAgIGlmICghdG9MZW5ndGgpCi0gICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6
IHRvOwotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOwotICAgIGlmIChmcm9t
TGVuZ3RoICE9IHRvTGVuZ3RoKSB7Ci0gICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZy
b21MZW5ndGgsIHRvTGVuZ3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKLSAg
ICAgICAgICAgIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRv
TGVuZ3RoOwotICAgIH0KLSAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRM
ZW5ndGgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0g
ICAgICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVu
Z3RoXSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1h
Z2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHls
ZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUlt
YWdlLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9m
IHRoZSBleHRyZW1lcywgd2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdl
LAotICAgIC8vIG5vdCBhIGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25l
IG9mIHRoZSBleGlzdGluZyBpbWFnZXMuCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0
dXJuIGZyb21TdHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1
cm4gdG9TdHlsZUltYWdlOwotICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkg
fHwgIXRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvU3R5bGVJ
bWFnZTsKLQotICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUo
KmZyb21TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAg
ICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jl
c3MsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUg
PSBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZN
b3ZlKHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7Ci0gICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdl
KiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAg
IHJldHVybiB0bzsKLQotICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7Ci0gICAgdG8g
PSB0by0+c2VsZWN0ZWRJbWFnZSgpOwotCi0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAg
cmV0dXJuIHRvOyAgICAKLQotICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQg
aW1hZ2VzLiBDcm9zcyBmYWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gICAgaWYgKGlzPFN0eWxl
R2VuZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7
Ci0gICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2Fz
dDxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVk
SW1hZ2U+KCp0bykuaW1hZ2VWYWx1ZSgpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFn
ZVZhbHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVy
YXRlZCkpIHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1
c3QgcG9zc2libGUgaWYgaW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KLSAgICAgICAgICAgIC8vIE90
aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCi0gICAgICAgICAgICBD
U1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0
b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAg
ICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZy
b21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0
ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJh
dGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYm
IGlzPENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Ny
b3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+
KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3Nm
YWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVu
ZChmcm9tQ3Jvc3NmYWRlLCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0
aW9uIGJldHdlZW4gdHdvICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgotICAgIH0gZWxzZSBpZiAo
aXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0
bykpIHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRv
d25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAg
IGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewotICAgICAgICAg
ICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlcklt
YWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2Fj
aGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdl
KCkgPT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBi
bGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmls
dGVyT3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAg
fQotICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRl
IGFuZCBpbWFnZSBzb3VyY2UuCi0gICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigq
ZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4odG9HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0Zp
bHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAg
ICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVk
SW1hZ2U+KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZElt
YWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBw
cm9ncmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9u
IGJldHdlZW4gaW1hZ2Ugc291cmNlIGFuZCBjcm9zcy1mYWRlLgotICAgIH0KLQotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQg
aW1hZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODI5MwotICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNo
ZWRJbWFnZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25j
YXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0
byksIHByb2dyZXNzKTsKLQotICAgIHJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSBOaW5l
UGllY2VJbWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywg
ZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJ
bWFnZSgpKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBw
b3J0IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkg
bW9yZSB0aGFuIGltYWdlIGNvbnRlbnQuCi0KLSAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9
IHRvLmltYWdlU2xpY2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGlj
ZXMoKSB8fCBmcm9tLm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRv
LmZpbGwoKSB8fCBmcm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8
fCBmcm9tLnZlcnRpY2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQotICAgICAgICByZXR1
cm4gdG87Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7Ci0g
ICAgICAgIGlmIChmcm9tLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5p
bWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkpCi0gICAgICAgICAgICByZXR1cm4gdG87
Ci0gICAgfQotCi0gICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9t
LmltYWdlKCksIHRvLmltYWdlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS5pbWFnZVNsaWNl
cygpLCBmcm9tLmZpbGwoKSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJv
bS5ob3Jpem9udGFsUnVsZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKLX0KLQotI2lmIEVOQUJM
RShWQVJJQVRJT05fRk9OVFMpCi0KLXN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdz
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBG
b250VmFyaWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgp
KQotICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgRm9udFZhcmlh
dGlvblNldHRpbmdzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBhdXRvJiBm
cm9tSXRlbSA9IGZyb20uYXQoaSk7Ci0gICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOwot
ICAgICAgICBpZiAoZnJvbUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQotICAgICAgICAgICAg
cmV0dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBpbnRlcnBvbGF0
ZWQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHBy
b2dyZXNzKTsKLSAgICAgICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBv
bGF0ZWQgfSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0
aWMgaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rp
b25WYWx1ZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2VsZWN0aW9u
VmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxG
b250U2VsZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZv
bnRTZWxlY3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9u
dFNlbGVjdGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52
YWx1ZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotfQot
Ci1jbGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKLSAgICB7
Ci0gICAgfQotICAgIHZpcnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBj
YW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0gICAgCi0jaWYgIUxPR19ESVNB
QkxFRAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29u
c3QgPSAwOwotI2VuZGlmCi0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJ
RCBtX3Byb3A7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5V3Jh
cHBlckdldHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkK
LSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwg
bV9nZXR0ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSAgICBUIHZh
bHVlKGNvbnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChh
LT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBS
ZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEp
IDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0
KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBUIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9w
ZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxU
Pihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIp
KCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5
bGU6OiptX3NldHRlcikoVCk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFJl
ZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQq
PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkK
LSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKLSAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+
KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAg
IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKLX07Ci0KLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3AsIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpKQotICAgICAgICA6IFByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0
ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVu
Z3RoJj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0
aCY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3Ro
Jj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZv
aWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcCwgY29uc3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgVCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
Ci0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJv
dGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Ci19OwotCi1j
bGFzcyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlX
cmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9w
LCBDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAg
ICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9w
LCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3Qg
Ym90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0
dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEg
PT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNs
aXBQYXRoQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBj
bGlwUGF0aEIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNs
aXBQYXRoQikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWNsaXBQYXRo
QSB8fCAhY2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gKmNsaXBQYXRoQSA9PSAqY2xpcFBhdGhCOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoVkFS
SUFUSU9OX0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdz
IDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJGb250
VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGlu
Z3MgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoRm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8
Rm9udFZhcmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAg
ICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCBy
ZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAo
YS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZh
cmlhdGlvblNldHRpbmdzQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiB2YXJp
YXRpb25TZXR0aW5nc0EgPT0gdmFyaWF0aW9uU2V0dGluZ3NCOwotICAgIH0KLX07Ci0jZW5kaWYK
LQotY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTaGFwZVZhbHVlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZh
bHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAg
ICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCBy
ZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgU2hhcGVWYWx1ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU2hh
cGVWYWx1ZSogc2hhcGVCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKHNoYXBlQSA9
PSBzaGFwZUIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaGFwZUEg
fHwgIXNoYXBlQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpz
aGFwZUEgPT0gKnNoYXBlQjsKLSAgICB9Ci19OwotCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlX
cmFwcGVyIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5
bGVJbWFnZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUlt
YWdlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU3R5bGVJ
bWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIGFyZVBvaW50
aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3Bl
cnR5V3JhcHBlckNvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xv
ciY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0
eVdyYXBwZXJDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBD
b2xvciYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHBy
b3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBDb2xvciY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
Q29sb3ImPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNs
YXNzIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQotICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmlt
YXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0
T3BhY2l0eShibGVuZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dy
ZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFu
c2Zvcm0gOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlX
cmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJT
dHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0o
KSwgYi0+dHJhbnNmb3JtKCksIHByb2dyZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVy
dHlXcmFwcGVyRmlsdGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKLSAgICAgICAgOiBQcm9w
ZXJ0eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwg
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQo
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NT
UHJvcGVydHlGaWx0ZXIKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAg
fHwgcHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCi0jZW5kaWYK
LSAgICAgICAgICAgIDsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlciko
KSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+Ojpt
X2dldHRlcikoKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMg
aW5saW5lIHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykK
LXsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93
ID0gc2hhZG93LT5uZXh0KCkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50Owot
fQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNv
bnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dE
YXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0Rh
dGE+IGRlZmF1bHRJbnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5
bGU6Okluc2V0LCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlv
dXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1
bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5
bGU6Okluc2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0KLSAgICBpZiAoc3Jj
U2hhZG93KQotICAgICAgICByZXR1cm4gc3JjU2hhZG93OwotCi0gICAgaWYgKG90aGVyU2hhZG93
LT5zdHlsZSgpID09IFNoYWRvd1N0eWxlOjpJbnNldCkKLSAgICAgICAgcmV0dXJuIG90aGVyU2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0Rh
dGEuZ2V0KCkgOiAmZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKLQotICAgIHJldHVybiBv
dGhlclNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93
RGF0YS5nZXQoKSA6ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKLX0KLQotY2xhc3MgUHJvcGVy
dHlXcmFwcGVyU2hhZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBl
clNoYWRvdyhDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHls
ZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5p
cXVlX3B0cjxTaGFkb3dEYXRhPiwgYm9vbCkpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKLSAgICAgICAgICAgIGlm
ICghc2hhZG93QSAmJiAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICAgICAgLy8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cwotICAgICAgICAgICAg
aWYgKCFzaGFkb3dBIHx8ICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsK
LSAgICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9n
ZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0
dGVyKSgpOwotCi0gICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFk
b3dBKTsKLSAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsK
LQotICAgICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAx
ICYmIHRvTGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
U2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRv
d0IpLCBmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAo
ZHN0LT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNz
LCBzaGFkb3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcu
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRp
bmcgU2hhZG93RGF0YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRh
OwotICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKLQotICAgICAgICB3aGlsZSAo
c2hhZG93QSB8fCBzaGFkb3dCKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNT
aGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKLSAgICAgICAgICAg
IGNvbnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0Is
IHNoYWRvd0EpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxl
bmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jl
c3MpOwotICAgICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRT
aGFkb3cuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKLSAgICAgICAgICAg
ICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRl
ZFNoYWRvdykpOwotCi0gICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsK
LQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOwot
ICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21M
ZW5ndGgsIGludCB0b0xlbmd0aCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3dz
IGluIFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1h
dGluZyBtaXNtYXRjaGVkIGxpc3RzLAotICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNo
IGZyb20gdGhlIGVuZC4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9t
U2hhZG93cyhmcm9tTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOwot
ICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
ICAgIHRvU2hhZG93c1tpXSA9IHNoYWRvd0I7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93
Qi0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0Rh
dGE+IG5ld1NoYWRvd0RhdGE7Ci0KLSAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZy
b21MZW5ndGgsIHRvTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkg
PCBmcm9tTGVuZ3RoID8gZnJvbVNoYWRvd3NbaV0gOiAwOwotICAgICAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogdG9TaGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOwotCi0g
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGlu
Zyhmcm9tU2hhZG93LCB0b1NoYWRvdyk7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBk
c3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7Ci0KLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxl
bmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAg
ICAvLyBJbnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRl
ci4KLSAgICAgICAgICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dE
YXRhKSk7Ci0gICAgICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQot
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0Owot
ICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dE
YXRhPiwgYm9vbCk7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
ciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQot
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBt
X2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9
Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAg
ICAgQ29sb3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlz
VmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9
PSB0b0NvbG9yOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3Ig
dG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAm
JiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3Io
KTsKLSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3Ig
PSBiLT5jb2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBm
cm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgdmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPipt
X2dldHRlcikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVu
ZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRl
clN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9w
ZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwg
IiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9n
cmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsK
LSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQot
Ci1lbnVtIE1heWJlSW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNz
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92
aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNp
dGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlk
Q29sb3JUYWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBD
b2xvciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1
ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIp
KQotICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJN
YXliZUludmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0g
ICAgewotICAgIH0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbV93
cmFwcGVyLT5lcXVhbHMoYSwgYikgJiYgbV92aXNpdGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOwot
ICAgIH0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
bV93cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICAgICAgbV92
aXNpdGVkV3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgfQot
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5s
b2dCbGVuZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93
cmFwcGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
PiBtX3Zpc2l0ZWRXcmFwcGVyOwotfTsKLQotLy8gV3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBh
bmltYXRhYmxlIHByb3BlcnR5IGluIGEgRmlsbExheWVyCi1jbGFzcyBGaWxsTGF5ZXJBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpCi0gICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICB7Ci0g
ICAgfQotICAgIHZpcnR1YWwgfkZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eTsgfQotCi0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5
ZXIqLCBjb25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5k
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxs
TGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLQotI2lmICFMT0df
RElTQUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAw
OwotI2VuZGlmCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyIDogcHVibGljIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcik7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKEZpbGxMYXllcjo6Kmdl
dHRlcikoKSBjb25zdCkKLSAgICAgICAgOiBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3BlcnR5KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRl
cikoKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gKGxheWVyLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5
KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0
ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNz
KSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3Rl
ZDoKLSAgICBUIChGaWxsTGF5ZXI6OiptX2dldHRlcikoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxM
YXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+
KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAo
Yi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgp
LCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0Js
ZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZp
bGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8
IGdldFByb3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+
Ojpwcm9wZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8g
IiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQot
ICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3Rp
bmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwotfTsKLQotY2xhc3Mg
RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRn
ZSAoRmlsbExheWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6Oipv
cmlnaW5TZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCi0gICAgICAgIDogRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIp
Ci0gICAgICAgICwgbV9sZW5ndGhTZXR0ZXIobGVuZ3RoU2V0dGVyKQotICAgICAgICAsIG1fb3Jp
Z2luR2V0dGVyKG9yaWdpbkdldHRlcikKLSAgICAgICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5T
ZXR0ZXIpCi0gICAgICAgICwgbV9mYXJFZGdlKGZhckVkZ2UpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0
b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0
aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+
Km1fb3JpZ2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5H
ZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0
aCAmJiBmcm9tRWRnZSA9PSB0b0VkZ2U7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmls
bExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAg
ICBMZW5ndGggdG9MZW5ndGggPSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21F
ZGdlID0gKGEtPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+
Km1fb3JpZ2luR2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyb21FZGdlICE9IHRv
RWRnZSkgewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBj
YWxjIGV4cHJlc3Npb24sCi0gICAgICAgICAgICBpZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQot
ICAgICAgICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5n
dGgoZnJvbUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdl
KSB7Ci0gICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNM
ZW5ndGgodG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChkc3QtPiptX29yaWdpblNldHRlciko
ZnJvbUVkZ2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZl
IHRvIHRoZSBsZWZ0L3RvcCBlZGdlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgKGRzdC0+Km1fbGVuZ3RoU2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9M
ZW5ndGgsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQg
bG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEp
IDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0
KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6Oipt
X2xlbmd0aFNldHRlcikoTGVuZ3RoKTsKLSAgICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdl
dHRlcikoKSBjb25zdDsKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRn
ZSk7Ci0gICAgRWRnZSBtX2ZhckVkZ2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNs
YXNzIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBUKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChG
aWxsTGF5ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0
ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIq
IGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAg
ICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5
ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVB
TShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUo
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAg
ICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZh
bHVlKGEpCi0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQqPjo6dmFsdWUoYikKLSAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBG
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9
Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShS
ZWZQdHI8VD4mJik7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFn
ZT4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXll
clN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJ
bWFnZSogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0
dGVyKShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogRmlsbExheWVyUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCi0g
ICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3Qg
RmlsbExheWVyKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQot
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dl
dHRlcikoKTsKLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsK
LSAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwot
ICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxM
YXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFt
ZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUo
YikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgot
fTsKLQotY2xhc3MgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIGNvbnN0IEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0
dGVyKSgpIGNvbnN0OwotICAgIHR5cGVkZWYgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXll
cnNBY2Nlc3NvcikoKTsKLQotICAgIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgTGF5ZXJzR2V0dGVyIGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNz
b3IpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAg
ICAgICAgLCBtX2xheWVyc0dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9sYXllcnNBY2Nlc3Nv
cihhY2Nlc3NvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb25YOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihw
cm9wZXJ0eSwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24s
ICZGaWxsTGF5ZXI6OmJhY2tncm91bmRYT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5k
WE9yaWdpbiwgRWRnZTo6UmlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWToKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFw
cGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVy
dHksICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmls
bExheWVyOjpiYWNrZ3JvdW5kWU9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmln
aW4sIEVkZ2U6OkJvdHRvbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAg
ICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXpl
TGVuZ3RoLCAmRmlsbExheWVyOjpzZXRTaXplTGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgICAgICAgICAgbV9m
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6
c2V0SW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8q
IGZyb21MYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xh
eWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGZyb21MYXll
ciAmJiB0b0xheWVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFw
cGVyLT5lcXVhbHMoZnJvbUxheWVyLCB0b0xheWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwotICAg
ICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsK
LSAgICAgICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAg
IGF1dG8qIGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgICAg
IHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2Zp
bGxMYXllclByb3BlcnR5V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxh
eWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAg
ICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0TGF5ZXIg
PSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxF
RAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXll
cnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRl
cikoKTsKLSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVy
KSgpOwotCi0gICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0g
ICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIs
IGFMYXllciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXIt
Pm5leHQoKTsKLSAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAg
ICAgZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyOwotCi0gICAgTGF5ZXJz
R2V0dGVyIG1fbGF5ZXJzR2V0dGVyOwotICAgIExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNz
b3I7Ci19OwotCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVy
cykKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAg
ICAgICAsIG1fcHJvcGVydHlXcmFwcGVycyhXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlm
IChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byYgd3JhcHBl
ciA6IG1fcHJvcGVydHlXcmFwcGVycykgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVh
bHMoYSwgYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBl
cnMpCi0gICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNz
KTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBk
c3QsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0
byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmxv
Z0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29uc3Qg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQotCi1wcml2YXRlOgotICAgIFZl
Y3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwot
fTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBQcm9wZXJ0eVdyYXBwZXJGbGV4KCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKENTU1Byb3BlcnR5RmxleCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgcmV0dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93
KCkgPT0gYi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygp
OwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBkc3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGIt
PmZsZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5k
RnVuYyhhbmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAg
ICAgICBkc3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwg
Yi0+ZmxleFNocmluaygpLCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQK
LSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0
cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQot
I2VuZGlmCi19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3As
IFNWR1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENv
bG9yIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZShwcm9wKQotICAgICAgICAsIG1fcGFpbnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikK
LSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9
PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdl
dHRlcikoKSAhPSAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4g
U1ZHUGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgotICAgICAgICAvLyBGb3IgZXZl
cnl0aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndp
c2UKLSAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3Jl
dmVyLgotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5
cGU6OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0
dGVyKSgpOwotICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0K
LSAgICAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJv
bUNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwot
ICAgICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICB0b0Nv
bG9yID0gQ29sb3IoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9y
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlw
ZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCi0gICAgICAgICAgICB8fCAoYi0+
Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlciko
KTsKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAg
aWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgp
KQotICAgICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcu
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRp
bmcgU1ZHUGFpbnQgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50
ZWdlcnMocHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTVkdQYWlu
dFR5cGUgKFJlbmRlclN0eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29s
b3IgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5
bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ckZvbnRTdHlsZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlv
blZhbHVlPj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckZvbnRTdHlsZSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlv
bmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4+KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5
bGU6OmZvbnRJdGFsaWMsICZSZW5kZXJTdHlsZTo6c2V0Rm9udEl0YWxpYykKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZyb20tPmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNj
cmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5m
b250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsK
LSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGF1dG8gZGlzY3JldGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCi0gICAg
ICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAg
IGlmIChkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3Mg
PCAwLjUgPyBmcm9tIDogdG8pLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7Ci0K
LSAgICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKLSAgICAg
ICAgYXV0byB0b0ZvbnRJdGFsaWMgPSB0by0+Zm9udEl0YWxpYygpOwotICAgICAgICBhdXRvIGJs
ZW5kZWRGb250SXRhbGljID0gcHJvZ3Jlc3MgPCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9u
dEl0YWxpYzsKLSAgICAgICAgaWYgKCFkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRGb250
SXRhbGljID0gYmxlbmRGdW5jKGFuaW0sIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHBy
b2dyZXNzKTsKLQotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBk
c3QtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRp
b24gPSBkc3QtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFs
aWMoYmxlbmRlZEZvbnRJdGFsaWMpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVB
eGlzKGJsZW5kZWRTdHlsZUF4aXMpOwotICAgICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUo
Y3VycmVudEZvbnRTZWxlY3Rvcik7Ci0gICAgfQotfTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmlt
YXRpb25XcmFwcGVyTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQot
ICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1h
eWJlIHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NB
bmltYXRpb25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD4gbWFwOwotICAgICAgICByZXR1
cm4gbWFwOwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBw
ZXJGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi0gICAgewotICAgICAgICBp
ZiAocHJvcGVydHlJRCA8IGZpcnN0Q1NTUHJvcGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQ
cm9wZXJ0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVuc2lnbmVk
IHdyYXBwZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCk7Ci0gICAgICAg
IGlmICh3cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBl
cnNbd3JhcHBlckluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKiB3cmFwcGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAg
ICBBU1NFUlQoaW5kZXggPCBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpKTsKLSAgICAgICAgcmV0
dXJuIG1fcHJvcGVydHlXcmFwcGVyc1tpbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUo
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFw
KCk7Ci0gICAgfkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOwotCi0g
ICAgdW5zaWduZWQgY2hhciYgaW5kZXhGcm9tUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJ
RCAtIGZpcnN0Q1NTUHJvcGVydHldOwotICAgIH0KLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKLSAg
ICB1bnNpZ25lZCBjaGFyIG1fcHJvcGVydHlUb0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOwotCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRl
eCA9IFVDSEFSX01BWDsKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD47Ci19OwotCi1DU1NQcm9wZXJ0eUFuaW1hdGlv
bldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCi17Ci0gICAgLy8g
YnVpbGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25z
IGFuZCBibGVuZHMKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxl
TG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzW10gPSB7Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHls
ZTo6c2V0TGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlSaWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCi0g
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJT
dHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVu
ZGVyU3R5bGU6OnNldEJvdHRvbSksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNl
dFdpZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1p
bldpZHRoLCAmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRo
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRo
LCAmUmVuZGVyU3R5bGU6Om1heFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKLQot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVu
ZGVyU3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6
Om1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNaW5IZWlnaHQpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1h
eEhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQpLAotCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJGbGV4KCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRo
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxl
Ojpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdp
ZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
clRvcFdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlCb3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxl
ZnQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5S
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2lu
VG9wLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2lu
Qm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSksCi0gICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHls
ZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVy
U3R5bGU6OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVu
ZGVyU3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSks
Ci0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldENhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJT
dHlsZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRl
ZExpbmtDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNr
Z3JvdW5kQ29sb3IpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBTdHls
ZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJT
dHlsZTo6bGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAot
ICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0lt
YWdlKSwKLQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU291cmNlKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlh
bnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2Us
ICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
SW1hZ2VTbGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxM
ZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgpLAotICAgICAg
ICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdl
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVu
ZGVyU3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1h
Z2VTb3VyY2UpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUlt
YWdlJj4oQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0Jv
eEltYWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZSksCi0KLSAgICAgICAgbmV3IEZp
bGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dy
b3VuZExheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJz
LCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgRmls
bExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVy
U3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExh
eWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
V2Via2l0QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLQotICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5k
ZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAg
ICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNr
UG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJl
TWFza0xheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5V2Via2l0TWFza1NpemUsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0
eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUs
ICZSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxl
Ojpjb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKLSAg
ICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9w
ZXJ0eUNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0
Q29sdW1uR2FwKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2Fw
TGVuZ3RoPihDU1NQcm9wZXJ0eVJvd0dhcCwgJlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJT
dHlsZTo6c2V0Um93R2FwKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBz
aG9ydD4oQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAm
UmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhv
cml6b250YWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6
dmVydGljYWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3Bh
Y2luZyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRl
eCwgJlJlbmRlclN0eWxlOjpzcGVjaWZpZWRaSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lm
aWVkWkluZGV4KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVy
dHlPcnBoYW5zLCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFu
cyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dz
LCAmUmVuZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MpLAotICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRl
clN0eWxlOjpzcGVjaWZpZWRMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVP
ZmZzZXQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lT2Zmc2V0KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcs
ICZSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRJbmRlbnQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5UGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3Bl
Y3RpdmUsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmUpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5
bGU6OnBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdp
blgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3Bl
Y3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0
eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zv
cm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpLAotICAgICAgICBu
ZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJl
bmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9y
aWdpblkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRy
YW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0
eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5aKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAm
UmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wTGVmdFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
PExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRS
YWRpdXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhT
aXplPihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFk
aXVzKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6
ZT4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJh
ZGl1cyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVy
dHlWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0
VmlzaWJpbGl0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5Wm9vbSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0
UmV0dXJuVmFsdWUpLAotCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
PExlbmd0aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJT
dHlsZTo6c2V0Q2xpcCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVk
T3BhY2l0eSgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zv
cm0oKSwKLSAgICAgICAgCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJv
cGVydHlGaWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRl
ciksCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6
OmJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKLSNlbmRp
ZgotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xv
ckZpbHRlciwgJlJlbmRlclN0eWxlOjphcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNl
dEFwcGxlQ29sb3JGaWx0ZXIpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0
aChDU1NQcm9wZXJ0eUNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5
bGU6OnNldENsaXBQYXRoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NT
UHJvcGVydHlTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVy
U3R5bGU6OnNldFNoYXBlT3V0c2lkZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJl
bmRlclN0eWxlOjpzZXRTaGFwZU1hcmdpbiksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5U2hhcGVJbWFnZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFw
ZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAot
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUNvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29s
dW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0
eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0NvbHVtblJ1bGVDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZh
bGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciksCi0gICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dFRleHRGaWxsQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxs
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0Rmls
bENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAm
UmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
clZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJ
bnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmln
aHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
VG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6
dmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Jv
cmRlclRvcENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3Rl
ZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJv
dHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVD
b2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxp
bmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciksCi0KLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJl
bmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywg
JlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZS
ZW5kZXJTdHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKLQot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVu
ZGVyU3R5bGU6OmZpbGxQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0RmlsbFBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFj
aXR5LCAmUmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KSwKLQotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tl
UGFpbnRUeXBlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0U3Ryb2tlUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAm
UmVuZGVyU3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4+KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAm
UmVuZGVyU3R5bGU6OnN0cm9rZURhc2hBcnJheSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNo
QXJyYXkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0
cm9rZU1pdGVybGltaXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0
eWxlOjpzZXRTdHJva2VNaXRlckxpbWl0KSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5Q3gsICZSZW5kZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0
Q3gpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZS
ZW5kZXJTdHlsZTo6Y3ksICZSZW5kZXJTdHlsZTo6c2V0Q3kpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5
bGU6OnNldFIpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
UngsICZSZW5kZXJTdHlsZTo6cngsICZSZW5kZXJTdHlsZTo6c2V0UngpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZS
ZW5kZXJTdHlsZTo6c2V0UnkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldCwgJlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0
LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hPZmZzZXQpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ry
b2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlV2lkdGgpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVy
U3R5bGU6OnNldFgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5WSwgJlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5bGU6OnNldFkpLAotCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVy
U3R5bGU6OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9v
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RD
b2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlT
dG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRT
dG9wT3BhY2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eVN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0U3RvcENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJ
bnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0
aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0TGlnaHRpbmdDb2xvciksCi0KLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0
LCAmUmVuZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNl
bGluZVNoaWZ0VmFsdWUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZh
bHVlPihDU1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0
eWxlOjpzZXRLZXJuaW5nKSwKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZh
cmlhdGlvblNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJl
bmRlclN0eWxlOjpzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MpLAotI2VuZGlmCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWln
aHQsICZSZW5kZXJTdHlsZTo6Zm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1By
b3BlcnR5Rm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHls
ZTo6c2V0Rm9udFN0cmV0Y2gpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxl
KCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERl
Y29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25l
c3MpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENT
U1Byb3BlcnR5VGV4dFVuZGVybGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5l
T2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldFRleHRVbmRlcmxpbmVPZmZzZXQpLAotICAgIH07Ci0g
ICAgY29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RG
X0FSUkFZX0xFTkdUSChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKLQotICAg
IHN0YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVz
W10gPSB7Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQt
Y29sb3IsIGJhY2tncm91bmQtcG9zaXRpb24sIGJhY2tncm91bmQtaW1hZ2UKLSAgICAgICAgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8g
Zm9yIGZvbnQtc2l6ZSwgZm9udC13ZWlnaHQKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNr
LCAvLyBmb3IgbWFzay1wb3NpdGlvbgotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvbiwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmln
aHQsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCi0gICAg
ICAgIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFk
aXVzLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwKLSAgICAgICAgQ1NTUHJv
cGVydHlCb3JkZXJTcGFjaW5nLAotICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9y
IGxpc3Qtc3R5bGUtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCi0gICAgICAgIENT
U1Byb3BlcnR5T3V0bGluZSwKLSAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAotICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2UsCi0gICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVs
ZSwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1By
b3BlcnR5VHJhbnNmb3JtT3JpZ2luCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRh
YmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxl
U2hvcnRoYW5kUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUT0RPOgotICAgIC8vCi0gICAgLy8gIENT
U1Byb3BlcnR5VmVydGljYWxBbGlnbgotICAgIC8vCi0gICAgLy8gQ29tcG91bmQgcHJvcGVydGll
cyB0aGF0IGhhdmUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBhbmltYXRhYmxlOgotICAgIC8v
Ci0gICAgLy8gIENTU1Byb3BlcnR5Q29sdW1ucwotICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFJlZmxlY3QKLQotICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1f
cHJvcGVydHlUb0lkTWFwW2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKLQotICAg
IENPTVBJTEVfQVNTRVJUKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1h
dGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0
YWJsZVByb3BlcnRpZXNNdXN0QmVMZXNzVGhhblVDaGFyTWF4KTsKLSAgICBtX3Byb3BlcnR5V3Jh
cHBlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVz
Q291bnQgKyBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50KTsKLQotICAgIC8vIEZp
cnN0IHdlIHB1dCB0aGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBt
YXAsIHNvIHRoZSBzaG9ydGhhbmQtYnVpbGRpbmcKLSAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0u
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVy
dGllc0NvdW50OyArK2kpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSog
d3JhcHBlciA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbaV07Ci0gICAgICAg
IG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2U+KHdyYXBwZXIpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJv
cGVydHlJRCh3cmFwcGVyLT5wcm9wZXJ0eSgpKSA9IGk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsK
LSAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFBy
b3BlcnRpZXNbaV07Ci0gICAgICAgIGF1dG8gc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVy
dHkocHJvcGVydHlJRCk7Ci0gICAgICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqPiBsb25naGFuZFdyYXBwZXJzOwotICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2hvcnRoYW5kLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChhdXRv
IGxvbmdoYW5kIDogc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5k
ZXggPSBpbmRleEZyb21Qcm9wZXJ0eUlEKGxvbmdoYW5kKTsKLSAgICAgICAgICAgIGlmICh3cmFw
cGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBl
ckluZGV4XSk7Ci0gICAgICAgICAgICBsb25naGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZCht
X3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX3Byb3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRo
YW5kUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMp
KSk7Ci0gICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxl
TG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZ2F0
aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5
SUQ+JiBwcm9wZXJ0eVNldCkKLXsKLSAgICBpZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBl
cigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBw
ZXIqIHNob3J0aGFuZFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBw
ZXIqPih3cmFwcGVyKTsKLSAgICBib29sIGNvbnRhaW5lZCA9IGZhbHNlOwotICAgIGZvciAoYXV0
byYgY3VycldyYXBwZXIgOiBzaG9ydGhhbmRXcmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsK
LSAgICAgICAgaWYgKGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHks
IGN1cnJXcmFwcGVyLCBwcm9wZXJ0eVNldCkgfHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0g
cHJvcGVydHkpCi0gICAgICAgICAgICBjb250YWluZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
IChjb250YWluZWQpCi0gICAgICAgIHByb3BlcnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgp
KTsKLQotICAgIHJldHVybiBjb250YWluZWQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBu
ZWVkIHRvIHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBD
U1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChw
cm9wICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAg
ICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0jaWYgIUxPR19E
SVNBQkxFRAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsK
LSNlbmRpZgotICAgIH0KLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0
eUFuaW1hdGFibGUoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9w
KTsKLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gd3JhcHBlciA/
IHdyYXBwZXItPmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwotfQotCi0vLyBOb3Rl
OiB0aGlzIGlzIGluZWZmaWNpZW50LiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0
aW9uQXRUaW1lKCkuCi1IYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9u
OjphbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJv
cGVydHkpCi17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiBmb3VuZFByb3BlcnRpZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1hcC5zaXplKCk7ICsraSkKLSAgICAgICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJv
cGVydGllcyhwcm9wZXJ0eSwgbWFwLndyYXBwZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVz
KTsKLQotICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlB
bmltYXRpb246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpz
aW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQo
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3Bl
cnR5KHByb3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2Fu
SW50ZXJwb2xhdGUoYSwgYik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DU1NQcm9wZXJ0eUlE
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFs
PGJvb2w+JiBpc1Nob3J0aGFuZCkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXAmIG1hcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0K
LSAgICBpZiAoaSA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkp
Ci0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0KLSAgICBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gbWFwLndyYXBwZXJGb3JJbmRleChpKTsKLSAgICBp
c1Nob3J0aGFuZCA9IHdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpOwotICAgIHJldHVybiB3
cmFwcGVyLT5wcm9wZXJ0eSgpOwotfQotCi1pbnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51
bVByb3BlcnRpZXMoKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXA6OnNpbmdsZXRvbigpLnNpemUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBA
IC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENT
U1Byb3BlcnR5QW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5
QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlBy
b3BlcnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9w
ZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVk
KENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
Yik7Ci0gICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0
aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKLSAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRp
ZXMoKTsKLQotICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9y
dGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKLSAgICBz
dGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M0
OWJjZjZkOTFmNGRjZGY1NDY3MTRhNTQzNjgzZTEyZDQ3OTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRl
ICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5
QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIklt
cGxpY2l0QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbihD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICA6
IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotewotICAgIG1fc3Vz
cGVuZGVkID0gbV9hbmltYXRpb25Db250cm9sbGVyLmlzU3VzcGVuZGVkKCkgJiYgIW1fYW5pbWF0
aW9uQ29udHJvbGxlci5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQot
Q29tcG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUb3Nz
IHRoZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVt
IGZyb20KLSAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KLQotICAgIGNsZWFyRWxlbWVu
dCgpOwotICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jbGVhcigpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkK
LXsKLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENsZWFy
IHRoZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFy
ZSBpbiB0aGUgbWlkZGxlIG9mCi0gICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAg
Zm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAg
ICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5z
aXRpb24pOwotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBt
X2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0
byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRp
b24pOwotICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUmIHRhcmdldFN0eWxlKQotewotICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRo
ZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNraXAgaXQKLSAgICBpZiAo
IWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGFsbCBleGlz
dGluZyB0cmFuc2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0
aWxsIGFjdGl2ZSBvbmVzCi0gICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRo
ZSBvbmVzIHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9u
IDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0aXZl
KGZhbHNlKTsKLSAgICAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtb2Rp
ZmllZEN1cnJlbnRTdHlsZTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0
byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwotICAgIGlmICh0YXJnZXRTdHlsZS50cmFu
c2l0aW9ucygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUu
dHJhbnNpdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlv
biA9IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAgICAg
IGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0
aW9uLmRlbGF5KCkgPiAwOwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJv
cGVydHkoKS5tb2RlOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0
aW9uTW9kZTo6Tm9uZSB8fCBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlVua25v
d25Qcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NT
UHJvcGVydHlJRCBwcm9wID0gYW5pbWF0aW9uLnByb3BlcnR5KCkuaWQ7Ci0KLSAgICAgICAgICAg
IGJvb2wgYWxsID0gbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGw7Ci0KLSAg
ICAgICAgICAgIC8vIEhhbmRsZSBib3RoIHRoZSAnYWxsJyBhbmQgc2luZ2xlIHByb3BlcnR5IGNh
c2VzLiBGb3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UsIHdlIG1ha2Ugb25seSBvbmUgcGFzcwotICAg
ICAgICAgICAgLy8gdGhyb3VnaCB0aGUgbG9vcC4KLSAgICAgICAgICAgIGZvciAoaW50IHByb3Bl
cnR5SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51
bVByb3BlcnRpZXMoKTsgKytwcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFs
bCkgewotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2gg
aXMgbm90IGEgc2hvcnRoYW5kLgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBp
c1Nob3J0aGFuZDsKLSAgICAgICAgICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKHByb3AgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNo
ZWQgYnkgYWN0dWFsIHByb3BlcnRpZXMsIG5ldmVyIGFuaW1hdGVBbGwuCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9wIDwgKGZpcnN0Q1NTUHJv
cGVydHkgKyBudW1DU1NQcm9wZXJ0aWVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlv
biBpcyBvdmVycmlkZGVuCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRo
ZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0aGUgdGVzdAotICAg
ICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdl
ICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCi0gICAgICAgICAgICAgICAgYXV0byog
a2V5ZnJhbWVBbmltYXRpb24gPSBhbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAg
ICAgICAgICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW1hdGlvbiA/ICZrZXlmcmFtZUFu
aW1hdGlvbi0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJv
cAotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNp
dGlvbnMuZ2V0KHByb3ApOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWwgPSB0cnVlOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGltcGxBbmltKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IHdlIGFyZSBwb3N0IGFjdGl2ZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUgYWN0aXZlIGZsYWcu
IFRoaXMgd2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFuaW1hdGlvbiB0
byBnZXQgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghaW1wbEFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGltcGxBbmltLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiB0aGF0IGlzIGp1
c3QgZmluaXNoaW5nLiBUaGF0IHdvdWxkIGJlIHRoZSBjYXNlCi0gICAgICAgICAgICAgICAgICAg
IC8vIGlmIGl0IHdlcmUgcG9zdEFjdGl2ZS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9y
IGVxdWFsaXR5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUganVz
dCBmaW5pc2hpbmcgQU5EIGNoYW5naW5nIHRvIGEgbmV3IGdvYWwgc3RhdGUuCi0gICAgICAgICAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbEFuaW0gbWlnaHQg
YWxzbyBub3QgYmUgYW4gYWxyZWFkeSBydW5uaW5nIHRyYW5zaXRpb24uIEl0IG1pZ2h0IGJlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIG5ld2x5IGFkZGVkIHRvIHRoZSBsaXN0IGluIGEgcHJldmlv
dXMgaXRlcmF0aW9uLiBUaGlzIHdvdWxkIGhhcHBlbiBpZgotICAgICAgICAgICAgICAgICAgICAv
LyB5b3UgaGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkgYW5kICdhbGwn
IGluIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwg
dGhlIGxhdHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRp
b24gYmVpbmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1wbEFuaW0tPmlz
VGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVkIHRvIHJldHVy
biBhIG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNp
dGlvbnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2Nl
bGVyYXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllZEN1cnJlbnRTdHlsZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIoKmN1cnJlbnRTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bXBsQW5pbS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRT
dHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0
aW9uICVwIGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQoKmltcGxBbmltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJh
bnNpdGlvbnMucmVtb3ZlKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2l0aW9uIGlmIGl0
IGlzIGFjdGl2ZSBhbmQgdGhlIHByb3BlcnRpZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAg
ICAgICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0aW9u
Ojpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpIHx8ICFDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wLCBmcm9tU3R5
bGUsICZ0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFp
c0FjdGl2ZVRyYW5zaXRpb24pLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gdGhh
dCB0byBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGNhbmNlbGluZyBhIHRyYW5zaXRpb24uIEJ1dCB3
ZSBkb24ndCB3YW50IHRvCi0gICAgICAgICAgICAgICAgLy8gc3RhcnQgb25lIG9mIHRoZSBpbmFj
dGl2ZSB0cmFuc2l0aW9ucy4gU28gc2hvcnQgY2lyY3VpdCB0aGF0IGhlcmUuIChTZWUKLSAgICAg
ICAgICAgICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0
Nzg3PgotICAgICAgICAgICAgICAgIGlmICghZXF1YWwgJiYgaXNBY3RpdmVUcmFuc2l0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxpY2l0QW5pbWF0aW9uOjpj
cmVhdGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9kaWZpZWRDdXJyZW50U3R5
bGUgPyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9uLT5oYXNTdHlsZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0
ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICJDcmVhdGVkIEltcGxpY2l0QW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAg
Zm9yIHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxpY2l0QW5pbWF0
aW9uLnB0cigpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmltYXRpb24uZHVy
YXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3RyYW5z
aXRpb25zLnNldChwcm9wLCBXVEZNb3ZlKGltcGxpY2l0QW5pbWF0aW9uKSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBwYXNzIGZvciB0
aGUgc2luZ2xlIHByb3AgY2FzZQotICAgICAgICAgICAgICAgIGlmICghYWxsKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIE1ha2UgYSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHJlbW92ZWQKLSAgICBWZWN0b3I8
aW50PiB0b0JlUmVtb3ZlZDsKLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRp
b25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAg
ICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0
cmFuc2l0aW9uKTsKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5h
bmltYXRpbmdQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3Zp
bmcgSW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyIs
IHRyYW5zaXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+
YW5pbWF0aW5nUHJvcGVydHkoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHJl
bW92ZSB0aGUgdHJhbnNpdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoYXV0byBwcm9wZXJ0
eVRvUmVtb3ZlIDogdG9CZVJlbW92ZWQpCi0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHBy
b3BlcnR5VG9SZW1vdmUpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5
ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBOb3Ro
aW5nIHRvIGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2
ZSBhbnkgYmVmb3JlCi0gICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAh
dGFyZ2V0U3R5bGUuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgCi0gICAgaWYgKGN1cnJl
bnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5o
YXNBbmltYXRpb25zKCkgJiYgKihjdXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJn
ZXRTdHlsZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBbmltYXRpb25O
YW1lTWFwIG5ld0FuaW1hdGlvbnM7Ci0KLSAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIg
bWFwLgotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwotCi0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBub25lKCJub25l
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAotICAgIC8vIE5vdyBt
YXJrIGFueSBzdGlsbCBhY3RpdmUgYW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3
IGFuaW1hdGlvbnMuCi0gICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgewotICAgICAg
ICBpbnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRv
JiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAg
ICAgICAgICAgIEF0b21TdHJpbmcgYW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKLQot
ICAgICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhl
cmUgaXMgYSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhpcyBuYW1lLgotICAgICAgICAgICAgUmVm
UHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5nZXQoYW5pbWF0aW9uTmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5p
bSkgewotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKGtleWZyYW1lQW5pbS0+bmFt
ZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLQotICAgICAgICAgICAgICAgIGlmIChrZXlmcmFt
ZUFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRp
ZmZlci4gVXBkYXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVw
ZGF0ZVBsYXlTdGF0ZShhbmltYXRpb24ucGxheVN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAg
Ly8gU2V0IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2Ug
dGhlIHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmlt
LT5zZXRBbmltYXRpb24oYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW1h
dGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpKSAmJiBhbmltYXRpb24uaXRlcmF0
aW9uQ291bnQoKSAmJiBhbmltYXRpb25OYW1lICE9IG5vbmUpIHsKLSAgICAgICAgICAgICAgICBr
ZXlmcmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVu
dCwgKnRoaXMsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IkNyZWF0aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFt
ZXMgJXMsIGR1cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZy
YW1lQW5pbS5nZXQoKSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwg
YW5pbWF0aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0
aW9uQ291bnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxh
eVN0YXRlOjpQYXVzZWQpOwotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAg
KGNyZWF0ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgICAgICB9
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlE
IDoga2V5ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5wcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3BlcnR5TmFtZShw
cm9wZXJ0eUlEKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuc2V0
KGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gdGhlIGFuaW1hdGlv
biBvcmRlciBtYXAuCi0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAgICAgICAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1l
KCkuaW1wbCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgbGlzdCBv
ZiBhbmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBt
X2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIW5ld0FuaW1hdGlv
bnMuY29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5p
bWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0g
ICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1h
dGlvbi5nZXQoKSwgJmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6
c3dhcChuZXdBbmltYXRpb25zLCBtX2tleWZyYW1lQW5pbWF0aW9ucyk7Ci19Ci0KLUFuaW1hdGlv
blVwZGF0ZSBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlKQotewotICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBo
YXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucyhl
bGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFtZUFu
aW1hdGlvbnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgbV9rZXlm
cmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1h
dGlvbkltcGFjdD4gaW1hcGN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBh
bmltYXRlZFN0eWxlOwotCi0gICAgaWYgKGN1cnJlbnRTdHlsZSkgewotICAgICAgICAvLyBOb3cg
dGhhdCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91
dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAgICAgLy8gdG8gZmlsbCBp
biBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgICAgIGJvb2wgY2hlY2tGb3JT
dGFja2luZ0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0gdHJh
bnNpdGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAg
ICAgICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVk
KSkKLSAgICAgICAgICAgICAgICBjaGVja0ZvclN0YWNraW5nQ29udGV4dCB8PSBXaWxsQ2hhbmdl
RGF0YTo6cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRyYW5zaXRpb24tPmFuaW1hdGlu
Z1Byb3BlcnR5KCkpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRl
Q2hhbmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIHRyYW5zaXRpb24tPmFmZmVjdHNBY2NlbGVy
YXRlZFByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBh
Y3Q6OlJlcXVpcmVzUmVjb21wb3NpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFuaW1h
dGVkU3R5bGUgJiYgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBTdHlsZTo6QWRqdXN0ZXI6OmFkanVz
dCgpIGJ1dCBvbmx5IG5lZWRzIHRvIGNvbnN1bHQKLSAgICAgICAgICAgIC8vIGFuaW1hdGFibGUg
cHJvcGVydGllcyB0aGF0IGNhbiB0cmlnZ2VyIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAg
ICBpZiAoYW5pbWF0ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICAgICAgICAgIHx8
IGFuaW1hdGVkU3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAg
ICAgICAgfHwgYW5pbWF0ZWRTdHlsZS0+aGFzTWFzaygpCi0gICAgICAgICAgICAgICAgfHwgYW5p
bWF0ZWRTdHlsZS0+Y2xpcFBhdGgoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUt
PmJveFJlZmxlY3QoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0ZpbHRl
cigpCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICB8fCBhbmlt
YXRlZFN0eWxlLT5oYXNCYWNrZHJvcEZpbHRlcigpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAp
Ci0gICAgICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdD
b250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5p
bWF0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0
YXRlLiAgV2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25s
eSBpZiBuZWVkZWQuCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9rZXlmcmFtZUFuaW1hdGlvbk9y
ZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmlt
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltKSB7Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSBrZXlmcmFtZUFuaW0tPmFuaW1hdGUo
KnRoaXMsIHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGFu
Z2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYga2V5ZnJh
bWVBbmltLT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGlt
YXBjdC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1aXJlc1JlY29tcG9zaXRlKTsKLQotICAgICAg
ICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSAm
JiBrZXlmcmFtZUFuaW0tPnRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7Ci0K
LSAgICAgICAgICAgIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCB8PSBrZXlmcmFt
ZUFuaW0tPmRlcGVuZHNPbkxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgV1RGTW92ZShhbmltYXRlZFN0eWxlKSwgaW1hcGN0IH07Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29u
c3QKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwotICAg
IGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAg
IHRyYW5zaXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotCi0gICAgbV9rZXlm
cmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgZm9yIChhdXRvJiBuYW1l
IDogbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFt
ZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQo
bmFtZSk7Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKLSAgICAgICAgICAgIGtleWZy
YW1lQW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIHJlc3VsdFN0eWxlOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDb21wb3Np
dGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm5z
IHRoZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0
IG1lYW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlz
IHJlcXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFu
eSBzZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgT3B0aW9uYWw8U2Vjb25kcz4gbWluVDsKLSAg
ICAKLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9w
dGlvbmFsPFNlY29uZHM+IHQgPSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAg
ICAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKCFtaW5UIHx8IHQudmFsdWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBt
aW5UID0gdC52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1f
a2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
bV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHQgPSBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBp
ZiAoIXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQg
fHwgdC52YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQgPSB0LnZh
bHVlKCk7Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pblQ7Ci19
Ci0KLUtleWZyYW1lQW5pbWF0aW9uKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGlvbkZvclBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgS2V5ZnJhbWVBbmlt
YXRpb24qIHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNlbmQgYmFjayB0
aGUgbGFzdCBhbmltYXRpb24gd2l0aCB0aGUgcHJvcGVydHkgaWYgdGhlcmUgYXJlIG11bHRpcGxl
cy4KLSAgICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9ucwot
ICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBh
bmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAg
aWYgKGFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGFuaW1hdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRl
RXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewot
ICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0
cmFuc2Zvcm0sIGdpdmUgdXAuCi0gICAgYm9vbCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFs
c2U7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9u
cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKCFhbmltYXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRp
b24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5z
aXRpb24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
c2VlblRyYW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAoIXRyYW5zaXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihi
b3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25z
KCkKLXsKLSAgICBpZiAobV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3Vz
cGVuZGVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMo
KSkKLSAgICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlT
dGF0ZTo6UGF1c2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVz
KCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQotICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBh
dXNlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpy
ZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc3VzcGVuZGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVB
bmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5wbGF5U3Rh
dGVQbGF5aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUo
QW5pbWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRp
b24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0
YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMo
KSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0g
cHJvcGVydHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbih0cnVl
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsK
LSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0
cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb24tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9u
IDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmlt
YXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlv
biA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9u
LT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNv
bnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4g
a2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKLSAg
ICBpZiAoIWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGtleWZyYW1lQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIGlmICgo
cHJvcGVydHkgPCBmaXJzdENTU1Byb3BlcnR5KSB8fCAocHJvcGVydHkgPj0gZmlyc3RDU1NQcm9w
ZXJ0eSArIG51bUNTU1Byb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wZXJ0eSk7
Ci0gICAgaWYgKCFpbXBsQW5pbSkgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBw
cm9wZXJ0eSBpcyBiZWluZyBhbmltYXRlZCB2aWEgYSBzaG9ydGhhbmQuCi0gICAgICAgIC8vIFRo
aXMgY29kZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcsIHNvIHBlcmZvcm1hbmNlIGlzIG5vdCBj
cml0aWNhbCBoZXJlLgotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IHNob3J0aGFuZFBy
b3BlcnRpZXMgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZl
Y3RpbmdQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgYW55UGF1c2VkID0gZmFsc2U7
Ci0gICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgewot
ICAgICAgICAgICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKLSAg
ICAgICAgICAgICAgICBhbnlQYXVzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBhbnlQYXVzZWQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbXBsQW5pbS0+cnVubmluZygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKHQgPj0gMC4wKSAmJiAodCA8PSBpbXBsQW5p
bS0+ZHVyYXRpb24oKSkpIHsKLSAgICAgICAgaW1wbEFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNp
Z25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0
Ci17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5
ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPnJ1bm5p
bmcoKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFu
c2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlv
bi0+cnVubmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIGNvdW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5NDIyNjkyMzk2ZDJmYmE2ODgwZDFjZDlmOWM4ZDY5YjgyZTdiMGM1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFt
ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNs
YXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBDb21wb3NpdGVB
bmltYXRpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0IGFyZSBy
dW5uaW5nCi0vLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEgbnVtYmVyIG9m
IHByb3BlcnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgotY2xhc3MgQ29tcG9zaXRlQW5pbWF0
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmlt
YXRpb24+IGNyZWF0ZShDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29u
dHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFu
aW1hdGlvbihhbmltYXRpb25Db250cm9sbGVyKSk7Ci0gICAgfTsKLQotICAgIH5Db21wb3NpdGVB
bmltYXRpb24oKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwotCi0gICAgQW5pbWF0
aW9uVXBkYXRlIGFuaW1hdGUoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRl
RXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgT3B0
aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKLSAgICAKLSAgICBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIGJvb2wgaXNTdXNwZW5k
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotICAgIAotICAgIGJvb2wgaGFzQW5p
bWF0aW9ucygpIGNvbnN0ICB7IHJldHVybiAhbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkgfHwgIW1f
a2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1By
b3BlcnR5KENTU1Byb3BlcnR5SUQsIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdDsKLQotICAg
IEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBj
b25zdDsKLQotICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJ
RCk7Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3Bl
cnR5SUQpOwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9tU3RyaW5n
JiBuYW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJv
cGVydHlJRCwgZG91YmxlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
KSBjb25zdDsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dDsgfQotCi1wcml2
YXRlOgotICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSYpOwotCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAg
ICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1w
bCosIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7Ci0KLSAgICBi
b29sIG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQW5pbWF0aW9uVGhhdERl
cGVuZHNPbkxheW91dCB7IGZhbHNlIH07Ci0KLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSYgbV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXAgbV90cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRp
b25zOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nSW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRl
ck1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDUzOWY2YTUzZWM1MTUwYzkwNzM3ZDIwZTFiYjJhNWJiNDBhMDlhOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRp
b24uaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5j
bHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRp
b24uaCIKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkNvbnRlbnRDaGFuZ2VP
YnNlcnZlci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdl
b21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNs
dWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRp
b24oY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1By
b3BlcnR5LCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJh
c2UodHJhbnNpdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9mcm9t
U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKGZyb21TdHlsZSkpCi0gICAgLCBtX3RyYW5zaXRp
b25Qcm9wZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkuaWQpCi0gICAgLCBtX2FuaW1hdGluZ1By
b3BlcnR5KGFuaW1hdGluZ1Byb3BlcnR5KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEFkZFRyYW5z
aXRpb24oZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYW5pbWF0aW5n
UHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLX0KLQotSW1wbGljaXRBbmltYXRpb246
On5JbXBsaWNpdEFuaW1hdGlvbigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBp
ZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9j
dW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVt
ZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIC8vIC8vIE1ha2Ugc3VyZSB0
byB0ZWxsIHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1
cmUgYW55IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0
QWN0aXZlKCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5p
bWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBl
IGluTGlzdGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50
KCkuaGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1h
dGVDaGFuZ2U+IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYg
Y29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2Ug
Z2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBj
bGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIFNvIGp1c3QgcmV0
dXJuLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxsIGNsZWFuZWQgdXAuCi0gICAgaWYgKHBvc3RB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0
YXRlID0gc3RhdGUoKTsKLQotICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlm
IHdlIGFyZSBuZXcKLSAgICBpZiAoaXNOZXcoKSkKLSAgICAgICAgcmVzZXQodGFyZ2V0U3R5bGUs
IGNvbXBvc2l0ZUFuaW1hdGlvbik7Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24u
Ci0gICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtl
IG9uZSBpZiBuZWVkZWQKLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVk
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgQ1NTUHJv
cGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5
LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgp
LCBwcm9ncmVzcygpKTsKLSAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNl
cyB3aGVyZSB3ZSBoYXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCi0g
ICAgLy8gc3VjaCBhcyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0KLSAgICAvLyBGaXJl
IHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5l
ZWRlZCgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hh
bmdlOjpTdHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAg
ICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQ
YXVzZWRTdGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQ
YXVzZWRTdGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAg
IGNoYW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJl
dHVybiBjaGFuZ2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBp
ZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIoKm1fdG9TdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCks
IG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotfQotCi1i
b29sIEltcGxpY2l0QW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24o
TGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChoYXNTdHlsZSgpKTsKLQot
ICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
IC8vIE5vbi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBBU1NFUlQobV9hbmlt
YXRpbmdQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0KLSAgICBSZW5kZXJCb3gm
IGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UmVjdCBy
ZW5kZXJlckJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwg
Ym94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHN0
YXJ0Qm91bmRzID0gYm91bmRzOwotICAgIExheW91dFJlY3QgZW5kQm91bmRzID0gYm91bmRzOwot
Ci0gICAgaWYgKHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKSB7Ci0gICAgICAgIGlmICgh
Y29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKm1f
ZnJvbVN0eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRl
cmVyQm94LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50Vmlh
TWF0cml4KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVu
dFZpYU1hdHJpeChyZW5kZXJlckJveCwgKm1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSB1bmlvblJlY3Qoc3RhcnRC
b3VuZHMsIGVuZEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1wbGljaXRB
bmltYXRpb246OmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVk
KG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFy
dEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0VHJhbnNp
dGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwg
bV90b1N0eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRB
bmltYXRpb246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChh
dXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFu
c2l0aW9uUGF1c2VkKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotICAgIC8vIFJl
c3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkp
Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6Y2xlYXIoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRv
Y3VtZW50KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxl
bWVudCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICBBbmltYXRpb25CYXNlOjpj
bGVhcigpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkK
LXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICBy
ZW5kZXJlci0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi12
b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUp
Ci17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRo
aXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdl
T2JzZXJ2ZXIoKS5kaWRGaW5pc2hUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3Bl
cnR5KTsKLSNlbmRpZgotICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24g
dGhpcyBwcm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBr
ZXlmcmFtZQotICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNh
c2UgYSB0cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCi0g
ICAgLy8gcnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQs
IHdlIG5lZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3Ci0gICAgLy8gZGVzdGlu
YXRpb24uIElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5r
IGEgdHJhbnNpdGlvbiBoYWQgc3RhcnRlZAotICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFu
aW1hdGVkIHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbiku
Ci0gICAgaWYgKGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRp
b25Gb3JQcm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KSkKLSAgICAgICAgYW5pbWF0aW9uLT5z
ZXRVbmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCptX3RvU3R5bGUpKTsKLQot
ICAgIHNlbmRUcmFuc2l0aW9uRXZlbnQoZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCwg
ZWxhcHNlZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5p
bWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
ZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LnRyYW5zaXRpb25lbmRFdmVudCkgewotICAgICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxp
c3RlbmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwotCi0gICAgICAg
IGlmIChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKG1fYW5pbWF0
aW5nUHJvcGVydHkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzcGF0Y2gg
dGhlIGV2ZW50Ci0gICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVs
ZW1lbnQoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1
bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3
YXJkQ2FjaGUpOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRk
RXZlbnRUb0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNl
ZFRpbWUpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRl
ZCkgc3R5bGUKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5z
aXRpb25lbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgSW1wbGlj
aXRBbmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0
aW9uJiBjb21wb3NpdGVBbmltYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKLQot
ICAgIG1fdG9TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0byk7Ci0KLSAgICBpZiAoZWxl
bWVudCgpKQotICAgICAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKm1fdG9TdHlsZSwg
ZWxlbWVudCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkpOwotCi0gICAgLy8gUmVzdGFydCB0aGUg
dHJhbnNpdGlvbi4KLSAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlICYmICFjb21wb3Np
dGVBbmltYXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24sIC0xKTsKLQotICAgIC8vIFNldCB0
aGUgdHJhbnNmb3JtIGFuaW1hdGlvbiBsaXN0LgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rp
b25MaXN0KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZp
bHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZp
bHRlckZ1bmN0aW9uTGlzdHMoKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3Zl
cnJpZGRlbihib29sIGIpCi17Ci0gICAgaWYgKGIgPT0gbV9vdmVycmlkZGVuKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX292ZXJyaWRkZW4gPSBiOwotICAgIHVwZGF0ZVN0YXRlTWFjaGluZSht
X292ZXJyaWRkZW4gPyBBbmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlIDogQW5pbWF0
aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUsIC0xKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFu
aW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IHByb3BlcnR5KTsKLX0KLQotYm9v
bCBJbXBsaWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIC8vIFdlIGNhbiBn
ZXQgaGVyZSBmb3IgYSB0cmFuc2l0aW9uIHRoYXQgaGFzIG5vdCBzdGFydGVkIHlldC4gVGhpcyB3
b3VsZCBtYWtlIG1fdG9TdHlsZSB1bnNldCBhbmQgbnVsbC4gCi0gICAgLy8gU28gd2UgY2hlY2sg
dGhhdCBoZXJlIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NjcwNj4pCi0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5
bGUuZ2V0KCksIHRhcmdldFN0eWxlKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFkZCBhIHRyYW5zaXRpb24g
d2l0aCBhIDAgZHVyYXRpb24gYW5kIGRlbGF5LiBCdXQgaWYgd2UgZXZlciBkaWQKLSAgICAvLyBp
dCB3b3VsZCBoYXZlIGEgbnVsbCB0b1N0eWxlLiBTbyBqdXN0IGluIGNhc2UsIGxldCdzIGNoZWNr
IHRoYXQgaGVyZS4gKFNlZQotICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQ3ODc+Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBw
cm9wLCBjdXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHBy
b2dyZXNzKCkpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9y
bUZ1bmN0aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBm
YWxzZTsKLSAgICAKLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0g
Jm1fZnJvbVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiB0b1ZhbCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0
aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAgdmFsID0gdG9WYWw7Ci0KLSAgICBpZiAodmFsLT5v
cGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8v
IEFuIGVtcHR5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55dGhpbmcuCi0gICAgaWYgKHZhbCAh
PSB0b1ZhbCAmJiAhdG9WYWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIXZhbC0+b3BlcmF0
aW9uc01hdGNoKCp0b1ZhbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyYW5zZm9ybSBs
aXN0cyBtYXRjaC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGZpbHRlck9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRp
b25zKiBmcm9tT3BlcmF0aW9ucywgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG9PcGVyYXRpb25z
KQotewotICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgZnJvbU9wZXJhdGlvbnMgPSAmdG9PcGVyYXRpb25zOwotCi0gICAgaWYgKGZyb21PcGVy
YXRpb25zLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoZnJvbU9wZXJhdGlvbnMgIT0gJnRvT3BlcmF0aW9ucyAmJiAhdG9PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIWZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zTWF0
Y2godG9PcGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJG
dW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNl
OwotCi0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRj
aCgmbV9mcm9tU3R5bGUtPmZpbHRlcigpLCBtX3RvU3R5bGUtPmZpbHRlcigpKTsKLX0KLQotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zv
ck1hdGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9w
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxl
IHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2Ryb3BGaWx0ZXJG
dW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJvbVN0eWxlLT5i
YWNrZHJvcEZpbHRlcigpLCBtX3RvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpOwotfQotI2VuZGlm
Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1
bmN0aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7
Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25z
TWF0Y2goJm1fZnJvbVN0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCksIG1fdG9TdHlsZS0+YXBwbGVD
b2xvckZpbHRlcigpKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gSW1wbGljaXRBbmltYXRpb246
OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0ID0gQW5pbWF0
aW9uQmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAoIXQgfHwgdC52YWx1ZSgpICE9
IDBfcyB8fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBfTVNDX1ZFUiA+PSAx
OTIwCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHQ7
Ci0jZW5kaWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2
aWNlLiBCdXQgaWYgdGhpcyBpcyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gd2UgCi0gICAgLy8g
b25seSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi4KLSAgICBpZiAo
Q1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1f
YW5pbWF0aW5nUHJvcGVydHkpICYmIGlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICBib29sIGlz
TG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5n
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI4NGFkY2VjZjkyOGQ4NGUxNWE0MGM1Yzg4
NTc2MDVmM2U2NDYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlv
bkJhc2UuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotCi0v
LyBBbiBJbXBsaWNpdEFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGEgdHJhbnNpdGlvbiBv
ZiBhIHNwZWNpZmljIENTUyBwcm9wZXJ0eQotLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQu
Ci1jbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0
aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQm
IGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVu
dCwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKLSAgICB9OwotICAgIAotICAgIENT
U1Byb3BlcnR5SUQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0
aW9uUHJvcGVydHk7IH0KLSAgICBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5KCkgY29u
c3QgeyByZXR1cm4gbV9hbmltYXRpbmdQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBvbkFuaW1hdGlv
bkVuZChkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRp
b24oZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24o
ZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wg
ZmlsbGluZ0ZvcndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgT3B0aW9uU2V0PEFuaW1h
dGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50
T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
Ym9vbCBhZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRP
dmVycmlkZGVuKGJvb2wpOwotICAgIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQotCi0gICAgYm9vbCBhZmZlY3RzUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Ci0KLSAgICBib29sIGlzVGFyZ2V0UHJv
cGVydHlFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9p
ZCBibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKik7
Ci0KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwot
ICAgIAotICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KLSAgICB2
b2lkIHNldEFjdGl2ZShib29sIGIpIHsgbV9hY3RpdmUgPSBiOyB9Ci0KLSAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fZnJv
bVN0eWxlOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAg
ICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUp
IGNvbnN0OyAgICAKLSAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmlu
ZyYsIGRvdWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVu
Y3Rpb25MaXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0
cygpOwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNo
aW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNr
Rm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBJ
bXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBFbGVtZW50
JiwgQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2aXJ0dWFs
IH5JbXBsaWNpdEFuaW1hdGlvbigpOwotCi0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBh
cmUgYmxlbmRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHls
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKLQotICAgIENT
U1Byb3BlcnR5SUQgbV90cmFuc2l0aW9uUHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkg
YXMgc3BlY2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5p
bWF0aW5nUHJvcGVydHk7IC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5p
bWF0aW9uCi0KLSAgICBib29sIG1fYWN0aXZlIHsgdHJ1ZSB9OyAvLyBVc2VkIGZvciBjdWxsaW5n
IHRoZSBsaXN0IG9mIHRyYW5zaXRpb25zLgotICAgIGJvb2wgbV9vdmVycmlkZGVuIHsgZmFsc2Ug
fTsgLy8gVHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJp
ZGVzIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjU3MTUwNzcyMzg3N2I1
ZWJmMzMyYmIwOGM4NTA5Nzc3OTg4YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9u
LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCi0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5p
bWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVk
U3R5bGUpCi0gICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUoKSkKLSAgICAsIG1f
dW5hbmltYXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cih1bmFuaW1hdGVkU3R5bGUpKQot
ewotICAgIHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBtX3Ry
YW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkIGZsYWcgYmFzZWQgb24gd2hldGhlciB0aGUgZnVuY3Rp
b24gbGlzdHMgaW4gdGhlIGtleWZyYW1lcyBtYXRjaC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1
bmN0aW9uTGlzdCgpOwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ry
b3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29s
b3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1f
a2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoV2lsbENoYW5nZURhdGE6OnBy
b3BlcnR5Q3JlYXRlc1N0YWNraW5nQ29udGV4dChwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIG1f
dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKENT
U1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9w
ZXJ0eUlEKSkKLSAgICAgICAgICAgIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSA9IHRydWU7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCAmJiBtX2hhc0Fj
Y2VsZXJhdGVkUHJvcGVydHkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb21w
dXRlTGF5b3V0RGVwZW5kZW5jeSgpOwotfQotCi1LZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1l
QW5pbWF0aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0aGUgcmVuZGVyZXIgdGhh
dCB3ZSBhcmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zIGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgpKQotICAgICAgICBlbmRB
bmltYXRpb24oKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUxheW91dERl
cGVuZGVuY3koKQotewotICAgIGlmICghbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1LZXlm
cmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1LZXlmcmFtZXM7IGkrKykgewotICAgICAgICBhdXRvKiBrZXlmcmFtZVN0eWxlID0gbV9rZXlm
cmFtZXNbaV0uc3R5bGUoKTsKLSAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKSB7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChrZXlmcmFtZVN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAg
ICAgICAgYXV0byYgdHJhbnNmb3JtT3BlcmF0aW9ucyA9IGtleWZyYW1lU3R5bGUtPnRyYW5zZm9y
bSgpOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiB0cmFuc2Zvcm1P
cGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24t
PmlzVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdHJhbnNsYXRpb24gPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24+KG9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlv
bi0+eCgpLmlzUGVyY2VudCgpIHx8IHRyYW5zbGF0aW9uLT55KCkuaXNQZXJjZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGVwZW5kc09uTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKLXsKLSAgICBzaXplX3QgbnVt
S2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKLSAgICBkb3VibGUg
ZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwotICAgIGlmIChtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSAmJiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0
ZXJhdGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gc3RkOjptaW4oZWxh
cHNlZFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlv
bkNvdW50KCkpOwotCi0gICAgY29uc3QgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJh
Y3Rpb25hbFRpbWUoMSwgZWxhcHNlZFRpbWUsIDApOwotICAgIEFTU0VSVCghbV9rZXlmcmFtZXNb
MF0ua2V5KCkpOwotICAgIEFTU0VSVChtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkgLSAx
XS5rZXkoKSA9PSAxKTsKLQotICAgIGludCBwcmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dElu
ZGV4ID0gLTE7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIg
c2VhcmNoIHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZy
YW1lVmFsdWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotCi0gICAgICAgIGlmICgh
Y3VycktleUZyYW1lLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleUZyYW1lLmtleSgp
KSB7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAocHJldkluZGV4
ID09IC0xKQotICAgICAgICBwcmV2SW5kZXggPSAwOwotICAgIGlmIChuZXh0SW5kZXggPT0gLTEp
Ci0gICAgICAgIG5leHRJbmRleCA9IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7Ci0KLSAgICBjb25z
dCBLZXlmcmFtZVZhbHVlJiBwcmV2S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1twcmV2SW5kZXhdOwot
ICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIG5leHRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW25leHRJ
bmRleF07Ci0KLSAgICBmcm9tU3R5bGUgPSBwcmV2S2V5ZnJhbWUuc3R5bGUoKTsKLSAgICB0b1N0
eWxlID0gbmV4dEtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICBkb3VibGUgb2Zmc2V0ID0gcHJldktl
eWZyYW1lLmtleSgpOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMCAvIChuZXh0SW5kZXggPT0gcHJl
dkluZGV4ID8gIDEgOiAobmV4dEtleWZyYW1lLmtleSgpIC0gcHJldktleWZyYW1lLmtleSgpKSk7
Ci0KLSAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWlu
Z0Z1bmN0aW9uKCkpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gS2V5ZnJhbWVBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0YXRl
KCk7Ci0KLSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYg
bmVlZGVkIChGSVhNRTogdGhpcyBmdW5jdGlvbiBuZWVkcyBhIGJldHRlciBuYW1lKS4KLSAgICBm
aXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm90IHll
dCBzdGFydGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBz
dGFydCB0aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KLSAgICBpZiAoaXNOZXcoKSkgewotICAgICAg
ICBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxh
eWluZyAmJiAhY29tcG9zaXRlQW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICB1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0x
KTsKLSAgICAgICAgZWxzZSBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlv
blBsYXlTdGF0ZTo6UGF1c2VkKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCwgLTEpOwotICAgIH0KLQotICAgIC8vIElm
IHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBh
cmUgY2xlYW5pbmcgdXAgYSBqdXN0LWZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBzbywg
d2UgbmVlZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZl
KCkpIHsKLSAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICAgICAgYW5pbWF0ZWRT
dHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0
aW1lciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldC4KLSAgICAvLyBTcGVj
aWFsIGNhc2UgMSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBz
ZXQgdGhlIGZpcnN0IGZyYW1lIG9mIHRoZQotICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBU
aGlzIGF2b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCi0gICAgLy8gU3Bl
Y2lhbCBjYXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUsIHRoZW4gd2Ug
d2FudCB0byBjb250aW51ZQotICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJsZW5kIHNvIHRo
YXQgd2UgZ2V0IHRoZSBmcm9tU3R5bGUuCi0gICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9h
bmltYXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1l
cywgZG9uJ3QgYW5pbWF0ZS4KLSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewotICAgICAg
ICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uLCAt
MSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2Yg
YW5pbWF0aW9uLgotICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHls
ZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkLgotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAg
ICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0K
LSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1p
bmluZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgotICAgIC8vIFdl
IHNob3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGF1dG8g
cHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBHZXQg
dGhlIGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCi0gICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogdG9TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAg
ICAgIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBmcm9tU3R5
bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZy
b21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIE9wdGlvblNldDxBbmlt
YXRlQ2hhbmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKTsKLSAgICBpZiAo
c3RhdGUoKSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpT
dGF0ZUNoYW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3RhdGUob2xkU3RhdGUpIHx8IGlzUnVu
bmluZ1N0YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3RhdGUoc3RhdGUoKSkgfHwgaXNSdW5u
aW5nU3RhdGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlJ1
bm5pbmdTdGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hhbmdlOwotfQotCi12b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UncmUgZG9uZSwgb3IgaW4gdGhlIGRl
bGF5IHBoYXNlIGFuZCB3ZSdyZSBub3QgYmFja3dhcmRzIGZpbGxpbmcsIHRlbGwgdGhlIGNhbGxl
ciB0byB1c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8fCAod2Fp
dGluZ1RvU3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9u
LT5maWxsc0JhY2t3YXJkcygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2tleWZy
YW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkK
LSAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlcigp
LT5zdHlsZSgpKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJv
cGVydGllcygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dy
ZXNzIGJldHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxw
dHI7Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAg
ICAgZG91YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0Zv
clByb3BlcnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0g
ICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVy
dHlJRCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7
Ci0gICAgfQotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFu
c2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVCht
X2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSk7Ci0KLSAg
ICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAv
LyBOb24tYm94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgYXV0byYgYm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZW5kZXJlckJveCA9IHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGN1bXVsYXRpdmVCb3VuZHM7
Ci0KLSAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsK
LSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBrZXlmcmFtZS5zdHls
ZSgpOwotCi0gICAgICAgIGlmICgha2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRyYW5zZm9ybSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBrZXlmcmFtZSBpcyBt
aXNzaW5nIHRyYW5zZm9ybSBzdHlsZSwgdXNlIHRoZSBjdXJyZW50IHN0eWxlLgotICAgICAgICAg
ICAgaWYgKCFrZXlmcmFtZS5rZXkoKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVN0eWxlID0g
JmJveC5zdHlsZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKLSAg
ICAgICAgCi0gICAgICAgIGJvb2wgY2FuQ29tcHV0ZTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUZ1
bmN0aW9uTGlzdHNNYXRjaCgpKQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFu
c2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxl
LCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbkNvbXB1dGUg
PSBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFt
ZVN0eWxlLCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNhbkNvbXB1
dGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBjdW11bGF0
aXZlQm91bmRzLnVuaXRlKGtleWZyYW1lQm91bmRzKTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBj
dW11bGF0aXZlQm91bmRzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5p
bWF0aW9uOjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBj
b25zdAotewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5
KTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkK
LSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2Fu
aW1hdGlvbiwgbV9rZXlmcmFtZXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAg
aWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25QYXVzZWQo
dGltZU9mZnNldCwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3Rv
cmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRzKQotewotICAgIGlm
ICghZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uRmluaXNoZWQo
bV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdp
bmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghZmlsbGluZ0ZvcndhcmRzICYmICFwYXVz
ZWQoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi1ib29s
IEtleWZyYW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6
TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgp
LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShsaXN0ZW5lclR5cGUpOwotfQotCi12b2lkIEtl
eWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsK
LSAgICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQs
IGVsYXBzZWRUaW1lKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25J
dGVyYXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChl
dmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKLX0KLQot
dm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1l
KQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZl
bnQsIGVsYXBzZWRUaW1lKTsKLSAgICBlbmRBbmltYXRpb24obV9hbmltYXRpb24tPmZpbGxzRm9y
d2FyZHMoKSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVu
dChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAg
ICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCB8fCBldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50KQotICAgICAgICBsaXN0
ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9OX0xJU1RFTkVSOwotICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKLSAgICAgICAg
bGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsKLSAgICBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0
aW9uU3RhcnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0
RXZlbnQpOwotICAgICAgICBpZiAobV9zdGFydEV2ZW50RGlzcGF0Y2hlZCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0g
ICAgICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFSVF9MSVNURU5FUjsK
LSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBl
KSkgewotICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgYXV0byBlbGVtZW50
ID0gbWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwotCi0gICAgICAgIEFTU0VSVCghZWxlbWVu
dCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3Vt
ZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxp
bmcKLSAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
ZGRFdmVudFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0
aW9uTmFtZSgpLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2lu
YWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgICAgIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmFuaW1hdGlvbmVuZEV2ZW50KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICByZXR1cm4gdHJ1
ZTsgLy8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAv
LyBEaWQgbm90IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246
Om92ZXJyaWRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGltcGxp
Y2l0IGFuaW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUg
YW5pbWF0aW9uCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0
aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5p
bWF0aW9ucyhwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1l
T3ZlcnJpZGRlbkFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgb3ZlcnJp
ZGRlbiBpbXBsaWNpdCBhbmltYXRpb25zCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tl
eWZyYW1lcy5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1
bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi1ib29sIEtl
eWZyYW1lQW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0
eSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc29sdmVLZXlmcmFtZVN0eWxlcygp
Ci17Ci0gICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRv
KiBzdHlsZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKCplbGVtZW50KCksIG1fYW5p
bWF0aW9uLT5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHN0eWxlU2NvcGUtPnJl
c29sdmVyKCkua2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oKmVsZW1lbnQoKSwgbV91bmFuaW1h
dGVkU3R5bGUuZ2V0KCksIG1fa2V5ZnJhbWVzKTsKLQotICAgIC8vIEVuc3VyZSByZXNvdXJjZSBs
b2FkcyBmb3IgYWxsIHRoZSBmcmFtZXMuCi0gICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5
ZnJhbWVzLmtleWZyYW1lcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGNvbnN0X2Nh
c3Q8UmVuZGVyU3R5bGUqPihrZXlmcmFtZS5zdHlsZSgpKSkKLSAgICAgICAgICAgIFN0eWxlOjps
b2FkUGVuZGluZ1Jlc291cmNlcygqc3R5bGUsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgZWxlbWVu
dCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNm
b3JtRnVuY3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9
IGZhbHNlOwotICAgIAotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZy
YW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0
aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVt
S2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5
VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZSYgY3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGlmIChjdXJy
ZW50S2V5ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSkgewot
ICAgICAgICAgICAgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9u
RW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9
ICZtX2tleWZyYW1lc1tmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleF0uc3R5bGUo
KS0+dHJhbnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZh
bGlkCi0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUlu
ZGV4ICsgMTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1l
VmFsdWUmIGN1cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmY3VycmVudEtleWZyYW1lLnN0eWxlKCktPnRyYW5z
Zm9ybSgpOwotICAgICAgICAKLSAgICAgICAgLy8gQW4gZW10cHkgdHJhbnNmb3JtIGxpc3QgbWF0
Y2hlcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmaXJzdFZhbC0+
b3BlcmF0aW9uc01hdGNoKCp2YWwpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFt
ZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIChjb25zdCBSZW5kZXJTdHlsZSYpPiYgZmlsdGVyc0dldHRlcikgY29uc3QKLXsKLSAgICBp
ZiAobV9rZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0
eShwcm9wZXJ0eUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW1wdHkgZmls
dGVycyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFz
IHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6
ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1l
czsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAg
ICAgICAgaWYgKGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ldLnN0eWxlKCkpLm9wZXJhdGlv
bnMoKS5zaXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0g
aTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChm
aXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8mIGZpcnN0VmFsID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFt
ZXNbZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXhdLnN0eWxlKCkpOwotICAgIAotICAgIGZvciAo
c2l6ZV90IGkgPSBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFt
ZXM7ICsraSkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJh
bWVzW2ldLnN0eWxlKCkpOwotCi0gICAgICAgIC8vIEFuIGVtdHB5IGZpbHRlciBsaXN0IG1hdGNo
ZXMgYW55dGhpbmcuCi0gICAgICAgIGlmICh2YWx1ZS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFmaXJzdFZhbC5vcGVyYXRpb25z
TWF0Y2godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5n
RmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2gg
PSBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUZpbHRlciwg
W10gKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ewotICAgICAgICByZXR1cm4gc3R5bGUuZmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBFTkFC
TEUoRklMVEVSU19MRVZFTF8yKQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRj
aGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRl
ckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3Rz
KENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0eWxl
LmJhY2tkcm9wRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0g
ICAgbV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0
ZXJGdW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgW10gKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICBy
ZXR1cm4gc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpOwotICAgIH0pOwotfQotCi1PcHRpb25hbDxT
ZWNvbmRzPiBLZXlmcmFtZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9w
dGlvbmFsPFNlY29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwot
ICAgIGlmICghdCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJ
TEVSKE1TVkMpICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7
Ci0jZWxzZQotICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFs
dWUgb2YgMCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgYWNjZWxl
cmF0ZWQgYW5pbWF0aW9ucyB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5k
IG9mIHRoZSB0cmFuc2l0aW9uLgotICAgIGJvb2wgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9
IHRydWU7Ci0gICAgCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9w
ZXJ0aWVzKCkpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9u
T2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkg
ewotICAgICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRQcm9w
ZXJ0aWVzT25seSkgewotICAgICAgICBib29sIGlzTG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRv
TmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ5MmUzOTE1NWM0YTliNzhjMWM2ZDZmZWUxYzJlZTNlMGJiNmJmMzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIEtl
eWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0aW9u
IGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gZmlu
YWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxLZXlm
cmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50
JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRl
QW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKLSAgICB9Ci0gICAgCi0gICAgT3B0aW9uU2V0
PEFuaW1hdGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlKTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1B
bmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgS2V5ZnJh
bWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1h
dGlvbk5hbWUoKTsgfQotCi0gICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEKSBjb25zdDsKLQotICAgIGJvb2wgdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSBjb25z
dCB7IHJldHVybiBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0OyB9Ci0gICAgYm9vbCBkZXBlbmRz
T25MYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2RlcGVuZHNPbkxheW91dDsgfQotICAgIGJvb2wg
YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJh
dGVkUHJvcGVydHk7IH0KLQotICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBXVEZNb3ZlKHN0
eWxlKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAqbV91bmFuaW1hdGVkU3R5bGU7IH0KLQotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgS2V5
ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1h
dGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1YWwg
fktleWZyYW1lQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91Ymxl
IGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRv
dWJsZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3Vi
bGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91Ymxl
IHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0Zv
cndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0
ZW5lclR5cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0OwotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2
ZW50KGNvbnN0IEF0b21TdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotCi0gICAgYm9vbCBh
ZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbkZvck1hdHJpeEFuaW1hdGlvbihjb25zdCBGbG9hdFJl
Y3QmIHJlbmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIGNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbkZvck1hdGNoaW5nVHJhbnNmb3JtTGlzdHMoY29uc3QgRmxvYXRSZWN0
JiByZW5kZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgdm9pZCBjb21wdXRlTGF5
b3V0RGVwZW5kZW5jeSgpOwotICAgIHZvaWQgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0gICAg
dm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAgIHZvaWQgY2hlY2tGb3JN
YXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8y
KQotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygp
OwotI2VuZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxp
c3RzKCk7Ci0gICAgYm9vbCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQ
cm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChj
b25zdCBSZW5kZXJTdHlsZSYpPiYpIGNvbnN0OwotICAgIAotICAgIC8vIEdldCB0aGUgc3R5bGVz
IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9u
IHRpbWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCi0gICAgdm9pZCBmZXRjaEludGVy
dmFsRW5kcG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUq
JiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVz
cykgY29uc3Q7Ci0KLSAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsgLy8gVGhlIHN0eWxlIGp1c3Qg
YmVmb3JlIHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0KLSAgICBib29sIG1fc3RhcnRFdmVudERpc3Bh
dGNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9kZXBlbmRzT25MYXlvdXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCmluZGV4IDdlNGZlM2ZkMDBjYTU5ZDliNzgyYThhMDQwZjRkNWI3OTE4MDlmZTYuLmVl
MzQ3YmE4NTMyNjFjOTYyZWE5OTQyYjY4M2YyYTJkYTkxMmFkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTQ3NCw5ICs0NzQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVHJhbnNpdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBzcGVj
aWFsIGFuaW1hdGlvbiBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXlmcmFtZSBpZGVu
dGlmaWVyLgogICAgIHN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5p
bWF0ZWRQcm9wZXJ0eUlEKTsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24g
aXMgaGFuZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLiBJZiB0aGlzIHJldHVybnMKLSAg
ICAvLyBmYWxzZSwgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHJ1biBieSBDU1NBbmltYXRpb25Db250
cm9sbGVyLgotICAgIC8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIGJvdGggdHJhbnNpdGlvbnMgYW5k
IGtleWZyYW1lIGFuaW1hdGlvbnMuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlv
biBpcyBoYW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBib29s
IGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYg
Lypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25O
YW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8s
IGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAppbmRl
eCA3OWEzZjUzOTYzYmY0N2I2MDE0ODAwYTc1MzIzNGQ2YTFkMTNhMWQ0Li41NjQ4NThlMmFhYTkx
YTVlZWI3ZjhhMjQ1OWIxNmEwMDNiOGY0ZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCkBAIC05Myw3ICs5Myw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBib29sIC8qdXNpbmdUaWxlZEJhY2tpbmcqLykgeyB9CiAgICAg
CiAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gaGFyZHdhcmUtYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
IHN0YXJ0ZWQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
R3JhcGhpY3NMYXllciosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25LZXkqLywgTW9ub3Rvbmlj
VGltZSAvKnRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkVuZGVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uS2V5Ki8pIHsg
fQogCiAgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgYSBsYXllciBwcm9wZXJ0eSBjaGFuZ2VkIHRo
YXQgcmVxdWlyZXMgYSBzdWJzZXF1ZW50IGNhbGwgdG8gZmx1c2hDb21wb3NpdGluZ1N0YXRlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCmluZGV4IDQ3MjBlMTI5OWVhNjRiNGNiYmRmOWZlMGVjMmI0M2RmY2U1YjRi
MWUuLmZlNzgzZmFhNzMxOWY5MjBjMTZjMzMzZWM5NjgyMDYzNTZmMmU1NzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcApAQCAtMTEwOCwxMiArMTEwOCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChBbmltYXRpb25DaGFuZ2VkIHwgQ292ZXJhZ2VSZWN0Q2hhbmdlZCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJHcmFwaGljc0xheWVyQ0Eg
IiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxh
eWVyQW5pbWF0aW9uU3RhcnRlZCAiIDw8IGFuaW1hdGlvbktleSk7Ci0gICAgY2xpZW50KCkubm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBhbmltYXRpb25LZXksIHN0YXJ0VGltZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbktleSkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICJHcmFwaGljc0xheWVyQ0EgIiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmlt
YXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uRW5kZWQgIiA8PCBhbmlt
YXRpb25LZXkpOwpAQCAtMzA0MCw5ICszMDM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIAogc3RhdGljIGJvb2wgaXNLZXlmcmFtZShjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYgbGlzdCkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDE7Ci0gICAgcmV0dXJuIGxpc3Quc2l6
ZSgpID4gMjsKKyAgICByZXR1cm4gbGlzdC5zaXplKCkgPiAxOwogfQogCiBib29sIEdyYXBoaWNz
TGF5ZXJDQTo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBTZWNvbmRzIHRpbWVPZmZzZXQpCkBAIC0zMjkzLDM5ICszMjg1LDI5
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNBQW5pbWF0
aW9uKiBwcm9wZXJ0eUFuaW0sIGNvbnN0IEFuCiAgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2
ZShhZGRpdGl2ZSk7CiAgICAgcHJvcGVydHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7CiAK
LSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgLy8gQSBD
U1MgVHJhbnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3Bl
cnR5KCkgd2lsbCBoYXZlCi0gICAgICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0
eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCi0gICAgICAg
IC8vIHRpbWluZyBmdW5jdGlvbiB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0
YXRpb24uCi0gICAgICAgIGlmIChhbmltLT5wcm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpU
cmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkpCi0gICAgICAgICAgICBwcm9wZXJ0eUFuaW0t
PnNldFRpbWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgIH0KKyAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAor
ICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0
aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQ
cm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCisg
ICAgLy8gdGltaW5nIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGlt
aXRhdGlvbi4KKyAgICBpZiAoYW5pbS0+cHJvcGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJh
bnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5KQorICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRp
bWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwogfQogCiBjb25zdCBUaW1pbmdG
dW5jdGlvbiYgR3JhcGhpY3NMYXllckNBOjp0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvblZhbHVlJiBhbmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbSkK
IHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGFuaW0ucHJv
cGVydHkoKS5tb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5
ICYmIGFuaW0udGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgICAgIC8v
IEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpw
cm9wZXJ0eSgpIHdpbGwgaGF2ZQotICAgICAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmds
ZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQotICAg
ICAgICAgICAgLy8gYW5pbWF0aW9uLXdpZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQg
b24gdGhlIHNpbmdsZSBrZXlmcmFtZSBpbnRlcnZhbAotICAgICAgICAgICAgLy8gdG8gd29yayBh
cm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgotICAgICAgICAgICAgcmV0dXJuICph
bmltLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFuaW1WYWx1ZS50
aW1pbmdGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVu
Y3Rpb24oKTsKLSAgICAgICAgaWYgKGFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJh
bWVzKCkpCi0gICAgICAgICAgICByZXR1cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9y
S2V5ZnJhbWVzKCk7Ci0gICAgICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVk
TGluZWFyVGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0g
QW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdG
dW5jdGlvbigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE1OTE4CisgICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhl
IG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAg
ICAgICAvLyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2Ug
Y2hvc2Ugbm90IHRvIHNldCBzZXQgdGhlCisgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRpbWlu
ZyBmdW5jdGlvbiwgc28gd2Ugc2V0IGl0IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2YWwK
KyAgICAgICAgLy8gdG8gd29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgor
ICAgICAgICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKICAgICB9Ci0KICAgICBpZiAo
YW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAqYW5pbVZhbHVlLnRp
bWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYgKGFuaW0uaXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAg
ICAgICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0u
ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiAqYW5p
bS5kZWZhdWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKTsKKyAgICByZXR1cm4gTGluZWFy
VGltaW5nRnVuY3Rpb246OnNoYXJlZExpbmVhclRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKIGJvb2wg
R3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FB
bmltYXRpb24qIGJhc2ljQW5pbSkKQEAgLTMzNDYsMTEgKzMzMjgsNiBAQCBib29sIEdyYXBoaWNz
TGF5ZXJDQTo6c2V0QW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGgg
aXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxv
b2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRo
ZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0
aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAg
ICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0
aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0zNDQwLDExICszNDE3LDYgQEAgYm9vbCBHcmFwaGljc0xh
eWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmEKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNl
ZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4g
dGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZl
cnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGlt
aW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJh
c2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFs
dWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIGF1dG8g
dmFsdWVGdW5jdGlvbiA9IGdldFZhbHVlRnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9u
KHRyYW5zZm9ybU9wVHlwZSk7CiAgICAgaWYgKHZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFu
aW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uKQogICAgICAgICBiYXNpY0FuaW0tPnNldFZhbHVlRnVu
Y3Rpb24odmFsdWVGdW5jdGlvbik7CkBAIC0zNTUxLDExICszNTIzLDYgQEAgYm9vbCBHcmFwaGlj
c0xheWVyQ0E6OnNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsdWUKICAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0aW9uLCBp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOwogICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0
b09wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKIAotICAgIC8vIFRoaXMg
Y29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBu
ZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBF
dmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBw
cm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCkpCi0gICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9u
Rm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRz
KTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGZlN2RjNTZhNDdmM2Zi
ZTc4ZDEzMWFhYTZkYzI5NjQ2ZTBlYzMyYmQuLmYyNmU1MWFkZmNmZjZiMzZmODg4M2Q0ZjY2NGNj
NzU2N2FiYmYxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xOTUsNyArMTk1LDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3Jt
Q0FMYXllckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1RpbWUgYmVnaW5UaW1lKSBv
dmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlv
bkVuZGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KSBvdmVycmlkZTsKICAgICBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0
Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXAsIEdy
YXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggNTA0YjAx
YzI0NDRlOWU5NTljMThjMzQ2Y2I1ZWI3YmVjYTBkNjM3NC4uMzZiYmMyMGE4NDFkMjlmMzc3NmM1
MzY1NTFmZDA2ZGQwZGRmYTJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTEwMyw3ICsxMDMsNiBAQCBwdWJs
aWM6CiAgICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgeyBtX293bmVyID0gb3duZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKaW5kZXggNjc3OGRlNzE5YzUwZTFhNDVmYzgyNDZkNzNhOTA4YWJmYmFkMTMwNi4u
NGNkMDg0M2I1ZWQ5YTY0ZGNiZDcwZGEyZGE0Y2IyZWFmZDEwODNlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQ0FMYXllckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgeyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChjb25z
dCBTdHJpbmcmIC8qYW5pbWF0aW9uS2V5Ki8sIE1vbm90b25pY1RpbWUpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIC8qYW5p
bWF0aW9uS2V5Ki8pIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdD
b29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24o
KSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3Jp
ZW50YXRpb246OlRvcERvd247IH0KICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFp
bnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGluQ2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FM
YXllckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9Q
bGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCmluZGV4IDk5MjJmNDhmYjcwZDA5Y2UwOGY2MmY0ZDFhMzdi
Mzg0OTU5MThlZjIuLjViMjE2M2VjMDI5NzdkZDk0NmMxNzAyNmVlMTJmNGEzYzAxZmZlYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRm
b3JtQ0FMYXllckNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3Jt
Q0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBhbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2lu
VGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtl
eSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IDI4ODQ2ZjZiOTE1NjEx
YjkyZWY3NDBkOTNhOTgxZDAwMDNhNWI2OWMuLjU5NTQxZjg3NzRmODMyZmE3Y2RlNjA5MDdjMWRl
YmNjNTk1NTU5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC05OSw1
NiArOTksMTggQEAgUmVmPFBsYXRmb3JtQ0FMYXllckNvY29hPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXQKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYSgoX19icmlkZ2UgQ0FMYXllciAqKXBsYXRmb3JtTGF5
ZXIsIG93bmVyKSk7CiB9CiAKLXN0YXRpYyBNb25vdG9uaWNUaW1lIG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKLXsKLSAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93
KCkgKyBTZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotLy8gRGVsZWdhdGUgZm9yIGFuaW1hdGlvbkRpZFN0YXJ0IGNhbGxiYWNr
CiBAaW50ZXJmYWNlIFdlYkFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgewogICAgIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllciogbV9vd25lcjsKIH0KIAotLSAodm9pZClhbmltYXRpb25EaWRT
dGFydDooQ0FBbmltYXRpb24gKilhbmltOwogLSAodm9pZClzZXRPd25lcjooV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyKilvd25lcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0
aW9uRGVsZWdhdGUKIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilh
bmltYXRpb24KLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIFdlYlRocmVhZExvY2soKTsKLSNlbmRpZgotICAgIGlmICghbV9vd25l
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7Ci0gICAg
aWYgKGhhc0V4cGxpY2l0QmVnaW5UaW1lKGFuaW1hdGlvbikpIHsKLSAgICAgICAgLy8gV2UgZG9u
J3Qga25vdyB3aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1hdGlvbiwgc28ganVz
dCB1c2UgdGhlIGN1cnJlbnQgdGltZQotICAgICAgICAvLyAoZXZlbiB0aG91Z2ggdGhpcyB3aWxs
IGJlIHNsaWdodGx5IG9mZikuCi0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUoQ0FDdXJyZW50TWVkaWFUaW1lKCkpOwotICAgIH0gZWxzZQotICAgICAgICBzdGFydFRp
bWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5UaW1lXSk7Ci0KLSAg
ICBDQUxheWVyICpsYXllciA9IG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIFN0cmlu
ZyBhbmltYXRpb25LZXk7Ci0gICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRp
b25LZXlzXSkgewotICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFu
aW1hdGlvbikgewotICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5
KCkpCi0gICAgICAgIG1fb3duZXItPmFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBzdGFy
dFRpbWUpOwotfQotCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5p
bWF0aW9uIGZpbmlzaGVkOihCT09MKWZpbmlzaGVkCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC0zOTMsMTIgKzM1NSw2IEBAIFBsYXRmb3JtQ0FMYXllckNvY29hOjp+UGxhdGZv
cm1DQUxheWVyQ29jb2EoKQogICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5
ZXIgKj4obV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxh
eWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1v
bm90b25pY1RpbWUgYmVnaW5UaW1lKQotewotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293
bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGFuaW1hdGlvbktleSwgYmVnaW5U
aW1lKTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRW5kZWQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25LZXkpCiB7CiAgICAgaWYgKG1fb3duZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0LmNwcAppbmRleCBjNWJjNDdhMTQyZTNkZjE3ODhmNDNjZWZlN2RlMzgzMjQxNWI0
ZGYzLi40YjYwMDU5ZmUxNGRhZDdkYjEyY2YxMGFhMzg5ZGIwNTY5OThlNmQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNG
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTIwOCw5ICsyMDgsOCBAQCBQbGF0Zm9ybUNBTGF5ZXIqIENB
Q0ZMYXllclRyZWVIb3N0Ojpyb290TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX3Jvb3RMYXll
ci5nZXQoKTsKIH0KIAotdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6YWRkUGVuZGluZ0FuaW1hdGVk
TGF5ZXIoUGxhdGZvcm1DQUxheWVyJiBsYXllcikKK3ZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmFk
ZFBlbmRpbmdBbmltYXRlZExheWVyKFBsYXRmb3JtQ0FMYXllciYpCiB7Ci0gICAgbV9wZW5kaW5n
QW5pbWF0ZWRMYXllcnMuYWRkKCZsYXllcik7CiB9CiAKIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6
OnNldFJvb3RDaGlsZExheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCkBAIC0zMTMsMjYgKzMx
Miw2IEBAIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc05v
dygpCiAgICAgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0FD
RkxheWVyVHJlZUhvc3Q6OmNvbnRleHREaWRDaGFuZ2UoKQotewotICAgIC8vIEFsbCBwZW5kaW5n
IGFuaW1hdGlvbnMgd2lsbCBoYXZlIGJlZW4gc3RhcnRlZCB3aXRoIHRoZSBmbHVzaC4gRmlyZSB0
aGUgYW5pbWF0aW9uU3RhcnRlZCBjYWxscy4KLSAgICBub3RpZnlBbmltYXRpb25zU3RhcnRlZCgp
OwotfQotCi12b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25zU3RhcnRlZCgp
Ci17Ci0gICAgLy8gU2VuZCBjdXJyZW50VGltZSB0byB0aGUgcGVuZGluZyBhbmltYXRpb25zLiBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBDQUNGIGluIGEgY2FsbGJhY2sKLSAgICAvLyB3aGlj
aCBvY2N1cnMgYWZ0ZXIgdGhlIGRyYXdJbkNvbnRleHQgY2FsbHMuIFNvIGN1cnJlbnRUaW1lIGlz
IHZlcnkgY2xvc2UgdG8gdGhlIHRpbWUKLSAgICAvLyB0aGUgYW5pbWF0aW9ucyBhY3R1YWxseSBz
dGFydAotICAgIE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gPjo6aXRlcmF0b3IgZW5k
ID0gbV9wZW5kaW5nQW5pbWF0ZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+ID46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nQW5pbWF0ZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+YW5pbWF0aW9uU3Rh
cnRlZChTdHJpbmcoKSwgY3VycmVudFRpbWUpOwotCi0gICAgbV9wZW5kaW5nQW5pbWF0ZWRMYXll
cnMuY2xlYXIoKTsKLX0KLQogQ0dSZWN0IENBQ0ZMYXllclRyZWVIb3N0Ojpib3VuZHMoKSBjb25z
dAogewogICAgIFJFQ1QgY2xpZW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKaW5kZXggYzc2
NzFhMDc0OTlhYzc4ZDY0NTdkYjNiNmNiM2RjNDZlZjAzYWE4NC4uNTUxYjQyYTFhZDk3NDAwYjNm
MjBmOTkyNmJkM2QzYWVlZGUyMTkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKQEAgLTEwMSw3
ICsxMDEsNiBAQCBwcml2YXRlOgogICAgIHZvaWQgaW5pdGlhbGl6ZSgpOwogCiAgICAgLy8gQWJz
dHJhY3RDQUNGTGF5ZXJUcmVlSG9zdAotICAgIHZpcnR1YWwgdm9pZCBhZGRQZW5kaW5nQW5pbWF0
ZWRMYXllcihQbGF0Zm9ybUNBTGF5ZXImKTsKICAgICB2aXJ0dWFsIHZvaWQgbGF5ZXJUcmVlRGlk
Q2hhbmdlKCk7CiAKIApAQCAtMTE1LDcgKzExNCw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPFBs
YXRmb3JtQ0FMYXllcj4gbV9yb290TGF5ZXI7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4g
bV9yb290Q2hpbGRMYXllcjsKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBtX2RlYnVnSW5m
b0xheWVyOwotICAgIEhhc2hTZXQ8UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gPiBtX3BlbmRpbmdB
bmltYXRlZExheWVyczsKICAgICBIV05EIG1fd2luZG93IHsgbnVsbHB0ciB9OwogICAgIGJvb2wg
bV9zaG91bGRGbHVzaFBlbmRpbmdHcmFwaGljc0xheWVyQ2hhbmdlcyB7IGZhbHNlIH07CiAgICAg
Ym9vbCBtX2lzRmx1c2hpbmdMYXllckNoYW5nZXMgeyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAppbmRleCA5MzE2ZjNhY2EzNjI2ZDljZjkwZDNlMmM3NWI0MDMxYzVlZWFhYmFk
Li41MzIyNTk5OTE0NTI5MWJhMzVjODM1OTA5NjNmZjcxMmRkOGVhODUxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZv
cm1DQUxheWVyV2luLmNwcApAQCAtMzMyLDExICszMzIsNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXll
cldpbjo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5p
bWF0aQogCiAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKG1fbGF5ZXIuZ2V0KCksIGtleS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPihhbmlt
YXRpb24pLnBsYXRmb3JtQW5pbWF0aW9uKCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0KLSAg
ICAvLyBUZWxsIHRoZSBob3N0IGFib3V0IGl0IHNvIHdlIGNhbiBmaXJlIHRoZSBzdGFydCBhbmlt
YXRpb24gZXZlbnQKLSAgICBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0KiBob3N0ID0gbGF5ZXJU
cmVlSG9zdEZvckxheWVyKHRoaXMpOwotICAgIGlmIChob3N0KQotICAgICAgICBob3N0LT5hZGRQ
ZW5kaW5nQW5pbWF0ZWRMYXllcigqdGhpcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyV2lu
OjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBiNzI0M2U5OTRjMDA0ZDIyMTVkY2I5
NGMxZTRlZWJkYTBlOTI1NDA4Li5hODM5NDliNGU5NDMyMTY2ZTdlMjE3ODNhNGYzMGNjZWFiNTQ1
ODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTQ2
Nyw5ICs0NjcsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjb21taXRMYXll
ckNoYW5nZXMoKQogICAgIGlmIChtX2NoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpCiAgICAg
ICAgIG1fbGF5ZXIuc2V0QW5pbWF0aW9ucyhtX2FuaW1hdGlvbnMpOwogCi0gICAgaWYgKG1fY2hh
bmdlTWFzayAmIEFuaW1hdGlvblN0YXJ0ZWQpCi0gICAgICAgIGNsaWVudCgpLm5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQodGhpcywgIiIsIG1fYW5pbWF0aW9uU3RhcnRUaW1lKTsKLQogICAgIG1fY2hh
bmdlTWFzayA9IE5vQ2hhbmdlczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBlMjg3MjI4NGRkNGVhYjkxY2Rk
ZmU2ZjVkOGE1ODkzM2FmZGMwMDQyLi42ZGZlYjIxNjY1NTY4YmEyYmYyNzNhMWFmOGYyNjQ0NDQz
ZjM2ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcApAQCAtMTM5LDcgKzEzOSw2IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKFR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xh
eWVyCiAgICAgLCBtX3Nob3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2Nv
b3JkaW5hdG9yKDApCiAgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQotICAgICwg
bV9hbmltYXRpb25TdGFydGVkVGltZXIoKnRoaXMsICZDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQogICAgICwgbV9yZXF1ZXN0UGVuZGluZ1RpbGVD
cmVhdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6cmVxdWVzdFBlbmRpbmdUaWxlQ3JlYXRpb25UaW1lckZpcmVkKQogewogICAgIHN0YXRp
YyBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyOjpMYXllcklEIG5leHRMYXllcklEID0gMTsKQEAgLTEz
ODgsNyArMTM4Nyw2IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKIAogICAgIG1fbGFzdEFuaW1h
dGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gU2Vjb25kcyhkZWxheUFzTmVn
YXRpdmVUaW1lT2Zmc2V0KTsKICAgICBtX2FuaW1hdGlvbnMuYWRkKE5pY29zaWE6OkFuaW1hdGlv
bihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBt
X2xhc3RBbmltYXRpb25TdGFydFRpbWUsIDBfcywgTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRp
b25TdGF0ZTo6UGxheWluZykpOwotICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTE0MTcsMTEgKzE0MTUsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwogfQogCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoKQot
ewotICAgIGNsaWVudCgpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgIiIsIG1fbGFzdEFu
aW1hdGlvblN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpy
ZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyRmlyZWQoKQogewogICAgIG5vdGlmeUZsdXNo
UmVxdWlyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuaAppbmRleCBlZThmNTc4NzlhZGE2YzkxZjAzOTkxOTJlZjk1YzkyNGVjZTEz
ZTQxLi5kOTI2YzcwMjM1NTQ4MWQ3YTFjNzE2MGM0YjQ4MTk0MTQyODY5MjM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0x
OTEsNyArMTkxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwogCi0gICAgdm9pZCBh
bmltYXRpb25TdGFydGVkVGltZXJGaXJlZCgpOwogICAgIHZvaWQgcmVxdWVzdFBlbmRpbmdUaWxl
Q3JlYXRpb25UaW1lckZpcmVkKCk7CiAKICAgICBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIGNvbnN0OwpAQCAtMjI1LDcgKzIyNCw2IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAgICBOYXRpdmVJbWFn
ZVB0ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKIAotICAgIFRpbWVyIG1fYW5pbWF0aW9u
U3RhcnRlZFRpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cj4gbV9yZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyOwogICAgIE5pY29zaWE6OkFuaW1h
dGlvbnMgbV9hbmltYXRpb25zOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0QW5pbWF0aW9uU3Rh
cnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4
IGQ2MzU4MTE5YjRjYzcxNGUxZGU1ODE2NDYzODVjYmVlMzJkYzg1MDMuLmRmZDBiZDk5MTAzZDBj
OWQzYWQ3ZjcxNmQ3OGIxY2YwYzdkNDgwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIkNv
bnRlbnREYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
VGltZWxpbmUuaCIKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNjYsNiAr
NjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNlbmRpZgogI2luY2x1ZGUg
IlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMjI5MCw0ICsyMjkyLDE3IEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6cmVzZXRUZXh0QXV0b3NpemluZygpCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFRFWFRfQVVUT1NJWklORykKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5k
ZXJFbGVtZW50OjphbmltYXRlZFN0eWxlKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IHJlc3VsdDsKKworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50VGltZWxp
bmUoKSkKKyAgICAgICAgcmVzdWx0ID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJl
cigqdGhpcyk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggZTBhNjJkMGVlMjYwYzc0
ODQzZDBlOWUxNGYyZjJmMzdiMzJkNDgyYy4uYmEzNDhiN2E1MzkwOGY5MTA5ZDc1YTQ0ZmUwZWJh
YTE3NWQ1NTQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBA
IC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRyb2xTdGF0ZXM7
CiBjbGFzcyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlclN0
eWxlOwogY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI7CiAKIGNsYXNzIFJlbmRlckVsZW1lbnQgOiBw
dWJsaWMgUmVuZGVyT2JqZWN0IHsKQEAgLTIyNiwxNSArMjI3LDEyIEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJPYmplY3QqIGF0dGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGRldGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyT2JqZWN0Jik7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQ
cm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogLyogZnJvbVN0eWxlICovLCBjb25zdCBSZW5k
ZXJTdHlsZSogLyogdG9TdHlsZSAqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUgLyogdGltZU9mZnNldCAqLywgQ1NTUHJvcGVydHlJ
RCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlE
KSB7IH0KLQogICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLyogdGltZU9m
ZnNldCAqLywgY29uc3QgQW5pbWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0JikgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1l
T2Zmc2V0ICovLCBjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNU
aW1lKCkpIHsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHls
ZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBCYXNlVHlwZUZsYWcgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggN2QwN2NkYmQ4NDk3MDI4NTNlMWI5MjVh
MGJiYzk4ZDdkZGFmYTc2Ni4uYTBlMGUyM2U4Y2Y4ZDZlMjY4OWYxY2JiNjI2YzlhYWFkNWU1ZDRh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00Niw3ICs0
Niw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkJveFNoYXBlLmgi
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZpbHRl
ci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
QEAgLTEzMjcsMjEgKzEzMjYsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6
OmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKIAogICAgIGF1
dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAKLSAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0g
cmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGlu
ZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENT
U1Byb3BlcnR5VHJhbnNmb3JtKSkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBzdHlsZSA9IHRpbWVsaW5lLT5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVy
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3Jt
Qm94VG9DU1NCb3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+YXBwbHlU
cmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmln
aW4pOwotICAgICAgICAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0s
IGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VyclRy
YW5zZm9ybTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChyZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5p
bWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKKyAg
ICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgewor
ICAgICAgICBpZiAodGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5k
ZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKICAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5h
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRlZFN0eWxlKCk7
CiAgICAgICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0Jv
eFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJU
cmFuc2Zvcm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAg
ICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNm
b3JtcygpKTsKQEAgLTEzNDksMTEgKzEzMzcsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVu
ZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IK
ICAgICAgICAgfQogICAgIH0KIAotCiAgICAgLy8gbV90cmFuc2Zvcm0gaW5jbHVkZXMgdHJhbnNm
b3JtLW9yaWdpbiwgc28gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHRyYW5zZm9ybSBoZXJlLgog
ICAgIGlmIChhcHBseU9yaWdpbiA9PSBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdp
bikgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3JtOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lB
bmltYXRpb24oKS5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGVk
U3R5bGUoKTsKICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9D
U1NCb3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgcmVuZGVyQm94LnN0eWxlKCkuYXBwbHlUcmFu
c2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgUmVuZGVyU3R5bGU6
OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShj
dXJyVHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC02MTY1LDIwICs2MTUy
LDEzIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmdldE92ZXJsYXBCb3VuZHNJbmNsdWRpbmdDaGlsZHJl
bkFjY291bnRpbmdGb3JUcmFuc2Zvcm1BbmltYXRpCiAgICAgYm91bmRzID0gY2FsY3VsYXRlTGF5
ZXJCb3VuZHModGhpcywgTGF5b3V0U2l6ZSgpLCBib3VuZHNGbGFncyk7CiAgICAgCiAgICAgTGF5
b3V0UmVjdCBhbmltYXRlZEJvdW5kcyA9IGJvdW5kczsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVu
dFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9m
QW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewotICAgICAgICAgICAgICAg
IGJvdW5kcyA9IGFuaW1hdGVkQm91bmRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRl
cmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVy
KCksIGFuaW1hdGVkQm91bmRzKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVy
KCkuZG9jdW1lbnRUaW1lbGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewogICAgICAgICAg
ICAgYm91bmRzID0gYW5pbWF0ZWRCb3VuZHM7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0ZDU0N2M0
YjdmZGQxYWU0MDlhNmNlNmY4MjkyZjZhNmNkMzAzMjZmLi5iNzM4MGZlZGY3OTAzYjBhN2YwZjEx
NGU4YjIxNjViY2Y0OGMzNTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgpAQCAtMTI1MSwxMSArMTI1MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgIGNvbnN0
IGF1dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSB0aGlzLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogCiAg
ICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwot
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxp
bmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkKLSAgICAgICAgICAgIGlzUnVubmlu
Z0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlzUnVubmluZ0FjY2Vs
ZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9y
bSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5p
bWF0aW9uID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRl
ZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwor
ICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQor
ICAgICAgICBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5l
LT5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NT
UHJvcGVydHlUcmFuc2Zvcm0pOwogCiAgICAgdXBkYXRlVHJhbnNmb3JtKHN0eWxlKTsKICAgICB1
cGRhdGVPcGFjaXR5KHN0eWxlKTsKQEAgLTM2NDgsOTkgKzM2NDQsNiBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6YW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
KQogICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRp
bWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKQotewotICAgIGJvb2wgZGlkQW5pbWF0
ZSA9IGZhbHNlOwotCi0gICAgQVNTRVJUKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7
Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlPcGFjaXR5KSB7Ci0gICAgICAgIGNv
bnN0IEFuaW1hdGlvbiogb3BhY2l0eUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVy
dHkoQ1NTUHJvcGVydHlPcGFjaXR5KTsKLSAgICAgICAgaWYgKG9wYWNpdHlBbmltICYmICFvcGFj
aXR5QW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1l
VmFsdWVMaXN0IG9wYWNpdHlWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAg
ICAgICAgb3BhY2l0eVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVl
PigwLCBjb21wb3NpdGluZ09wYWNpdHkoZnJvbVN0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAg
ICAgICBvcGFjaXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+
KDEsIGNvbXBvc2l0aW5nT3BhY2l0eSh0b1N0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAg
ICAvLyBUaGUgYm94U2l6ZSBwYXJhbSBpcyBvbmx5IHVzZWQgZm9yIHRyYW5zZm9ybSBhbmltYXRp
b25zICh3aGljaCBjYW4gb25seSBydW4gb24gUmVuZGVyQm94ZXMpLCBzbyB3ZSBwYXNzIGFuIGVt
cHR5IHNpemUgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbihvcGFjaXR5VmVjdG9yLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW0sIEdyYXBoaWNzTGF5
ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwg
dGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29y
cmVjdCBvcGFjaXR5IGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0
IHRoZSBmaW5hbCBvcGFjaXR5LgotICAgICAgICAgICAgICAgIHVwZGF0ZU9wYWNpdHkoKnRvU3R5
bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNm
b3JtICYmIG1fb3duaW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgQW5p
bWF0aW9uKiB0cmFuc2Zvcm1BbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENT
U1Byb3BlcnR5VHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUFuaW0gJiYgIXRyYW5z
Zm9ybUFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFt
ZVZhbHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0g
ICAgICAgICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIHRy
YW5zZm9ybVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZT4o
MSwgdG9TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5
ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHNuYXBwZWRJbnRSZWN0KHJlbmRlckJv
eCgpLT5ib3JkZXJCb3hSZWN0KCkpLnNpemUoKSwgdHJhbnNmb3JtQW5pbSwgR3JhcGhpY3NMYXll
cjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSks
IHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNv
cnJlY3QgdHJhbnNmb3JtIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28g
c2V0IHRoZSBmaW5hbCB0cmFuc2Zvcm0uCi0gICAgICAgICAgICAgICAgdXBkYXRlVHJhbnNmb3Jt
KCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eUZpbHRlciAmJiBtX293bmluZ0xheWVyLmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgIGNvbnN0IEFu
aW1hdGlvbiogZmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZpbHRlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJBbmltICYmICFmaWx0ZXJBbmltLT5p
c0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qg
ZmlsdGVyVmVjdG9yKEFuaW1hdGVkUHJvcGVydHlGaWx0ZXIpOwotICAgICAgICAgICAgZmlsdGVy
VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5
bGUtPmZpbHRlcigpKSk7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlx
dWU8RmlsdGVyQW5pbWF0aW9uVmFsdWU+KDEsIHRvU3R5bGUtPmZpbHRlcigpKSk7Ci0gICAgICAg
ICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmlsdGVyVmVjdG9yLCBGbG9h
dFNpemUoKSwgZmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5z
aXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlciksIHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmlsdGVyIGlzIHZpc2libGUgd2hl
biB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCBmaWx0ZXIuCi0gICAgICAg
ICAgICAgICAgdXBkYXRlRmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5p
bWF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFC
TEUoRklMVEVSU19MRVZFTF8yKQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtp
dEJhY2tkcm9wRmlsdGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzQmFja2Ryb3BGaWx0ZXIoKSkgewot
ICAgICAgICBjb25zdCBBbmltYXRpb24qIGJhY2tkcm9wRmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRy
YW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAg
ICAgICAgaWYgKGJhY2tkcm9wRmlsdGVyQW5pbSAmJiAhYmFja2Ryb3BGaWx0ZXJBbmltLT5pc0Vt
cHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgYmFj
a2Ryb3BGaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsK
LSAgICAgICAgICAgIGJhY2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRl
ckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAg
ICAgICAgIGJhY2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1h
dGlvblZhbHVlPigxLCB0b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oYmFja2Ryb3BGaWx0ZXJWZWN0b3IsIEZs
b2F0U2l6ZSgpLCBiYWNrZHJvcEZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5h
bWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciksIHRp
bWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJl
Y3QgYmFja2Ryb3AgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFs
c28gc2V0IHRoZSBmaW5hbCBiYWNrZHJvcCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgdXBkYXRl
QmFja2Ryb3BGaWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYg
KGRpZEFuaW1hdGUpCi0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29t
cG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHJldHVybiBkaWRBbmltYXRlOwotfQotCi12b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQ
cm9wZXJ0eSA9IGNzc1RvR3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAo
YW5pbWF0ZWRQcm9wZXJ0eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKLSAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5wYXVzZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1l
Rm9yVHJhbnNpdGlvbihhbmltYXRlZFByb3BlcnR5KSwgdGltZU9mZnNldCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9IGNzc1Rv
R3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQcm9wZXJ0
eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXIt
PnJlbW92ZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlv
bihhbmltYXRlZFByb3BlcnR5KSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0
TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25z
dCBTdHJpbmcmLCBNb25vdG9uaWNUaW1lIHRpbWUpCi17Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5ub3RpZnlBbmlt
YXRpb25TdGFydGVkKHJlbmRlcmVyKCksIHRpbWUpOwotfQotCiB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKIHsKICAgICBp
ZiAocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCA5Yzc2NDdiYjI2NzZiM2Zj
MWY5MjZmYWQ5Mjg0N2Q4ZjhlYTdjMGYwLi44M2EyYTk1MThmNmYzNmNiN2IwZDg0ZDYyODZmMzdl
OTAwMDI4ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5oCkBAIC0xODQsMTEgKzE4NCw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RpZmljYXRpb24g
ZnJvbSB0aGUgcmVuZGVyZXIgdGhhdCBpdHMgY29udGVudCBjaGFuZ2VkLgogICAgIHZvaWQgY29u
dGVudENoYW5nZWQoQ29udGVudENoYW5nZVR5cGUpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIHN0
YXJ0LCBmaW5pc2gsIHN1c3BlbmQgYW5kIHJlc3VtZSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9u
cwotICAgIGJvb2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSwgQ1NTUHJvcGVydHlJRCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpOwotICAg
IHZvaWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCk7
Ci0gICAgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCk7Ci0KKyAgICAvLyBJ
bnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlvbnMK
ICAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRp
b24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKTsKICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3Vi
bGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGFuaW1hdGlvbkZp
bmlzaGVkKGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC0yMjYsNyArMjIyLDYgQEAgcHVibGljOgog
CiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudCBpbnRlcmZhY2UKICAgICB2b2lkIHRpbGVkQmFj
a2luZ1VzYWdlQ2hhbmdlZChjb25zdCBHcmFwaGljc0xheWVyKiwgYm9vbCAvKnVzaW5nVGlsZWRC
YWNraW5nKi8pIG92ZXJyaWRlOwotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBHcmFwaGljc0xheWVyKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1Rp
bWUgc3RhcnRUaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29u
c3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5Rmx1c2hCZWZvcmVE
aXNwbGF5UmVmcmVzaChjb25zdCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXgg
MTg0MWY5NmYwYjYyOThjYTUyM2VkN2YxZTY5ODlmMmMyNzZkZGQ3NS4uZjIzOWM0YTQ0ODBhZWU3
MmEzOTJiMzZjNTI0NWI3Y2Q0MWQ2MmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNs
dWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKIAogI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTU2MCw5ICs1NTksNiBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJv
b3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvJiBmcmFtZVZpZXcgPSBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9u
VXBkYXRlQmxvY2soJmZyYW1lVmlldy5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKLQogICAg
IEFTU0VSVCghbV9mbHVzaGluZ0xheWVycyk7CiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxi
b29sPiBmbHVzaGluZ0xheWVyc1Njb3BlKG1fZmx1c2hpbmdMYXllcnMsIHRydWUpOwpAQCAtODE5
LDggKzgxNSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAKICAgICArK21fY29tcG9zaXRp
bmdVcGRhdGVDb3VudDsKIAotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0
ZUJsb2NrKCZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24o
KSk7Ci0KICAgICBTZXRGb3JTY29wZTxib29sPiBwb3N0TGF5b3V0Q2hhbmdlKG1faW5Qb3N0TGF5
b3V0VXBkYXRlLCB0cnVlKTsKIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTI5NzcsMTcgKzI5NzEs
NyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFu
aW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
JiBhbmltQ29udHJvbGxlciA9IHJlbmRlcmVyLmxlZ2FjeUFuaW1hdGlvbigpOwotICAgIHJldHVy
biAoYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwg
Q1NTUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAmJiAodXNlc0NvbXBvc2l0aW5nKCkgfHwgKG1f
Y29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6QW5pbWF0ZWRPcGFjaXR5VHJpZ2dl
cikpKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUZpbHRlcikKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZF
TF8yKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKQotI2VuZGlmCi0g
ICAgICAgIHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVu
ZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3Jt
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdApAQCAtMzUxNSwxMCArMzQ5
OSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1Bbmlt
YXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICAgICAgICAgICAgIHJldHVybiBlZmZlY3Rz
U3RhY2stPmlzQ3VycmVudGx5QWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0p
OwogICAgIH0KIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmlu
Z0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIElmIGFuIGVsZW1lbnQgaGFzIGNvbXBvc2l0ZWQgbmVn
YXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRyZW4gcmVuZGVyIGluIGZyb250IG9m
IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCmluZGV4IGNmZWNhZTQ0ZDNkZDg4NmFkNjQ3NDk3YjlhMTFiODQwZTRkMTVkNmIu
LmNhZThmNzJmMzZjZDg1MzJhMjU5OGI0OGI2YmViZjgzNTM4ZjQ0NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTI1
MCwyNyArMjUwLDYgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlUmVwYWlu
dExheW91dFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmoKICAgICAgICAgc2V0UmVwYWlu
dExheW91dFJlY3RzKFJlcGFpbnRMYXlvdXRSZWN0cygqdGhpcywgcmVwYWludENvbnRhaW5lciwg
Z2VvbWV0cnlNYXApKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdGFydFRy
YW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpCi17
Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+YmFja2luZygpLT5zdGFydFRyYW5zaXRpb24o
dGltZU9mZnNldCwgcHJvcGVydHlJZCwgZnJvbVN0eWxlLCB0b1N0eWxlKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXll
cigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBsYXllcigpLT5iYWNraW5nKCkt
PnRyYW5zaXRpb25QYXVzZWQodGltZU9mZnNldCwgcHJvcGVydHlJZCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGxheWVyKCktPmJhY2tpbmcoKS0+dHJhbnNpdGlvbkZpbmlzaGVk
KHByb3BlcnR5SWQpOwotfQotCiBib29sIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0QW5p
bWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgY29u
c3QgS2V5ZnJhbWVMaXN0JiBrZXlmcmFtZXMpCiB7CiAgICAgaWYgKCFsYXllcigpIHx8ICFsYXll
cigpLT5iYWNraW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQzNzcxM2RiNzJlYTIyYjYzMWZm
ZTJkYmE3Li5kOTc4MWNlY2M4OTdjMzU4NjlhNzcyOWJhMWNkMGU3NmUxOTQxZjBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKQEAg
LTY5LDEwICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGFpbnRMYXlvdXRSZWN0cyhj
b25zdCBSZXBhaW50TGF5b3V0UmVjdHMmKTsKICAgICB2b2lkIGNsZWFyUmVwYWludExheW91dFJl
Y3RzKCk7CiAKLSAgICBib29sIHN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUg
dGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
RmluaXNoZWQoQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0KICAgICBib29sIHN0YXJ0QW5pbWF0
aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlmcmFtZUxp
c3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNl
dCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkZpbmlz
aGVkKGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKaW5kZXggMTkxMjVmZWY3OWZmZTI2MDA0ZmZlOTk4N2UxZmYwYjM0MGRk
ZjlhZC4uNTAwOWFkMTdiYTljYjdiNjIzMGZjMWMzZGZlNGM2ZGYwYWY3NzI4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNDYsNyArNDYsNiBAQCBjbGFzcyBU
ZXh0U3RyZWFtOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
Ci1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ29sb3I7CiBjbGFzcyBDdXJz
b3I7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTcwNiw3ICs3MDUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBj
b25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIHsgfQogCi0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ciYgbGVnYWN5QW5pbWF0aW9uKCkgY29uc3Q7CiAgICAgRG9jdW1lbnRUaW1lbGluZSogZG9jdW1l
bnRUaW1lbGluZSgpIGNvbnN0OwogCiAgICAgLy8gTWFwIHBvaW50cyBhbmQgcXVhZHMgdGhyb3Vn
aCBlbGVtZW50cywgcG90ZW50aWFsbHkgdmlhIDNkIHRyYW5zZm9ybXMuIFlvdSBzaG91bGQgbmV2
ZXIgbmVlZCB0byBjYWxsIHRoZXNlIGRpcmVjdGx5OyB1c2UKQEAgLTk3MywxMSArOTcxLDYgQEAg
aW5saW5lIFBhZ2UmIFJlbmRlck9iamVjdDo6cGFnZSgpIGNvbnN0CiAgICAgcmV0dXJuICpmcmFt
ZSgpLnBhZ2UoKTsKIH0KIAotaW5saW5lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIFJlbmRlck9i
amVjdDo6bGVnYWN5QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhbWUoKS5sZWdh
Y3lBbmltYXRpb24oKTsKLX0KLQogaW5saW5lIERvY3VtZW50VGltZWxpbmUqIFJlbmRlck9iamVj
dDo6ZG9jdW1lbnRUaW1lbGluZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuZXhp
c3RpbmdUaW1lbGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXggOGE3ZmQ2NThiMmRkOTkwNzA5NzA1
MmQxMTNiZGNmODdkZDgxOGQ4Ni4uYjEzMjhhYTk5OTk5NjNmYzI0ZmM1OWVlZWI4ZmNkNWFkZTJk
ZmU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXIuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJD
U1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTU1Niw3ICs1NTUsNiBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0
ZWFyRG93blJlbmRlcmVycyhFbGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeQog
CiAgICAgYXV0byYgZG9jdW1lbnQgPSByb290LmRvY3VtZW50KCk7CiAgICAgYXV0byogdGltZWxp
bmUgPSBkb2N1bWVudC5leGlzdGluZ1RpbWVsaW5lKCk7Ci0gICAgYXV0byYgYW5pbWF0aW9uQ29u
dHJvbGxlciA9IGRvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOyAgICAKIAogICAg
IGF1dG8gcG9wID0gWyZdICh1bnNpZ25lZCBkZXB0aCkgewogICAgICAgICB3aGlsZSAodGVhcmRv
d25TdGFjay5zaXplKCkgPiBkZXB0aCkgewpAQCAtNTc1LDcgKzU3Myw2IEBAIHZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3QsIFRlYXJkb3duVHlw
ZSB0ZWFyZG93blR5CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlYXJkb3duVHlwZSA9
PSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5nQW5pbWF0aW9ucykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5jYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnNG
b3JFbGVtZW50KGVsZW1lbnQsIFdlYkFuaW1hdGlvbjo6U2lsZW50bHk6Ok5vKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlci5jYW5jZWxBbmlt
YXRpb25zKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlOgogICAgICAgICAgICAgICAgIGlmICh0aW1l
bGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggOGNlMDc1MmE2
MzY2ZDgzMzAwMjYyYjAyZWUwODNlZTU5ZmMxMDczOC4uYTNlYmY2ZmI2N2YxZmE2MTJiZjA2NDY3
YTdkNThkODlhM2ViOTlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVB
ZGp1c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZUFk
anVzdGVyLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldlYkFuaW1hdGlv
blR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKaW5kZXggYjg1Y2Y0NjZjMTcz
Yjg4MDNmNzVlMzc2MjViZjAyNTg2ZWY5MGFlNS4uZjdmZmQ0NGY5YWE0Yjk3MWRkOWYxYjY2YWM1
MmUwMzNlZjY3ZmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVy
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0
eWxlVHJlZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5j
ZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCkBAIC01
NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMTIsMjYgKzMxMiwyMyBAQCBFbGVtZW50
VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdAogCiAgICAgT3B0aW9uU2V0PEFuaW1hdGlvbkltcGFjdD4gYW5pbWF0
aW9uSW1wYWN0OwogCi0gICAgLy8gTmV3IGNvZGUgcGF0aCBmb3IgQ1NTIEFuaW1hdGlvbnMgYW5k
IENTUyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAg
ICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IG5ldyBDU1MgYW5pbWF0
aW9uIG9jY3VyaW5nIG9uIHRoaXMgZWxlbWVudCBoYXMgYSBtYXRjaGluZyBXZWJBbmltYXRpb24K
LSAgICAgICAgLy8gb24gdGhlIGRvY3VtZW50IHRpbWVsaW5lLiBOb3RlIHRoYXQgd2UgZ2V0IHRp
bWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIGEgdGltZWxpbmUg
Y3JlYXRlZAotICAgICAgICAvLyBpbiBjYXNlIG5vIFdlYiBBbmltYXRpb25zIGhhdmUgYmVlbiBj
cmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KLSAgICAgICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQo
KS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENh
Y2hlICYmICFlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmlldygpLT5wcmludGluZygpKSB7Ci0g
ICAgICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0aW9ucygpIHx8
IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50
LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRT
dHlsZSwgKm5ld1N0eWxlKTsKLQotICAgICAgICAgICAgLy8gVGhlIG9yZGVyIGluIHdoaWNoIENT
UyBUcmFuc2l0aW9ucyBhbmQgQ1NTIEFuaW1hdGlvbnMgYXJlIHVwZGF0ZWQgbWF0dGVycyBzaW5j
ZSBDU1MgVHJhbnNpdGlvbnMgZGVmaW5lIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUKLSAgICAgICAg
ICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBz
dHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9ucyBhZnRl
ciBDU1MgVHJhbnNpdGlvbnMKLSAgICAgICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFu
c2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBh
cyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4KLSAgICAgICAgICAgIGlm
ICgob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgfHwgbmV3U3R5bGUtPmhh
c0FuaW1hdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBo
YWNrIGFuZCBwYXNzIHRoZSBwYXJlbnQgc3R5bGUgdmlhIHVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JF
bGVtZW50LgotICAgICAgICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVu
dFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICBt
X2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVu
dCwgb2xkU3R5bGUsICpuZXdTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICBzY29wZSgpLnJlc29s
dmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktleWZyYW1lcyhudWxscHRyKTsKLSAgICAgICAg
ICAgIH0KKyAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgbmV3IENT
UyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50IGhhcyBhIG1hdGNoaW5nIFdlYkFu
aW1hdGlvbgorICAgIC8vIG9uIHRoZSBkb2N1bWVudCB0aW1lbGluZS4gTm90ZSB0aGF0IHdlIGdl
dCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVudCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCBhIHRpbWVs
aW5lIGNyZWF0ZWQKKyAgICAvLyBpbiBjYXNlIG5vIFdlYiBBbmltYXRpb25zIGhhdmUgYmVlbiBj
cmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUg
JiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpIHsKKyAgICAg
ICAgaWYgKG9sZFN0eWxlICYmIChvbGRTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSB8fCBuZXdTdHls
ZS0+aGFzVHJhbnNpdGlvbnMoKSkpCisgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCku
dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5ld1N0
eWxlKTsKKworICAgICAgICAvLyBUaGUgb3JkZXIgaW4gd2hpY2ggQ1NTIFRyYW5zaXRpb25zIGFu
ZCBDU1MgQW5pbWF0aW9ucyBhcmUgdXBkYXRlZCBtYXR0ZXJzIHNpbmNlIENTUyBUcmFuc2l0aW9u
cyBkZWZpbmUgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZQorICAgICAgICAvLyB0byB1c2UgQ1NTIEFu
aW1hdGlvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LiBB
cyBzdWNoLCB3ZSB1cGRhdGUgQ1NTIEFuaW1hdGlvbnMgYWZ0ZXIgQ1NTIFRyYW5zaXRpb25zCisg
ICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUg
Q1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0
eWxlIGNoYW5nZSBldmVudC4KKyAgICAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFz
QW5pbWF0aW9ucygpKSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBhbmQgcGFzcyB0aGUgcGFyZW50IHN0eWxlIHZp
YSB1cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudC4KKyAgICAgICAgICAgIHNjb3BlKCkucmVz
b2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7
CisKKyAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NBbmltYXRpb25z
Rm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0eWxlKTsKKworICAgICAgICAgICAg
c2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMobnVsbHB0
cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0NywxNyArMzQ0LDYgQEAgRWxlbWVudFVwZGF0
ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3QKICAgICB9IGVsc2UKICAgICAgICAgZWxlbWVudC5zZXRMYXN0U3R5bGVDaGFu
Z2VFdmVudFN0eWxlKG51bGxwdHIpOwogCi0gICAgLy8gT2xkIGNvZGUgcGF0aCBmb3IgQ1NTIEFu
aW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGF1dG8mIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtX2RvY3VtZW50LmZy
YW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOwotCi0gICAgICAgIGF1dG8gYW5pbWF0aW9uVXBkYXRl
ID0gYW5pbWF0aW9uQ29udHJvbGxlci51cGRhdGVBbmltYXRpb25zKGVsZW1lbnQsICpuZXdTdHls
ZSwgb2xkU3R5bGUpOwotICAgICAgICBhbmltYXRpb25JbXBhY3QuYWRkKGFuaW1hdGlvblVwZGF0
ZS5pbXBhY3QpOwotCi0gICAgICAgIGlmIChhbmltYXRpb25VcGRhdGUuc3R5bGUpCi0gICAgICAg
ICAgICBuZXdTdHlsZSA9IFdURk1vdmUoYW5pbWF0aW9uVXBkYXRlLnN0eWxlKTsKLSAgICB9Ci0K
ICAgICBpZiAoYW5pbWF0aW9uSW1wYWN0KQogICAgICAgICBBZGp1c3Rlcjo6YWRqdXN0QW5pbWF0
ZWRTdHlsZSgqbmV3U3R5bGUsIHBhcmVudEJveFN0eWxlKCksIGFuaW1hdGlvbkltcGFjdCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCmluZGV4IGIzNzZi
ZjZjMTc1ZDU0NTlhNGUwYjQ2M2NhNDhiOWJmMGNhNjY3OTkuLjZhNWI2ZjRhZTQyMDI5Y2U2NjA4
YzA0YmM5MjY0ZmQwMzZmZWQ4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bFNldHRpbmdzLmNwcApAQCAtMTAyOSwxMSArMTAyOSw2IEBAIHZvaWQgSW50ZXJuYWxTZXR0aW5n
czo6c2V0Rm9yY2VkU3VwcG9ydHNIaWdoRHluYW1pY1JhbmdlVmFsdWUoSW50ZXJuYWxTZXR0aW5n
czo6CiAgICAgc2V0dGluZ3MoKS5zZXRGb3JjZWRTdXBwb3J0c0hpZ2hEeW5hbWljUmFuZ2VWYWx1
ZShpbnRlcm5hbFNldHRpbmdzVG9TZXR0aW5nc1ZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgSW50
ZXJuYWxTZXR0aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpCi17Ci0g
ICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQotCiB2b2lkIEludGVybmFsU2V0dGlu
Z3M6OnNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbCBzaG91bGQpCiB7CiAjaWYg
RU5BQkxFKFZJREVPKSB8fCBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBiNTI3ZTE1NWM5MGQ0NjY4ZTMxMjRjNWU5YjQ4YmZl
MGQwZTM5NTcyLi5mNjVhNzQxMzQ5ZmZjYTI5YjE5NTVjNjc0YWE0ODMzZDcyMzY1NzVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaApAQCAtMTM1LDggKzEzNSw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxl
ZChib29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoYm9v
bCk7CiAKLSAgICBzdGF0aWMgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCk7Ci0KICAgICB2b2lkIHNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbCk7CiAg
ICAgCiAgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChib29s
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCmluZGV4IDQx
YTI3ZDYyZTI3NjQ2NGFhZTVlMTI4YjhlOWJlMWVjZjkxZmVkZmYuLjVjYzYyZjMyNWEyZjY4OTYw
MGUzYmY4OGNlYTA1YzY1NmZhZTRlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbApAQCAtMTE3LDggKzExNyw2IEBAIGVudW0gRm9udExvYWRUaW1pbmdP
dmVycmlkZSB7ICJCbG9jayIsICJTd2FwIiwgIkZhaWx1cmUiIH07CiAgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bmRlZmluZWQgc2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoYm9v
bGVhbiBzaG91bGQpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHNldEN1c3Rv
bVBhc3RlYm9hcmREYXRhRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogCi0gICAgW0VuYWJsZWRB
dFJ1bnRpbWU9V2ViQW5pbWF0aW9uc10gYm9vbGVhbiB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCk7Ci0KICAgICB1bmRlZmluZWQgc2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vz
c2lvbihib29sZWFuIHNob3VsZERlYWN0aXZhdGUpOwogICAgIAogICAgIHVuZGVmaW5lZCBzZXRT
dG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFkMTRkNzBlZDhmMTJhMWU2ZDNkMGYy
NTVjYjFiYTBmNTA3ODNlOGMuLjdjNGRmMDNlNWUxODRiNWI1OWM5MGQ0NmY2NmVjZTEwNjhkNmZi
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUg
IkNTU01lZGlhUnVsZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCkBAIC0xMDY5
LDkgKzEwNjgsNyBAQCBib29sIEludGVybmFsczo6YW5pbWF0aW9uV2l0aElkRXhpc3RzKGNvbnN0
IFN0cmluZyYgaWQpIGNvbnN0CiAKIHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9mQWN0aXZl
QW5pbWF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0
aW9uKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lKCktPmRvY3VtZW50KCkpOworICAg
IHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9mQWN0aXZlQW5p
bWF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjph
bmltYXRpb25zQXJlU3VzcGVuZGVkKCkgY29uc3QKQEAgLTEwODAsOSArMTA3Nyw3IEBAIEV4Y2Vw
dGlvbk9yPGJvb2w+IEludGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpIGNvbnN0CiAg
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9s
bGVyKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwotICAgIHJldHVybiBkb2N1bWVudC0+ZnJh
bWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50
KGRvY3VtZW50KTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xs
ZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7CiB9CiAKIGRvdWJsZSBJbnRlcm5hbHM6OmFu
aW1hdGlvbnNJbnRlcnZhbCgpIGNvbnN0CkBAIC0xMDkxLDE1ICsxMDg2LDkgQEAgZG91YmxlIElu
dGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50KQog
ICAgICAgICByZXR1cm4gSU5GSU5JVFk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBkb2N1bWVudC0+ZXhpc3RpbmdUaW1lbGlu
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5hbmltYXRpb25JbnRlcnZhbCgpLnNl
Y29uZHMoKTsKLSAgICAgICAgcmV0dXJuIElORklOSVRZOwotICAgIH0KLQotICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBJTkZJTklUWTsKLSAgICByZXR1cm4gZG9j
dW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGlvbkludGVydmFsKCkudmFs
dWUoKTsKKyAgICBpZiAoYXV0byB0aW1lbGluZSA9IGRvY3VtZW50LT5leGlzdGluZ1RpbWVsaW5l
KCkpCisgICAgICAgIHJldHVybiB0aW1lbGluZS0+YW5pbWF0aW9uSW50ZXJ2YWwoKS5zZWNvbmRz
KCk7CisgICAgcmV0dXJuIElORklOSVRZOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKQEAgLTExMDgsMTkgKzEwOTcsMTAgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0CiAgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1
c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkK
LSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1
c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkb2N1
bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1
bWVudChkb2N1bWVudCk7Ci0KLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewot
ICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQot
ICAgICAgICAgICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9u
c0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQorICAgIGRvY3VtZW50LT5lbnN1cmVU
aW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250
cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpA
QCAtMTEzMiw3MyArMTExMiwxNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnJlc3Vt
ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFt
ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
LSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmVuc3Vy
ZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJl
VGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5y
ZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0
aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQor
ICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5pbWF0aW9u
cygpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQt
PmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8
IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAg
ICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUo
ZWxlbWVudCwgQXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKLX0KLQotRXhj
ZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxl
bWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYgKHBhdXNlVGlt
ZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
LQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAiYWZ0ZXIiKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBQ
c2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVt
ZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7
Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9u
KCkucGF1c2VBbmltYXRpb25BdFRpbWUoKnBzZXVkb0VsZW1lbnQsIEF0b21TdHJpbmcoYW5pbWF0
aW9uTmFtZSksIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6
cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmIChwYXVzZVRp
bWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0
VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9y
PGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNv
bnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIGlmIChw
c2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBQc2V1ZG9FbGVtZW50
KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBz
ZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFw
c2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VUcmFu
c2l0aW9uQXRUaW1lKCpwc2V1ZG9FbGVtZW50LCBwcm9wZXJ0eSwgcGF1c2VUaW1lKTsKLX0KLQog
VmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxl
cmF0ZWRBbmltYXRpb25zRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICgh
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KICAgICBWZWN0b3I8
SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYW5pbWF0aW9uczsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGFuaW1hdGlvbkFzUGFpciA6IGVsZW1lbnQuZG9jdW1lbnQoKS50aW1lbGluZSgp
LmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIGFuaW1h
dGlvbnMuYXBwZW5kKHsgYW5pbWF0aW9uQXNQYWlyLmZpcnN0LCBhbmltYXRpb25Bc1BhaXIuc2Vj
b25kIH0pOwpAQCAtMTIwNyw5ICsxMTMxLDcgQEAgVmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0
ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWUKIAog
dW5zaWduZWQgSW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9u
cygpIGNvbnN0CiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFuaW1hdGlvblRpbWVs
aW5lSW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFuaW1hdGlvblRpbWVsaW5l
SW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogZG91YmxlIEludGVybmFsczo6dGltZVRv
TmV4dEFuaW1hdGlvblRpY2soV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCAzNzExNzZmNmMyYTNjNzg3ZTAzNmY1MjI2NjI1ODM1
ZmRjMTNlZThhLi5kMTdjZGVkMWQyMTllNjUzOGNjMTQ4MTMzYzU2ZWZiMTJhYWM1YWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTIzMywxNCArMjMzLDggQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPGJvb2w+IGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBjb25zdDsKICAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0OwogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdDsKLSAgICBFeGNlcHRpb25Pcjxi
b29sPiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmKTsKLSAgICBFeGNlcHRpb25Pcjxib29s
PiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHBzZXVk
b0lkKTsKICAgICBkb3VibGUgYW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3Q7CiAKLSAgICAvLyBD
U1MgVHJhbnNpdGlvbiB0ZXN0aW5nLgotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlVHJhbnNp
dGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBh
dXNlVGltZSwgRWxlbWVudCYpOwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1
c2VUaW1lLCBFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCk7Ci0KICAgICAvLyBXZWIg
QW5pbWF0aW9ucyB0ZXN0aW5nLgogICAgIHN0cnVjdCBBY2NlbGVyYXRlZEFuaW1hdGlvbiB7CiAg
ICAgICAgIFN0cmluZyBwcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApp
bmRleCA4ZDFhZDQyZmQ1YTdiNTAwNGNiMDhmYTY2ZWVmNzRhYmM0NjQ4ZDQzLi5mZDY3ZTcxMjJh
Y2Q0MTZiY2RkNzA0ZWE1ZDAwMzU1ZjljNjhiMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCkBAIC0zMTUsMTQgKzMxNSw4IEBAIGVudW0gQ29udGVudFNpemVDYXRlZ29yeSB7
CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCByZXN1bWVBbmltYXRpb25zKCk7CiAg
ICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsK
LSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnQoRE9NU3RyaW5nIGFuaW1hdGlvbk5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VU
aW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBw
YXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChET01TdHJpbmcgYW5pbWF0aW9uTmFt
ZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9NU3Ry
aW5nIHBzZXVkb0lkKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGFuaW1hdGlvbnNJ
bnRlcnZhbDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgW01heVRocm93
RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChET01TdHJp
bmcgcHJvcGVydHlOYW1lLCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBl
bGVtZW50KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25Qc2V1ZG9FbGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eSwgdW5yZXN0cmljdGVkIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsKLQog
ICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAgc2VxdWVuY2U8QWNjZWxlcmF0ZWRB
bmltYXRpb24+IGFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50
KTsKICAgICB1bnNpZ25lZCBsb25nIG51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRp
b25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55
YW1sIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCBhODE0
MjJjOWIxZDcwZTAwY2Y1YWYyMjdiM2JkN2EyYmY2Y2IzY2Q5Li5iZDExZmE2MWJlNGFjZmMxZWI3
MmI4NGUxOWE3MWYwN2JhYTZkMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzLnlhbWwKQEAgLTE0MDUsMjIgKzE0MDUsNiBAQCBDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdF
bmFibGVkOgogICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJFbmFibGUgRE9NIEFQSSBhbmQg
Q1NTIHByb3BlcnR5IGZvciAnc21vb3RoJyBzY3JvbGwgYmVoYXZpb3IiCiAgIGNhdGVnb3J5OiBl
eHBlcmltZW50YWwKIAotV2ViQW5pbWF0aW9uc0VuYWJsZWQ6Ci0gIHR5cGU6IGJvb2wKLSAgZGVm
YXVsdFZhbHVlOiB0cnVlCi0gIGh1bWFuUmVhZGFibGVOYW1lOiAiV2ViIEFuaW1hdGlvbnMiCi0g
IGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIldlYiBBbmltYXRpb25zIHByb3RvdHlwZSIKLSAg
Y2F0ZWdvcnk6IGV4cGVyaW1lbnRhbAotICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRG
ZWF0dXJlcwotCi1XZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOgotICB0eXBlOiBi
b29sCi0gIGRlZmF1bHRWYWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxlTmFtZTogIkNTUyBBbmlt
YXRpb25zIHZpYSBXZWIgQW5pbWF0aW9ucyIKLSAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAi
RXhwb3NlIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgdGhyb3VnaCBnZXRBbmlt
YXRpb25zKCkiCi0gIGNhdGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29yZUJpbmRpbmc6IFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMKLQogV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNF
bmFibGVkOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FWFBFUklNRU5U
QUxfRkVBVFVSRVNfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcAppbmRleCBlYmMyZDI3YWY3NzRlODMyNWQ1YWRiM2E5NDQ2MDMxNjYz
MTAwMDNlLi4xN2RjZjM4M2U1NTA3ZTFiNzBkMGRlODMxMzE3ZGRkMWM3ZjljYWYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAtNDg2
LDI2ICs0ODYsNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogICAgIHJldHVybiB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCgpOwogfQogCi12b2lk
IFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tQcmVmZXJlbmNlc0dl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCi17
Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlvbnNFbmFibGVk
KCk7Ci19Ci0KLXZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewot
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKLXsK
LSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpOwotfQotCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7
CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3Mo
ZmxhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVm
ZXJlbmNlc1JlZlByaXZhdGUuaAppbmRleCA3ZTE0YTJhYzQ1Y2IxYmY1ZmFlMDM5MTRlYzkyOGI5
MTMyZmJjNTYxLi4yMWRmMzc0ODY2Y2QyNTgyOTc5N2M3MjliMzgyNjFkNThmMGZiNjJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNS
ZWZQcml2YXRlLmgKQEAgLTk3LDE0ICs5Nyw2IEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5j
ZXNHZXRXZWJHTEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1By
ZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWQyRENhbnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwg
Ym9vbCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWQyRENhbnZh
c0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiAKLS8vIERlZmF1bHRzIHRvIGZhbHNlCi1XS19F
WFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiwgYm9vbCBmbGFnKTsKLVdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJB
bmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKLQotLy8gRGVmYXVsdHMgdG8gZmFs
c2UKLVdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQgYm9v
bCBXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmKTsKLQogLy8gRGVmYXVsdHMgdG8gZmFsc2UuCiBXS19FWFBPUlQgdm9pZCBX
S1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiwg
Ym9vbCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MoV0tQcmVmZXJlbmNlc1JlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCmluZGV4IDEzYTg4MTBjM2FmNGI3M2ZlMmUwYjJi
YmRkN2U4YjU3Njg2MTJkYTYuLmRhZGE5MTMzZmNkOTczYmY1ZmI2NjAwMmI1MzkxOTk2ZTIwOWVj
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZl
cmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZl
cmVuY2VzLm1tCkBAIC0xNDMwLDE2ICsxNDMwLDYgQEAgLSAoQk9PTClfdmlkZW9RdWFsaXR5SW5j
bHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkCiAgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+
dmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkKCk7CiB9CiAKLS0g
KHZvaWQpX3NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxl
ZAotewotICAgIF9wcmVmZXJlbmNlcy0+c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZChlbmFibGVkKTsKLX0KLQotLSAoQk9PTClfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZAotewotICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPndlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogLSAodm9pZClfc2V0RGV2aWNlT3JpZW50YXRpb25FdmVu
dEVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogewogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZl
cmVuY2VzUHJpdmF0ZS5oCmluZGV4IGEzNDk4OTU2OTI2OTQ0Nzg1MzZjNGE0NDQ1ZTVhODBlNDQz
ZjE4NzIuLjU4NDA0YTY4NDVkN2E0OWM4YTc2YWFlYWY4ODRkZjJhMGUzM2NkZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oCkBAIC0xNTEsNyArMTUxLDYgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
X1dLRWRpdGFibGVMaW5rQmVoYXZpb3IpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOikgQk9PTCBfbG93UG93ZXJW
aWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNob3VsZEln
bm9yZU1ldGFWaWV3cG9ydDopIEJPT0wgX3Nob3VsZElnbm9yZU1ldGFWaWV3cG9ydCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0VmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFi
bGVkOikgQk9PTCBfdmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVk
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgc2V0dGVyPV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
OikgQk9PTCBfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0
ZXI9X3NldERldmljZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkOikgQk9PTCBfZGV2aWNlT3JpZW50
YXRpb25FdmVudEVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzOikgQk9PTCBfbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldEl0cERlYnVnTW9kZUVuYWJsZWQ6KSBCT09MIF9pdHBEZWJ1Z01vZGVFbmFibGVkIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggYjZlYzUyZGI4MjFkOTY1MWVhMjJk
OGYwYzNlMmYzNTZjY2FmZDU2YS4uZjVmY2M3ZmJiNTEzODY1OWNiZGU4NzAxZWJkMWJjM2JiYTJi
MzVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5o
CkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0
JiByZW1vdGVMYXllclRyZWVIb3N0KCkgY29uc3QgeyByZXR1cm4gKm1fcmVtb3RlTGF5ZXJUcmVl
SG9zdDsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVIb3N0PiBkZXRhY2hS
ZW1vdGVMYXllclRyZWVIb3N0KCk7CiAKLSAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlk
U3RhcnQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lKTsKICAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90
IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5KTsKIAogICAgIFRyYW5zYWN0aW9uSUQgbmV4dExh
eWVyVHJlZVRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdMYXllclRyZWVU
cmFuc2FjdGlvbklELm5leHQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eS5tbQppbmRleCA2NDlhMDg0ODBjYmM5ZjdkMTFkZjNiN2I2MzU0NmViZmZh
ZWQ2MDY4Li5jYTVmOWJkYTIzMzFkNjI0ZTYzZmI0Zjk3ZWQxYWYyZTAwOGQ1YTJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQpAQCAtMjc1LDEx
ICsyNzUsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNvbW1pdExh
eWVyVHJlZShjb25zdCBSZW1vdGVMYXllclRyZWVUcmFucwogICAgIH0KIH0KIAotdm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0
KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWRBbmlt
YXRpb25EaWRTdGFydChsYXllcklELCBrZXksIHN0YXJ0VGltZSkpOwotfQotCiB2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVp
bnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIHNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhOjpBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZChsYXllcklELCBrZXkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGU4YTMwNzhlNDgwZDIxMmQ0NmNkNjM4ZTI4
ZGQ5NWQyNWY4ZjgyMWQuLjYzZTJhYjc5NjQ2ZTIyNTVmNGZmMzJhZWE5MjdhYWRjODIzM2Y1Y2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QuaApAQCAtNjAsNyArNjAsNiBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCwgUmV0YWluUHRyPFdLQW5pbWF0aW9uRGVsZWdhdGU+PiBMYXllckFuaW1hdGlvbkRlbGVnYXRl
TWFwOwogICAgIExheWVyQW5pbWF0aW9uRGVsZWdhdGVNYXAmIGFuaW1hdGlvbkRlbGVnYXRlcygp
IHsgcmV0dXJuIG1fYW5pbWF0aW9uRGVsZWdhdGVzOyB9CiAKLSAgICB2b2lkIGFuaW1hdGlvbkRp
ZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRp
b24gKiwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQgYW5pbWF0aW9uRGlkRW5k
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRpb24gKik7
CiAKICAgICB2b2lkIGRldGFjaEZyb21EcmF3aW5nQXJlYSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
SG9zdC5tbQppbmRleCBlMjRhOGZmZTRmMzA1YmNkNDA3MGEzMTZmMmVjYzljOTQ4NzhjNjEzLi4z
NWMwM2M4NzZmNzkxNTk0YTJiYmJjODM4YmJiNTQzYmE0ZGVjZWJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJUcmVlSG9zdC5tbQpAQCAtMTUzLDI3ICsxNTMsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUhv
c3Q6OmxheWVyV2lsbEJlUmVtb3ZlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eQogICAgIG1fbm9kZXMucmVtb3ZlKGxheWVySUQpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJl
ZUhvc3Q6OmFuaW1hdGlvbkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCBsYXllcklELCBDQUFuaW1hdGlvbiAqYW5pbWF0aW9uLCBNb25vdG9uaWNUaW1lIHN0
YXJ0VGltZSkKLXsKLSAgICBpZiAoIW1fZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENBTGF5ZXIgKmxheWVyID0gbGF5ZXJGb3JJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYW5pbWF0aW9uS2V5OwotICAgIGZvciAo
TlNTdHJpbmcgKmtleSBpbiBbbGF5ZXIgYW5pbWF0aW9uS2V5c10pIHsKLSAgICAgICAgaWYgKFts
YXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSA9PSBhbmltYXRpb24pIHsKLSAgICAgICAgICAgIGFu
aW1hdGlvbktleSA9IGtleTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFhbmltYXRpb25LZXkuaXNFbXB0eSgpKQotICAgICAgICBtX2RyYXdpbmdBcmVh
LT5hY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGFuaW1hdGlvbktleSwgc3Rh
cnRUaW1lKTsKLX0KLQogdm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25EaWRFbmQo
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIENBQW5pbWF0
aW9uICphbmltYXRpb24pCiB7CiAgICAgaWYgKCFtX2RyYXdpbmdBcmVhKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAKaW5kZXggNDE5YzE1Zjk3MDE3ZGRiZDJkYjhiMzg3MDY4Mzc1MGFhMDM0ZWYxMS4uYmU1
ZGVkNTc4MzcyMjA1NDBlMDEzMmM3MmU4MmM2NDFmYWMzZmY5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCkBAIC0xODcsMTIgKzE4Nyw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlCiAgICAgfQog
I2VuZGlmCiAKLSAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJs
ZWQiKQotICAgICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKGVuYWJsZWQpOwotCi0gICAgaWYgKHByZWZlcmVuY2UgPT0g
IldlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci0KICAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2Vi
S2l0Q2FjaGVBUElFbmFibGVkIikKICAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5zZXRDYWNoZUFQSUVuYWJsZWQoZW5hYmxlZCk7CiAKQEAgLTU4OSwxNiAr
NTgzLDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKFdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKICAgICBwYWdlLT5jb3JlUGFnZSgpLT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoZW5hYmxlZCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNF
bmFibGVkKGVuYWJsZWQpOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCAwOWExMjVj
YTRjOTZjYzNhMDMyYWU1OGE0ZWJiYzJiYzQzYzc1ZmJmLi5jMDFkZTgwZmNjYmNlM2QzNWJlMzJh
ZjdhMGRhNGIzYzNjMWRmNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtMTQyLDggKzE0Miw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdlYlBh
Z2UqLCBib29sIGVuYWJsZWQpOwogICAgIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9v
bCk7Ci0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNl
dFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRB
Y2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChib29sKTsKICAgICB2b2lkIGRpc3BhdGNo
UGVuZGluZ0xvYWRSZXF1ZXN0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCBjZTc3NThkMGI5NDY4ZDliN2Y2Zjg0NWI0ZGVhZjU2
NzEyNzRmZWNkLi5iMDkxNzZmMjEyYmRhYjM2OThkMDY2YmYzY2YxMWZlMDEwZDA3MmJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk1
LDcgKzk1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3RXhwb3NlZFJlY3Qo
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0PikgPSAwOwogICAgIHZpcnR1YWwgT3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRSZWN0PiB2aWV3RXhwb3NlZFJlY3QoKSBjb25zdCA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCAvKmxheWVy
SUQqLywgY29uc3QgU3RyaW5nJiAvKmtleSovLCBNb25vdG9uaWNUaW1lIC8qc3RhcnRUaW1lKi8p
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRf
dCAvKmxheWVySUQqLywgY29uc3QgU3RyaW5nJiAvKmtleSovKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgYWRkRmVuY2UoY29uc3QgV1RGOjpNYWNoU2VuZFJpZ2h0JikgeyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMu
aW4KaW5kZXggZjIwN2UxMDdlOTUyNzBhN2Y5MTg5Y2JhOWFiNjc3NTM0YWEyMjc5Mi4uMTNhNzNm
ZjA1ZjkwODQ5OGM4OTIzODhlYzIyY2NjNjNjM2UxY2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KQEAg
LTM3LDcgKzM3LDYgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgTm90UmVmQ291bnRlZCB7CiAg
ICAgQWRqdXN0VHJhbnNpZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQg
b3JpZ2luKQogICAgIENvbW1pdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpG
bG9hdFBvaW50IG9yaWdpbikKICAgICAKLSAgICBBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0
KHVpbnQ2NF90IGxheWVySUQsIFN0cmluZyBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQog
ICAgIEFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQsIFN0cmluZyBr
ZXkpCiAgICAgCiAgICAgQWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZS5tbQppbmRleCBkZTdkNzI4MDI5MmQwNTBkNzJkMDZhYzk0YWI5MzFjZjIzZmE0
ZThlLi5lZTM1NTI5MmE3MzI1OWUzMTY0ZTdkNTU3NmI1MGU3MTNmOGY2ZDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpAQCAtNDEs
MTEgKzQxLDYgQEAKICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi1zdGF0aWMgTW9ub3RvbmljVGltZSBtZWRpYVRpbWVU
b0N1cnJlbnRUaW1lKENGVGltZUludGVydmFsIHQpCi17Ci0gICAgcmV0dXJuIFdURjo6TW9ub3Rv
bmljVGltZTo6bm93KCkgKyBTZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0K
IHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdLRXhwbGljaXRCZWdpblRpbWVGbGFnID0gQCJXS1Bs
YXRmb3JtQ0FBbmltYXRpb25FeHBsaWNpdEJlZ2luVGltZUZsYWciOwogCiBAaW50ZXJmYWNlIFdL
QW5pbWF0aW9uRGVsZWdhdGUgKCkgPENBQW5pbWF0aW9uRGVsZWdhdGU+CkBAIC02NywyNCArNjIs
NiBAQCAtICh2b2lkKWludmFsaWRhdGUKICAgICBfbGF5ZXJUcmVlSG9zdCA9IG51bGxwdHI7CiB9
CiAKLS0gKHZvaWQpYW5pbWF0aW9uRGlkU3RhcnQ6KENBQW5pbWF0aW9uICopYW5pbWF0aW9uCi17
Ci0gICAgaWYgKCFfbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBo
YXNFeHBsaWNpdEJlZ2luVGltZSA9IFtbYW5pbWF0aW9uIHZhbHVlRm9yS2V5OldLRXhwbGljaXRC
ZWdpblRpbWVGbGFnXSBib29sVmFsdWVdOwotICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwot
Ci0gICAgaWYgKGhhc0V4cGxpY2l0QmVnaW5UaW1lKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGtu
b3cgd2hhdCB0aW1lIENBIHVzZWQgdG8gY29tbWl0IHRoZSBhbmltYXRpb24sIHNvIGp1c3QgdXNl
IHRoZSBjdXJyZW50IHRpbWUKLSAgICAgICAgLy8gKGV2ZW4gdGhvdWdoIHRoaXMgd2lsbCBiZSBz
bGlnaHRseSBvZmYpLgotICAgICAgICBzdGFydFRpbWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1l
KENBQ3VycmVudE1lZGlhVGltZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RhcnRUaW1lID0g
bWVkaWFUaW1lVG9DdXJyZW50VGltZShbYW5pbWF0aW9uIGJlZ2luVGltZV0pOwotCi0gICAgX2xh
eWVyVHJlZUhvc3QtPmFuaW1hdGlvbkRpZFN0YXJ0KF9sYXllcklELCBhbmltYXRpb24sIHN0YXJ0
VGltZSk7Ci19Ci0KIC0gKHZvaWQpYW5pbWF0aW9uRGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmlt
YXRpb24gZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQKIHsKICAgICBpZiAoIV9sYXllclRyZWVIb3N0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRl
eCBhNTkxNzE5YmRhOTBhMzljZGE0MGJhNDE5ODllZGEyZDRlMDYzMDQzLi4yMTBhNjY4MTU4ZTA0
YjY5N2Y3YjJlMWU1MTI2YmUyODQ2MDZmYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcApAQCAtMzk2LDE2ICszOTYsNiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNFcXVpdmFsZW50TGF5ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVyKiBsYXllciwg
R3JhcGhpY3NMYXllcgogICAgIHJldHVybiBsYXllcklEID09IG5ld0xheWVySUQ7CiB9CiAKLXZv
aWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYg
a2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkKLXsKLSAgICBhdXRvIGl0ID0gbV9hbmltYXRp
b25zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zLmVuZCgpKQotICAgICAg
ICBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPigqaXQtPnZhbHVlKS5kaWRTdGFy
dChjdXJyZW50VGltZVRvTWVkaWFUaW1lKGJlZ2luVGltZSkpOwotICAgIAotICAgIGlmIChtX293
bmVyKQotICAgICAgICBtX293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGtl
eSwgYmVnaW5UaW1lKTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlv
bkVuZGVkKGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIGlmIChtX293bmVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FMYXllclJlbW90ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCmluZGV4IDBjMGEwODJiZThmOWI4
YmM3NWYwMzhiMDdlNzVkOTlhOTNlYTI2OWQuLmVhYzdiN2M5MjA0NWYyYzNlMWE1ZWZjMmZlNmY5
YjU2YzgyMmE0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmgKQEAgLTY3LDcgKzY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5LCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5pbWF0
aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBiZWdpblRpbWUpIG92
ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBzZXRNYXNrKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciopIG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKaW5k
ZXggNGY3Yjk4M2NkODBlYTU1NzVkOGIzOTAzMzI1NmRjMDFhMTdjOWFlMC4uOGYwZDExMzdkNDE2
MmNjMjdmMjZjZDQzNDIwMGNiZDM2ZmZiMzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGxheWVyUHJvcGVydHlDaGFuZ2VkV2hpbGVCdWlsZGluZ1RyYW5zYWN0aW9uKFBsYXRmb3Jt
Q0FMYXllclJlbW90ZSYpOwogCiAgICAgLy8gRnJvbSB0aGUgVUkgcHJvY2VzcwotICAgIHZvaWQg
YW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
LCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQg
YW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwg
Y29uc3QgU3RyaW5nJiBrZXkpOwogCiAgICAgdm9pZCB3aWxsU3RhcnRBbmltYXRpb25PbkxheWVy
KFBsYXRmb3JtQ0FMYXllclJlbW90ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5tbQppbmRleCA1MjIwNTVlMmQ5NTY3YzZkZTMxNjg3MzVhYjM4N2Iw
NmZhZDU3MGQ2Li43NjNmOTU0MmI4YTUwMjczMjFiYzI2ODdkN2EyZDA5ZTI3MGRiNWRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtMTc0
LDEzICsxNzQsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OndpbGxTdGFydEFuaW1h
dGlvbk9uTGF5ZXIoUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBsYQogICAgIG1fbGF5ZXJzV2l0aEFu
aW1hdGlvbnMuYWRkKGxheWVyLmxheWVySUQoKSwgJmxheWVyKTsKIH0KIAotdm9pZCBSZW1vdGVM
YXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1Rp
bWUgc3RhcnRUaW1lKQotewotICAgIGF1dG8gaXQgPSBtX2xheWVyc1dpdGhBbmltYXRpb25zLmZp
bmQobGF5ZXJJRCk7Ci0gICAgaWYgKGl0ICE9IG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuZW5kKCkp
Ci0gICAgICAgIGl0LT52YWx1ZS0+YW5pbWF0aW9uU3RhcnRlZChrZXksIHN0YXJ0VGltZSk7Ci19
Ci0KIHZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtl
eSkKIHsKICAgICBhdXRvIGl0ID0gbV9sYXllcnNXaXRoQW5pbWF0aW9ucy5maW5kKGxheWVySUQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
aAppbmRleCBiNzBlZWUyY2Y2OTlmODRiYjFmN2NhNjYwOTVjMDExZmRlNjExMjM4Li5mZmMzZTZl
N2IyY2M2MjA4YWJjNTBkN2FlODEzNTAxMjdiYTRkNmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtOTIsNyArOTIsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0Vmlld0V4cG9zZWRSZWN0KE9wdGlvbmFsPFdlYkNvcmU6OkZs
b2F0UmVjdD4pIG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4gdmll
d0V4cG9zZWRSZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWV3RXhwb3NlZFJlY3Q7
IH0KIAotICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCBsYXll
cklELCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpIG92ZXJyaWRl
OwogICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwg
Y29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGV4
cG9zZWRDb250ZW50UmVjdCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDI2YzM3NDc2YzdiMDFk
ZWY4YjQ2ZjFjZGIxMDNmZjg1OWFkYWEzMWQuLmE1M2MyZTEzMDNmMmM0ZjA4NzY5YmYyN2I2NTI3
MDNlYmZhMDQyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0KQEAgLTIyMiwxMSArMjIyLDYgQEAgdm9pZCBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCkKICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKIH0K
IAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6YWNjZWxlcmF0ZWRBbmltYXRpb25E
aWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGlt
ZSBzdGFydFRpbWUpCi17Ci0gICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5hbmltYXRpb25E
aWRTdGFydChsYXllcklELCBrZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVy
SUQsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+
YW5pbWF0aW9uRGlkRW5kKGxheWVySUQsIGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCBl
MjNiODQwNjhmMjQwY2UyMWJiYWQxNzA0YjllMzZjN2RhZTQxZGViLi4xYmNhN2JmYTg3YmNmMzkw
OWE0Nzc2ZWY5NDk5NWYwZTE5YmEwMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTUyLDcg
KzUyLDYgQEAKICNkZWZpbmUgV2ViS2l0SmF2YUVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0
SmF2YUVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdEphdmFTY3JpcHRFbmFibGVkUHJlZmVyZW5jZUtl
eSBAIldlYktpdEphdmFTY3JpcHRFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0TWFy
a3VwRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZCIK
LSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0
V2ViQW5pbWF0aW9uc0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDb21wb3Np
dGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zQ29t
cG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNNdXRh
YmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zTXV0
YWJsZVRpbWVsaW5lc0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkIgpAQCAtMjA1LDcgKzIwNCw2IEBACiAjZGVmaW5lIFdlYktpdENvbG9y
RmlsdGVyRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDb2xvckZpbHRlckVuYWJsZWQiCiAj
ZGVmaW5lIFdlYktpdFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGVQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIKICNkZWZpbmUg
V2ViS2l0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEZldGNo
QVBJS2VlcEFsaXZlRW5hYmxlZCIKLSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkIgogI2RlZmluZSBXZWJLaXRDU1NTaGFkb3dQYXJ0c0VuYWJsZWRQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0Q1NTU2hhZG93UGFydHNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRMYXlv
dXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJL
aXRMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCIKICNkZWZpbmUgV2Vi
S2l0V2ViU1FMRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJTUUxFbmFibGVkIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5k
ZXggNTdiNjQ4NmU5OTM3ZmMxYmRhYmVhYmUzMGFjYTFiMjdhOTYwOWI1Yy4uYWRhZGU5NzAwNDE2
N2E4NGZjNWVmMWU0ODg4MDYwZDJlMTkzMmNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC02MzYsNyArNjM2LDYgQEAgKyAo
dm9pZClpbml0aWFsaXplCiAgICAgICAgIEBOTywgV2ViS2l0RGlhbG9nRWxlbWVudEVuYWJsZWRQ
cmVmZXJlbmNlS2V5LAogICAgICAgICBATk8sIFdlYktpdEhpZ2hsaWdodEFQSUVuYWJsZWRQcmVm
ZXJlbmNlS2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZFByZWZlcmVuY2VLZXksCi0gICAgICAgIEBZRVMsIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRMYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBF
TkFCTEUoV0VCR0wyKQpAQCAtNjU4LDcgKzY1Nyw2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAg
ICAgICBATk8sIFdlYktpdERvd25sb2FkQXR0cmlidXRlRW5hYmxlZFByZWZlcmVuY2VLZXksCiAj
ZW5kaWYKICAgICAgICAgQE5PLCBXZWJLaXREaXJlY3RvcnlVcGxvYWRFbmFibGVkUHJlZmVyZW5j
ZUtleSwKLSAgICAgICAgQFlFUywgV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNl
S2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRTeW50aGV0aWNFZGl0aW5nQ29tbWFuZHNFbmFibGVk
UHJlZmVyZW5jZUtleSwKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0zMTc2LDE2ICsz
MTc0LDYgQEAgLSAodm9pZClzZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkOihCT09M
KWZsYWcKICAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdENTU09NVmll
d1Ntb290aFNjcm9sbGluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAotLSAoQk9PTCl3ZWJB
bmltYXRpb25zRW5hYmxlZAotewotICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5Oldl
YktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KLS0gKHZvaWQpc2V0
V2ViQW5pbWF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtzZWxmIF9zZXRCb29sVmFs
dWU6ZmxhZyBmb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsK
LX0KLQogLSAoQk9PTCl3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQKIHsK
ICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ29t
cG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKQEAgLTMyNDYsMTYgKzMyMzQs
NiBAQCAtICh2b2lkKXNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOihCT09MKWZsYWcKICAg
ICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9CiAKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5Oldl
YktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0K
LQotLSAodm9pZClzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOihCT09MKWZs
YWcKLXsKLSAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0KLQogLSAoQk9PTClp
bnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1
ZUZvcktleTpXZWJLaXRJbnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWRQcmVmZXJlbmNlS2V5XTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oCmluZGV4IDczMGViNmJmMWYyZDY3YmY0NzEyNzBjOTU5NWNiZDJkM2M5ODRk
MDUuLmI5ODdjOWMyODhkN2I1MzA3MzQ1MzYzYTljODI0ODlkYWNlMjEzNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaApAQCAtNTY0LDkgKzU2NCw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXND
YWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAtICh2b2lk
KXNldERpcmVjdG9yeVVwbG9hZEVuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpZGlyZWN0b3J5
VXBsb2FkRW5hYmxlZDsKIAotLSAodm9pZClzZXRXZWJBbmltYXRpb25zRW5hYmxlZDooQk9PTClm
bGFnOwotLSAoQk9PTCl3ZWJBbmltYXRpb25zRW5hYmxlZDsKLQogLSAodm9pZClzZXRXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpd2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOwogCkBAIC01ODUsOSArNTgyLDYg
QEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJu
YWxOb3RpZmljYXRpb24gV0VCS0lUX0RFUFIKIC0gKHZvaWQpc2V0TW9kZXJuTWVkaWFDb250cm9s
c0VuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ7
CiAKLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDooQk9PTClm
bGFnOwotLSAoQk9PTCl3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOwotCiAtICh2
b2lkKXNldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDooQk9PTClmbGFnOwogLSAoQk9PTClp
bnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCA0ZWMwMjM3YTc0YzdjNDlkZGU4Mjg1OWNlNTg5ZTE3NGNk
NWU5NDA1Li5jZTRjYjNkNGMwNjgxMTg5NjI2MmNhODk1MjA2MzdkMTNlNTFlYTQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xMzIsNyArMTMyLDYg
QEAKICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQmFja0ZvcndhcmRDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2Fy
ZENvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZVN0b3JhZ2VQcm92aWRlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KQEAgLTMzMzQsNyAr
MzMzMyw2IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilw
cmVmZXJlbmNlcwogCiAgICAgc2V0dGluZ3Muc2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVu
YWJsZWQoW3NlbGYgaW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWRdKTsKICAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKFtwcmVmZXJlbmNlcyBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZF0pOwotICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZF0pOwogCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5zZXRDYWNoZUFQSUVuYWJsZWQoW3ByZWZlcmVuY2VzIGNhY2hlQVBJRW5hYmxlZF0p
OwogCkBAIC0zMzU4LDcgKzMzNTYsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdl
YlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKICAgICBzZXR0aW5ncy5zZXREb3dubG9hZEF0dHJp
YnV0ZUVuYWJsZWQoW3ByZWZlcmVuY2VzIGRvd25sb2FkQXR0cmlidXRlRW5hYmxlZF0pOwogI2Vu
ZGlmCiAKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdl
YkFuaW1hdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zRW5hYmxlZF0pOwog
ICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0
aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25z
Q29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxl
ZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkXSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZl
cmVuY2VzUHJpdmF0ZS5pZGwgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCmluZGV4IDlhODc1ZDQ3OWU3YmZhZDczNjFhNmYyZjhh
NGQzMTkzMzdlZTU3ZjIuLmIwYmQwNWYyNTA1ODJlMTQ3YTZhN2ZiZGEzYjZkYmY0YjZhYjYwODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZl
cmVuY2VzUHJpdmF0ZS5pZGwKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNl
cy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbApAQCAtMTgzLDE2ICsxODMsMTIgQEAgaW50ZXJm
YWNlIElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzIDogSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTIKICAg
ICBIUkVTVUxUIHNldEN1c3RvbUVsZW1lbnRzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7CiAg
ICAgSFJFU1VMVCBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wq
IGVuYWJsZWQpOwogICAgIEhSRVNVTFQgc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW2lu
XSBCT09MIGVuYWJsZWQpOwotICAgIEhSRVNVTFQgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqIGVuYWJsZWQpOwotICAgIEhSRVNVTFQgc2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7CiB9CiAK
IFt1dWlkKEY5NTgyRDcyLTYzNDgtNDVCMS1BQjA5LTM5RTMzNDU5QjVCOSldCiBpbnRlcmZhY2Ug
SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTQgOiBJV2ViUHJlZmVyZW5jZXNQcml2YXRlMwogewogICAg
IEhSRVNVTFQgc2V0QXBwbGljYXRpb25JZChbaW5dIEJTVFIgYXBwbGljYXRpb25JZCk7Ci0gICAg
SFJFU1VMVCB3ZWJBbmltYXRpb25zRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqKTsKLSAgICBI
UkVTVUxUIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKICAgICBI
UkVTVUxUIHVzZXJUaW1pbmdFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwogICAgIEhSRVNV
TFQgc2V0VXNlclRpbWluZ0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQpOwogICAgIEhSRVNVTFQg
cmVzb3VyY2VUaW1pbmdFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCAyYTIx
MjFhZGI5Njg2OTg0MTIxYzBlNGJhOGRhZmZjYTdiY2M2Y2FiLi45MjE3Yjg1ZTQ5N2RhMTNkYTc2
ODIyOTViMmRlNzYyYTJkZTcxNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApAQCAtMTg4LDE0ICsxODgsMTAgQEAKIAogI2Rl
ZmluZSBXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktp
dE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIgogCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlv
bnNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWQiCi0KICNk
ZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVy
ZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIgog
CiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZl
cmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKIAot
I2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5j
ZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIKLQogI2RlZmlu
ZSBXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkg
IldlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkIgogCiAjZGVmaW5lIFdl
YktpdFVzZXJUaW1pbmdFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0VXNlclRpbWluZ0VuYWJs
ZWQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggOWQ5
YjBkZmUxMTliY2YxOGJlNDAzNTYxMjQ1NmViNmE4M2ViYWVjOC4uZjc0MjZhOTU2M2Q5ZmRiYmJh
NTc2NGIxNjdjNWMwMWJhZDFiMzg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VzLmNwcApAQCAtMzExLDE0ICszMTEsMTAgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6
aW5pdGlhbGl6ZURlZmF1bHRTZXR0aW5ncygpCiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShk
ZWZhdWx0cywgQ0ZTVFIoV2ViS2l0Q3VzdG9tRWxlbWVudHNFbmFibGVkUHJlZmVyZW5jZUtleSks
IGtDRkJvb2xlYW5GYWxzZSk7CiAKLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywg
Q0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVh
blRydWUpOwotCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktp
dFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBr
Q0ZCb29sZWFuRmFsc2UpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENG
U1RSKFdlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VL
ZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVs
dHMsIENGU1RSKFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJl
bmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKLQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRl
ZmF1bHRzLCBDRlNUUihXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFBy
ZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFs
dWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFVzZXJUaW1pbmdFbmFibGVkUHJlZmVyZW5jZUtleSks
IGtDRkJvb2xlYW5GYWxzZSk7CkBAIC0yMTM4LDIwICsyMTM0LDYgQEAgSFJFU1VMVCBXZWJQcmVm
ZXJlbmNlczo6bW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkK
ICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQotewotICAgIGlm
ICghZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqZW5hYmxlZCA9IGJv
b2xWYWx1ZUZvcktleShXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJl
ZmVyZW5jZUtleSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5j
ZXM6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoQk9PTCBlbmFibGVkKQot
ewotICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkUHJlZmVyZW5jZUtleSwgZW5hYmxlZCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNV
TFQgV2ViUHJlZmVyZW5jZXM6OmZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZChfT3V0XyBCT09MKiBl
bmFibGVkKQogewogICAgIGlmICghZW5hYmxlZCkKQEAgLTIzNDAsMjAgKzIzMjIsNiBAQCBIUkVT
VUxUIFdlYlByZWZlcmVuY2VzOjpzZXRBcHBsaWNhdGlvbklkKEJTVFIgYXBwbGljYXRpb25JZCkK
ICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5p
bWF0aW9uc0VuYWJsZWQoQk9PTCBlbmFibGVkKQotewotICAgIHNldEJvb2xWYWx1ZShXZWJLaXRX
ZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBT
X09LOwotfQotCi1IUkVTVUxUIFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zRW5hYmxlZChf
T3V0XyBCT09MKiBlbmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKLSAgICAqZW5hYmxlZCA9IGJvb2xWYWx1ZUZvcktleShXZWJLaXRXZWJBbmlt
YXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVT
VUxUIFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0Vu
YWJsZWQoQk9PTCBlbmFibGVkKQogewogICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRp
b25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IDI0MzdiMGU3NjI4OTUw
NmMyNjQwNDg4NmJkMmMwM2Y1ODMyNTNjNTEuLjIxMjkwNWNiMWJhNjAwOTQwMzg2OTUzOTE3OGEz
ZmVhNzAzYTM4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZl
cmVuY2VzLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaApA
QCAtMjM2LDEzICsyMzYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHNldEN1c3RvbUVsZW1lbnRzRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8g
Qk9PTCopOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRNb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZChCT09MKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChfT3V0XyBCT09MKik7
Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoQk9PTCk7CiAgICAgCiAgICAgLy8gSVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZTQKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QXBwbGlj
YXRpb25JZChCU1RSKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2Vi
QW5pbWF0aW9uc0VuYWJsZWQoX091dF8gQk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdXNlclRpbWluZ0VuYWJsZWQoX091dF8gQk9PTCop
OwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRVc2VyVGltaW5nRW5h
YmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVzb3Vy
Y2VUaW1pbmdFbmFibGVkKF9PdXRfIEJPT0wqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAKaW5kZXggYjZhMjgzYzkzZTg4MmEzZTIxZDQxNjhjNGIzMWNiODQ5ZDE1ZDFhYy4uMmUyNWJl
OTZiMmFkNDViNWY0ZTVlMzE4OGQ2MmMxNGUwMmU5OWQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKQEAgLTUyNDQsMTEgKzUyNDQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlm
eVByZWZlcmVuY2VzQ2hhbmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAg
ICAgIHJldHVybiBocjsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCEhZW5hYmxlZCk7CiAKLSAgICBociA9
IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0VuYWJsZWQoJmVuYWJsZWQpOwotICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZCghIWVuYWJsZWQpOwot
CiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPndlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25z
RW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBo
cjsKQEAgLTUyNTksMTEgKzUyNTQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVu
Y2VzQ2hhbmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVy
biBocjsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdl
YkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0gICAgaHIg
PSBwcmVmc1ByaXZhdGUtPndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoJmVuYWJs
ZWQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKCEhZW5hYmxlZCk7Ci0KICAgICBociA9IHByZWZzUHJpdmF0ZS0+Q1NT
Q3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlM
RUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGZhNzA5NDdjMzgzODJmYzAzMGMyMWFlN2U2YmUyNWUx
YjI2ZWUzZS4uODMzMDc1MjFjODg0MmIyMDhlMjhkZmNlMzNjMjQzNWFmNmNiZWZjNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB3ZSBub3cgaGF2ZSBhIHNpbmds
ZSBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVudGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJs
ZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5lIGFyZQorICAgICAgICBub3QgbmVlZGVkIGFueW1v
cmUgYW5kIGFyZSBub3cgcmVtb3ZlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RP
cHRpb25zLmNwcDoKKyAgICAgICAgKFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyk6CisgICAgICAg
IChUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGVuYWJsZUV4cGVyaW1lbnRh
bEZlYXR1cmVzKToKKyAgICAgICAgKHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAg
IChlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNl
c0ZvclRlc3RPcHRpb25zKToKKwogMjAyMC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0ZsYXRwYWsgU0RLXSBDaGVycnktcGljayBNZXNh
IHVzZS1hZnRlci1mcmVlIGZpeGVzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0T3B0aW9ucy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKaW5k
ZXggMDY0NTdkZmRmZGVlYTUwMzA0ZTMzMmQwYTMxODJmNWFiYTRhZjgwNS4uMGRiZmFjOWYzYzg3
NDk0MmNkN2IxZGVmMTQwODg0ODQzMmU0MjY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE9wdGlvbnMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcApAQCAtMTI2LDggKzEyNiw2IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiAgICAg
ICAgICAgICBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5T
dWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikKICAgICAgICAgICAgIGFsbG93Q3Jvc3NP
cmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOnNlbGVjdGlvbkFjcm9z
c1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIikKICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKQEAgLTE2Nyw2
ICsxNjUsNSBAQCBUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBh
dGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdQogYm9vbCBUZXN0T3B0aW9uczo6d2Vi
Vmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvdGhlcikgY29u
c3QKIHsKICAgICByZXR1cm4gb3RoZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2Vk
V2ViVmlldwotICAgICAgICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnMKLSAgICAg
ICAgJiYgb3RoZXIuZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uID09IGVuYWJsZVdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbjsKKyAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9
PSBqc2NPcHRpb25zOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9w
dGlvbnMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKaW5kZXggYzVjOGM4
NTk5MmUxY2ZmMzc1MDgyMWM4MWZmMjg0M2RkMDllYjk5Ny4uZDc2NjgxN2I3MDViNDYyNTBkMmVm
ZjU1MzM0NmE3ZGQ5MzdlYjM2NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dE9wdGlvbnMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCkBAIC0y
OSw3ICsyOSw2IEBACiAKIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVBdHRh
Y2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb24geyB0cnVlIH07CiAgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBm
YWxzZSB9OwogICAgIGJvb2wgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9Owog
ICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggNDYzYzliOTJlZWI1ZWVlOTdhMWE3MjBk
ZWY4NWZjNjBkNDg3ODUzYy4uNjkxNTdjNDMwMDFjNTQ0MTQzMGIxMTE3Y2RhM2FjYzQ3MDI3NGU4
OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtODE0
LDcgKzgxNCw2IEBAIHN0YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFdlYlBy
ZWZlcmVuY2VzKiBwcmVmZXJlbmNlcykKICAgICBbcHJlZmVyZW5jZXMgc2V0TWVkaWFQcmVsb2Fk
aW5nRW5hYmxlZDpZRVNdOwogICAgIC8vIEZJWE1FOiBJbnB1dEV2ZW50cwogICAgIFtwcmVmZXJl
bmNlcyBzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQ6WUVTXTsKLSAgICBbcHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVm
ZXJlbmNlcyBzZXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZDpZRVNdOwpAQCAt
OTc5LDcgKzk3OCw2IEBAIHN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlv
bnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgcHJlZmVyZW5jZXMuaXNTZWN1cmVD
b250ZXh0QXR0cmlidXRlRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlSXNTZWN1cmVDb250ZXh0QXR0
cmlidXRlOwogICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9uczsKICAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMu
d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlV2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uOwogICAgIHByZWZlcmVuY2VzLmNvbG9yRmlsdGVyRW5hYmxl
ZCA9IG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXI7CiAgICAgcHJlZmVyZW5jZXMuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXM7CiAgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlV2ViR1BVOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHAKaW5kZXggYTcyNzM0ZjZmNGZhZjZhZGU5NTdjYzNjYjM0M2Q1NjdlNDg3ZDMzZS4u
ZDc0NzEzMWY5MmJkZmRmYmMzN2E5MWEzZjdlOGZiYjJmNDZiMTY1OSAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC03OTYsNyArNzk2LDYgQEAgc3Rh
dGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoSVdlYlByZWZlcmVuY2VzKiBwcmVm
ZXJlbmNlcykKICAgICBwcmVmc1ByaXZhdGUtPnNldFZpc3VhbFZpZXdwb3J0QVBJRW5hYmxlZChU
UlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldENTU09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQo
VFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRSZXNpemVPYnNlcnZlckVuYWJsZWQoVFJVRSk7
Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChUUlVFKTsKICAgICBw
cmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChU
UlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVz
RW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkKFRSVUUpOwpAQCAtOTA5LDcgKzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNl
dFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNl
cywgY29uc3QKIHsKICAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTg+IHByZWZzUHJp
dmF0ZSB7IFF1ZXJ5LCBwcmVmZXJlbmNlcyB9OwogCi0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVu
YWJsZWQob3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+
c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQob3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKICAg
ICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKG9wdGlvbnMuZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTlhZWQ3NjQ5YjQ4ZDg5NGFmZmE5NGEw
NWIyNGRiZDg4ODQyMWMxYS4uNjIzMmVlMjU2MmYxZjliZjhlMjlmN2VmNTA5ZmQyMzlkNTc3N2E1
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmUgYW55IHVzZSBvZiBub3ctcmVtb3ZlZCB0ZXN0aW5nIG1ldGhvZHMgYW5kIHNvbWUgcnVudGlt
ZSBmbGFncyBmcm9tIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIGFuaW1hdGlvbnMvbGVnYWN5
LWVuY29kaW5nLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIGFuaW1hdGlvbnMvcmVz
b3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgIChwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudCk6CisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9u
cy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWw6CisgICAgICAgICogaW1wb3J0ZWQvYmxp
bmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWlu
c2lkZS1pZnJhbWUtaW5uZXIuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy9i
YWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2Js
ZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2JvcmRlci1y
YWRpdXMtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAtcGF0aC1w
YXRoLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRy
YW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvZGVsYXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9mbGV4LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZm9udC1mYW1p
bHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9mcmFtZXMt
dGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQt
YWxsLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9sb25naGFuZC12cy1z
aG9ydGhhbmQtaW5pdGlhbC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21hc2stdHJhbnNp
dGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93
LXN0eWxlcy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRy
YW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sOgor
ICAgICAgICAqIHRyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvc3Zn
LXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmct
dHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFu
c2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0
Y2guaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRj
aC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRl
cmluZy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJh
bnNmb3JtLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250
ZW50Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVs
YXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlv
bi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5odG1s
OgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVw
dGlvbi1kaXNwbGF5LW5vbmUuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJh
dGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWw6Cisg
ICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1y
ZW1vdmluZy1wcm9wZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZXNzaW5n
LWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sOgor
ICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5p
c2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWw6CisgICAgICAgICogd2ViYW5p
bWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24t
cmVtb3ZhbC1jcmFzaC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlv
bi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sOgorICAg
ICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbDoKKyAgICAgICAgKiB3ZWJh
bmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWw6
CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1i
eS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvc2V0dGlu
Zy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWw6CisgICAgICAg
ICogd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZp
YS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbDoKKwogMjAyMC0wOS0xNSAgUm9iIEJ1
aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEZpeCBsYXp5IGltYWdlIGxvYWQgcGFp
bnRpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5n
LXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5j
b2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXggNDAyZjk4ZWEzMTE1YWExZDc3NmZhZjg4
ZWVkYjkxYTI4NzUxZjk3My4uMDhlYmM0NGM0ZDE2ZGE2OTI1ZDY1ZWRjMTMxOTRkOGFkMzI1NjQ3
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGlt
aW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5j
b2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRt
bD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD1mYWxzZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4K
IDxoZWFkPgogICAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMv
cmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMgYi9MYXlvdXRUZXN0cy9hbmltYXRp
b25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCmluZGV4IDE4YTVhMDEyOWZm
N2YyYWUyNGJkMzNlMzE5ZTYwNmY1NzlhYTQxOWUuLjZkZTA4ZDM4NTUxODQ0MzY3MTE3ZjAwNzIy
NTcwOTAzZWFmNWJjZmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3Vy
Y2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9u
cy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcwpAQCAtNTE0LDExICs1MTQsNiBA
QCBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVDYWxsYmFjayhleHBlY3RlZCwgaW5kZXgpCiAK
IGZ1bmN0aW9uIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGFuaW1hdGlvbk5hbWUsIHRp
bWUsIGVsZW1lbnQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2ZW4ndCBvcHRlZCBpbnRvIENTUyBBbmlt
YXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgYXMgV2ViIEFuaW1hdGlvbnMsIHVzZSB0aGUgaW50
ZXJuYWwgQVBJLgotICAgIGlmICgnaW50ZXJuYWxzJyBpbiB3aW5kb3cgJiYgIWludGVybmFscy5z
ZXR0aW5ncy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybiBpbnRlcm5hbHMucGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoYW5pbWF0aW9uTmFt
ZSwgdGltZSwgZWxlbWVudCk7Ci0KLSAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgV2ViIEFuaW1h
dGlvbnMgQVBJLgogICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnMo
KTsKICAgICBmb3IgKGxldCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykgewogICAgICAgICBpZiAo
YW5pbWF0aW9uIGluc3RhbmNlb2YgQ1NTQW5pbWF0aW9uICYmIGFuaW1hdGlvbi5hbmltYXRpb25O
YW1lID09IGFuaW1hdGlvbk5hbWUpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtl
eWZyYW1lLmh0bWwKaW5kZXggYzFjNmZkNjcyYzRkMGVmNzlmOGJlN2JhODgxOTQ5ZmIyNmQ5NGM5
OS4uYTVjZTM0MmQ1MmViZmIwMDVmZDA0MWI3ODhmYmIxMTZiMTY3ZjZkZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25l
LWtleWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5z
aW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgSFRNTD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZUEUgSFRNTD4K
IDxzY3JpcHQ+CiBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRp
b25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1l
LWlubmVyLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNv
dXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQxY2JjOGJmYzc4NDNjM2JiOTg5
MzJmYzllYzk5NzNiYzUwNzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRpb25zL3Jlc291cmNl
cy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1lLWlubmVyLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08IURPQ1RZUEU+Ci08aHRtbD4KLTxoZWFk
PgotPHN0eWxlPgotICAgICNiYWNrZ3JvdW5kIHsKLSAgICAgICAgd2lkdGg6IDIwMHB4OwotICAg
ICAgICBoZWlnaHQ6IDIwMHB4OwotICAgICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47Ci0gICAgfQotICAgIC5vdmVybGF5IHsKLSAgICAgICAgd2lk
dGg6IDUwcHg7Ci0gICAgICAgIGhlaWdodDogNTBweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgyNTUsIDI1NSwgMjU1LCAxKTsKLSAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBv
cGFjaXR5IDFzOwotICAgIH0KLQotICAgICNwb3B1cCB7Ci0gICAgICAgIHdpZHRoOiAyMHB4Owot
ICAgICAgICBoZWlnaHQ6IDIwcHg7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKLSAg
ICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwotICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13
ZWJraXQtdHJhbnNmb3JtIDFzOwotICAgIH0KLQotICAgIC50cmFuc3BhcmVudCB7Ci0gICAgICAg
IG9wYWNpdHk6IDA7Ci0gICAgfQotCi0gICAgW2hpZGRlbl0gewotICAgICAgICBkaXNwbGF5OiBu
b25lOwotICAgIH0KLQotICAgIC5vdmVybGF5LnRyYW5zcGFyZW50IC5wYWdlIHsKLSAgICAgICAg
dHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDBweCk7Ci0gICAgfQotCi08L3N0eWxlPgot
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KLSAgICBmdW5j
dGlvbiBydW5UZXN0KCkKLSAgICB7Ci0gICAgICAgIHZhciBzb2xpZF9jb2xvcl9vdmVybGF5ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvbGlkX2NvbG9yX292ZXJsYXkiKTsKLSAgICAgICAg
c29saWRfY29sb3Jfb3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwotCi0gICAgICAg
IHZhciBwb3B1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cCIpOwotICAgICAgICBw
b3B1cC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwotCi0gICAgICAgIC8vIE5PVEU6IFRoaXMg
aXMgYSBoYWNreSB3YXkgdG8gZm9yY2UgdGhlIGNvbnRhaW5lciB0byBsYXlvdXQgd2hpY2gKLSAg
ICAgICAgLy8gd2lsbCBhbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSB3ZWJraXQgdHJhbnNpdGlvbi4K
LSAgICAgICAgLy8gU2VlIGNyYnVnLmNvbS8zMjQ2ODUKLSAgICAgICAgc29saWRfY29sb3Jfb3Zl
cmxheS5zY3JvbGxUb3A7Ci0gICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXkuY2xhc3NMaXN0LnJl
bW92ZSgndHJhbnNwYXJlbnQnKTsKLQotICAgICAgICAvLyBkdW1wIHRoZSBwaXhlbCBpbiB0aGUg
bWlkZGxlIG9mIHRoZSB0cmFuc2l0aW9uCi0gICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
Ci0gICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLmZvcmNlQ29tcG9zaXRpbmdVcGRhdGUoZG9j
dW1lbnQpOwotICAgICAgICAgICAgd2luZG93LmludGVybmFscy5wYXVzZUFuaW1hdGlvbnMoMC41
KTsKLSAgICAgICAgfQotICAgICAgICB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gdHJpZ2dlclBpeGVsUmVzdWx0cygpCi0gICAgewotICAgICAgICBwYXJlbnQu
cG9zdE1lc3NhZ2UoIlRyaWdnZXJQaXhlbFJlc3VsdHMiLCAnKicpOwotICAgIH0KLQotICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgcnVuVGVzdCwgZmFsc2UpOwotPC9zY3JpcHQ+
Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXYgaWQ9ImJhY2tncm91bmQiPgotICAgIDxkaXYgaWQ9InNv
bGlkX2NvbG9yX292ZXJsYXkiIGNsYXNzPSJvdmVybGF5IHRyYW5zcGFyZW50IiBoaWRkZW49dHJ1
ZT4KLSAgICAgICAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJwYWdlIiBoaWRkZW49dHJ1ZT48L2Rp
dj4KLSAgICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9u
cy5odG1sCmluZGV4IDYwMWNkNWE4N2YyMDQxMDYyZjFhOWQwOTgwMDljNTQ3ZjUyZjM0NWUuLmQ5
MTRmY2JiZTgxZDQ3Y2RiYjFhZWViYWNiNzk1YTM3OTMxYTRhMWIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYTgzN2UwNTdk
YmMxMThjNzRhYmJiNjAzZWVjNTU2ZTdjODg3ZTVhOC4uYmE0MDBjYWM5ZWJmZTFjYTEwZTI5MGE3
OThlOTlkNzJiMzQ4ODBiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFj
a2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Jh
Y2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwK
aW5kZXggODk3Y2I0Nzg5MGVjZjQ4ZTFmZDAwNTg4ZDRiODhjOTE3MmIyNjEwMy4uYTViZmEyN2Qz
YWQzMjE5OTIwODkyMTYxNTMwYjVkNzNlMTlkNTY5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1s
PgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Ym9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9i
b3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbAppbmRleCBiOGEzZmI1M2U3YmQ2YmIwNmQxOTlk
OTU1ZTQwM2M5MTM3MDdkNTg5Li41NjNiYTljOGZmNGY4YWMyZGIzZDUxNGFiMWIzNjE2MjRjY2Uz
MzBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRy
YW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVz
LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1s
CmluZGV4IGZmMjNmYTA0NTEyM2VkMzEwNTdlODI3ZDcxYWFkYzk4OGQyMTJkNzguLmMxZmFhNWNm
NDIxMjE4MDM1YjQxMGUyYWVjMmJkNjIzYjc0MGE3NmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGI1NWVkZmI3ZWE4NDU1NWQ4
YWM0NGJjYWZmY2E4NDBjNzU3OGVmNTYuLjVlNjY0NGE4ODRmY2NkNjA3YmI3NjBiMTk4ZDk5MGY3
MWUyOWFmZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10
cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10
cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0bWwKaW5kZXggM2M3ZTI5
ZjE5NzAxMmRmZGVhNDMwNDNjYzA0MmE3MjFkZTA4MTNlMS4uZmRlMWYxNzNhYmM5NmI5MWFhNDZi
ZWY5N2E4ZjkwOWVjZjdkMDFiOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y2xpcC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10
cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKaW5k
ZXggMzNjNTk4MGU2ODdhYjNlMDJlN2UzZjI1Nzc2Yzg3M2ZkNWRlOGFiOS4uYTQ5MmU3MTMzOTQ0
MDBjMjZkMzQ3ZTg4YWUxZDEzYzMxN2UzZGM3ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlv
bi1wcmVtdWx0aXBsaWVkLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbAppbmRleCBjNzNmZDRhYTgzY2ZhZDk1YjUwYjZlNjM1
OTFlOWFlNjc5ODk1NmRkLi41N2M2M2VjOWE4YzFhZTA3ZGFkOGMzNzg1ZGYzYjgxNDRiOTI4ZjIw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXBy
ZW11bHRpcGxpZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgog
PGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0
aW9uLXJvdW5kaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0
aW9uLXJvdW5kaW5nLmh0bWwKaW5kZXggNmU3NTZiZjMzNzgzZmQ3MjFmMzNhNjdjOGZiZDZmMjhm
MTU1ZTViMC4uY2FhYTExNTc5ZjliMGRmODZlMDgxOTRjMGQ5MGYxZGRmOGI1MDMxNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRp
bmcuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKaW5kZXgg
NzZlOWRiMjZhM2IxNGQ0YTM4YTNjZGFmMDBlZjY2YmZmOGVkZGI2NC4uYjhkNzBhMjc5MzUxNTVi
ZWFiMjhlNzg1Y2FlZjhmMjUzOGRjOTU2YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9z
cy1mYWRlLWJvcmRlci1pbWFnZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3Mt
ZmFkZS1ib3JkZXItaW1hZ2UuaHRtbAppbmRleCA0ZGJkZjdhNmIxM2Y4YWVlMDNhNzc4OWIzNjhj
MTA4ZTNkMWE0ZGRmLi44N2RjMDA3ZWRmNWZiNzZmZjE0NTFjYTlhZmY4Y2I5Y2FhYTQxODk1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFn
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWlt
YWdlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCmluZGV4
IGI3NmViNjVhZWQzM2M4NDZjNGRjZWM0NWI5N2Q1NDFhMDM4Y2U3YmEuLjc0NzRmNjZkMTE2YzZm
MmEyM2EyYWY2MzNhNTA0NGUyOGMyYjc2NzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5
cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVl
IG92ZXJmbG93OiBDb2xvcnM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCmluZGV4IDY2ZmViYWNm
Zjk3ZTQyYTY3M2IxZGE1OWFhYzBmNjM3MWY5ZWM1YWQuLjFiNWRkYWZkZjY0OGQ5ZjEwZjBlYzhm
MjBkOTQ5YmEzNjE2ZmU4NGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1s
PgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZs
b3c6IExlbmd0aHM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCmluZGV4IGE5OWE0ZGJhNzM2YWZi
MmY5NTgwNWFlODg4NWUwMmJlMGMwYTczZjguLjBiY2NhODhlODcxN2RhZGY1OWUzY2ViZDA2OTE5
Y2VhYzRhMmE3NmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJl
emllci1vdmVyZmxvdy1zaGFkb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5
cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0
bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFNo
YWRvd3M8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKaW5kZXggNzIwMjQ2ODFiM2Mz
YTdjZGQxOWEyOGY0YzI4MzhlNjA0YWQ1YjdjYi4uMzU1NTMwMzlmYzlkYThkYjZlZWEzMjk1NmQ5
MWFjMWU2NDJjYTFkMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUg
aHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92
ZXJmbG93OiBTVkcgTGVuZ3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKaW5kZXgg
NjYwOTcyNTM0ZGM2NjJiYzNiODBmZjc2NDkzNmZmYjRhZGE1ZjI2OC4uNjUyOTExMmIxMWQ2NGYx
ZWM0MGFiYWM1NzVhNjg2ODE1NDA1ZDU3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemll
ciB2YWx1ZSBvdmVyZmxvdzogVHJhbnNmb3JtczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA3OTgzZmRj
ZWQyMjYzNzBlMWEzNDQ5MDEzZTBjOTg1ZTBkNmUyODZjLi4zNTA4N2MzNjRhM2YxYzk4ZTQ0MGQ5
YTc5OWUwYmRkMGNiZjAwMGFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9k
ZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKaW5kZXggOTljMzFlYTg3ZGEw
OTFkNWQ2N2RhNTlmMTFiM2YyNjkzYTBmZjRjMC4uM2EwMmI2Mjc5ODEwNWEzNmQ2MGVlYTE4MjFh
ZjcwMzgwZWNjZWEyZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXku
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlv
bnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbApp
bmRleCA5ZmM0NjYwMzdhNTM5NTJmZGI5MDBkYzBlOTYzZjQzNTJlOTE2OTQ1Li42MWY0NTZhY2U5
MTczMGU3YjI0Y2ZmNmM1NDE4ZjcyMDVkNzUzY2Q3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvZmxleC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1
cmluZy10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWls
eS1kdXJpbmctdHJhbnNpdGlvbi5odG1sCmluZGV4IGNkY2QyMGYxNTc0OTM3ZDlhYmNiNzY2ZjJl
OTIwN2RjNzhmZGNjNzguLjAzZjk1MmRhMWI3MzNlODQ5NjkxNGM1YTE3NjlhODAxN2JjNmM4ZmYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10
cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHkt
ZHVyaW5nLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1
bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0
aW9uLmh0bWwKaW5kZXggMzBmZWNjNmQ1MWQ0YzA2ZTY0ZWM3YWVmMDAwOTg1MDQ2YmI1ZjA4YS4u
ZThiMTYyMTBlYTc2NTdlNDcwYjBkYTI4MTQwMzlmODU1MjJhNDMwOSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbAppbmRleCA3ZDQ3M2U5
MTIxNDY1ODNmODExMDkzZGUyOTdiZTNhYWY1MzhiYjQ4Li45ZTY2Y2Q0ZjkyNjE0ZTFlNTA3ZjJj
ZmE2NDIzZjdkMmU2MTAwOWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9p
bnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9u
Z2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKaW5kZXggNjA5OTMzZjYwNGE3MTUy
OGNlZjQzMWE3YmE0OTU4YmE3MmU0Nzk1Zi4uMjAyZTY0ZDY0NGRmNWM4ZDVmNWU0Zjk5MTg3YjQ3
N2EzYThmYmQxZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQt
dnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9s
b25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9u
cy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCmlu
ZGV4IGJjN2M3MTgzZWFmM2Y5ZDliNGMwNjg3ZGJiOTc2NGQzYTk3MmY1MDguLjBjM2QzOWFiOWYy
MWFkMWZiMDk3ODYyZjAzZWQxMmVlNWZjYTE2YjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1o
ZWlnaHQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCAxMjA0MTE3YmNjMzIwYzEyYTgxZWUyYmVlZTIy
OGU0MTFmOTliOWM3Li45ZGRmMzkzOGEyOWJmM2UxMGM4YzhiNmI3NDZlMzFiMDNkNzQyNjBiIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lk
dGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogICA8
c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNo
YWRvdy1zdHlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hh
ZG93LXN0eWxlcy5odG1sCmluZGV4IGUyZTVjYjA3MjlkODEzZDk4NDYwYjg5ODRhNDEyMGI0ZmI5
ZWRlMjcuLjg3MjNjMjc0MTY4OGJlZDQ5MDNjNzhjODI5Njg0YjQ1ZDRjYzc2MDEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IGNiNmQzNGQ4NDc1YmZhNjExMzZiMzYzMzhiYmM3ODdlMGU4ZWM1MDguLjY4N2Qx
MGYxMjA4YTgzNWNkMjVmZTkwMDlkNDUzN2Q0YTA4YzY3MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL21peGVkLXR5cGUuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVk
LXR5cGUuaHRtbAppbmRleCAyNGZiMTFmZWY0ZTE4NzJmMTQyYjBmNTcyZGY1NTFjMDczOTNiMWJk
Li4zMzMyMzY4ZDZlNDQ4NTIwZmI4MTY4MzdkNDlmN2M5NzhlNDQ4OWZhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxzdHlsZT4K
ICNib3ggewogICAgIHdpZHRoOiAxMCU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sCmluZGV4IGNlZDJkNWEyMjIyODA3MDE3ZTUzNjlh
ZDAxZTEzZGI2MTVmM2U3MmYuLmRjNDQ1OGYyZDUyNzY3NmM4Y2Q3MzJlMGUyYmVjOTYwZWQ4YjNi
NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNp
dGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNp
dGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFu
c2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3Vu
ZC1zaXplLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggMjEzZTIxYWRjZWQ2NmE3YWFkNjdlYzhiNWY5
NTY4YzdmN2JlZmYyNC4uMTRkNzUxYzY0OTczM2MxYzMwYTA3YmRjNGZmYjhlZTM2MWM1MjAyOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1z
aXplLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlw
bGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgog
PGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNr
Z3JvdW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBs
ZS1iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYjI5ZWU3M2QzNTBkOTViMzdiNzIx
NzE4NmVhYTliYzI5MzE4MDZjNS4uNTAzMDY3YzE2NGNhNjA3OTU3YWQ1OGYzNjZkZmZkYTI3NGU3
NTg1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dy
b3VuZC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRp
cGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJh
bnNpdGlvbnMuaHRtbAppbmRleCAzOTIzZDkzYzZkODQ1MzRlNWY3ZDc4ZWI5ZjNlMzZhZGE0ZmQz
MDJjLi41Y2JlNjlmYzA0NzU3MmVhYmU2MGEwNDg3ZjE1MzY1YTRjYTlhOTE5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAppbmRleCAzNGEw
YWQyNjNjYTlmMTU4ZDc0OTkwNWE0YzVkZmM2NTUxZTkzZWI2Li40YTlkNGVjNTY0ZjMzYzU1NDcz
MzE3ZTExOGY0ZjkwN2VjZTc1MDg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0aXZl
LWRlbGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1s
CmluZGV4IGM3NWJlN2YzY2M2ZDU5M2NmZDEwNjJhNzc1NjU3NmI1YmFhNmE2YjYuLmQzM2U0YjU3
NjBmNTUzYzdjY2Q3MGI3ZDRjN2Q4MzY2NTUzZDFmNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxo
ZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFj
aXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFj
aXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwKaW5kZXggZDg2MzcwNTllZjcwZmU3YTIyZWIwY2Qy
MDk1NmU3YWJkZDg3NzE4ZS4uODYyYmEwMmIxNWY2MmViMzQyODdmYTU4ZjQ0Y2I1ZWI0N2Y5Yzli
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9u
LXppbmRleC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNp
dGlvbi16aW5kZXguaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10
ZXN0LWhlbHBlcnMuanMgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNp
dGlvbi10ZXN0LWhlbHBlcnMuanMKaW5kZXggN2U3OWQwYzllMWI0OWE4ZTc4MTY5M2U4NGJmZjQw
OTE4MzI1YmZjNi4uZjM1NzMxYjY1ZmE0Yzc1MmZkMTI2MDJkNzAxZmMwOWI4NjBkMDdlYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVz
dC1oZWxwZXJzLmpzCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFu
c2l0aW9uLXRlc3QtaGVscGVycy5qcwpAQCAtMzgxLDE0ICszODEsOSBAQCBjb25zdCBwcm9wZXJ0
aWVzUmVxdWlyaW5nUHJlZml4ID0gWyItd2Via2l0LXRleHQtc3Ryb2tlLWNvbG9yIiwgIi13ZWJr
aXQtdGV4dC1maQogCiBmdW5jdGlvbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQodHJh
bnNpdGlvblByb3BlcnR5LCB0aW1lLCBlbGVtZW50KQogewotICAgIC8vIElmIHdlIGhhdmVuJ3Qg
b3B0ZWQgaW50byBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIGFzIFdlYiBBbmlt
YXRpb25zLCB1c2UgdGhlIGludGVybmFsIEFQSS4KLSAgICBpZiAoJ2ludGVybmFscycgaW4gd2lu
ZG93ICYmICFpbnRlcm5hbHMuc2V0dGluZ3Mud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
RWxlbWVudCh0cmFuc2l0aW9uUHJvcGVydHksIHRpbWUsIGVsZW1lbnQpOwotCiAgICAgaWYgKHRy
YW5zaXRpb25Qcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeCkgJiYgIXByb3BlcnRpZXNSZXF1aXJp
bmdQcmVmaXguaW5jbHVkZXModHJhbnNpdGlvblByb3BlcnR5KSkKICAgICAgICAgdHJhbnNpdGlv
blByb3BlcnR5ID0gdHJhbnNpdGlvblByb3BlcnR5LnN1YnN0cihwcmVmaXgubGVuZ3RoKTsKIAot
ICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBXZWIgQW5pbWF0aW9ucyBBUEkuCiAgICAgY29uc3Qg
YW5pbWF0aW9ucyA9IGVsZW1lbnQuZ2V0QW5pbWF0aW9ucygpOwogICAgIGZvciAobGV0IGFuaW1h
dGlvbiBvZiBhbmltYXRpb25zKSB7CiAgICAgICAgIGlmIChhbmltYXRpb24gaW5zdGFuY2VvZiBD
U1NUcmFuc2l0aW9uICYmIGFuaW1hdGlvbi50cmFuc2l0aW9uUHJvcGVydHkgPT0gdHJhbnNpdGlv
blByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1v
dXRzaWRlLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1v
dXRzaWRlLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggNzA4ODFmZTkwMjFjODk1MDExMDUzZjQyZjFj
YmJhYWM0MzI4NjI0ZC4uYWVmYzlhMDUzOGZlYjA0ZjgzYWUxNWU0OGIyNTIzOTlkZDgxNjVmMSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0
aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJh
bnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5z
aXRpb25zLmh0bWwKaW5kZXggMzVjOWUzMjkxZmFhMTI2MjIyZDQ0MTBlMmEyZmUzZTc0NDllN2Y5
Yy4uZmFhNzQ1YzFiMWU3ZTFhMzkxZDYyNGNlYjFmNTE1NGMzZDAwODcyOCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlv
bnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGQz
MjJiNGUxZjQxYzU1ZTA0ZDMwOTkzN2ZkZGNiYjExNjVmOTk3Y2MuLmI1NTFhMmNiYzc2NGJjZTJl
Y2ZkYjU3MTYyYjRhMTdhMjRkMzE2ZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRp
bWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5n
LWZ1bmN0aW9uLmh0bWwKaW5kZXggM2VlNTVlMDBhNGNjYzI3ZGE0Nzc5NTU3Y2EzZjk2ZmU3MGVj
YmZlZi4uYmI5NjJiY2I5NzA0MzIyOTYyOWI4NGE5MmU0YTBjZTA1ODAxNTQxZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbAppbmRleCAxNDVkODNhMDJiMDIy
YzYxZTZmYTg4ZDk0NjcwM2ZiYWE0YWExOTUxLi4wMDU4YWI1ZDE0MTZkYTRiN2NkZWJiZDJkMTRl
YWQyODYwZjdiY2JlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5
b3V0LXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5
b3V0LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5o
dG1sCmluZGV4IDNmY2FkMzg4MDZjYTYwMDdiYTc4ZjVmMGI0MjAyODAxNTQyM2E2NWYuLjU3OTdl
NWVkZTNkZWFkZDcyZDNjM2FhMzUxNTZhMTJhMTA0YzdhYWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogICAgIDxzdHlsZT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggOGYzZDgyZjRlNzVkMzRk
NWFiNmZiMzg3YjQzZWQ4YjM1YjhlYzRjMS4uYWEzOTg4MDc4ZmM5ZWRjYTZlMjBlMjI1OGYxM2Vj
OWUxOWU5ZGU3NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5z
aXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25z
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0
bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sCmluZGV4IDQ3NDRiNTg1Y2VlZmI4MTQ1ZWIyZTQ5
Yzc5NjAxYTYxOTMxZGQxZTEuLjE2ZjhhZjE4ODJhNWE3NmNhZDNjZjczNTQ0YWY1OTNhOWYyMDA3
MWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5z
aXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFu
c2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbApp
bmRleCAwZjljNDg3MzRkZGZlZGNmNmZjZmZiN2UzOTc4OTA1OGFlYjgxNTQyLi4wZDNmMzNlZDE1
Mjc5MzQwMzE1OWMzMjI2MGQyYjJmZDgwMmQ2MzVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKaW5kZXggODZkZWE3ZTBmYTVlYmQz
NTY3YmMyMTQwOGMwNzdmMmE0NzI4MmEyNy4uYmY2ZDMwZGQzZGE2YTI4Yzc4MTU4MGQ2NDFmN2Jk
MmMyZWMwYTk5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3Jt
LW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
ZW5kLWV2ZW50LXJlbmRlcmluZy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwKaW5kZXggMDA3Y2U4ZGQwNTg1MzU2NzI3ZGU5
MTY1MTVmYmIzY2M0MjdiMTdiZC4uOTU5YWZkNjBkMDliMDExYmNlM2FlMTA2ZDY3OWNhOWI2ZDBj
M2E5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQt
ZXZlbnQtcmVuZGVyaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5z
aXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwKaW5kZXggM2QzMjlmNDYwMjE5NmFhMWY0OTM0
MDA4ODJjODg4MGNmNDU4MjM3Yy4uZWY4MDZjNzExYTFlMTVhYmRkMzc5NmM1YTU4NzFiNjkxMmRj
N2QzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQt
dGVzdC10cmFuc2Zvcm0uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0
aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
aGl0LXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRl
c3QuaHRtbAppbmRleCBkOWRmODVjMTQ0N2YwOWFkZTUyYWFhNDJiMDFmMjIzOGNiY2JlM2M3Li44
M2E2MGE2ZTJlNTUzZjM3YTdmNTllNjcyMWI5ODViZWQ3M2EwMTY1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbAppbmRleCA5M2UwNGYyYTMyOGZmMmNk
YTE2NTZhNDM0OTEwNGYyMTQyMTAzYWIwLi5mYzJjZTk5NTEwYWRlNzJkNmNlODE1NjkxNzQ1Yjk5
MDA4MGE2ODJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9u
LWluLWRlbGF5LXBoYXNlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1pbi1kZWxheS1waGFzZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRo
LWNvbnRlbnQuaHRtbAppbmRleCAxZjAzZWVhNzc0OTZmN2I3M2ZhZWE3ZjJjMGNjN2Q2N2Q4NGEy
YmFiLi4zYzQ3Mjk0OTE2N2Q2ODMyMmEyNzM3MWVhMDcxZjI3NjExZjY1MzY5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250
ZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVt
ZW50LXdpdGgtY29udGVudC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXku
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5
Lmh0bWwKaW5kZXggNjg3MzIyOWQxNGQ3OTQ2M2NlMGY0NGRmNDQ5MGFiNDk4N2RjYmMzYy4uZGYw
OTg5ZDlmNjRmYTdkZTRlNGViMzUwODNhZThkNDQ5YmVmNDZmNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDkx
MTc0OTJiMGJiM2ExMmI4MTAzN2VkMjI5ZmM1OWUwYjZlY2ZkOTkuLjA1MGM1MmQzMTcxYzg2Mjk2
ZmMyNzY1NWNiMTM0M2E1NDRmMTliZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20t
YXV0by5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1
dG8uaHRtbAppbmRleCA0ZTM3ZTE2N2Y0MWYxMjNiZWRlZGIwMjgwZTIxYjAwYzkxNmIwOGVmLi5k
ODQ1OWI3MWQ0YzgzYTljM2Q3ZTM2OTE1MzZmNThiYTY5MDk0YmE0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCmluZGV4IDE0
ZTc4YzUwMTYxZGU4MjQyNmRhYzJmNzlmNDY0NjhmMDQyNGVjZTAuLjYyOGNmMjY4NTJlYWE4Zjkz
NTY2MjRkOTExOWM2ZTg3OGViYWY3ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92
aXNpdGVkLWxpbmstY29sb3IuaHRtbAppbmRleCAyZWE0NDZjNmIyZjk1YWEyY2YzZGVkMzY2NzYx
ZTQwNjU4MzYyYzJlLi5iMTg3OGQzMTkwNTIxNzY4ZTYzYmE1ZTVhZDdjNmQ1MzJkZWU3M2UxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxo
ZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1k
dXJhdGlvbi1pbi1saXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0
aW9uLWluLWxpc3QuaHRtbAppbmRleCBlNjZhZGYzYjE5MGM5ZTBkODVlYTc4MDJjMWQ5NzFkMzhh
MWNmZTJkLi5iMmJjYmY1MjU5N2RkYjNkNmVkZmU4OTBjZGQ2MDU2ZjUwZTJkN2RiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVy
by1kZWxheS1zdGFydC5odG1sCmluZGV4IDY2NjFmOTFhNDA5YTkxYWJkM2I5YzA1ZTE0YmE0NzQ0
MTA1MzI0NTAuLjYwOGUwMDNmNWMwZGU3ZjYzMDM1OGE2YjA0NzNhNDM1OTU0NWMyMjYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVy
by1kZWxheS1zdGFydC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVy
YXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
YWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlv
bi1kaXNwbGF5LW5vbmUuaHRtbAppbmRleCA5YzdhMTNiNDViNjQ1M2E4NDVkNThlMjA1YzliNGUz
ZWM4NTQ2NTRjLi5kMTE1Yzk1MTE4NDdjYzViMWE4ZjY4ODQ5OTM1N2U2ZWIwYTIwMGJjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1p
bnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFs
LXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0
aW9uLmh0bWwKaW5kZXggYjM3NjY4MTdjZjQwZTNkOWRhZTY1ZTQzOWNhMmRmZjNjNjllNWJiNi4u
YTFjODQ4YTNhMTU2YTBhMDRjMDBkYjNkOTI3NjRiNGQwNzliNjEyMyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9u
LXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRp
b24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24t
c3VzcGVuc2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1h
bmltYXRpb24tc3VzcGVuc2lvbi5odG1sCmluZGV4IDA2NTRhNjk1ZjViMjRiYzQyZmNhN2YxZDIz
ODFkYTBmNzJhYjY4OGMuLmVmYWE1NDM5ZDRmYjc0MGFiNWM3NDMxMGQxNDc2ODg4M2MzNjhmZWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0
aW9uLXN1c3BlbnNpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vs
ZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0
bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5n
LXByb3BlcnR5Lmh0bWwKaW5kZXggYmVmMDgwOGU5NDdjOTZhMDU0YzMxOGI5MWQ1OWE1MjQwMjFl
M2IyNy4uZjM0MDFiNmNlNjYwZmI2MjA3ZDhiOTFmM2M1MjZlYmY2YzZjMDdkNiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJl
bW92aW5nLXByb3BlcnR5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
bGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPGJvZHk+CiA8c3R5bGU+CiAgICAgZGl2IHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1j
c3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
c3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0
bWwKaW5kZXggYjYwNWMwODkxMWJhNjkzMWIwY2YzODM1Yjc5Y2NiMGM0ZmY1MzY3NC4uOWRkNTYx
OGJiNjc1MDFlZjkwOWY2MzcyZDFmMTE5MWY1YWVjOTI2NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNz
cy1hbmltYXRpb24tZWZmZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9h
Y2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5D
cmFzaCBhY2Nlc3NpbmcgYSBDU1NBbmltYXRpb24ncyBjdXJyZW50IHRpbWUgYWZ0ZXIgc2V0dGlu
ZyBpdHMgZWZmZWN0IHRvIG51bGw8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVk
LWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9u
LXRhcmdldC1yZW1vdmFsLmh0bWwKaW5kZXggNThmNmM0OWI5YzhjMDgyZGY4Y2U5MTZkOGM2MTY4
YTBkODk4Y2UzZi4uNDMwNmExOWViYmQzY2NmOGRlOTkxYjVjNTgzMmI0YjEzZjdkMGExYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1l
LWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmlu
aXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggYWNjZXNzaW5nIGEgQ1NTQW5p
bWF0aW9uJ3MgY3VycmVudCB0aW1lIGFmdGVyIHJlbW92YWwgb2YgaXRzIHRhcmdldDwvdGl0bGU+
CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmlt
YXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdl
dC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKaW5kZXggZDk4MGQzNTYy
OGU0YWEzOWExODM0MDM1ZDU3ZTQ3YWYwY2QxY2JiNy4uNjZmYmE1NTJmODVkZDNjMjgxN2Q3MjEx
OTgzNzU2MzJiOGQ2OTkyZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9j
c3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1j
cmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1l
ZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1n
ZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1h
bmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRt
bAppbmRleCA1NjA4NzIxM2E0NWVkZDQ3NmEwOGVkOTM5Y2MxNmIwOGY1MTRjYzdiLi45ZTU1M2Jk
ZmJhNGJmNmU1ZjExMTNlODE4OWZjMmEwMTM3NzQxODc2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdl
dC1rZXlmcmFtZXMtY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nz
cy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2gu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sCmluZGV4IDgzZmU5NWNhN2RmMTY2
M2FkNTkwOGFiZTA0YTM2YmY1NzFhNTUxYWUuLmU1Zjk1MjAwMGM2YTRlZWU1ZWZkYjIxYWE2ZTdl
NDc3ZDU5YmJhMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFu
aW1hdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRs
ZT5DU1MgQW5pbWF0aW9uczwvdGl0bGU+CiA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
Y3JlZW4iPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNp
dGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVk
Lmh0bWwKaW5kZXggMzA3ODNhOGJmZjBiYjAxYTRlZmI0MDU4YmFkYzcwOTE4YTJlOTcwZi4uMDRk
YmFhNTNjYTFkMjM2ZmQ5ODBiY2NkNzFjYThiOWEzYWY5Mjg3NyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNj
ZWxlcmF0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0
aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KIDx0aXRsZT5SZXZlcnNhbCBvZiBhY2NlbGVyYXRl
ZCBpbi1mbGlnaHQgQ1NTIFRyYW5zaXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyIgbWVkaWE9InNjcmVlbiI+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9l
bXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbAppbmRleCA2MGFjMzY1ZjMwNTY1NDNhM2YxODY1NGI5
ZjdjMmYzZTEyNDdjNTYyLi4wZjVmZmIzZjI3MDg2N2IzYTYzZWUwMzFhMzI1YmJhYmFhNDE3N2Qz
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1j
cmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVz
LWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVk
LXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVy
dHkuaHRtbAppbmRleCA0ZGJmNzA2ZTQxNzRmMjlhYjE5NWI4ZTJmZjU2MmE5ZDA5MzdhZjdhLi5m
YTNjODU1ZGJjYjI2ZThkOTk3YzEyNTI0Mjg4MzJjOTExMTg3YzhmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJl
bW92aW5nLXByb3BlcnR5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0
bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHByZSBpZD0icmVzdWx0cyI+PC9wcmU+CiA8ZGl2IGlk
PSJ0YXJnZXQiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lk
dGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsiPjwvZGl2
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmlt
YXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0
Lmh0bWwKaW5kZXggYmQyNDA2OGJjYzQ1ZGMzODI5MDg4OWZkN2MzYTM0NjRjZjIwMTdlYi4uZjgw
YjA0N2YyNjU2ZmU1OTE4ODE1YjAzMmM4NzU1NDg2ZTA3YmZiYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVh
cmluZy1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmct
Y3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENT
UyBBbmltYXRpb24gdG8gIm5vbmUiIGFmdGVyIHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90
aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0
dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJp
bmctZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFu
aW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5o
dG1sCmluZGV4IDRiMTUwNGFiY2FkM2U3ZGIwNDEzY2RkYmYzMzM2MWVhNDk0NTRhZjEuLjkzMmJj
OTFhNzZlYTE1NWY5YWI4NmQ4YzkwNGQ4ZmViNTM1Yzc3NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12
aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHls
ZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBo
dG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBj
aGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIHNldHRpbmcgYSBDU1NBbmltYXRpb24ncyBwcm9w
ZXJ0eSB2aWEgc3R5bGUgYWZ0ZXIgc2V0dGluZyBpdHMgZWZmZWN0IHRvIG51bGw8L3RpdGxlPgog
PHN0eWxlPgo=
</data>
<flag name="commit-queue"
          id="424484"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408938</attachid>
            <date>2020-09-16 11:38:13 -0700</date>
            <delta_ts>2020-09-16 12:52:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916203811.patch</filename>
            <type>text/plain</type>
            <size>559634</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGZiODMxYjM1OTc3MTBiZmY4YWFkOGY4ZDI5ZTA5
ZDRkYTRiYzNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0OCBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzLCBzb21lIFJlbmRl
ckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRpb25z
IGFuZCBhCisgICAgICAgIG1lY2hhbmlzbSB0byBub3RpZnkgd2hlbiBhbiBhY2NlbGVyYXRlZCBh
bmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkbyBub3QgdXNl
LgorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogSGVhZGVycy5jbWFrZToK
KyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2o6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsOgorICAgICAg
ICAqIGFuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0aW9u
UGxheWJhY2tFdmVudEluaXQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcDogUmVuYW1lZCBmcm9tIFNvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcC4KKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yOjpQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcik6CisgICAgICAgICogYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmg6IFJlbmFtZWQgZnJvbSBTb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oLgorICAgICAgICAqIGFuaW1hdGlvbi9DU1NUcmFu
c2l0aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbDoK
KyAgICAgICAgKiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGw6CisgICAgICAgICogYW5p
bWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0
aW9uLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaDoKKyAgICAg
ICAgKiBjc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNvbXB1dGVSZW5kZXJTdHlsZUZvclByb3BlcnR5KToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnJlc29sdmVTdHlsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpEb2N1bWVudDo6ZGlkQmVjb21lQ3VycmVudERvY3VtZW50SW5GcmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6aW1wbGljaXRDbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpEb2N1bWVudDo6cmVzdW1lKToKKyAgICAgICAgKiBkb20vRWxlbWVudC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKToKKyAgICAgICAgKiBk
b20vUHNldWRvRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQc2V1ZG9FbGVtZW50Ojpj
bGVhckhvc3RFbGVtZW50KToKKyAgICAgICAgKiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1lOjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0Zy
YW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJD
b3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3Vt
ZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRpb25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6
CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVW
aWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6
OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVkZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2Uv
RnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdM
YXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAgICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dNb2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFn
ZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAg
ICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2Fu
aW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAg
ICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisg
ICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oOgorICAgICAgICAoV2ViQ29yZTo6
R3JhcGhpY3NMYXllckNsaWVudDo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6IERlbGV0ZWQuCisg
ICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2ViQ29yZTo6R3JhcGhpY3NMYXll
ckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZyYW1lcyk6CisgICAgICAgIChX
ZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OnBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0ZWQp
OiBEZWxldGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJD
QS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVudC5oOgor
ICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50OjpwbGF0Zm9ybUNBTGF5ZXJB
bmltYXRpb25TdGFydGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFUaW1lVG9DdXJyZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYkFuaW1hdGlv
bkRlbGVnYXRlIGFuaW1hdGlvbkRpZFN0YXJ0Ol0pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJFbGVtZW50Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJFbGVtZW50OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJFbGVtZW50Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAg
ICAqIHJlbmRlcmluZy9SZW5kZXJMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJM
YXllcjo6Y2FsY3VsYXRlQ2xpcFJlY3RzIGNvbnN0KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2lu
Zzo6dXBkYXRlR2VvbWV0cnkpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5n
OjpzdGFydFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6
IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oOgorICAg
ICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdMYXllckNoYW5nZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24gY29uc3QpOgor
ICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
UGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyTW9kZWxPYmpl
Y3Q6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyT2JqZWN0
Lmg6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbiBjb25z
dCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRh
dGVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJl
bmRlcmVycyk6CisgICAgICAgICogc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHA6CisgICAgICAgICog
c3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGU6OlRy
ZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKToKKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxTZXR0
aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmg6CisgICAgICAgICogdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyBjb25zdCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucyBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JF
bGVtZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6bnVtYmVyT2ZBbmltYXRpb25U
aW1lbGluZUludmFsaWRhdGlvbnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVs
ZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VU
cmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0
aW5nL0ludGVybmFscy5oOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmlkbDoKKwogMjAy
MC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAg
ICAgW0dTdHJlYW1lcl1bMS4xOF0gUmVncmVzc2lvbnMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggZmQ4OGQwOWM2MGQy
NjllYjhlYjkxZjgxMmMyMTJlNzc5OGNjMTM1OC4uZjIxNmYyOTRmODMxYmQxZDBlYTAwOWJjYWYz
ODFlZmI2NmZlNmRiOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIv
U291cmNlL1dlYktpdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MyBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwg
dGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25z
IGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92
ZWQuCisKKyAgICAgICAgV2UgYWxzbyByZW1vdmUgdGhlIG1lY2hhbmlzbSB0byBub3RpZnkgd2hl
biBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gc3RhcnRzIHdoaWNoIHRoZSBuZXcgYW5pbWF0aW9u
IGVuZ2luZSBkbyBub3QgdXNlLgorCisgICAgICAgICogU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlh
bWw6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwOgorICAgICAg
ICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6
IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9DL1dLUHJl
ZmVyZW5jZXNSZWZQcml2YXRlLmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1By
ZWZlcmVuY2VzLm1tOgorICAgICAgICAoLVtXS1ByZWZlcmVuY2VzIF9zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAoLVtXS1ByZWZlcmVu
Y2VzIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk6IERlbGV0ZWQuCisgICAg
ICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAg
ICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQ
cm94eS5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbToKKyAgICAgICAgKFdlYktpdDo6UmVtb3RlTGF5ZXJUcmVl
RHJhd2luZ0FyZWFQcm94eTo6YWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQu
CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVIb3N0
Lmg6CisgICAgICAgICogVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVI
b3N0Lm1tOgorICAgICAgICAoV2ViS2l0OjpSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25E
aWRTdGFydCk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9J
bmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpvdmVy
cmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChXZWJLaXQ6OkluamVj
dGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVj
dGVkQnVuZGxlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmg6
CisgICAgICAgIChXZWJLaXQ6OkRyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0
YXJ0KTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEu
bWVzc2FnZXMuaW46CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tOgorICAgICAgICAobWVkaWFUaW1lVG9DdXJy
ZW50VGltZSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLQW5pbWF0aW9uRGVsZWdhdGUgYW5pbWF0
aW9uRGlkU3RhcnQ6XSk6IERlbGV0ZWQuCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvblN0YXJ0ZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVy
UmVtb3RlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9S
ZW1vdGVMYXllclRyZWVDb250ZXh0Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0Lm1tOgorICAgICAgICAoV2ViS2l0
OjpSZW1vdGVMYXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydCk6IERlbGV0ZWQuCisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEubW06CisgICAgICAgIChXZWJLaXQ6OlJl
bW90ZUxheWVyVHJlZURyYXdpbmdBcmVhOjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KTog
RGVsZXRlZC4KKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FA
YXBwbGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlM
RUQgaW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdl
TG9nCmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3
NDYxM2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24g
Y29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2lu
Y2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxh
Z3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAg
ICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViUHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVd
KToKKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVs
ZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6
XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAg
ICAgKiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcv
V2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgor
CiAyMDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBS
ZW1vdmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQ
SQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNl
L1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcy
ZGQ0NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJi
YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0w
OS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1v
dmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9u
IGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBB
bmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUg
bm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAq
IFdlYlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXpl
RGVmYXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2Vz
OjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAg
ICAgIChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBT
YW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBz
ZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAppbmRleCAyMGY4YzQxMmFhMjMzNzU1NWIzN2Q1OTQxZTE4YjJlYWRmZDM3YmVmLi41OWY3
OTJhOTQ4N2ZhOThiODE2NTliYTEyMWEyMjBjYzJjMTA0OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dApAQCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RP
UklFUwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJ
Un0vbWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVfRElS
fS9wYWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2Vi
Q29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1NWExOGQzMjA0OGU3NmU2NTFlMDA2MDVmODBiMDVh
MzI3YTExZWUuLmNiNGE5ZGU5Mjc3YWZlOWI3NDRlY2ZlNTQzZDA1Y2RhYTU5YWE1MzQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
SGVhZGVycy5jbWFrZQpAQCAtODg5LDkgKzg4OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJB
TUVXT1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAgcGFn
ZS9XaW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgK
LSAgICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBhZ2Uv
Y3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5
UG9saWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmgK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQyZmEyMTQ2Y2ZiYTlk
OC4uMzg4MjdjNDNjMWM1MWVlMjhlODY5N2Y5Y2RkN2IxZmJhNjhmYmVmMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50
eHQKQEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNwcAog
YW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0aW9u
VGltZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmltYXRp
b24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5j
cHAKQEAgLTE2NzUsMTIgKzE2NzYsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5jcHAK
IHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRv
ci5jcHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0aW9u
QmFzZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1wYWdl
L2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAot
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50U2Vj
dXJpdHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuY3Bw
CiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3Vy
Y2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjY1NTk4
ZjYzNTA0ZDgzNWQ0ZGRhNzNlMjY3ZTYyMjlkMDcxMzNkMi4uMjhlOWYyOTFiZjMwOTlkNmMyNTNi
ZmVmZWJmMGVkMmRmMTliM2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4MjJF
M0M0N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBGcmFt
ZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUw
RjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUND
MDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmls
dGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0J
CTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURB
ODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87
IH07CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdFQzdD
NTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9s
bEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsg
fTsKIAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgxODAw
RDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CkBAIC05MTYsMTEgKzkxNSw2IEBACiAJCTMxNkRFNzAyMUU4M0FFMUQw
MDg0QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0
YUNoYW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyogSlND
U1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oICov
OyB9OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3MDBF
NkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZFMTEy
MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5p
bWF0aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEw
QTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFEQTcw
MEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3Np
dGVBbmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxp
Y2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLzsg
fTsKLQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBFNkUx
REE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQxNjYz
NjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8q
IFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFBy
aXZhdGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVyRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxN0Qz
RkYyMjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JGODkg
LyogSW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIxNTIs
NyBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2Uu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0
MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1
QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIz
OEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0
aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKKwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1
MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJG
RjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIz
RUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZH
UHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9u
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThB
M0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2IEBA
CiAJCTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAxQjFF
RDcyMkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3N0Q1
MTAyNTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1NTAw
REE0Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQxMkY5
REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAwQzc3
QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJDNjE1
NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAyMTI2
NkUgLyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3NpdGlv
bkV2ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlv
bkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3
OUYyRjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3
QTA5Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JEQiAv
KiBGaWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQg
LyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZp
bHRlcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBs
YXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBG
MTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VDN0M1
MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2VkQ2Fu
dmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENhbnZh
c1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIx
NSwxNiArNzIwOCw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZy
YW1lc1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlmcmFt
ZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NEN0Yw
MEJGNjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENT
U0tleWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDky
MEU2Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7
IHBhdGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
LQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRp
b25CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJhc2Uu
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4
IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250
cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZFMURB
NzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0
aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYw
ODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwotCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZy
YW1lQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtl
eWZyYW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUx
MTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09w
dGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2ludGVy
RXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBl
ID0gdGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKQEAgLTk4ODMsNiArOTg2Niw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBB
bmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0
aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAyQjM4
OEYwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3Vz
dG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9u
RWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVGN0Uy
NTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3
MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhU
b3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQ
b2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJB
MDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNW
R0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
OTk5MSw4ICs5OTc2LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2aWdh
dG9yQ3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZp
Z2F0b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VGNjJG
MTEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVj
dE9FUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURCNzQw
MEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4
RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21w
b3NpdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
Q29tcG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5
MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2
ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0aW9u
RXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTIsMjYgKzE4Njk1
LDYgQEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJ
fTsKLQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJCWlz
YSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2
MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4
OCAvKiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4IC8q
IENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4
OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUxREE3
MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5MEYz
QUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAotCQkJ
CTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8s
Ci0JCQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
Ki8sCi0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNw
cCAqLywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24u
aCAqLywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24u
Y3BwICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlv
bi5oICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0gIjxn
cm91cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0aW9u
cyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQzMSw3
ICsyMTM5NCw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewog
CQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUxRDg0
MDBCRjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3OCAv
KiBjb2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAogCQkJ
CTE4QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3NCw2ICsyMTgzNiw4
IEBACiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAgKi8s
CiAJCQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAogCQkJ
CTcxQzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJCTcx
RjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCisJ
CQkJNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8s
CiAJCQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQuaCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5j
cHAgKi8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaCAq
LywKQEAgLTMwMzE1LDcgKzMwMjc5LDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAg
LyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIx
OUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBp
biBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25F
ZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4
IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjk4LDcgKzMwNjYxLDYg
QEAKIAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9z
ZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNB
NkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJ
CQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENv
bW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAvKiBD
b21wb3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3MTEw
MEVCN0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApAQCAt
MzA4MzgsOCArMzA4MDAsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBDcnlw
dG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0MUYz
Q0NFNjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAog
CQkJCTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEw
MTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC0zMDkwOCw3ICszMDg2OCw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlD
QTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVE
OEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5
MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcxMzQx
RkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVy
dHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzIsNyArMzE2OTIsNiBAQAogCQkJCTU1
QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVC
dWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyog
SW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMzOEMw
MEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzg2
MzNFOTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVudGlm
aWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA5LDcgKzMyNjY4LDYgQEAKIAkJCQk1MTdBNjND
NjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGlu
IEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5p
bWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0UgLyog
S2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNCNDFG
OUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcx
MjQ3RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBIZWFk
ZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0NjQ3
MTAwMDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1NjIy
ZWNhZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJs
ZS5pZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5v
cmcvd2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1bCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBBbmlt
YXRhYmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dFeGNl
cHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0
PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5p
bWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRB
bmltYXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsIGIv
U291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJkZjFm
ZTJjNjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlhM2M1
MTIzMjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvbkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0
UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3RvbVRv
SlNPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2OTFi
NDg1MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVlMWUw
ZTgzMmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsK
LSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3cs
CiBdIGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNvbnN0
cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5p
dCBldmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBlODIx
ZGI0N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFiYjI2
MDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5
YmFja0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
blBsYXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
ICAqLwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rpb25h
cnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFyeSBB
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBjdXJy
ZW50VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4IDA0
ZmE5NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIxNDNl
ZmM4NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9F
WFBPUlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGltZWxp
bmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAxZTVi
ODg0YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5NmY5
YmU5NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5p
bWF0aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJp
bmc7CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
biwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2ViQW5p
bWF0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9uTmFt
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24u
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZmYTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlB
bmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
NywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlB
bmltYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgor
I2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VW
YWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1l
cy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1
ZS5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JCbGVu
ZGluZy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNj
YWRlLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUgIkZv
bnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUgIklk
ZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1
ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNm
b3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVH
ZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNp
bmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUg
PG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0
Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVu
ZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dy
ZXNzKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20p
ICogcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9y
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jl
c3MpOworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVu
Z3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgp
IHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgo
KSwgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZy
b20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJu
IHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5k
RnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKworc3Rh
dGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBw
cm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisg
ICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsK
KyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Cisg
ICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jl
c3MpOworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRv
d1N0eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93
RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNv
bnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgpICE9
IHRvLT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8p
OworCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRp
b24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+cmFk
aXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5zcHJl
YWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmltLCBm
cm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5pc1dl
YmtpdEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3Io
KSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rp
b25MaXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRp
b25zKGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50
ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRl
cmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3Jk
ZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNT
aGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQ
YXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpT
aGFwZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNo
YXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUo
KTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0
aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5jYW5C
bGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBlQ2xp
cFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3Mp
KTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVl
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAg
IHJldHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6
U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAgICAg
cmV0dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKKyAg
ICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZy
b20tPnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUo
KTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICByZXR1
cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJv
bVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBk
b3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7CisgICAg
QVNTRVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBi
bGVuZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMg
YmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0Owor
ICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXpl
X3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0
ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6
ZTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwg
ZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBSZWZQ
dHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygp
W2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9w
ID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dy
ZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVz
cywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAgICAg
ICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0
ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9w
KSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMo
KS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAgICAg
IH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0ZXJP
cGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0
eUZpbHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElmIHdl
IGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rp
b24gYW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIHN3
aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAgICAg
IGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAg
YnJlYWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJv
cEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAg
IGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0g
YW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0c01h
dGNoKQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwg
dG8sIHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5j
dGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBk
b24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAgIC8v
IEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9IHRv
OworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRy
PFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NF
UlQoaW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0
ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGltYWdl
VmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRlclZh
bHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVu
dFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAgICBh
dXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFs
dWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9w
ZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6
Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0
eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55IG5v
bi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUu
IE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52aXNp
YmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBW
aXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFs
dWVzLgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8g
MS4gOiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRvOwor
ICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dy
ZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRv
ICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5saW5l
IFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRV
bmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9m
ZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgp
LCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJsaW5l
T2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNvcmF0
aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29y
YXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNM
ZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25U
aGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFs
dWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERlY29y
YXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVu
Z3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKK3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0
by50b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0s
IGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAg
ICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyks
CisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxl
ZnQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5l
IFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJv
bSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlu
bGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3Qg
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBzaXpl
X3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNp
emUoKTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBm
cm9tIDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzID09
IDEgPyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7Cisg
ICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIo
c3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xl
bmd0aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwg
dG9MZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9t
TGVuZ3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVz
dWx0KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5n
dGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21b
aSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0
KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdl
KiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVzcyBp
cyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hv
dyB0aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhh
bmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNzKQor
ICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEpCisg
ICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2Fj
aGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICByZXR1
cm4gdG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8gdG9J
bWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZElt
YWdlKCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNy
ZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBjcm9z
c2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VW
YWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsK
KyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRl
VmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20s
IFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0
bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2Uo
KTsKKyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRv
KQorICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdv
IGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAgICBp
ZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRl
ZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Cisg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlzPENT
U0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFs
dWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRl
ZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAgICAg
ICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KKyAg
ICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0Zp
bHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVy
biBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIu
ZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNz
KTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdl
bmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAg
ICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9z
c2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1
ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQp
OworICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3Nz
ZmFkZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jv
c3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0
IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAgICAg
ICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAg
fSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNo
ZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2Vu
ZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUo
KTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7
CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAoZnJv
bUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0byku
Y2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJv
bUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3Mp
OworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVu
IGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2Fj
aGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0
ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8
U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0
ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVy
YXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRkIGlu
dGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAgfQor
CisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5k
IGdlbmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBp
czxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQo
YW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2Fj
aGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMg
aW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNl
SW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkg
fHwgIXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1FICg3
NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0
IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmltYWdl
U2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRv
LmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5m
aWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9u
dGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCisg
ICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRl
cmVyKCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAx
LjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAgICAg
IHJldHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5j
KGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9t
LmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91
dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOworfQor
CisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFyaWF0
aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlv
blNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUoKSAh
PSB0by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAg
ICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBmcm9t
LnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAg
ICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVtID0g
dG8uYXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCisg
ICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0
IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0u
dmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFn
KCksIGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2Vu
ZGlmCisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwg
Rm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIEZv
bnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20p
LCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5l
IE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwg
T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAg
IHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZs
b2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dy
ZXNzKSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdU
Rl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJvcChw
cm9wKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAgdmly
dHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVy
U3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRl
clN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwg
ZG91YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHko
KSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25J
c0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBD
U1NQcm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
UHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkK
KyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1
YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgIH0K
KworICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAg
ICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwg
IiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIg
PDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2
YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJlbmRl
clN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K
K2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+
OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBU
PgorY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVm
UHRyPFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0
dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0
ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dy
ZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3Nl
dHRlcikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAgICB9
CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0
ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChh
LT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Cisg
ICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYm
KTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9w
ZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRp
b24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVy
YXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVx
dWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBz
YW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBp
cyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0aE9w
ZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBhdGhP
cGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChjbGlw
UGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKworI2lm
IEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0
aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5n
cz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJp
YXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFByb3Bl
cnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNl
dHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25T
ZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAg
cmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAgfQor
fTsKKyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHBy
b3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0
aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRl
c3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGgg
YXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBp
ZiAoc2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHls
ZUltYWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBy
ZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQorfTsK
KworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xv
ciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVi
bGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJT
dHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9w
YWNpdHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJB
Y2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNm
b3JtT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDogUHJv
cGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5z
Zm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0s
IGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQor
ICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVy
dHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9u
SXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gcHJv
cGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIp
CisgICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25z
Jj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgIH0K
K307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93
RGF0YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0gMDsg
c2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAgICBy
ZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRh
KiBvdGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4g
ZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1h
bCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7
CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hT
aGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUs
IENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hh
ZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAw
LCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsK
KworICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAgICBp
ZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAgICBy
ZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2Vi
S2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOwor
CisgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRX
ZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOworfQor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0
YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVy
KQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisg
ICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cwor
ICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3Rz
CisgICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hh
ZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93
QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dM
aXN0TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVu
Z3RoKHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChm
cm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3QtPipt
X3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywg
c2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMo
YW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwg
ZmFsc2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBi
ZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVh
bSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZh
dGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IG5ld1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOworCisg
ICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0Ip
OworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxl
bmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxT
aGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0
U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93
UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93
KQorICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cp
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQo
V1RGTW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVu
ZGVkU2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0Et
Pm5leHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5l
eHQoKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKKyAg
ICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hh
ZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAg
Ly8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIs
IHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVyc2Ug
dGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93
RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
ZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93c1tp
XSA9IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOworICAg
ICAgICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3Mo
dG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0t
aSkgeworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAgIHNo
YWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVuZ3Ro
ID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0g
MDsgaSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBm
cm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAgICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93
c1tpXSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNo
YWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9t
U2hhZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5k
ZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNz
KTsKKyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJl
c2VydmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZN
b3ZlKG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3Zl
KGJsZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0Rh
dGE7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNv
bnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9w
KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZh
bHVlKGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1Zh
bGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICByZXR1
cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxl
bmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAg
ICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5h
bAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8
PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQor
I2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENv
bG9yJik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRD
b2xvciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlx
dWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAg
LCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3As
IHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUlu
dmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCisg
ICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICB7
CisgICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyYXBw
ZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CisgICAg
fQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
UmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3dy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zpc2l0
ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBw
ZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1f
dmlzaXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1h
dGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAgICB9
CisgICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0g
ZGVmYXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19ESVNB
QkxFRAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Cisj
ZW5kaWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIg
OiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVy
KSgpIGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5
cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnBy
b3BlcnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisgICAg
ICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3Rl
ZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBGaWxs
TGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlciko
KSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChG
aWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdp
blNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKKyAg
ICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5H
ZXR0ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRl
cikKKyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92
ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRvTGVu
Z3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRl
cikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYm
IGZyb21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5
ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAgIExl
bmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVkZ2Ug
PSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdl
KSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMg
ZXhwcmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisgICAg
ICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChm
cm9tTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsK
KyAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aCh0b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9t
RWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8g
dGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAo
ZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0
aCwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwg
IiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
KyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVu
Z3RoU2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVy
KSgpIGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsK
KyAgICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3Mg
RmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxM
YXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwg
Y29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAg
PDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUo
YSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNl
bmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0
dGVyKSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Cisg
ICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExh
eWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1l
KHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShi
KSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJz
KHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCit9
OworCitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0
ZXIpKCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVy
c0FjY2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3Nv
cikKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAg
ICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29y
KGFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAgICBj
YXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5
V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHBy
b3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwg
JkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRY
T3JpZ2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlX
ZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0
eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxs
TGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdp
biwgRWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNr
Z3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAg
ICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXll
clByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVM
ZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBtX2Zp
bGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpz
ZXRJbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBp
ZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byog
ZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5
ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxheWVy
ICYmIHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAg
ICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwor
ICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAg
YXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAgICAg
d2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmls
bExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5
ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOworICAg
ICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXllciA9
IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVy
c0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVy
KSgpOworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIp
KCk7CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAg
ICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwg
YUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+
bmV4dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAg
ICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYK
KworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXllcnNH
ZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3Nv
cjsKK307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJz
KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAg
ICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYg
KGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIp
CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVy
IDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFs
cyhhLCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVy
cykKKyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3Mp
OworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRz
dCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChhdXRv
JiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+bG9n
QmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBW
ZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAgVmVj
dG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9
OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
CisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7Cisg
ICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3co
KSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+
ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRG
dW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7CisgICAg
ICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBi
LT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAor
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsK
KyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJF
QU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9Cisj
ZW5kaWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwg
U1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29s
b3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09
IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBT
VkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBldmVy
eXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lz
ZQorICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2
ZXIuCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlw
ZTo6UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0
ZXIpKCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKwor
ICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7Cisg
ICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRvQ29s
b3IgPSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7
CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVu
ZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0
LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChiLT4q
bV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICBp
ZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkp
CisgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0K
KworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxl
KiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVz
cykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4K
KyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGlu
ZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1BhaW50
VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBDb2xv
ciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHls
ZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVy
Rm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9u
VmFsdWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9u
YWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHls
ZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25z
dCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
ZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZv
bnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50Owor
ICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAgICAg
ICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAgICAg
aWYgKGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8
IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKwor
ICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAgICAg
ICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8gYmxl
bmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250
SXRhbGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJ
dGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJv
Z3Jlc3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRz
dC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlv
biA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxp
YyhibGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4
aXMoYmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdU
Rk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShj
dXJyZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1h
dGlvbldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5
YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJldHVy
biBtYXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBl
ckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAgIGlm
IChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1By
b3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQg
d3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAgICAg
aWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVy
c1t3cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAg
IEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICByZXR1
cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25l
ZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgp
OworICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAo
KTsKKyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisKKyAg
ICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlE
IC0gZmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworICAg
IHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisKKyAg
ICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4
ID0gVUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAvLyBi
dWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMg
YW5kIGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxl
OjpzZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKKyAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0
eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5k
ZXJTdHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
V2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWlu
V2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgp
LAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgs
ICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAorCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5k
ZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6
bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6
OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lk
dGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVm
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5U
b3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5C
b3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBh
ZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJT
dHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwK
KworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJv
cGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0
eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tn
cm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tn
cm91bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywg
JlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0
eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCisg
ICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFz
a0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1h
Z2UpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFu
dFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwg
JlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJ
bWFnZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAgICAg
IG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlC
b3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5k
ZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFn
ZVNvdXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1h
Z2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94
SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcgRmls
bExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZS
ZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3Jv
dW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxs
TGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJT
dHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5
ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlX
ZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRl
clN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorICAg
ICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQ
b3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVN
YXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5
bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwg
JlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAorICAg
ICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3Bl
cnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRD
b2x1bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBM
ZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0
eWxlOjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNo
b3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0
aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9y
aXpvbnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2
ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFj
aW5nKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4
LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZp
ZWRaSW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0
eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5z
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3Ms
ICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9m
ZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxp
bmVPZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywg
JlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQs
ICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVj
dGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHls
ZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2lu
WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVj
dGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5
bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9y
bU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVu
ZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3Jp
Z2luWSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJh
bnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5
bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3Bl
cnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJU
b3BMZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxl
Ojpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJh
ZGl1cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNp
emU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRp
dXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXpl
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRl
ckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFk
aXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0
eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRW
aXNpYmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRS
ZXR1cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8
TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0
eWxlOjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRP
cGFjaXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9y
bSgpLAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9w
ZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVy
KSwKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2VuZGlm
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9y
RmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0
QXBwbGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRo
KENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQ
cm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVu
ZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBl
SW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCisK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3Bl
cnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1
bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRM
aW5rQ29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRB
ZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0
VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0
ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxs
Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3Io
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5
bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdo
dENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJU
b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9y
ZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90
dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJl
bmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNv
bG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGlu
ZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKworICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAm
UmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJl
bmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAorCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5k
ZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJl
bmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNp
dHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQ
YWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRTdHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZS
ZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hB
cnJheSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ry
b2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5
bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRD
eCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJl
bmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHls
ZTo6c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlS
eCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJl
bmRlclN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQs
ICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJv
a2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJT
dHlsZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJT
dHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29k
Q29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENv
bG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0
b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0
b3BPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUlu
dmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRp
bmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQs
ICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2Vs
aW5lU2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFs
dWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5
bGU6OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFy
aWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVu
ZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdo
dCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJv
cGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxl
OjpzZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUo
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4o
Q1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVj
b3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NT
UHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVP
ZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsKKyAg
ICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZf
QVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisgICAg
c3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNb
XSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1j
b2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBm
b3IgZm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ss
IC8vIGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdo
dCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAgICAg
ICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRp
dXMsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQcm9w
ZXJ0eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3Ig
bGlzdC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAgQ1NT
UHJvcGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAgIENT
U1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxl
LAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NTUHJv
cGVydHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAgQ1NT
UHJvcGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVz
IHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgLy8K
KyAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94
UmVmbGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAg
ICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgbV9w
cm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisgICAg
Q09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0
YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRh
YmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlXcmFw
cGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXND
b3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8gRmly
c3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1h
cCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4K
KworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0
aWVzQ291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3
cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAgICAg
bV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Qcm9w
ZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgewor
ICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJv
cGVydGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2
ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1dG8g
bG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRl
eCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdyYXBw
ZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAgICAg
IGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVy
SW5kZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1f
cHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAg
ICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhh
bmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykp
KTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVM
b25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnYXRo
ZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJ
RD4mIHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVy
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
ciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBl
cio+KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRv
JiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgewor
ICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwg
Y3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBw
cm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAgaWYg
KGNvbnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkp
OworCisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5l
ZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENT
U1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKHBy
b3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRv
bigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAgICAg
ICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9HX0RJ
U0FCTEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwor
I2VuZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5
QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5
QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3Ap
OworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNB
Y2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2lu
Z2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVyID8g
d3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5vdGU6
IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRp
b25BdFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246
OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0PENT
U1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9w
ZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMp
OworCisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFu
aW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAg
ICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NT
UHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVy
dHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5J
bnRlcnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5SUQg
Q1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8
Ym9vbD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKwor
ICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkK
KyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAgIGlz
U2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJuIHdy
YXBwZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVt
UHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1h
cDo6c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgwYzUz
ZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbiB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVy
dHlJRCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
Q1NTUHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAg
c3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBDU1NQ
cm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0
aGFuZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMg
SGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBz
dGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQcm9w
ZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlELCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIsIGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFiNWFk
ZmQwNmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEzOWIw
NTlmMWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Ry
YW5zaXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9u
LmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwKICAg
ICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1hdGlv
biB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9wZXJ0
eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlv
bnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwK
aW5kZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRlNDll
MjAyZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwog
CiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9u
cy10by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJB
bmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50ZXJm
YWNlIERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0
aW1lbGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1l
bnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4YTUz
NGMxZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0YTc4
ZWRlNTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9y
U2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9E
b2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8K
IAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lv
bnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAgIEVu
YWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBE
b2N1bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVudE9y
U2hhZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25zKCk7
CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxp
bmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCmlu
ZGV4IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEyNTQ0
MjU1ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0g
ICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAog
XSBpbnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAgICBb
Q2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxpbmVP
cHRpb25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tl
eWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVj
dC5pZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4uZjBm
MzJiMGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVm
IFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5p
bWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmpl
Y3QsCiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNlYzNm
YTg0MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0ZThk
YTAwZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmlt
YXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRs
CkBAIC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwogICAg
IEFjdGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAg
ICAgSW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBF
eHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2Vi
QW5pbWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZjOWE2
ZDRhNTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiArNTAs
MTEgQEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAgfQog
fTsKIAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21wb3Np
dGUgICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAxCit9
OworCiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0aW9u
c01hcmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9IExp
c3RIYXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBhYzBk
ODA1YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uMzY5YjFiZDZjMDZkMGM2NGVjNjIwOTZkZmZjYTM4
YmEzOGEyYTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21wdXRl
ZFN0eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNwZWN0
UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NT
Qm9yZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94Q29u
dGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJD
U1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRp
b24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEgKzIy
NDYsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5
bGVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVyID0g
ZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0Nv
bXBvc2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVk
QW5pbWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICBpZiAoYXV0byB0aW1l
bGluZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAg
ICBvd25lZFN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVy
ZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvd25lZFN0eWxlID0gcmVuZGVyZXItPmxl
Z2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIpOworICAg
IGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVydHlB
bmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKSB7
CisgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0ZWRTdHlsZSgpOwogICAgICAg
ICBpZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBQc2V1ZG9JZDo6Tm9uZSAmJiAhZWxlbWVu
dC5pc1BzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FjaGVk
IHBzZXVkbyBzdHlsZSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIGFuaW1hdGlvbiBoYXMgYmVlbiBy
dW4gYXQgbGVhc3Qgb25jZS4KICAgICAgICAgICAgIHJldHVybiBvd25lZFN0eWxlLT5nZXRDYWNo
ZWRQc2V1ZG9TdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQu
Y3BwCmluZGV4IDkwOTZmMjY0Njc5MTMwYTc4NGE1MWE5YWRjOGJhZGViZWM3YzdhYzQuLjI5NDBj
NThiZjE3OGM1MjBhNjA5ZWIxYjczNzczOGViNjY5ZmRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50
LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZv
cmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNp
bmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgpAQCAtMTk2Miw3ICsxOTYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29s
dmVTdHlsZVR5cGUgdHlwZSkKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShTdHlsZVJlY2Fs
Y1N0YXJ0LCBTdHlsZVJlY2FsY0VuZCk7CiAKICAgICBSZW5kZXJWaWV3OjpSZXBhaW50UmVnaW9u
QWNjdW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXcoKSk7Ci0gICAg
QW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHVwZGF0ZSBwZXIgdHJlZSBz
Y29wZS4KICAgICB7CkBAIC0yNDIyLDE5ICsyNDIwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmRpZEJl
Y29tZUN1cnJlbnREb2N1bWVudEluRnJhbWUoKQogICAgIC8vIGJlIG91dCBvZiBzeW5jIGlmIHRo
ZSBET00gc3VzcGVuc2lvbiBzdGF0ZSBjaGFuZ2VkIHdoaWxlIHRoZSBkb2N1bWVudCB3YXMgbm90
IGluIHRoZSBmcmFtZSAocG9zc2libHkgaW4gdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hl
LCBvciBzaW1wbHkgbmV3bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURPTU9i
amVjdHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAg
ICAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMoKTsK
LSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5z
dXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1lbGlu
ZXNDb250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5k
QW5pbWF0aW9ucygpOwogICAgICAgICBzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3Vz
cGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVz
dW1lU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRl
ZCk7Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYg
KG1fdGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRy
b2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBt
X2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhp
cyk7CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3Rp
bWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CiAKQEAgLTI1
MjgsOSArMjUyMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQog
ICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAot
ICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5kZXRh
Y2hGcm9tRG9jdW1lbnQodGhpcyk7Ci0KICNpZiBVU0UoTElCV0VCUlRDKQogICAgIC8vIEZJWE1F
OiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBNb2R1bGVzL21lZGlhc3RyZWFtLgogICAgIGlmIChM
aWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkpIHsKQEAgLTMwNjYsOCArMzA1NSw2
IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICBpZiAoYXV0byogZG9j
dW1lbnRMb2FkZXIgPSBsb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zdGFy
dEljb25Mb2FkaW5nKCk7CiAKLSAgICAgICAgZi0+bGVnYWN5QW5pbWF0aW9uKCkuc3RhcnRBbmlt
YXRpb25zSWZOb3RTdXNwZW5kZWQodGhpcyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3Vs
ZG4ndCBiZSBkaXNwYXRjaGluZyBwZW5kaW5nIGV2ZW50cyBnbG9iYWxseSBvbiBhbGwgRG9jdW1l
bnRzIGhlcmUuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgZG8gdGhpcyB3aGVuIHRoZXJlIGlz
IGEgRnJhbWUsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIEpTIHJlZW50cmFuY3kKICAgICAg
ICAgLy8gYmVsb3cgU1ZHIGZvbnQgcGFyc2luZywgZm9yIGV4YW1wbGUuIDxodHRwczovL3dlYmtp
dC5vcmcvYi8xMzYyNjk+CkBAIC01NDU0LDExICs1NDQxLDggQEAgdm9pZCBEb2N1bWVudDo6cmVz
dW1lKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgQVNTRVJUKG1fZnJhbWUpOwog
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX3RpbWVsaW5l
c0NvbnRyb2xsZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFu
aW1hdGlvbnMoKTsgIAotICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRp
b24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgaWYgKG1fdGltZWxp
bmVzQ29udHJvbGxlcikKKyAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVBbmlt
YXRpb25zKCk7CiAKICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhyZWFzb24pOwogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
RWxlbWVudC5jcHAKaW5kZXggOGY4NmZmNDFhNjY0NjgyYzJmYzY4N2UzZWJhNjgzYzUzZmM2Mzg2
YS4uYzViMzMxNmNjZjY0MjE2ZjI5MWU2YmE1NmFiODcwODEzMGY3MTQ2OCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9F
bGVtZW50LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIK
ICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9u
LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1Bh
cnNlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgpA
QCAtMTE5LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRlICJW
b2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJXZWJB
bmltYXRpb25UeXBlcy5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTGlu
a05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjI4OCw5ICsyMjg4LDYgQEAg
dm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBl
LCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVu
dCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNSZW1v
dmVkKCp0aGlzKTsKIAotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1h
dGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOwotCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5U
X0xBVENISU5HKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlm
IChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFtZS0+cGFnZSgpLT5zY3JvbGxM
YXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1BzZXVkb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQu
Y3BwCmluZGV4IDE1ZDgxYzEwNmQ4MDkzNTNmMjFiZTdlYzg0ODNkZDg4Yjc2MjhiMzcuLmRhZDE1
NjZjYzA2YTNkMTRkNmJjYjdjNTA3NmVjYzE4YjZjN2E3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNl
dWRvRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNp
bmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9s
bGVyLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWVs
aW5lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05Myw5ICs5
Miw2IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgaWYgKGF1
dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAgICAgICAgIHRp
bWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAgICAgCi0gICAgaWYgKGF1dG8qIGZy
YW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9u
KCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0
cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsIGIv
U291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCmluZGV4IGNhZGZiOTY5YjJhNGE0Y2Y5
YjU4MThkNzM0NDY2YmEzNGJlYjYyODMuLjA2ZmUxY2IyMGVhZmRlZGJiOGUxYzY3ZDZjYmNiYzY4
YmZmZmUwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmlkbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKQEAgLTM0LDMgKzM0LDQgQEAK
IAogU2hhZG93Um9vdCBpbmNsdWRlcyBEb2N1bWVudE9yU2hhZG93Um9vdDsKIFNoYWRvd1Jvb3Qg
aW5jbHVkZXMgSW5uZXJIVE1MOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5
L0NhY2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3Bw
CmluZGV4IDQ2OTg1NzRkMzI1MDVlNmY5YzVjM2ExY2JhY2FiZmViMmQwZDQxZGMuLjhkZTI2ZTFi
YzE1MzNmZDBiM2YwNzRmMDZiMWYzNGQzZTgwYjg5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3Rvcnkv
Q2FjaGVkRnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUu
aCIKIAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNp
bmNsdWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0yNzMsOCAr
MjcyLDYgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAKICAgICBGcmFtZTo6Y2xlYXJU
aW1lcnMobV92aWV3LmdldCgpLCBtX2RvY3VtZW50LmdldCgpKTsKIAotICAgIG1fdmlldy0+ZnJh
bWUoKS5sZWdhY3lBbmltYXRpb24oKS5kZXRhY2hGcm9tRG9jdW1lbnQobV9kb2N1bWVudC5nZXQo
KSk7Ci0KICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCByZW1vdmVBbGxFdmVu
dExpc3RlbmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNrL2ZvcndhcmQgY2Fj
aGUsIHRoaXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3YXksIGJlY2F1c2Ug
dGhlIGRvY3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01XaW5kb3cgb2JqZWN0
IChkdWUgdG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5yZW1vdmVBbGxFdmVu
dExpc3RlbmVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzYzVhZTQ1ODU0YzcyYmRmNmZi
NzM2NWVmNWYyN2ZhYTZmZGJlNWVjLi5iZDM0OTdjMWEyMjAwMTU2NTZlMDAyMDQ1ZTRlNjE3N2Mz
OTM5OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUg
IkFwcGx5U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5oIgpAQCAtMTU2LDcgKzE1NSw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJh
bWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBt
X25hdmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigq
dGhpcykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3Njcmlw
dChtYWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fYW5pbWF0
aW9uQ29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlz
KSkKICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAg
ICAgLCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQogICAgICwg
bV9ldmVudEhhbmRsZXIobWFrZVVuaXF1ZVJlZjxFdmVudEhhbmRsZXI+KCp0aGlzKSkKQEAgLTcz
NywxMSArNzM1LDggQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBE
b2N1bWVudCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+bGF5
b3V0Q29udGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQt
PnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3Bl
bmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmlldy0+ZnJhbWUo
KS5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50
KTsKKyAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LT50aW1lbGluZXNDb250
cm9sbGVyKCkpCisgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAg
ICAgICAgIHZpZXctPmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcigp
OwogICAgIH0KIH0KQEAgLTEwMjksMTEgKzEwMjQsOCBAQCB2b2lkIEZyYW1lOjpyZXN1bWVBY3Rp
dmVET01PYmplY3RzQW5kQW5pbWF0aW9ucygpCiAKICAgICAvLyBGcmFtZTo6Y2xlYXJUaW1lcnMo
KSBzdXNwZW5kZWQgYW5pbWF0aW9ucyBhbmQgcGVuZGluZyByZWxheW91dHMuCiAKLSAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IG1f
ZG9jLT50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICB0aW1lbGluZXMtPnJlc3Vt
ZUFuaW1hdGlvbnMoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGVnYWN5QW5pbWF0aW9uKCkucmVz
dW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZG9jLmdldCgpKTsKKyAgICBpZiAoYXV0byogdGlt
ZWxpbmVzID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgdGltZWxpbmVz
LT5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5s
YXlvdXRDb250ZXh0KCkuc2NoZWR1bGVMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA2
OGZkYzExNTVkOTEzZWVjZjI1NzA2YWQ5ODg5YjUwMjFmYWJmMmM0Li41MGM2NWY1ZTViMDc1M2Mx
ZTZkMzA3YjIxM2I1MjAwYzQ1MGFhMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC02Niw3ICs2Niw2
IEBAIGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xhc3MgRE9NV2luZG93OwogY2xh
c3MgRG9jdW1lbnQ7CkBAIC0xNzQsOCArMTczLDYgQEAgcHVibGljOgogICAgIEZyYW1lU2VsZWN0
aW9uJiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAg
IGNvbnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVu
dCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwotICAgIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0
aW9uQ29udHJvbGxlcjsgfQotICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2Fj
eUFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAg
IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAgICAgY29u
c3QgU2NyaXB0Q29udHJvbGxlciYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0K
IApAQCAtMzQ1LDcgKzM0Miw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2Rv
YzsKIAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlx
dWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAj
aWYgRU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFE
ZXRlY3Rpb25SZXN1bHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZp
ZXcuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc1YjllMmJm
YzllYWUzZTM1YmVlMThmZWJkNDkxZjQwZjM2N2M2MTYuLmQ0OTI0MWVmMDg4YjgzNzYyNTYwOWQy
YzY1YWJmMjgzNGRhNDE4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVW
aWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMwLDcg
KzMwLDYgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0Zvcndh
cmRDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2lu
Y2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01
ODYsOCArNTg1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKCkKIAog
ICAgIEFTU0VSVCghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdwb3J0Q29u
c3RyYWluZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9zbG93UmVw
YWludE9iamVjdHMgfHwgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0K
LSAgICBBU1NFUlQoIWZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuaGFzQW5pbWF0aW9ucygpKTsK
IH0KIAogdm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXpl
KQpAQCAtNDQxNyw4ICs0NDE0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0
eWxlSWZOZWVkZWRSZWN1cnNpdmUoKQogICAgIC8vIFN0eWxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIg
c2NyaXB0LCB3aGljaCBjYW4gY2F1c2UgdGhpcyBGcmFtZVZpZXcgdG8gYmUgZGVzdHJveWVkLgog
ICAgIFJlZjxGcmFtZVZpZXc+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lKCkubGVnYWN5QW5pbWF0aW9u
KCkpOwotCiAgICAgdXNpbmcgRGVzY2VuZGFudHNEZXF1ZSA9IERlcXVlPFJlZjxGcmFtZVZpZXc+
LCAxNj47CiAgICAgYXV0byBuZXh0UmVuZGVyZWREZXNjZW5kYW50ID0gW3RoaXNdIChEZXNjZW5k
YW50c0RlcXVlJiBkZXNjZW5kYW50c0RlcXVlKSAtPiBSZWZQdHI8RnJhbWVWaWV3PiB7CiAgICAg
ICAgIGlmIChkZXNjZW5kYW50c0RlcXVlLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDBjOGJlNzk0OTUxYjc4ZTE5Yjc1
OTI4ODViYmY4MzVlYjFjOTUzYjEuLjlmYTUxNzBmYTE1MTVmM2FmYjY3Y2YzMTA3ZDk4Y2ZiOTVl
YjJkNTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29u
dGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZy
YW1lVmlld0xheW91dENvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCIKICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50
LmgiCiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0yMDQsNyArMjAzLDYgQEAgdm9pZCBGcmFt
ZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQoKQogICAgIExheW91dFNjb3BlIGxheW91dFNjb3Bl
KCp0aGlzKTsKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlvdXRTdGFydCwgTGF5b3V0
RW5kKTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZy
YW1lKCkpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZ2
aWV3KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7CiAgICAgV2Vha1B0cjxSZW5kZXJFbGVt
ZW50PiBsYXlvdXRSb290OwogICAgIAogICAgIG1fbGF5b3V0VGltZXIuc3RvcCgpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
UGFnZS5jcHAKaW5kZXggYTBhNzdkMjg4MzY0ODIxYzUxMGIyZDUxMmJhNzBlNzI5YzIxYjZkNS4u
ZjkyM2JhODkyOTljMDA4ZTEwZjBkMjhlZTgwYTNmM2Y5N2JhYTk4NiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2Uu
Y3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2lu
Y2x1ZGUgIkJhY2tGb3J3YXJkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNh
Y2hlU3RvcmFnZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIK
ICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTE2NDgsOSArMTY0Nyw2IEBAIHZvaWQgUGFnZTo6aGFu
ZGxlTG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogICAgIG1f
dGhyb3R0bGluZ1JlYXNvbnMgPSBtX3Rocm90dGxpbmdSZWFzb25zIF4gVGhyb3R0bGluZ1JlYXNv
bjo6TG93UG93ZXJNb2RlOwogICAgIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpLmFkanVzdFJl
bmRlcmluZ1VwZGF0ZUZyZXF1ZW5jeSgpOwogCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkKLSAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCk7Ci0KICAgICB1cGRhdGVET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiB9CiAK
QEAgLTIxODUsMTMgKzIxODEsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChi
b29sIGlzVmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPnNob3coKTsKIAogICAgICAgICBpZiAo
bV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAg
IGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVy
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMo
KTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAg
ICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAg
ICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAg
ICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRy
b2xsZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRpb25z
KCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVu
dChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yMjA5LDEzICsyMjAyLDEwIEBAIHZvaWQg
UGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAKICAgICBpZiAoIWlz
VmlzaWJsZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlv
blN1c3BlbnNpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRv
Y3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1
bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1l
bGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChE
b2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVz
ID0gZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0
aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAg
fQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBA
IC0yNTYwLDIxICsyNTUwLDE0IEBAIHZvaWQgUGFnZTo6cmVzZXRTZWVuTWVkaWFFbmdpbmVzKCkK
IHZvaWQgUGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQo
KQogewogICAgIGlmICghaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9j
dW1lbnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQu
dGltZWxpbmVzQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldHRp
bmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAg
ICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1
bWVBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0Fu
aW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCku
bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmlt
YXRpb25zKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1l
bnQmIGRvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1l
bnQudGltZWxpbmVzQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGlu
Z3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMo
KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDA4NDNlZDc2MGNkZWM3M2E5
Y2IxYWZmN2RhMjljY2E0MDI0YTZhNDMuLmU2NGIyZTYxOWIxYWQ0MDFlY2U5OGM3ZWE4NDA5ZWY1
YTk5NmFhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oCkBAIC03MCwxMiArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1NlY3VyZUNvbnRl
eHRBdHRyaWJ1dGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNTZWN1cmVDb250ZXh0QXR0
cmlidXRlRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0QXR0
cmlidXRlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRl
RW5hYmxlZDsgfQogCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGFyZUVu
YWJsZWQpIHsgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KLSAgICBi
b29sIHdlYkFuaW1hdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRp
b25zRW5hYmxlZDsgfQotCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCAmJiBt
X2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsgfQotCiAgICAgdm9pZCBzZXRX
ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7
IG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkID0gYXJlRW5hYmxl
ZDsgfQogICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJs
ZWQ7IH0KIApAQCAtMzAwLDggKzI5NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTWVudUl0
ZW1FbGVtZW50RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGlyZWN0b3J5VXBsb2Fk
RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFi
bGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgeyB0cnVl
IH07Ci0gICAgYm9vbCBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCB7IHRy
dWUgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFi
bGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGlu
ZXNFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbWFnZUJpdG1hcEVuYWJsZWQgeyB0
cnVlIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRp
b25CYXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2Uu
Y3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFlNzQzNTk3N2ZhOTI1MGVjMTBj
MTczOTQxNWRlNGNkNGY1NTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CisrKyAvZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgi
Ci0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0j
aW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRl
ICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9SZWYu
aD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNl
KGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVB
bmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkK
LSAgICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBt
X2FuaW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikpCi17Ci0gICAgLy8g
Q29tcHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlv
bkNvdW50KCkgPiAwKQotICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotfQotCi1BbmltYXRpb25C
YXNlOjp+QW5pbWF0aW9uQmFzZSgpID0gZGVmYXVsdDsKLQotY29uc3QgUmVuZGVyU3R5bGUmIEFu
aW1hdGlvbkJhc2U6OmN1cnJlbnRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHJlbmRl
cmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgp
OwotICAgIHJldHVybiB1bmFuaW1hdGVkU3R5bGUoKTsKLX0KLQotUmVuZGVyRWxlbWVudCogQW5p
bWF0aW9uQmFzZTo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgPyBt
X2VsZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6
OmNsZWFyKCkKLXsKLSAgICBlbmRBbmltYXRpb24oKTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRy
OwotICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRp
b25CYXNlOjpzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYg
KCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVk
KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
OwotICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1kb3VibGUgQW5pbWF0aW9u
QmFzZTo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKTsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QK
LXsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlT
dGF0ZTo6UGxheWluZzsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2go
Y29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0
aW9uLT5hbmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQK
LXN0YXRpYyBjb25zdCBjaGFyKiBuYW1lRm9yU3RhdGUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGU6Ok5ldzogcmV0dXJuICJOZXciOwotICAgIGNhc2UgQW5pbWF0
aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOiByZXR1cm4gIlN0YXJ0V2Fp
dFRpbWVyIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6IHJl
dHVybiAiU3RhcnRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGU6Okxvb3Bpbmc6IHJldHVybiAiTG9vcGluZyI7Ci0gICAgY2FzZSBBbmltYXRpb25C
YXNlOjpBbmltYXRpb25TdGF0ZTo6RW5kaW5nOiByZXR1cm4gIkVuZGluZyI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OiByZXR1cm4gIlBhdXNlZE5l
dyI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRp
bWVyOiByZXR1cm4gIlBhdXNlZFdhaXRUaW1lciI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlBhdXNlZFdh
aXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOiByZXR1cm4gIlBhdXNlZFdhaXRSZXNwb25zZSI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOiByZXR1cm4gIlBh
dXNlZFJ1biI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RG9uZTog
cmV0dXJuICJEb25lIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpG
aWxsaW5nRm9yd2FyZHM6IHJldHVybiAiRmlsbGluZ0ZvcndhcmRzIjsKLSAgICB9Ci0gICAgcmV0
dXJuICIiOwotfQotI2VuZGlmCi0KLSNpZiAhRVJST1JfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBj
aGFyKiBuYW1lRm9yU3RhdGVJbnB1dChBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0
IGlucHV0KQotewotICAgIHN3aXRjaCAoaW5wdXQpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXc6IHJldHVybiAiTWFrZU5ldyI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbjogcmV0
dXJuICJTdGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlJlc3RhcnRBbmltYXRpb24iOwot
ICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lckZp
cmVkOiByZXR1cm4gIlN0YXJ0VGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdHlsZUF2YWlsYWJs
ZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRp
bWVTZXQ6IHJldHVybiAiU3RhcnRUaW1lU2V0IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkOiByZXR1cm4gIkxvb3BUaW1lckZpcmVk
IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVy
RmlyZWQ6IHJldHVybiAiRW5kVGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpB
bmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlOiByZXR1cm4gIlBhdXNlT3ZlcnJpZGUi
OwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3Zl
cnJpZGU6IHJldHVybiAiUmVzdW1lT3ZlcnJpZGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZzogcmV0dXJuICJQbGF5U3RhdGVS
dW5uaW5nIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBs
YXlTdGF0ZVBhdXNlZDogcmV0dXJuICJQbGF5U3RhdGVQYXVzZWQiOwotICAgIGNhc2UgQW5pbWF0
aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uOiByZXR1cm4gIkVuZEFu
aW1hdGlvbiI7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLSNlbmRpZgotCi12b2lkIEFuaW1h
dGlvbkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBk
b3VibGUgcGFyYW0pCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRB
bmltYXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3Rh
dGUuCi0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKLSAg
ICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0
eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7
Ci0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3Iiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0gV1RG
OjpudWxsb3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAg
bV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlv
biA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFy
dEFuaW1hdGlvbikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25T
dGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFu
aW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAg
bV9zdGFydFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpu
dWxsb3B0OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24o
KTsKLQotICAgICAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5k
QW5pbWF0aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0
YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0
YXRlICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAg
IGVuZEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0
ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1f
YW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlKSB7Ci0g
ICAgICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3Bv
bnNlLCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKLSAgICAgICAgICAg
IC8vIHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAg
ICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5p
bWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9
PSBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSkgewotICAgICAgICBpZiAobV9h
bmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyB8fCBtX2FuaW1hdGlvblN0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IHRo
ZSBhbmltYXRpb24KLSAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBk
YXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuOwotICAgIH0KLQotICAgIC8vIEV4ZWN1dGUgc3RhdGUgbWFjaGluZQotICAgIHN3aXRj
aCAobV9hbmltYXRpb25TdGF0ZSkgewotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpOZXc6
Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRB
bmltYXRpb24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmlu
ZyB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0g
ICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRp
b24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewot
ICAgICAgICAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBTdGFydFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlv
blN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0
YXRlOjpTdGFydFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAg
ICAgLy8gV2UgYXJlIHBhdXNpbmcgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZC4KLSAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0
YXRlOjpQYXVzZWROZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
TmV3OwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0
ZTo6U3RhcnRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQo
cGFyYW0gPj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0
ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0
aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRp
b25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlz
LCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxh
YmxlOwotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250
cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRp
b24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFu
Z2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQoIXBhdXNlZCgpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0
aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNl
bCB0aGUgdGltZXIsIHBhdXNlIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUg
PSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0
aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRUaW1lciIsIHRoaXMsIG5h
bWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0U3R5bGVBdmFpbGFibGU6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1
dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQg
dGltZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9y
IGl0IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSAodGltZSBp
cyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2Fp
dFJlc3BvbnNlOwotCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYg
KG92ZXJyaWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkgdG8g
c3RhcnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQKLSAg
ICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgotICAg
ICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IFN0YXJ0V2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUp
KTsKLSAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVk
ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsK
LSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGlt
ZU9mZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBmb3IgJ2Fu
aW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9uIGFwcGVhcnMgdG8g
aGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmlt
YXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9
IC1tX2FuaW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVk
ID0gc3RhcnRBbmltYXRpb24odGltZU9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9j
b21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNX
YWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAg
ICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3Ig
dGhlIHN0eWxlIHRvIGJlIGF2YWlsYWJsZSBhbmQgd2UgZ290IGEgcGF1c2UuIFBhdXNlIGFuZCB3
YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRp
bWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2Fu
aW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVz
cG9uc2U6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
U3RhcnRUaW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBh
dXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpT
dGFydFRpbWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPiAtMC4wMDEpOyAv
LyBTb21ldGltZXMgQ29yZSBBbmltYXRpb24gZ2l2ZXMgdXMgYSBiZWdpblRpbWUgc2xpZ2h0bHkg
aW50byB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRUaW1lU2V0ICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8g
V2UgaGF2ZSBhIHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxy
ZWFkeSBzZXQKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IHRoZSB2YWx1ZSBmb3IgJ2FuaW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5p
bWF0aW9uIGFwcGVhcnMgdG8gaGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAg
ICAgICAgICBpZiAobV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZSgpICsgbV9hbmltYXRpb24tPmRl
bGF5KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm93IHRoYXQg
d2Uga25vdyB0aGUgc3RhcnQgdGltZSwgZmlyZSB0aGUgc3RhcnQgZXZlbnQuCi0gICAgICAgICAg
ICAgICAgb25BbmltYXRpb25TdGFydCgwKTsgLy8gVGhlIGVsYXBzZWRUaW1lIGlzIDAuCi0KLSAg
ICAgICAgICAgICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5k
aW5nIHN0YXRlCi0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsK
LQotICAgICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2Ug
Y2FuIHN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQot
ICAgICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJv
bGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAg
ICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0
aW5nIGZvciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4g
V2hlbiAKLSAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91
Z2ggdGhlIHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGlt
ZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5p
bWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigw
KSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAl
cyAtPiBQYXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25T
dGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmc6Ci0gICAgICAgICAgICBBU1NF
UlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQgfHwgaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAg
aWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkKSB7Ci0gICAg
ICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwotICAgICAgICAgICAgICAgIExPRyhBbmlt
YXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTG9vcFRpbWVyRmlyZWQgKHRpbWUgaXMg
JWYpIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KLSAg
ICAgICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRl
Ci0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLSAgICAgICAg
ICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVu
bmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3Bh
dXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBh
dXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFs
dWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNh
c2UgQW5pbWF0aW9uU3RhdGU6OkVuZGluZzoKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAg
ICAgIGlmIChpbnB1dCAhPSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkICYmIGlu
cHV0ICE9IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAg
ICAgICBMT0dfRVJST1IoIlN0YXRlIGlzIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcsIGJ1dCBpbnB1
dCBpcyBub3QgQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCBvciBBbmltYXRpb25T
dGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQuIEl0IGlzICVzLiIsIG5hbWVGb3JTdGF0ZUlucHV0
KGlucHV0KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpFbmRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49
IDApOwotICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCi0gICAg
ICAgICAgICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lICh0aW1lIGlzICVmKSIs
IHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAg
ICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEZpbGxp
bmdGb3J3YXJkcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkZp
bGxpbmdGb3J3YXJkczsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAg
ICAgICAgICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhl
IGZpbmFsIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBh
dXNpbmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAg
ICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAg
ICAgICAgICAgICAgIHBhdXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0g
bV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUo
bV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBB
bmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8g
fHRoaXN8IG1heSBiZSBkZWxldGVkIGhlcmUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBj
YXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQo
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyk7Ci0gICAgICAg
ICAgICBBU1NFUlQocGF1c2VkKCkpOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwot
ICAgICAgICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAg
ICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgIC8vIHdlIHdlcmUg
d2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdh
aW4KLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
TmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAg
IG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgdXBk
YXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAwKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRO
ZXc6Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZToKLSAg
ICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOgotICAg
ICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46Ci0gICAgICAgICAgICAvLyBXZSB0
cmVhdCB0aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhh
dCwgd2hlbiB3ZSBhcmUgaW4KLSAgICAgICAgICAgIC8vIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRX
YWl0UmVzcG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBz
ZW5kIDAgdG8gc3RhcnRBbmltYXRpb24uCi0gICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgY29tZXMgaW4gYW5kIHdlIHdlcmUgaW4gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZFJ1biwgd2Ugd2lsbCBub3RpY2UKLSAgICAgICAgICAgIC8vIHRoYXQg
d2UgaGF2ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQ
YXVzZWQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8
fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpOwotICAgICAgICAgICAgQVNTRVJU
KHBhdXNlZCgpKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlBsYXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25T
dGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIHdlcmUgcGF1c2VkIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQsIGFuZCBub3cgd2UncmUg
c3VwcG9zZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RhcnQsIHNvIGp1bXAgYmFjayB0
byB0aGUgTmV3IHN0YXRlIGFuZCByZXNldC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6TmV3IiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoaW5wdXQsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1l
cwotICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWRSdW4pCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRp
bWUudmFsdWVPcigwKSArIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUu
dmFsdWVPcigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gMDsKLQotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxs
b3B0OwotCi0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRT
dHlsZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAg
ICAgICAvLyBXZSB3ZXJlIGVpdGhlciBydW5uaW5nIG9yIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGlt
ZSByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVp
dGhlciB3YXkgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhbmltYXRpb24gKHBvc3NpYmx5IHdpdGgg
YW4gb2Zmc2V0IGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhZCBhbHJlYWR5IGJlZW4g
cnVubmluZykgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAg
ICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25z
ZTsKLQotICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAg
ICAgICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFy
ZSBvdmVycmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9u
IHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVN
YWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYW5p
bWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSk7Ci0gICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2UgZ290
IHRoZSBjYWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0
aW9uIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBzdGFydCB0aW1l
IGFuZCBqdXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KLSAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biAodGlt
ZSBpcyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsK
LSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNl
ZFJ1bjsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAg
ICAgICBtX3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0g
bV9wYXVzZVRpbWUudmFsdWVPcigwKSArIHBhcmFtOwotICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0
IHdlIGdvdCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IHN0eWxlIGhhcyBiZWVu
IHVwZGF0ZWQuCi0gICAgICAgICAgICAvLyBXZSBtb3ZlIHRvIHRoZSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkV2FpdFJlc3BvbnNlIHN0YXRlCi0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVw
IEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIG92ZXJyaWRl
QW5pbWF0aW9ucygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9u
U3RhdGU6OkZpbGxpbmdGb3J3YXJkczoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RG9u
ZToKLSAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3
ZSBhcmUgZGVsZXRlZAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFuaW1h
dGlvbkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2Nv
bXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIHdh
aXRpbmcgZm9yIHRoZSBkZWxheSB0aW1lIHRvIGV4cGlyZSBhbmQgaXQgaGFzLCBnbyB0byB0aGUg
bmV4dCBzdGF0ZQotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lciAmJiBtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpMb29w
aW5nICYmIG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykKLSAgICAg
ICAgcmV0dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0
byB0aGUgdGhpcyBwb2ludGVyLCBiZWNhdXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAv
LyBkdXJpbmcgYW4gYW5pbWF0aW9uIGNhbGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4gU2lu
Y2UgdGhlIG93bmVyIGlzIGEgQ29tcG9zaXRlQW5pbWF0aW9uCi0gICAgLy8gYW5kIGl0IHJlZiBj
b3VudHMgdGhpcyBvYmplY3QsIHdlIHdpbGwga2VlcCBhIHJlZiB0byB0aGF0IGluc3RlYWQuIFRo
YXQgd2F5IHRoZSBBbmltYXRpb25CYXNlCi0gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGUgcmVz
b3VyY2VzIG9mIGl0cyBDb21wb3NpdGVBbmltYXRpb24gYXMgbmVlZGVkLgotICAgIFJlZjxBbmlt
YXRpb25CYXNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBSZWY8Q29tcG9zaXRlQW5pbWF0
aW9uPiBwcm90ZWN0Q29tcG9zaXRlQW5pbWF0aW9uKCptX2NvbXBvc2l0ZUFuaW1hdGlvbik7Ci0g
ICAgCi0gICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKLSAgICBpZiAobV9hbmltYXRpb25T
dGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIpIHsKLSAgICAgICAgaWYgKGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPj0gbV9hbmlt
YXRpb24tPmRlbGF5KCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0K
LQotICAgIGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBl
bnN1cmUgdGhhdCBlbGFwc2VkRHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBz
dWdnZXN0cyB0aGF0Ci0gICAgLy8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJl
Z2luQW5pbWF0aW9uVXBkYXRlKCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCi0gICAgLy8gQWxzbyBj
aGVjayBpbiBnZXRUaW1lVG9OZXh0RXZlbnQoKS4KLSAgICBlbGFwc2VkRHVyYXRpb24gPSBzdGQ6
Om1heChlbGFwc2VkRHVyYXRpb24sIDAuMCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGVuZCB0
aW1lb3V0Ci0gICAgaWYgKG1fdG90YWxEdXJhdGlvbiAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90
b3RhbER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGJlIGluIEFu
aW1hdGlvblN0YXRlOjpMb29waW5nIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2tpcCBhCi0gICAgICAg
IC8vIHdob2xlIGl0ZXJhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQganVtcCB0byB0aGUg
ZW5kIHN0YXRlLgotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IEVuZGluZyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOwotCi0gICAgICAg
IC8vIEZpcmUgYW4gZW5kIGV2ZW50Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkLCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSk7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlvbiB0aW1lb3V0Ci0gICAg
ICAgIGlmICghbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEhhc24n
dCBiZWVuIHNldCB5ZXQsIHNldCBpdAotICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9
IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0
aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0g
ZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAg
ICAgICBpZiAoZWxhcHNlZER1cmF0aW9uID49IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0g
ICAgICAgICAgICAvLyBTZXQgdG8gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICBkb3Vi
bGUgcHJldmlvdXMgPSBtX25leHRJdGVyYXRpb25EdXJhdGlvbi52YWx1ZSgpOwotICAgICAgICAg
ICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChl
bGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1f
bmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0Owot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBldmVudAotICAgICAgICAgICAg
dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkLCBw
cmV2aW91cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBk
YXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSBwbGF5U3RhdGUpCi17Ci0gICAgaWYgKCFt
X2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2hlbiB3ZSBn
ZXQgaGVyZSwgd2UgY2FuIGhhdmUgb25lIG9mIDQgZGVzaXJlZCBzdGF0ZXM6IHJ1bm5pbmcsIHBh
dXNlZCwgc3VzcGVuZGVkLCBwYXVzZWQgJiBzdXNwZW5kZWQuCi0gICAgLy8gVGhlIHN0YXRlIG1h
Y2hpbmUgY2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQuCi0gICAg
Ly8gU2V0IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgIGJvb2wg
cGF1c2UgPSBwbGF5U3RhdGUgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQgfHwgbV9jb21w
b3NpdGVBbmltYXRpb24tPmlzU3VzcGVuZGVkKCk7Ci0KLSAgICBpZiAocGF1c2UgPT0gcGF1c2Vk
KCkgJiYgIWlzTmV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVN0YXRlTWFjaGlu
ZShwYXVzZSA/ICBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQgOiBBbmltYXRp
b25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nLCAtMSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29u
ZHM+IEFuaW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICAvLyBSZXR1cm5z
IHRoZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0
IG1lYW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlz
IHJlcXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFu
eSBzZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkgfHwg
cG9zdEFjdGl2ZSgpIHx8IGZpbGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gV1RGOjpu
dWxsb3B0OwotICAgIAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRUaW1lcikgewotICAgICAgICBkb3VibGUgdGltZUZyb21Ob3cgPSBtX2FuaW1h
dGlvbi0+ZGVsYXkoKSAtIChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVk
U3RhcnRUaW1lKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KFNlY29uZHMgeyB0aW1lRnJvbU5v
dyB9LCAwX3MpOwotICAgIH0KLSAgICAKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQo
KTsKLSAgICAgICAgCi0gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2Ug
cmlnaHQgYXdheS4KLSAgICByZXR1cm4gMF9zOwotfQotCi0vLyBDb21wdXRlIHRoZSBmcmFjdGlv
bmFsIHRpbWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotLy8gVGhlcmUgaXMgbm8g
bmVlZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBo
YXZlCi0vLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lLgotCi1kb3VibGUg
QW5pbWF0aW9uQmFzZTo6ZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNl
ZFRpbWUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1l
ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+
ZHVyYXRpb24oKSkgOiAxOwotICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0
aGUgY3VycmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0
aGUgZnJhbWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIu
IFNvIHdlIG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3Nz
aWJsZQotICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3Rp
Y2VhYmxlLiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCi0gICAgLy8gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3Ci0gICAgLy8gQVNTRVJU
KGZyYWN0aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCi0gICAg
ICAgIGZyYWN0aW9uYWxUaW1lID0gMDsKLQotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNf
Y2FzdDxpbnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBjb25zdCBpbnQgaW50ZWdyYWxJdGVyYXRp
b25Db3VudCA9IHN0YXRpY19jYXN0PGludD4obV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkp
OwotICAgIGNvbnN0IGJvb2wgaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsID0gbV9hbmltYXRp
b24tPml0ZXJhdGlvbkNvdW50KCkgLSBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50OwotICAgIGlmICht
X2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50
SW5maW5pdGUgJiYgIWl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCkKLSAgICAgICAgaW50ZWdy
YWxUaW1lID0gc3RkOjptaW4oaW50ZWdyYWxUaW1lLCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50IC0g
MSk7Ci0KLSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0KLSAgICBpZiAoKCht
X2FuaW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25B
bHRlcm5hdGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgKChtX2FuaW1hdGlv
bi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVS
ZXZlcnNlKSAmJiAhKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCBtX2FuaW1hdGlvbi0+
ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAg
ICAgICBmcmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2Fs
ZSAhPSAxIHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRp
bWUgLSBvZmZzZXQpICogc2NhbGU7Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0K
LWRvdWJsZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZz
ZXQsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikgY29uc3QKLXsKLSAgICBp
ZiAocHJlQWN0aXZlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUo
KSkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFw
c2VkVGltZSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9u
KCk7Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKLSAgICAgICAg
ZHVyYXRpb24gKj0gbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoZmls
bGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gZHVyYXRpb247Ci0KLSAgICBk
b3VibGUgZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZShzY2FsZSwgZWxhcHNl
ZFRpbWUsIG9mZnNldCk7Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkg
PiAwICYmIGVsYXBzZWRUaW1lID49IGR1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChXVEY6OmlzSW50
ZWdyYWwoZnJhY3Rpb25hbFRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1l
OwotICAgIH0KLQotICAgIGlmICghdGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHRpbWluZ0Z1bmN0
aW9uID0gbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gdGltaW5n
RnVuY3Rpb24tPnRyYW5zZm9ybVRpbWUoZnJhY3Rpb25hbFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJh
dGlvbigpKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoU2Vj
b25kcyYgdGltZSwgYm9vbCYgaXNMb29waW5nKSBjb25zdAotewotICAgIC8vIERlY2lkZSB3aGVu
IHRoZSBlbmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgY29uc3QgZG91YmxlIGVs
YXBzZWREdXJhdGlvbiA9IHN0ZDo6bWF4KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9z
dGFydFRpbWUudmFsdWVPcigwKSwgMC4wKTsKLSAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsK
LSAgICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb24udmFsdWVPcigw
KTsKLQotICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90
YWxEdXJhdGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9u
LT5kdXJhdGlvbigpID4gMCA/IChtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNl
ZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkpIDogMDsKLSAgICAgICAgbmV4dEl0
ZXJhdGlvblRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgfQotICAg
IAotICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3Rh
bER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUgZW5kIHll
dAotICAgICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKLSAgICAgICAgaXNMb29w
aW5nID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZAot
ICAgICAgICBpc0xvb3BpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdGltZSA9IFNlY29u
ZHMgeyBkdXJhdGlvbkxlZnQgfTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRp
bmdPckxvb3BpbmdTdGF0ZSgpCi17Ci0gICAgU2Vjb25kcyB0OwotICAgIGJvb2wgaXNMb29waW5n
OwotICAgIGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOwotICAgIExPRyhBbmltYXRp
b25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gJXMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9h
bmltYXRpb25TdGF0ZSksIGlzTG9vcGluZyA/ICJMb29waW5nIiA6ICJFbmRpbmciKTsKLSAgICBt
X2FuaW1hdGlvblN0YXRlID0gaXNMb29waW5nID8gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgOiBB
bmltYXRpb25TdGF0ZTo6RW5kaW5nOwotfQotICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZnJlZXpl
QXRUaW1lKGRvdWJsZSB0KQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAg
ICAgIHJldHVybjsKLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgLy8gSWYgd2Ug
aGF2ZW4ndCBzdGFydGVkIHlldCwgbWFrZSBpdCBhcyBpZiB3ZSBzdGFydGVkLgotICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNl
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmlt
YXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAg
b25BbmltYXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWU6Om5vdygpKTsKLSAgICB9Ci0K
LSAgICBBU1NFUlQobV9zdGFydFRpbWUpOyAvLyBJZiBtX3N0YXJ0VGltZSBpcyB6ZXJvLCB3ZSBo
YXZlbid0IHN0YXJ0ZWQgeWV0LCBzbyB3ZSdsbCBnZXQgYSBiYWQgcGF1c2UgdGltZS4KLSAgICBp
ZiAodCA8PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApICsgdCAtIG1fYW5pbWF0aW9uLT5kZWxheSgpOwotCi0gICAgaWYg
KGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnN1
c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKG1fcGF1c2VUaW1l
LnZhbHVlKCkpKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBk
YXRlVGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAg
ICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlv
bkNvbnRyb2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS5zZWNvbmRzU2luY2VFcG9j
aCgpLnNlY29uZHMoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1l
KCkgY29uc3QKLXsKLSAgICBpZiAocGF1c2VkKCkpIHsKLSAgICAgICAgZG91YmxlIGRlbGF5T2Zm
c2V0ID0gKCFtX3N0YXJ0VGltZSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApID8gbV9hbmlt
YXRpb24tPmRlbGF5KCkgOiAwOwotICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWUudmFsdWVPcigw
KSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkgLSBkZWxheU9mZnNldDsKLSAgICB9Ci0KLSAgICBp
ZiAoIW1fc3RhcnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZl
KCkgfHwgZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBtX3RvdGFsRHVyYXRpb24u
dmFsdWVPcigwKTsKLQotICAgIHJldHVybiBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0RWxhcHNl
ZFRpbWUoZG91YmxlIHRpbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhv
ZAotICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwbGF5
KCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0KLXZvaWQgQW5p
bWF0aW9uQmFzZTo6cGF1c2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRo
b2QKLX0KLQotc3RhdGljIGJvb2wgY29udGFpbnNSb3RhdGlvbihjb25zdCBWZWN0b3I8UmVmUHRy
PFRyYW5zZm9ybU9wZXJhdGlvbj4+JiBvcGVyYXRpb25zKQotewotICAgIGZvciAoY29uc3QgYXV0
byYgb3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBl
KCkgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNv
bXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3QgRmxvYXRSZWN0JiBy
ZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBMYXlvdXRSZWN0JiBib3VuZHMp
IGNvbnN0Ci17Ci0gICAgRmxvYXRSZWN0IGZsb2F0Qm91bmRzID0gYm91bmRzOwotICAgIEZsb2F0
UG9pbnQgdHJhbnNmb3JtT3JpZ2luOwotICAgIAotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1Pcmln
aW4gPSBjb250YWluc1JvdGF0aW9uKHN0eWxlLnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKSkgfHwg
c3R5bGUudHJhbnNmb3JtKCkuYWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdpbigpOwotICAgIGlmIChh
cHBseVRyYW5zZm9ybU9yaWdpbikgewotICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSByZW5kZXJl
ckJveC5sb2NhdGlvbigpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnRyYW5zZm9y
bU9yaWdpblhZKCksIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgIC8vIElnbm9yZSB0cmFu
c2Zvcm1PcmlnaW5aIGJlY2F1c2Ugd2UnbGwgYmFpbCBpZiB3ZSBlbmNvdW50ZXIgYW55IDNEIHRy
YW5zZm9ybXMuCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2luKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHN0eWxlLnRyYW5zZm9y
bSgpLm9wZXJhdGlvbnMoKSkgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJh
bnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpIHsKLSAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3Qg
dHJlYXQgdGhpcyBhcyBhIGZ1bGwgcm90YXRpb24uIFRoaXMgY291bGQgdGFrZSBhbmdsZSBpbnRv
IGFjY291bnQgdG8gcmVkdWNlIGluZmxhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0g
Ym91bmRzT2ZSb3RhdGluZ1JlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9IGVsc2UgewotICAg
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICAgICAgb3Bl
cmF0aW9uLT5hcHBseSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgICAg
ICBpZiAoIXRyYW5zZm9ybS5pc0FmZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJh
dGlvbjo6TUFUUklYIHx8IG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6
TUFUUklYXzNEKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29t
cG9zZWQyVHlwZSB0b0RlY29tcDsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZGVjb21wb3Nl
Mih0b0RlY29tcCk7Ci0gICAgICAgICAgICAgICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVz
IGZyb20gdXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgICAgICAgICAg
ICAgaWYgKHRvRGVjb21wLmFuZ2xlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gdHJhbnNmb3JtLm1h
cFJlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFwcGx5VHJh
bnNmb3JtT3JpZ2luKQotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkodHJhbnNmb3JtT3JpZ2lu
KTsKLQotICAgIGJvdW5kcyA9IExheW91dFJlY3QoZmxvYXRCb3VuZHMpOwotICAgIHJldHVybiB0
cnVlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZp
YU1hdHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCB0cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5k
ZXJlckJveCwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgIGlmICgh
dHJhbnNmb3JtLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRyYW5z
Zm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5cGUgZnJvbURlY29tcDsKLSAgICB0cmFuc2Zv
cm0uZGVjb21wb3NlMihmcm9tRGVjb21wKTsKLSAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMg
dXMgZnJvbSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICBpZiAoZnJv
bURlY29tcC5hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm91bmRzID0gTGF5
b3V0UmVjdCh0cmFuc2Zvcm0ubWFwUmVjdChib3VuZHMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLQot
fQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9BbmltYXRpb25CYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQy
MDRlZDc5NmFlNTIxYWE4YjFjOGU0NzI4OTI0MDI0NTRhODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
QW5pbWF0aW9uQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0K
LSNpbmNsdWRlICJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclN0
eWxlQ29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRl
QW5pbWF0aW9uOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheW91
dFJlY3Q7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBU
aW1pbmdGdW5jdGlvbjsKLQotZW51bSBjbGFzcyBBbmltYXRlQ2hhbmdlIHsKLSAgICBTdHlsZUJs
ZW5kZWQgICAgICAgICAgICA9IDEgPDwgMCwgLy8gU3R5bGUgd2FzIGNoYW5nZWQuCi0gICAgU3Rh
dGVDaGFuZ2UgICAgICAgICAgICAgPSAxIDw8IDEsIC8vIEFuaW1hdGlvbiBzdGF0ZSgpIGNoYW5n
ZWQuCi0gICAgUnVubmluZ1N0YXRlQ2hhbmdlICAgICAgPSAxIDw8IDIsIC8vIEFuaW1hdGlvbiAi
cnVubmluZyBvciBwYXVzZWQiIGNoYW5nZWQuCi19OwotCi1lbnVtIGNsYXNzIEFuaW1hdGlvbklt
cGFjdCB7Ci0gICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAgICAgPSAxIDw8IDAsCi0gICAgRm9yY2Vz
U3RhY2tpbmdDb250ZXh0ICAgPSAxIDw8IDEKLX07Ci0KLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBw
dWJsaWMgUmVmQ291bnRlZDxBbmltYXRpb25CYXNlPgotICAgICwgcHVibGljIENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci0g
ICAgZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0
cmFuc2l0aW9uLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0gICAgdmlydHVhbCB+
QW5pbWF0aW9uQmFzZSgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJu
IG1fZWxlbWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IG92
ZXJyaWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gICAgZG91YmxlIGR1cmF0aW9u
KCkgY29uc3Q7Ci0KLSAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdo
IHRoZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKLSAgICAv
LyB0aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBk
ZWZlcnJlZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KLSAgICAvLyBJZiBzbywgd2Ugc3Rh
eSBpbiB0aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCBy
ZXR1cm5zIHRoZSBzdGFydCB0aW1lKS4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3Vy
cmVudCB0aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byBBbmltYXRp
b25TdGF0ZTo6TG9vcGluZwotICAgIC8vIG9yIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcuCi0gICAg
ZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBOZXcsICAgICAg
ICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5v
dCBydW5uaW5nIHlldAotICAgICAgICBTdGFydFdhaXRUaW1lciwgICAgICAgICAgICAgLy8gc3Rh
cnQgdGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZSwgICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0
IGFuaW1hdGlvbnMKLSAgICAgICAgU3RhcnRXYWl0UmVzcG9uc2UsICAgICAgICAgIC8vIGFuaW1h
dGlvbiBzdGFydGVkLCB3YWl0aW5nIGZvciByZXNwb25zZQotICAgICAgICBMb29waW5nLCAgICAg
ICAgICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBs
b29wIHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgRW5kaW5nLCAgICAg
ICAgICAgICAgICAgICAgIC8vIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVy
IHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgUGF1c2VkTmV3LCAgICAgICAgICAg
ICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24gd2FzIGNyZWF0ZWQKLSAgICAg
ICAgUGF1c2VkV2FpdFRpbWVyLCAgICAgICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmlt
YXRpb24gc3RhcnRlZAotICAgICAgICBQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGUsICAgLy8gaW4g
cGF1c2UgbW9kZSB3aGVuIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwCi0gICAgICAgIFBhdXNlZFdh
aXRSZXNwb25zZSwgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcg
c3RhdGUKLSAgICAgICAgUGF1c2VkUnVuLCAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBw
YXVzZWQgd2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQotICAgICAgICBEb25lLCAgICAg
ICAgICAgICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQg
YW5kIHJlbW92ZWQKLSAgICAgICAgRmlsbGluZ0ZvcndhcmRzICAgICAgICAgICAgIC8vIGFuaW1h
dGlvbiBoYXMgZW5kZWQgYW5kIGlzIHJldGFpbmluZyBpdHMgZmluYWwgdmFsdWUKLSAgICB9Owot
Ci0gICAgZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZUlucHV0IDogdWludDhfdCB7Ci0gICAgICAg
IE1ha2VOZXcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0ZQot
ICAgICAgICBTdGFydEFuaW1hdGlvbiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQK
LSAgICAgICAgUmVzdGFydEFuaW1hdGlvbiwgIC8vIGZvcmNlIGEgcmVzdGFydCBmcm9tIGFueSBz
dGF0ZQotICAgICAgICBTdGFydFRpbWVyRmlyZWQsICAgLy8gc3RhcnQgdGltZXIgZmlyZWQKLSAg
ICAgICAgU3R5bGVBdmFpbGFibGUsICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFy
dCBhbmltYXRpbmcKLSAgICAgICAgU3RhcnRUaW1lU2V0LCAgICAgIC8vIG1fc3RhcnRUaW1lIHdh
cyBzZXQKLSAgICAgICAgTG9vcFRpbWVyRmlyZWQsICAgIC8vIGxvb3AgdGltZXIgZmlyZWQKLSAg
ICAgICAgRW5kVGltZXJGaXJlZCwgICAgIC8vIGVuZCB0aW1lciBmaXJlZAotICAgICAgICBQYXVz
ZU92ZXJyaWRlLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQotICAg
ICAgICBSZXN1bWVPdmVycmlkZSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9u
Ci0gICAgICAgIFBsYXlTdGF0ZVJ1bm5pbmcsICAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5u
aW5nCi0gICAgICAgIFBsYXlTdGF0ZVBhdXNlZCwgICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4g
cGF1c2VkCi0gICAgICAgIEVuZEFuaW1hdGlvbiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBh
bnkgc3RhdGUKLSAgICB9OwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIEFu
aW1hdGlvblN0YXRlOjpOZXcgdG8gc3RhcnQgYW5pbWF0aW9uCi0gICAgdm9pZCB1cGRhdGVTdGF0
ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCwgZG91YmxlIHBhcmFtKTsKLQotICAgIC8vIEFu
aW1hdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKLSAgICB2b2lkIG9u
QW5pbWF0aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLSAgICB7Ci0g
ICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVT
ZXQsIHN0YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgfQotCi0g
ICAgLy8gQ2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQotICAgIHZvaWQg
dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSk7Ci0gICAgYm9vbCBwbGF5U3RhdGVQ
bGF5aW5nKCkgY29uc3Q7Ci0KLSAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyIHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgcHJlQWN0aXZlKCkg
Y29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlv
blN0YXRlOjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0VGltZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGUgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0UmVzcG9uc2U7Ci0gICAgfQotCi0gICAgYm9vbCBwb3N0QWN0aXZlKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotICAgIGJv
b2wgZmlsbGluZ0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25z
dCB7IHJldHVybiAhcG9zdEFjdGl2ZSgpICYmICFwcmVBY3RpdmUoKTsgfQotICAgIGJvb2wgcnVu
bmluZygpIGNvbnN0IHsgcmV0dXJuICFpc05ldygpICYmICFwb3N0QWN0aXZlKCk7IH0KLSAgICBi
b29sIHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNQ
YXVzZWRTdGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0
aW9uU3RhdGU6OlBhdXNlZE5ldyAmJiBzdGF0ZSA8PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVu
OyB9Ci0gICAgc3RhdGljIGJvb2wgaXNSdW5uaW5nU3RhdGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUp
IHsgcmV0dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJs
ZSAmJiBzdGF0ZSA8IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0KLSAgICBib29sIGluUGF1c2Vk
U3RhdGUoKSBjb25zdCB7IHJldHVybiBpc1BhdXNlZFN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpOyB9
Ci0gICAgYm9vbCBpblJ1bm5pbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUnVubmluZ1N0YXRl
KG1fYW5pbWF0aW9uU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0
YXJ0VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6OlN0YXJ0V2FpdFJlc3BvbnNlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFi
bGUoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRTdHlsZUF2YWlsYWJsZTsgfQotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc0FjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBkb3VibGUgcHJvZ3Jlc3MoZG91Ymxl
IHNjYWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51
bGxwdHIpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKLQotICAgIHZp
cnR1YWwgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYp
IGNvbnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3Qg
eyByZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVk
KCk7Ci0KLSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBjb25zdDsK
LQotICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmlt
YXRpb247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlv
bikgeyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsgfQot
Ci0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhp
cyB3aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCi0gICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFu
ZCBpcyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKLSAg
ICAvLyBzZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBp
dCB3aWxsIHByb2JhYmx5IG5vdCBnZXQKLSAgICAvLyBiYWNrIHRoZSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdGFydFRpbWVTZXQgaW5wdXQuCi0gICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFu
c2l0aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PwotICAgIHZpcnR1YWwgYm9vbCBhZmZl
Y3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCAvKnByb3BlcnR5Ki8pIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYWNj
ZWxlcmF0ZWRPbmx5ICYmICFtX2lzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgaWYgKCFhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBpblJ1bm5pbmdTdGF0ZSgpIHx8IGlu
UGF1c2VkU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNN
YXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01h
dGNoOyB9Ci0gICAgYm9vbCBmaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBvdmVycmlk
ZSB7IHJldHVybiBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2lmIEVOQUJMRShGSUxU
RVJTX0xFVkVMXzIpCi0gICAgYm9vbCBiYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgp
IGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0
Y2g7IH0KLSNlbmRpZgotICAgIGJvb2wgY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9
Ci0KLSAgICAvLyBGcmVlemUgdGhlIGFuaW1hdGlvbjsgdXNlZCBieSBEdW1wUmVuZGVyVHJlZS4K
LSAgICB2b2lkIGZyZWV6ZUF0VGltZShkb3VibGUgdCk7Ci0KLSAgICAvLyBQbGF5IGFuZCBwYXVz
ZSBBUEkKLSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0gICAgCi0gICAgZG91
YmxlIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIGNvbnN0OwotICAgIAotICAgIGRvdWJsZSBn
ZXRFbGFwc2VkVGltZSgpIGNvbnN0OwotICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3
aWxsIGFkanVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KLSAgICB2
b2lkIHNldEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0gICAgCi0gICAgdm9pZCBzdHlsZUF2YWlsYWJs
ZSgpIAotICAgIHsKLSAgICAgICAgQVNTRVJUKHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKTsK
LSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZh
aWxhYmxlLCAtMSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJy
aWRlQW5pbWF0aW9ucygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5p
bWF0aW9ucygpIHsgfQotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRp
b24oKSB7IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgfQotCi0gICAgLy8gVGhlc2UgYXJl
IGNhbGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMg
Y2FuIGRvIGFueSBleHRyYSB3b3JrCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQo
ZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9u
SXRlcmF0aW9uKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBv
bkFuaW1hdGlvbkVuZChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICAKLSAgICAvLyB0
aW1lT2Zmc2V0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgd2hlbiB0aGUgYW5p
bWF0aW9uIHNob3VsZCBzdGFydC4gTmVnYXRpdmUgdmFsdWVzIGFyZSBPSy4KLSAgICAvLyBSZXR1
cm4gdmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhwZWN0IGFuIGFzeW5jaHJvbm91cyBub3Rp
ZnlBbmltYXRpb25TdGFydGVkKCkgY2FsbGJhY2suCi0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5p
bWF0aW9uKGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyB0
aW1lT2Zmc2V0IGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhbmltYXRpb24gaXMgYmVpbmcgcGF1
c2VkLgotICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgLyp0aW1lT2Zmc2V0
Ki8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKmZpbGxpbmdGb3J3
YXJkcyovID0gZmFsc2UpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSYgdW5h
bmltYXRlZFN0eWxlKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3Bp
bmdTdGF0ZSgpOwotCi0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvblN0YXRlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxj
KEVsZW1lbnQqKTsKLSAgICAKLSAgICB2b2lkIGdldFRpbWVUb05leHRFdmVudChTZWNvbmRzJiB0
aW1lLCBib29sJiBpc0xvb3BpbmcpIGNvbnN0OwotCi0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1l
KGRvdWJsZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBkb3VibGUgb2Zmc2V0KSBjb25zdDsK
LQotICAgIC8vIFRoZXNlIHJldHVybiB0cnVlIGlmIHdlIGNhbiBlYXNpbHkgY29tcHV0ZSBhIGJv
dW5kaW5nIGJveCBieSBhcHBseWluZyB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gdG8gdGhlIGJvdW5k
cyByZWN0LgotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlz
dChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91
dFJlY3QmIGJvdW5kcykgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRW
aWFNYXRyaXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUm
LCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2lz
QWNjZWxlcmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3Rz
TWF0Y2ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBm
YWxzZSB9OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgYm9vbCBtX2JhY2tkcm9w
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBDb21wb3Np
dGVBbmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAvLyBJZGVhbGx5IHRoaXMgd291bGQg
YmUgYSByZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xlYXJlZCBpZiBhbiBhbmltYXRpb24g
aXMgZGVzdHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFjay4KLSAgICBSZWY8QW5pbWF0aW9u
PiBtX2FuaW1hdGlvbjsKLQotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV9zdGFydFRpbWU7Ci0gICAg
T3B0aW9uYWw8ZG91YmxlPiBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFy
dFRpbWUgeyAwIH07Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3RvdGFsRHVyYXRpb247Ci0gICAg
T3B0aW9uYWw8ZG91YmxlPiBtX25leHRJdGVyYXRpb25EdXJhdGlvbjsKLQotICAgIEFuaW1hdGlv
blN0YXRlIG1fYW5pbWF0aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07Ci0gICAgYm9v
bCBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMmFjOWRhNzhkMzI2YzU4NDE1MmYyMzlmMjdkZTgzNDEyZjYxNzQuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSw4MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1
ZGUgIkFuaW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNT
U1Byb3BlcnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVW
aWV3LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIK
LSNpbmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVHJhbnNpdGlvbkV2ZW50LmgiCi0j
aW5jbHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRUcmFuc2l0
aW9uRXZlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbGxvdyBhIGxpdHRsZSBt
b3JlIHRoYW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBsZWFzdCBoaXQgdGhhdCBmcmFt
ZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9uVGltZXJEZWxheSB7IDE1X21z
IH07Ci0vLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gMzBmcHMgdG8gbWFrZSBzdXJlIHdlIGNh
biBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5p
bWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSB7IDMwX21zIH07Ci0KLWNsYXNzIEFuaW1hdGlvblBy
aXZhdGVVcGRhdGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJs
b2NrKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQot
ICAgICAgICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAg
IHsKLSAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7
Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2soKQotICAgIHsK
LSAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAg
IH0KLSAgICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25D
b250cm9sbGVyOwotfTsKLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fYW5pbWF0aW9uVGlt
ZXIoKnRoaXMsICZDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJG
aXJlZCkKLSAgICAsIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKnRoaXMsICZDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJG
aXJlZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRl
Q291bnQoMCkKLSAgICAsIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24oZmFsc2Up
Ci0gICAgLCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChmYWxzZSkKLXsKLX0K
LQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5DU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZSgpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBjb21w
b3NpdGUgYW5pbWF0aW9ucyBoZXJlIGJlY2F1c2UgdGhlCi0gICAgLy8gZGVzdHJ1Y3RvciBvZiBD
b21wb3NpdGVBbmltYXRpb24gd2lsbCBjYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBiYWNrLgot
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9ucy5jbGVhcigpOwotfQotCi1Db21wb3NpdGVBbmltYXRp
b24mIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRp
b24oRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnNldEhhc0NTU0FuaW1hdGlvbigp
OwotCi0gICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJlKCZlbGVt
ZW50LCBbJl0gewotICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRo
aXMpOwotICAgIH0pOwotCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVu
dCgmZWxlbWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+
c3VzcGVuZEFuaW1hdGlvbnMoKTsKLQotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1
ZTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoRWxlbWVu
dCYgZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNDU1NBbmltYXRpb24oKSA9PSBt
X2NvbXBvc2l0ZUFuaW1hdGlvbnMuY29udGFpbnMoJmVsZW1lbnQpKTsKLQotICAgIGlmICghZWxl
bWVudC5oYXNDU1NBbmltYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1l
bnQuY2xlYXJIYXNDU1NBbmltYXRpb24oKTsKLQotICAgIGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFu
aW1hdGlvbnMuZmluZCgmZWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HKEFuaW1hdGlvbnMs
ICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAmZWxl
bWVudCk7Ci0KLSAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChj
b25zdCBFdmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluZm8uZWxlbWVu
dC5wdHIoKSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rp
c3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjdXJyZW50RWxlbWVudCkgewotICAg
ICAgICByZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0g
ICAgCi0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBh
cmUgc3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIGludmFsaWRhdGVT
dHlsZUZvclN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCi0gICAgLy8gRklYTUU6IFRoZSBjb2Rl
IGJlbG93IGRvZXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cyBy
ZWdhcmRpbmcgc3VzcGVuZGVkIHN0YXRlLgotICAgIGF1dG8mIGFuaW1hdGlvbiA9ICppdC0+dmFs
dWU7Ci0gICAgYm9vbCByZXN1bHQgPSBhbmltYXRpb24uaXNTdXNwZW5kZWQoKTsKLSAgICBhbmlt
YXRpb24uY2xlYXJFbGVtZW50KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMucmVtb3Zl
KGl0KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2Fs
bFNldENoYW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBBbmltYXRpb25Q
cml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotICAgIGJvb2wgY2FsbGVkU2V0Q2hhbmdlZCA9IGZhbHNl
OwotCi0gICAgZm9yIChhdXRvJiBjb21wb3NpdGVBbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqY29tcG9z
aXRlQW5pbWF0aW9uLnZhbHVlOwotICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1N1c3BlbmRlZCgp
ICYmIGFuaW1hdGlvbi5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlm
ICh0ICYmICghdGltZVRvTmV4dFNlcnZpY2UgfHwgdC52YWx1ZSgpIDwgdGltZVRvTmV4dFNlcnZp
Y2UudmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0LnZhbHVl
KCk7Ci0gICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYgdGltZVRvTmV4dFNlcnZp
Y2UudmFsdWUoKSA9PSAwX3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQg
IT0gQ2FsbFNldENoYW5nZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgICAgIAotICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9zaXRlQW5p
bWF0aW9uLmtleTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUp
OwotICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgICAg
ICAgICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LSAgICB9Ci0KLSAgICBpZiAoY2FsbGVkU2V0Q2hhbmdlZCkKLSAgICAgICAgbV9mcmFtZS5kb2N1
bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdGltZVRvTmV4dFNl
cnZpY2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFu
aW1hdGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE9wdGlvbmFs
PFNlY29uZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotCi0gICAgY29uc3QgQ29tcG9zaXRlQW5pbWF0
aW9uKiBjb21wb3NpdGVBbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVt
ZW50KTsKLSAgICBpZiAoIWNvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKSAmJiBjb21w
b3NpdGVBbmltYXRpb24tPmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdGltZVRvTmV4dFNlcnZp
Y2UgPSBjb21wb3NpdGVBbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBpZiAo
IXRpbWVUb05leHRTZXJ2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hbmltYXRp
b25UaW1lci5pc0FjdGl2ZSgpICYmIChtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkg
fHwgbV9hbmltYXRpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCkgPD0gdGltZVRvTmV4dFNlcnZp
Y2UudmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNh
bGxTZXRDaGFuZ2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgT3B0aW9uYWw8
U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFu
Z2VkKTsKLQotICAgIExPRyhBbmltYXRpb25zLCAidXBkYXRlQW5pbWF0aW9uVGltZXI6IHRpbWVU
b05leHRTZXJ2aWNlIGlzICUuMmYiLCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZU9yKFNlY29uZHMg
eyAtMSB9KS52YWx1ZSgpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2VydmljZSwgd2Ug
d2FudCB0byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5nCi0gICAgaWYg
KCF0aW1lVG9OZXh0U2VydmljZSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0Fj
dGl2ZSgpKQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3YW50IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdl
IHN0YXJ0IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRp
bmcKLSAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byog
cGFnZSA9IG1fZnJhbWUucGFnZSgpOwotICAgICAgICBib29sIHNob3VsZFRocm90dGxlID0gcGFn
ZSAmJiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgU2Vjb25kcyBkZWxh
eSA9IHNob3VsZFRocm90dGxlID8gYW5pbWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSA6IGFuaW1h
dGlvblRpbWVyRGVsYXk7Ci0KLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZl
KCkgfHwgbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IGRlbGF5KQotICAgICAg
ICAgICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhkZWxheSk7Ci0gICAgICAgIHJl
dHVybjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gc3RhcnQgYSBvbmUt
c2hvdCB0aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIG1fYW5pbWF0aW9uVGltZXIuc3Rh
cnRPbmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVk
KCkKLXsKLSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKLXsKLSAg
ICAvLyBQcm90ZWN0IHRoZSBmcmFtZSBmcm9tIGdldHRpbmcgZGVzdHJveWVkIGluIHRoZSBldmVu
dCBoYW5kbGVyCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICBib29s
IHVwZGF0ZVN0eWxlID0gIW1fZXZlbnRzVG9EaXNwYXRjaC5pc0VtcHR5KCkgfHwgIW1fZWxlbWVu
dENoYW5nZXNUb0Rpc3BhdGNoLmlzRW1wdHkoKTsKLQotICAgIC8vIGZpcmUgYWxsIHRoZSBldmVu
dHMKLSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RGTW92
ZShtX2V2ZW50c1RvRGlzcGF0Y2gpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHNUb0Rp
c3BhdGNoKSB7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBldmVudC5lbGVtZW50OwotICAg
ICAgICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZl
bnQpCi0gICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50Ojpj
cmVhdGUoZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNl
dWRvRWxlbWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgp
KSwgV1RGOjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVs
ZW1lbnQuZGlzcGF0Y2hFdmVudChBbmltYXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlw
ZSwgZXZlbnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0Vs
ZW1lbnROYW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6bnVsbG9wdCwgbnVs
bHB0cikpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hhbmdl
c1RvRGlzcGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBt
X2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwotCi0gICAgaWYgKHVwZGF0ZVN0eWxl
KQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLX0K
LQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlcigpCi17Ci0gICAgaWYgKCFtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNw
YXRjaGVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNo
ZXIuc3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3Ry
aW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQot
ewotICAgIG1fZXZlbnRzVG9EaXNwYXRjaC5hcHBlbmQoeyBlbGVtZW50LCBldmVudFR5cGUsIG5h
bWUsIGVsYXBzZWRUaW1lIH0pOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNo
ZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVu
dENoYW5nZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRDaGFu
Z2VzVG9EaXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5n
ZXNUb0Rpc3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9
PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBzdGFydFVwZGF0ZVN0eWxl
SWZOZWVkZWREaXNwYXRjaGVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJlZCgpCi17Ci0gICAgT3B0aW9uYWw8U2Vj
b25kcz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2Vk
KTsKLQotICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT52aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIC8vIFdlIG5l
ZWQgdG8ga2VlcCB0aGUgZnJhbWUgYWxpdmUsIHNpbmNlIGl0IG93bnMgdXMuCi0gICAgUmVmPEZy
YW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICAvLyBUaGUgYW5pbWF0aW9uIHRpbWVyIG1p
Z2h0IGZpcmUgYmVmb3JlIHRoZSBsYXlvdXQgdGltZXIsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3
ZSBtaWdodCBjcmVhdGUgc29tZSBhbmltYXRpb25zIHdpdGggaW5jb3JyZWN0Ci0gICAgLy8gdmFs
dWVzIGlmIHdlIGRvbid0IGxheW91dCBmaXJzdC4KLSAgICBpZiAobV9yZXF1aXJlc0xheW91dCkg
ewotICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS5kb2N1bWVudCgpLT52aWV3
KCkpIHsKLSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAg
ICAgICAgICAgZnJhbWVWaWV3LT5mb3JjZUxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1f
cmVxdWlyZXNMYXlvdXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYW5pbWF0
aW9uVXBkYXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBu
bwotICAgIC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zKQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhp
cyk7Ci0KLSAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0
Q2hhbmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVu
IGRvIGFuIGltbWVkaWF0ZQotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQuIEl0IHdpbGwgdGhl
biBjYWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0
aW9uVGltZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdh
eSwgdG8gYXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlv
biBjb21wbGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0g
ICAgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVu
dCYgcmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFy
ZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiBhbmlt
YXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0g
ICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYW5p
bWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSk7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0
aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5n
ZXQocmVuZGVyZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJv
cGVydHksIHRydWUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1
cGRhdGVUaHJvdHRsaW5nU3RhdGUoKQotewotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0K
LSAgICBmb3IgKGF1dG8qIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7
IGNoaWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmco
KSkKLSAgICAgICAgY2hpbGRGcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFu
aW1hdGlvbkludGVydmFsKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBJTkZJTklUWSB9OwotCi0gICAgcmV0
dXJuIFNlY29uZHMgeyBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQot
ewotICAgIGlmIChpc1N1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdXNwZW5k
QW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2
ZXJzZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZp
cnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLQot
ICAgIG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIWlzU3VzcGVuZGVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2Zy
YW1lLmRvY3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVzCi0gICAgZm9yIChG
cmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9
IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmxlZ2FjeUFuaW1h
dGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsK
LX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uc0FyZVN1
c3BlbmRlZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gaXNT
dXNwZW5kZWQoKSB8fCBtX3N1c3BlbmRlZERvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmRldGFjaEZyb21Eb2N1bWVu
dChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMucmVtb3Zl
KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3Vz
cGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYg
KGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci0KLSAgICBB
bmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9y
IChhdXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYg
KCZhbmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5p
bWF0aW9uLnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFu
aW1hdGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAg
aWYgKCFhbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICBkZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgQW5p
bWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAo
YXV0byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgm
YW5pbWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1h
dGlvbi52YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1h
dGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0
YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBp
ZiAoIWFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkgfHwgYWxsb3dz
TmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJlc3VtZUFuaW1hdGlvbnNG
b3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sIGFsbG93ZWQp
Ci17Ci0gICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBhbGxvd2VkOwot
fQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0
VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkK
LXsKLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNv
bXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBh
dXNlQW5pbWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQuaW52YWxpZGF0
ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUo
RWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0g
ICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3Np
dGVBbmltYXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRy
YW5zaXRpb25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIGVs
ZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRl
ZERpc3BhdGNoZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOwotfQotCi1Nb25vdG9uaWNUaW1lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0
aW9uVXBkYXRlQ291bnQpOwotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpCi0g
ICAgICAgIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7
Ci0KLSAgICByZXR1cm4gbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUudmFsdWUoKTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5BbmltYXRpb25VcGRhdGUo
KQotewotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KQotICAgICAgICBtX2Jl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICArK21fYmVnaW5Bbmlt
YXRpb25VcGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6ZW5kQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVw
ZGF0ZUNvdW50ID4gMCk7Ci0gICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCA9PSAx
KSB7Ci0gICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgICAgIGlmICghbV93YWl0aW5nRm9y
QXN5bmNTdGFydE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICB9Ci0gICAgLS1tX2JlZ2luQW5pbWF0aW9u
VXBkYXRlQ291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
Y2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIExPRyhB
bmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgcmVjZWl2ZWRTdGFy
dFRpbWVSZXNwb25zZSAlZiIsIHRoaXMsIHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRz
KCkpOwotCi0gICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwot
ICAgIHN0YXJ0VGltZVJlc3BvbnNlKHRpbWUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRlZFN0eWxlRm9yRWxl
bWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9z
aXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmlt
YXRpb25VcGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBhdXRvIGFuaW1hdGluZ1N0eWxlID0gYW5p
bWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7Ci0gICAgaWYgKCFhbmltYXRpbmdTdHlsZSkKLSAg
ICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFuaW1hdGluZ1N0eWxlOwot
fQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZB
bmltYXRpb24oRWxlbWVudCYgZWxlbWVudCwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewot
ICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICgh
YW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBmYWxz
ZSkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbi0+Y29tcHV0
ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcyk7Ci19Ci0KLXVuc2lnbmVkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1l
bnQqIGRvY3VtZW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAg
ICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAg
ICBpZiAoJmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAg
ICBjb3VudCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwot
ICAgIH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2Um
IGFuaW1hdGlvbikKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UucmVtb3ZlKCZhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5h
ZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1h
dGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUo
JmFuaW1hdGlvblRvUmVtb3ZlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZTo6c3R5bGVBdmFpbGFibGUoKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0
ZXJzIGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3YWl0
aW5nQW5pbWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKQotICAgICAgICB3YWl0
aW5nQW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25C
YXNlJiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQotewotICAgIC8vIElmIHdpbGxH
ZXRSZXNwb25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3
YWl0aW5nIGZvciBhIHJlc3BvbnNlCi0gICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNh
bGwgdG8gbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2Ug
ZG9uJ3QgbmVlZCB0byBhZGQgaXQgdG8gdGhpcyBsaXN0LiBXZSBqdXN0IHNldCBhIHdhaXRpbmdG
b3JBUmVzcG9uc2UgZmxhZyAKLSAgICAvLyB3aGljaCBzYXlzIHdlIGFyZSB3YWl0aW5nIGZvciB0
aGUgcmVzcG9uc2UuIElmIHdpbGxHZXRSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24g
Ci0gICAgLy8gaXMgbm90IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJh
dGhlciBmb3IgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCBmb3IgCi0gICAgLy8gYW5vdGhlciBh
bmltYXRpb24gdG8gd2hpY2ggaXQgd2lsbCBzeW5jLgotICAgIC8vCi0gICAgLy8gV2hlbiBlbmRB
bmltYXRpb25VcGRhdGUoKSBpcyBjYWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5n
Rm9yQVJlc3BvbnNlIGZsYWcgaXMKLSAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4g
YW5kIHdpbGwgZG8gb3VyIHdvcmsgd2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNh
bGwKLSAgICAvLyBjb21lcyBpbi4gSWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRp
bmcgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCwgc28gd2Ugd2lsbAotICAgIC8vIGRvIG91ciB3
b3JrIHJpZ2h0IGF3YXkuIEluIGJvdGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFy
dFJlc3BvbnNlKCkgbWV0aG9kCi0gICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJz
dCBjYXNlIHdlIHNlbmQgaW4gdGhlIHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgp
LgotICAgIC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFu
aW1hdGlvblVwZGF0ZVRpbWUoKS4KLSAgICAvLwotICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6
ZSBhbGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUg
c2FtZSAKLSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgotICAgIC8vCi0KLSAgICBp
ZiAod2lsbEdldFJlc3BvbnNlKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZp
Y2F0aW9uID0gdHJ1ZTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZS5hZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFu
aW1hdGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICBp
ZiAobV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKLSAg
ICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShNb25v
dG9uaWNUaW1lIHRpbWUpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5k
IHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLQotICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9u
IDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKQotICAgICAgICBhbmlt
YXRpb24tPm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsKLSAgICAKLSAgICBtX2FuaW1h
dGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKLSAgICBtX3dhaXRpbmdG
b3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYg
YW5pbWF0aW9uKQotewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxl
clByaXZhdGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9u
KTsKLQotICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7
Ci0gICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5p
bWF0aW9uKTsKLQotICAgIGJvb2wgYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0g
ZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3RhcnRUaW1lUmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+d2FpdGluZ0ZvclN0
YXJ0VGltZSgpICYmIGFuaW1hdGlvbi0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBh
bnlBbmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFueUFuaW1hdGlvbnNXYWl0aW5nRm9y
QXN5bmNTdGFydCkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9
IGZhbHNlOwotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9s
bGVyKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZGF0YShtYWtlVW5pcXVlPENTU0FuaW1hdGlvbkNv
bnRyb2xsZXJQcml2YXRlPihmcmFtZSkpCi17Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
On5DU1NBbmltYXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBp
ZiAoIW1fZGF0YS0+Y2xlYXIoZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChl
bGVtZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIHJl
dHVybjsKLSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0
ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIGVsZW1lbnQuaW52
YWxpZGF0ZVN0eWxlKCk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0ZSBDU1NBbmltYXRpb25Db250cm9s
bGVyOjp1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxl
JiBuZXdTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGJvb2wgaGFz
T3JIYWRBbmltYXRpb25zID0gKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zT3JU
cmFuc2l0aW9ucygpKSB8fCBuZXdTdHlsZS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpOwot
ICAgIGlmICghaGFzT3JIYWRBbmltYXRpb25zKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAg
aWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8g
RG9uJ3QgcnVuIHRyYW5zaXRpb25zIHdoZW4gcHJpbnRpbmcuCi0gICAgaWYgKGVsZW1lbnQuZG9j
dW1lbnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9t
IGEgaGFzaHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQotICAgIC8vIGFnYWluc3QgdGhlIGFu
aW1hdGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gSWYgZGVz
dGluYXRpb24gdmFsdWVzCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0
aW9uLiBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgot
ICAgIC8vIGEgbmV3IHN0eWxlLgotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVB
bmltYXRpb24gPSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAg
ICBhdXRvIHVwZGF0ZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9sZFN0
eWxlLCBuZXdTdHlsZSk7Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIo
KTsKLSAgICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUu
YW5pbWF0aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewot
ICAgICAgICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKLSAg
ICAgICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5
b3V0KCkpCi0gICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAg
IG1fZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAg
ICBmcmFtZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXBk
YXRlOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKLQotICAgIGlmIChy
ZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIu
ZWxlbWVudCgpKQotICAgICAgICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVt
ZW50KCpyZW5kZXJlci5lbGVtZW50KCkpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJl
c3VsdCA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLQotICAgIHJl
dHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBMYXlvdXRSZWN0JiBib3Vu
ZHMpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVy
biB0cnVlOwotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0
aW9ucygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RhdGEtPmNvbXB1
dGVFeHRlbnRPZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwotfQotCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVy
RWxlbWVudCYgcmVuZGVyZXIsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIExPRyhB
bmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlciAlcCBub3RpZnlBbmltYXRpb25TdGFy
dGVkIG9uIHJlbmRlcmVyICVwLCB0aW1lPSVmIiwgdGhpcywgJnJlbmRlcmVyLCBzdGFydFRpbWUu
c2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIFVOVVNFRF9QQVJBTShyZW5kZXJl
cik7Ci0KLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlz
KTsKLSAgICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKLX0K
LQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBB
bmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1
cm4gbV9kYXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBuYW1lLCB0KTsKLX0KLQot
dW5zaWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KERvY3VtZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5udW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJp
bmcmIHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmlt
YXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9kYXRhLT5wYXVzZVRyYW5zaXRp
b25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHksIHQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVu
ZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJl
ci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJl
bmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNS
dW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIu
c3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJl
bmRlcmVyKHJlbmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmlzU3VzcGVu
ZGVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlv
bnMoKQotewotICAgIExPRyhBbmltYXRpb25zLCAiY29udHJvbGxlciBpcyBzdXNwZW5kaW5nIGFu
aW1hdGlvbnMiKTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFu
aW1hdGlvbnMsICJjb250cm9sbGVyIGlzIHJlc3VtaW5nIGFuaW1hdGlvbnMiKTsKLSAgICBtX2Rh
dGEtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVy
OjphbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVy
biBtX2RhdGEtPmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3Bl
bmRlZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbGxvd3NOZXdBbmltYXRpb25z
V2hpbGVTdXNwZW5kZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6c2VydmljZUFuaW1hdGlvbnMoKQotewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxs
YmFja0ZpcmVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlVGhy
b3R0bGluZ1N0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwot
fQotCi1TZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbkludGVydmFsKCkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25JbnRlcnZhbCgpOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1
bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9u
c0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRp
b25Db250cm9sbGVyOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewot
ICAgIHJldHVybiBtX2RhdGEtPmRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZv
aWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJzdXNwZW5kaW5nIGFu
aW1hdGlvbnMgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIG1fZGF0YS0+c3VzcGVu
ZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVu
dCkKLXsKLSAgICBMT0coQW5pbWF0aW9ucywgInJlc3VtaW5nIGFuaW1hdGlvbnMgZm9yIGRvY3Vt
ZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVw
ZGF0ZUJsb2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50
KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1h
dGlvbnNJZk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1h
dGlvbnMsICJhbmltYXRpb25zIG1heSBzdGFydCBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7
Ci0KLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsK
LSAgICBtX2RhdGEtPnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKGRvY3VtZW50KTsKLX0K
LQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17
Ci0gICAgbV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5lbmRB
bmltYXRpb25VcGRhdGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBw
b3J0c0FjY2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
KQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0
eUlzQWNjZWxlcmF0ZWQocHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6Omhhc0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmhhc0FuaW1h
dGlvbnMoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRlbGV0ZWQg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlY2Q2MDU4NDUzOThhYThlNzVhOWE1MjY1ZTAwZWY2NGQ2
MjIyODEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysg
L2Rldi9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9u
QmFzZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJFbGVtZW50
LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIExheW91dFJlY3Q7Ci1j
bGFzcyBSZW5kZXJFbGVtZW50OwotCi1zdHJ1Y3QgQW5pbWF0aW9uVXBkYXRlIHsKLSAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIE9wdGlvblNldDxBbmltYXRpb25J
bXBhY3Q+IGltcGFjdDsKLQotfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcihGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7
Ci0KLSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYpOwotICAgIEFuaW1hdGlvblVw
ZGF0ZSB1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwotCi0g
ICAgLy8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5z
Zm9ybSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCi0gICAgLy8gdXNpbmcgdGhlIGdp
dmVuIHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBSZXR1cm4gZmFsc2Ug
aWYgdGhlcmUgaXMgc29tZQotICAgIC8vIHRyYW5zZm9ybSBhbmltYXRpb24gYnV0IHdlIHdlcmUg
dW5hYmxlIHRvIGNoZWFwbHkgY29tcHV0ZSBpdHMgYWZmZWN0IG9uIHRoZSBleHRlbnQuCi0gICAg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3Qm
KSBjb25zdDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gYWNjZWxlcmF0ZWQgYW5p
bWF0aW9uIG9yIHRyYW5zaXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgdG8gYW5pbWF0ZS4KLSAg
ICB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYsIE1vbm90b25pY1Rp
bWUgc3RhcnRUaW1lKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRpb25B
dFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8g
YmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRy
YW5zaXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0
KTsgLy8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5z
aWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJl
IHVzZWQgb25seSBmb3IgdGVzdGluZwotICAgIAotICAgIC8vICJSdW5uaW5nIiBoZXJlIG1lYW5z
IHRoZSBhbmltYXRpb24gaXMgcnVubmluZyBvciBwYXVzZWQuCi0gICAgYm9vbCBpc1J1bm5pbmdB
bmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsK
LSAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJF
bGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGlzU3VzcGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5p
bWF0aW9ucygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwot
ICAgIHZvaWQgc2VydmljZUFuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGlu
Z1N0YXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBhbmltYXRpb25JbnRlcnZhbCgp
IGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRp
b25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFuaW1h
dGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNo
RnJvbURvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1
c3BlbmRlZChEb2N1bWVudCopOwotCi0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwot
ICAgIHZvaWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29s
IGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVf
RVhQT1JUIHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwot
ICAgIAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3Bl
cnR5KENTU1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3Q7Ci0K
LXByaXZhdGU6Ci0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlPiBtX2RhdGE7Ci19OwotCi1jbGFzcyBBbmltYXRpb25VcGRhdGVCbG9jayB7Ci1w
dWJsaWM6Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlciog
YW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5p
bWF0aW9uQ29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xs
ZXIpCi0gICAgICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmJlZ2luQW5pbWF0aW9uVXBk
YXRlKCk7Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25VcGRhdGVCbG9jaygpCi0gICAgewot
ICAgICAgICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICAgICAgbV9hbmltYXRp
b25Db250cm9sbGVyLT5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250cm9sbGVyOwotfTsKLQotfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IGQzMjAzNzdkZWNjOWM1MzRkZWViN2I0ZTk1Y2UwZWQyZDg1YWVkYjEu
LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysg
L2Rldi9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4g
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBv
ZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9t
b3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBz
cGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
Ci0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
Ci0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9u
QmFzZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNp
bmNsdWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBEb2N1bWVu
dDsKLWNsYXNzIEZyYW1lOwotCi1lbnVtIFNldENoYW5nZWQgeyBEb05vdENhbGxTZXRDaGFuZ2Vk
LCBDYWxsU2V0Q2hhbmdlZCB9OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgdW50aWwgdGhl
IG5leHQgYW5pbWF0aW9uIG5lZWRzIHRvIGJlIHNlcnZpY2VkLCBvciAtMSBpZiB0aGVyZSBhcmUg
bm9uZS4KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQg
Y2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVwZGF0ZUFu
aW1hdGlvblRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFu
Z2VkKTsKLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9u
KEVsZW1lbnQmKTsKLSAgICBib29sIGNsZWFyKEVsZW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRl
U3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnRVcGRhdGVTdHls
ZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwotICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1l
bnQmLCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91
YmxlIGVsYXBzZWRUaW1lKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKEVs
ZW1lbnQmKTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzU3VzcGVuZGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlv
bnMoKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZy
YW1lQ2FsbGJhY2tGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsK
LSAgICBTZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN1c3Bl
bmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1h
dGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3Bl
bmRlZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5v
dFN1c3BlbmRlZChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KERvY3Vt
ZW50Kik7Ci0KLSAgICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxl
bWVudCYsIENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0
ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25z
dDsKLQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21T
dHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShF
bGVtZW50JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwotICAgIHVuc2lnbmVk
IG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OwotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yRWxlbWVudChFbGVtZW50Jik7
Ci0KLSAgICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVj
dCYpIGNvbnN0OwotCi0gICAgTW9ub3RvbmljVGltZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KTsKLSAgICAKLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRB
bmltYXRpb25VcGRhdGUoKTsKLSAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9u
b3RvbmljVGltZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5
bGUoQW5pbWF0aW9uQmFzZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5n
Rm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3Bv
bnNlKTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJl
c3BvbnNlKEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3Zl
ZChBbmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxl
bWVudChFbGVtZW50Jik7Ci0KLSAgICBib29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3Bl
bmRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVk
OyB9Ci0gICAgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7
Ci0KLSAgICB2b2lkIHNldFJlcXVpcmVzTGF5b3V0KCkgeyBtX3JlcXVpcmVzTGF5b3V0ID0gdHJ1
ZTsgfQotCi1wcml2YXRlOgotICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAg
dm9pZCBzdHlsZUF2YWlsYWJsZSgpOwotICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxl
KCk7Ci0gICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLQotICAgIEhh
c2hNYXA8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21w
b3NpdGVBbmltYXRpb25zOwotICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7Ci0gICAgVGltZXIg
bV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKLSAgICBGcmFtZSYgbV9mcmFtZTsKLQot
ICAgIHN0cnVjdCBFdmVudFRvRGlzcGF0Y2ggewotICAgICAgICBSZWY8RWxlbWVudD4gZWxlbWVu
dDsKLSAgICAgICAgQXRvbVN0cmluZyBldmVudFR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwot
ICAgICAgICBkb3VibGUgZWxhcHNlZFRpbWU7Ci0gICAgfTsKLSAgICBWZWN0b3I8RXZlbnRUb0Rp
c3BhdGNoPiBtX2V2ZW50c1RvRGlzcGF0Y2g7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9l
bGVtZW50Q2hhbmdlc1RvRGlzcGF0Y2g7Ci0gICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3VzcGVu
ZGVkRG9jdW1lbnRzOwotCi0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gbV9iZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWU7Ci0KLSAgICB1c2luZyBBbmltYXRpb25zU2V0ID0gSGFzaFNldDxSZWZQ
dHI8QW5pbWF0aW9uQmFzZT4+OwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGlu
Z0ZvclN0eWxlOwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0
VGltZVJlc3BvbnNlOwotCi0gICAgaW50IG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLQot
ICAgIGJvb2wgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbjsKLSAgICBib29sIG1f
aXNTdXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZXF1aXJlc0xheW91dCB7IGZhbHNl
IH07Ci0KLSAgICAvLyBVc2VkIHRvIGZsYWcgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHBy
ZXZpb3VzIGJ1Z2d5Ci0gICAgLy8gYmVoYXZpb3Igb2YgYWxsb3dpbmcgbmV3IHRyYW5zaXRpb25z
IGFuZCBhbmltYXRpb25zIHRvCi0gICAgLy8gcnVuIGV2ZW4gd2hlbiB0aGlzIG9iamVjdCBpcyBz
dXNwZW5kZWQuCi0gICAgYm9vbCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsK
LX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMWJlNzU5YjA4MTYwOWJmNTMzMzQwZDMwYTAyNjE0NzM3NjUwNTAwNS4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVs
bApAQCAtMSwxODcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIw
MDksIDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJp
Z2h0IChDKSAyMDEyLCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgi
Ci0KLSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJD
U1NDcm9zc2ZhZGVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1
ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNs
dWRlICJDbGlwUGF0aE9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKLSNp
bmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2lu
Y2x1ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKLSNpbmNsdWRlICJGb250VGFnZ2VkU2V0
dGluZ3MuaCIKLSNpbmNsdWRlICJHYXBMZW5ndGguaCIKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYXRyaXgz
RFRyYW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlv
bi5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0j
aW5jbHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1h
Z2UuaCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5
bGVSZXNvbHZlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0j
aW5jbHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQu
aD4KLSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlckNv
bXBhcmlzb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90
ZXh0L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5l
IGludCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9t
LCBpbnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8s
IHByb2dyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUg
cHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJl
dHVybiBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNz
KTsKLX0KLQotc3RhdGljIGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0K
LQotc3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQot
c3RhdGljIGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05v
cm1hbCgpKSA/IHRvIDogYmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNz
KTsKLX0KLQotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBM
ZW5ndGhTaXplJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiB7IGJsZW5kRnVu
YyhhbmltLCBmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUg
U2hhZG93U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17
Ci0gICAgaWYgKGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGRvdWJsZSBm
cm9tVmFsID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91Ymxl
IHRvVmFsID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSBy
ZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICBy
ZXR1cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5z
ZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dE
YXRhKiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAg
IEFTU0VSVChmcm9tICYmIHRvKTsKLSAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUo
KSkKLSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKLQotICAgIHJl
dHVybiBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5s
b2NhdGlvbigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+
cmFkaXVzKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5z
cHJlYWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUo
KSwgdG8tPnN0eWxlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFk
b3coKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNz
KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHBy
b2dyZXNzKQotewotICAgIGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRj
aCgpKQotICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBw
cm9ncmVzcyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24o
ZnJvbSwgcHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRv
d25jYXN0PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgp
LnNpemUoKSA6IExheW91dFNpemUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQ
YXRoT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IENsaXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0K
LSAgICAvLyBPdGhlciBjbGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBu
b3QgYmUgYW5pbWF0ZWQuCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlv
bjo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCi0gICAg
ICAgIHJldHVybiB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25j
YXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7Ci0gICAgY29u
c3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+
KCp0bykuYmFzaWNTaGFwZSgpOwotCi0gICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFw
ZSkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0
aW9uOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87
Ci0KLSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRv
LT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiB0bzsK
LQotICAgIGlmIChmcm9tLT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCi0gICAgICAgIHJldHVy
biB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgp
OwotICAgIGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0KLSAgICBp
ZiAoIWZyb21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0g
ICAgcmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJv
Z3Jlc3MpLCB0by0+Y3NzQm94KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJP
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmls
dGVyT3BlcmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dy
ZXNzLCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQotewotICAgIEFTU0VSVCh0b09w
KTsKLSAgICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0
aHJvdWdoKTsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVy
T3BlcmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLSAgICBzaXplX3Qg
ZnJvbVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvU2l6ZSA9
IHRvLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9t
U2l6ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewot
ICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/
IGZyb20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9w
ZXJhdGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6
IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBi
bGVuZEZ1bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJv
bU9wID8gYmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDog
MCk7Ci0gICAgICAgIGlmIChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQub3BlcmF0aW9u
cygpLmFwcGVuZChibGVuZGVkT3ApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8g
aWRlbnRpdHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAg
ICAgICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0
aW9ucygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZy
b21PcCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCi17
Ci0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmls
dGVyIGZ1bmN0aW9uIGxpc3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlv
bi4KLSAgICAKLSAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHByb3Bl
cnR5SUQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNo
ID0gYW5pbS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tk
cm9wRmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5j
dGlvbkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1By
b3BlcnR5QXBwbGVDb2xvckZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9y
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6
Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdHNNYXRjaCkKLSAgICAg
ICAgcmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVz
cyk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMg
ZG9uJ3QgbWF0Y2gsIHdlIGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhh
dmUgYSB3YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4gQ1NTLgotICAgICAgICAvLyBGb3Igbm93IHdl
J2xsIGp1c3QgZmFpbCB0byBhbmltYXRlLgotICAgICAgICByZXN1bHQgPSB0bzsKLSAgICB9Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdl
PiBibGVuZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNo
ZWRJbWFnZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsK
LSAgICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9u
cyhhbmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotCi0gICAgYXV0byBpbWFnZVZhbHVlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1
dGVkU3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBm
aWx0ZXJSZXN1bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwotCi0gICAgYXV0byByZXN1bHQg
PSBDU1NGaWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92
ZShmaWx0ZXJWYWx1ZSkpOwotICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZp
bHRlclJlc3VsdCk7Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZN
b3ZlKHJlc3VsdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlz
aWJpbGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEFueSBub24temVybyByZXN1
bHQgbWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAg
ZG8gd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQotICAgIC8vIGludmlzaWJsZS4gVGhlIGlu
dmlzaWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6
Q29sbGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KLSAgICBk
b3VibGUgZnJvbVZhbCA9IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0g
ICAgZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0g
ICAgaWYgKGZyb21WYWwgPT0gdG9WYWwpCi0gICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUg
cmVzdWx0ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAg
cmV0dXJuIHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmls
aXR5OjpWaXNpYmxlID8gdG8gOiBmcm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0VW5kZXJs
aW5lT2Zmc2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zm
c2V0JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYg
dG8uaXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0
ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3Ro
VmFsdWUoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3Jl
YXRlV2l0aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3Qg
VGV4dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYg
dG8uaXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpj
cmVhdGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxl
bmd0aFZhbHVlKCksIHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tu
ZXNzOjpjcmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3Ro
Qm94JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAg
TGVuZ3RoQm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHBy
b2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0
KCksIHRvLnJpZ2h0KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVu
YyhhbmltLCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAotICAgICAgICAg
ICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dy
ZXNzKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTVkdMZW5ndGhW
YWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNW
R0xlbmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJy
b3dQcmVjaXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9y
PFNWR0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdM
ZW5ndGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgc2l6ZV90IGZyb21MZW5n
dGggPSBmcm9tLnNpemUoKTsKLSAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7Ci0gICAg
aWYgKCFmcm9tTGVuZ3RoKQotICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOwot
ICAgIGlmICghdG9MZW5ndGgpCi0gICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6
IHRvOwotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOwotICAgIGlmIChmcm9t
TGVuZ3RoICE9IHRvTGVuZ3RoKSB7Ci0gICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZy
b21MZW5ndGgsIHRvTGVuZ3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKLSAg
ICAgICAgICAgIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsK
LSAgICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRv
TGVuZ3RoOwotICAgIH0KLSAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRM
ZW5ndGgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0g
ICAgICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVu
Z3RoXSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1h
Z2U+IGNyb3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHls
ZUNhY2hlZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUlt
YWdlLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9m
IHRoZSBleHRyZW1lcywgd2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdl
LAotICAgIC8vIG5vdCBhIGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25l
IG9mIHRoZSBleGlzdGluZyBpbWFnZXMuCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0
dXJuIGZyb21TdHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1
cm4gdG9TdHlsZUltYWdlOwotICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkg
fHwgIXRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvU3R5bGVJ
bWFnZTsKLQotICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUo
KmZyb21TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9
IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAg
ICBhdXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jl
c3MsIENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUg
PSBDU1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZN
b3ZlKHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7Ci0gICAgcmV0dXJu
IFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Ci19
Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdl
KiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAg
IHJldHVybiB0bzsKLQotICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7Ci0gICAgdG8g
PSB0by0+c2VsZWN0ZWRJbWFnZSgpOwotCi0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAg
cmV0dXJuIHRvOyAgICAKLQotICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQg
aW1hZ2VzLiBDcm9zcyBmYWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gICAgaWYgKGlzPFN0eWxl
R2VuZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7
Ci0gICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2Fz
dDxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBDU1NJ
bWFnZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVk
SW1hZ2U+KCp0bykuaW1hZ2VWYWx1ZSgpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFn
ZVZhbHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVy
YXRlZCkpIHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1
c3QgcG9zc2libGUgaWYgaW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KLSAgICAgICAgICAgIC8vIE90
aGVyd2lzZSBmYWxsIGJhY2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCi0gICAgICAgICAgICBD
U1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0
b0ZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAg
ICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZy
b21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0
ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJh
dGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAg
IH0KLQotICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYm
IGlzPENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Ny
b3NzZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+
KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3Nm
YWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7Ci0g
ICAgICAgICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVu
ZChmcm9tQ3Jvc3NmYWRlLCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBT
dHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0
aW9uIGJldHdlZW4gdHdvICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgotICAgIH0gZWxzZSBpZiAo
aXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0
bykpIHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRv
d25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAg
IGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewotICAgICAgICAg
ICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlcklt
YWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2Fj
aGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdl
KCkgPT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBi
bGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmls
dGVyT3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAg
fQotICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRl
IGFuZCBpbWFnZSBzb3VyY2UuCi0gICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigq
ZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4odG9HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0Zp
bHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAg
ICAgICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVk
SW1hZ2U+KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZElt
YWdlKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBw
cm9ncmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9u
IGJldHdlZW4gaW1hZ2Ugc291cmNlIGFuZCBjcm9zcy1mYWRlLgotICAgIH0KLQotICAgIC8vIEZJ
WE1FOiBBZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQg
aW1hZ2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03
ODI5MwotICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNo
ZWRJbWFnZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25j
YXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0
byksIHByb2dyZXNzKTsKLQotICAgIHJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSBOaW5l
UGllY2VJbWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywg
ZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJ
bWFnZSgpKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBw
b3J0IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkg
bW9yZSB0aGFuIGltYWdlIGNvbnRlbnQuCi0KLSAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9
IHRvLmltYWdlU2xpY2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGlj
ZXMoKSB8fCBmcm9tLm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRv
LmZpbGwoKSB8fCBmcm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8
fCBmcm9tLnZlcnRpY2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQotICAgICAgICByZXR1
cm4gdG87Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7Ci0g
ICAgICAgIGlmIChmcm9tLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5p
bWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkpCi0gICAgICAgICAgICByZXR1cm4gdG87
Ci0gICAgfQotCi0gICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9t
LmltYWdlKCksIHRvLmltYWdlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS5pbWFnZVNsaWNl
cygpLCBmcm9tLmZpbGwoKSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJv
bS5ob3Jpem9udGFsUnVsZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKLX0KLQotI2lmIEVOQUJM
RShWQVJJQVRJT05fRk9OVFMpCi0KLXN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdz
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBG
b250VmFyaWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgp
KQotICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgRm9udFZhcmlh
dGlvblNldHRpbmdzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7Ci0g
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBhdXRvJiBm
cm9tSXRlbSA9IGZyb20uYXQoaSk7Ci0gICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOwot
ICAgICAgICBpZiAoZnJvbUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQotICAgICAgICAgICAg
cmV0dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBpbnRlcnBvbGF0
ZWQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHBy
b2dyZXNzKTsKLSAgICAgICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBv
bGF0ZWQgfSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0
aWMgaW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rp
b25WYWx1ZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2VsZWN0aW9u
VmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nh
c3Q8ZmxvYXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxG
b250U2VsZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZv
bnRTZWxlY3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9u
dFNlbGVjdGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52
YWx1ZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotfQot
Ci1jbGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKLSAgICB7
Ci0gICAgfQotICAgIHZpcnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRl
ZmF1bHQ7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBj
YW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29u
c3QgeyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0gICAgCi0jaWYgIUxPR19ESVNB
QkxFRAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29u
c3QgPSAwOwotI2VuZGlmCi0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRl
ZCgpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJ
RCBtX3Byb3A7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5V3Jh
cHBlckdldHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkK
LSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwg
bV9nZXR0ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
IGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJu
IChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSAgICBUIHZh
bHVlKGNvbnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChh
LT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBS
ZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEp
IDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0
KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBUIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9w
ZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxU
Pihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9
Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRz
dC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VD46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIp
KCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5
bGU6OiptX3NldHRlcikoVCk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFJl
ZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQq
PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkK
LSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKLSAgICAg
ICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVu
YyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+
KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAg
IH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKLX07Ci0KLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3AsIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpKQotICAgICAgICA6IFByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0
ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVu
Z3RoJj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7Ci0gICAgfQotCi0gICAgdm9p
ZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHls
ZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0
aCY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3Ro
Jj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZv
aWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcCwgY29uc3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgVCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
Ci0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJv
dGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Ci19OwotCi1j
bGFzcyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlX
cmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9w
LCBDbGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lk
IChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAg
ICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9w
LCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3Qg
Ym90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0
dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEg
PT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNs
aXBQYXRoQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBj
bGlwUGF0aEIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNs
aXBQYXRoQikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWNsaXBQYXRo
QSB8fCAhY2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1
cm4gKmNsaXBQYXRoQSA9PSAqY2xpcFBhdGhCOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoVkFS
SUFUSU9OX0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdz
IDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJGb250
VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGlu
Z3MgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNl
dHRlcikoRm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8
Rm9udFZhcmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAg
ICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCBy
ZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAo
YS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZh
cmlhdGlvblNldHRpbmdzQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiB2YXJp
YXRpb25TZXR0aW5nc0EgPT0gdmFyaWF0aW9uU2V0dGluZ3NCOwotICAgIH0KLX07Ci0jZW5kaWYK
LQotY2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTaGFwZVZhbHVlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZh
bHVlKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3Bl
cnR5V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBv
aW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAg
ICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCBy
ZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVl
OwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgU2hhcGVWYWx1ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU2hh
cGVWYWx1ZSogc2hhcGVCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKHNoYXBlQSA9
PSBzaGFwZUIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaGFwZUEg
fHwgIXNoYXBlQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpz
aGFwZUEgPT0gKnNoYXBlQjsKLSAgICB9Ci19OwotCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlX
cmFwcGVyIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5
bGVJbWFnZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUlt
YWdlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU3R5bGVJ
bWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIGFyZVBvaW50
aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3Bl
cnR5V3JhcHBlckNvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xv
ciY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0
eVdyYXBwZXJDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBD
b2xvciYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHBy
b3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBDb2xvciY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
Q29sb3ImPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0g
ICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNs
YXNzIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQotICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmlt
YXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0g
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0
T3BhY2l0eShibGVuZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dy
ZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFu
c2Zvcm0gOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlX
cmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxj
b25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJT
dHlsZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0o
KSwgYi0+dHJhbnNmb3JtKCksIHByb2dyZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVy
dHlXcmFwcGVyRmlsdGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRl
ck9wZXJhdGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKLSAgICAgICAgOiBQcm9w
ZXJ0eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwg
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQo
KSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NT
UHJvcGVydHlGaWx0ZXIKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAg
fHwgcHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCi0jZW5kaWYK
LSAgICAgICAgICAgIDsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlciko
KSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+Ojpt
X2dldHRlcikoKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMg
aW5saW5lIHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykK
LXsKLSAgICBzaXplX3QgY291bnQ7Ci0gICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93
ID0gc2hhZG93LT5uZXh0KCkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50Owot
fQotCi1zdGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNv
bnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cp
Ci17Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dE
YXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xv
cjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0Rh
dGE+IGRlZmF1bHRJbnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5
bGU6Okluc2V0LCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBO
ZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlv
dXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNw
YXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1
bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5
bGU6Okluc2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0KLSAgICBpZiAoc3Jj
U2hhZG93KQotICAgICAgICByZXR1cm4gc3JjU2hhZG93OwotCi0gICAgaWYgKG90aGVyU2hhZG93
LT5zdHlsZSgpID09IFNoYWRvd1N0eWxlOjpJbnNldCkKLSAgICAgICAgcmV0dXJuIG90aGVyU2hh
ZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0Rh
dGEuZ2V0KCkgOiAmZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKLQotICAgIHJldHVybiBv
dGhlclNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93
RGF0YS5nZXQoKSA6ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKLX0KLQotY2xhc3MgUHJvcGVy
dHlXcmFwcGVyU2hhZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ugewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBl
clNoYWRvdyhDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHls
ZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5p
cXVlX3B0cjxTaGFkb3dEYXRhPiwgYm9vbCkpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAo
dHJ1ZSkgewotICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKLSAgICAgICAgICAgIGlm
ICghc2hhZG93QSAmJiAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICAgICAgLy8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cwotICAgICAgICAgICAg
aWYgKCFzaGFkb3dBIHx8ICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQotICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsK
LSAgICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQotICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9n
ZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0
dGVyKSgpOwotCi0gICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFk
b3dBKTsKLSAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsK
LQotICAgICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAx
ICYmIHRvTGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
U2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRv
d0IpLCBmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAo
ZHN0LT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNz
LCBzaGFkb3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcu
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRp
bmcgU2hhZG93RGF0YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6
dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29u
c3QgU2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QK
LSAgICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRh
OwotICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKLQotICAgICAgICB3aGlsZSAo
c2hhZG93QSB8fCBzaGFkb3dCKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNT
aGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKLSAgICAgICAgICAg
IGNvbnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0Is
IHNoYWRvd0EpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxl
bmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jl
c3MpOwotICAgICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRT
aGFkb3cuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKLSAgICAgICAgICAg
ICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAgICAgICAgICAg
IGVsc2UKLSAgICAgICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRl
ZFNoYWRvdykpOwotCi0gICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsK
LQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOwot
ICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOwotICAg
ICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21M
ZW5ndGgsIGludCB0b0xlbmd0aCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3dz
IGluIFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1h
dGluZyBtaXNtYXRjaGVkIGxpc3RzLAotICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNo
IGZyb20gdGhlIGVuZC4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9t
U2hhZG93cyhmcm9tTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAx
OyBpID49IDA7IC0taSkgewotICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOwot
ICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAg
ICAgIFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAg
ICAgIHRvU2hhZG93c1tpXSA9IHNoYWRvd0I7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93
Qi0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0Rh
dGE+IG5ld1NoYWRvd0RhdGE7Ci0KLSAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZy
b21MZW5ndGgsIHRvTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5n
dGg7ICsraSkgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkg
PCBmcm9tTGVuZ3RoID8gZnJvbVNoYWRvd3NbaV0gOiAwOwotICAgICAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogdG9TaGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOwotCi0g
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGlu
Zyhmcm9tU2hhZG93LCB0b1NoYWRvdyk7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBk
c3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7Ci0KLSAg
ICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxl
bmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAg
ICAvLyBJbnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRl
ci4KLSAgICAgICAgICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dE
YXRhKSk7Ci0gICAgICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQot
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0Owot
ICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dE
YXRhPiwgYm9vbCk7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
ciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRD
b2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQot
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBt
X2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9
Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAg
ICAgQ29sb3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlz
VmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29s
b3IgPSBhLT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAg
ICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9
PSB0b0NvbG9yOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3Ig
dG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAm
JiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3Io
KTsKLSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3Ig
PSBiLT5jb2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBm
cm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgdmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPipt
X2dldHRlcikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVu
ZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRl
clN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9w
ZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwg
IiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9n
cmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsK
LSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQot
Ci1lbnVtIE1heWJlSW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNz
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92
aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNp
dGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFByb3BlcnR5V3Jh
cHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlk
Q29sb3JUYWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBD
b2xvciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1
ZTxQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIp
KQotICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJN
YXliZUludmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0g
ICAgewotICAgIH0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbV93
cmFwcGVyLT5lcXVhbHMoYSwgYikgJiYgbV92aXNpdGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOwot
ICAgIH0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
bV93cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICAgICAgbV92
aXNpdGVkV3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgfQot
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5s
b2dCbGVuZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0
ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93
cmFwcGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
PiBtX3Zpc2l0ZWRXcmFwcGVyOwotfTsKLQotLy8gV3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBh
bmltYXRhYmxlIHByb3BlcnR5IGluIGEgRmlsbExheWVyCi1jbGFzcyBGaWxsTGF5ZXJBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpCi0gICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICB7Ci0g
ICAgfQotICAgIHZpcnR1YWwgfkZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uo
KSA9IGRlZmF1bHQ7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wZXJ0eTsgfQotCi0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5
ZXIqLCBjb25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5k
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxs
TGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLQotI2lmICFMT0df
RElTQUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAw
OwotI2VuZGlmCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLX07Ci0K
LXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyIDogcHVibGljIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcik7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKEZpbGxMYXllcjo6Kmdl
dHRlcikoKSBjb25zdCkKLSAgICAgICAgOiBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3BlcnR5KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRl
cikoKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gKGxheWVyLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5
KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0
ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNz
KSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3Rl
ZDoKLSAgICBUIChGaWxsTGF5ZXI6OiptX2dldHRlcikoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRl
IDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0
LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBt
X3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxM
YXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+
KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAo
Yi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgp
LCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0Js
ZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZp
bGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8
IGdldFByb3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+
Ojpwcm9wZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8g
IiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQot
ICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3Rp
bmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90
ZWN0ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwotfTsKLQotY2xhc3Mg
RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRn
ZSAoRmlsbExheWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6Oipv
cmlnaW5TZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCi0gICAgICAgIDogRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIp
Ci0gICAgICAgICwgbV9sZW5ndGhTZXR0ZXIobGVuZ3RoU2V0dGVyKQotICAgICAgICAsIG1fb3Jp
Z2luR2V0dGVyKG9yaWdpbkdldHRlcikKLSAgICAgICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5T
ZXR0ZXIpCi0gICAgICAgICwgbV9mYXJFZGdlKGZhckVkZ2UpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0
b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0
aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+
Km1fb3JpZ2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5H
ZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0
aCAmJiBmcm9tRWRnZSA9PSB0b0VkZ2U7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmls
bExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKLSAgICB7Ci0gICAgICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAg
ICBMZW5ndGggdG9MZW5ndGggPSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21F
ZGdlID0gKGEtPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+
Km1fb3JpZ2luR2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyb21FZGdlICE9IHRv
RWRnZSkgewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBj
YWxjIGV4cHJlc3Npb24sCi0gICAgICAgICAgICBpZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQot
ICAgICAgICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5n
dGgoZnJvbUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdl
KSB7Ci0gICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNM
ZW5ndGgodG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChkc3QtPiptX29yaWdpblNldHRlciko
ZnJvbUVkZ2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZl
IHRvIHRoZSBsZWZ0L3RvcCBlZGdlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAg
ICAgKGRzdC0+Km1fbGVuZ3RoU2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9M
ZW5ndGgsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQg
bG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5n
ICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEp
IDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVt
YmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0
KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6Oipt
X2xlbmd0aFNldHRlcikoTGVuZ3RoKTsKLSAgICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdl
dHRlcikoKSBjb25zdDsKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRn
ZSk7Ci0gICAgRWRnZSBtX2ZhckVkZ2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNs
YXNzIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBUKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChG
aWxsTGF5ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0
ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIq
IGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAg
ICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5
ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVB
TShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUo
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAg
ICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZh
bHVlKGEpCi0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQqPjo6dmFsdWUoYikKLSAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBG
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9
Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShS
ZWZQdHI8VD4mJik7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFn
ZT4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXll
clN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJ
bWFnZSogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0
dGVyKShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogRmlsbExheWVyUmVmQ291bnRl
ZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCi0g
ICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3Qg
RmlsbExheWVyKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQot
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dl
dHRlcikoKTsKLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsK
LSAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwot
ICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxM
YXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFt
ZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUo
YikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgot
fTsKLQotY2xhc3MgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICB0eXBlZGVmIGNvbnN0IEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0
dGVyKSgpIGNvbnN0OwotICAgIHR5cGVkZWYgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXll
cnNBY2Nlc3NvcikoKTsKLQotICAgIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSwgTGF5ZXJzR2V0dGVyIGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNz
b3IpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAg
ICAgICAgLCBtX2xheWVyc0dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9sYXllcnNBY2Nlc3Nv
cihhY2Nlc3NvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgIGNhc2UgQ1NTUHJv
cGVydHlXZWJraXRNYXNrUG9zaXRpb25YOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihw
cm9wZXJ0eSwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24s
ICZGaWxsTGF5ZXI6OmJhY2tncm91bmRYT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5k
WE9yaWdpbiwgRWRnZTo6UmlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWToKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFw
cGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVy
dHksICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmls
bExheWVyOjpiYWNrZ3JvdW5kWU9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmln
aW4sIEVkZ2U6OkJvdHRvbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRTaXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFj
a2dyb3VuZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAg
ICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXpl
TGVuZ3RoLCAmRmlsbExheWVyOjpzZXRTaXplTGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgICAgICAgICAgbV9m
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6
c2V0SW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8q
IGZyb21MYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xh
eWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGZyb21MYXll
ciAmJiB0b0xheWVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFw
cGVyLT5lcXVhbHMoZnJvbUxheWVyLCB0b0xheWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwotICAg
ICAgICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsK
LSAgICAgICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAg
IGF1dG8qIGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgICAg
IHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2Zp
bGxMYXllclByb3BlcnR5V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxh
eWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAg
ICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0TGF5ZXIg
PSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxF
RAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXll
cnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRl
cikoKTsKLSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVy
KSgpOwotCi0gICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0g
ICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIs
IGFMYXllciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXIt
Pm5leHQoKTsKLSAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAg
ICAgZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlm
Ci0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyOwotCi0gICAgTGF5ZXJz
R2V0dGVyIG1fbGF5ZXJzR2V0dGVyOwotICAgIExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNz
b3I7Ci19OwotCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHksIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVy
cykKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAg
ICAgICAsIG1fcHJvcGVydHlXcmFwcGVycyhXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRl
IHsgcmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlm
IChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFi
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byYgd3JhcHBl
ciA6IG1fcHJvcGVydHlXcmFwcGVycykgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVh
bHMoYSwgYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAg
ICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBl
cnMpCi0gICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNz
KTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBk
c3QsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0
byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmxv
Z0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29uc3Qg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQotCi1wcml2YXRlOgotICAgIFZl
Y3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwot
fTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBQcm9wZXJ0eVdyYXBwZXJGbGV4KCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKENTU1Byb3BlcnR5RmxleCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgcmV0dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93
KCkgPT0gYi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygp
OwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBkc3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGIt
PmZsZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5k
RnVuYyhhbmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAg
ICAgICBkc3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwg
Yi0+ZmxleFNocmluaygpLCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQK
LSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUq
LCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7
Ci0gICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RS
RUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0
cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQot
I2VuZGlmCi19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3As
IFNWR1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENv
bG9yIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oipz
ZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZShwcm9wKQotICAgICAgICAsIG1fcGFpbnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikK
LSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQot
ICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9
PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdl
dHRlcikoKSAhPSAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4g
U1ZHUGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgotICAgICAgICAvLyBGb3IgZXZl
cnl0aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndp
c2UKLSAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3Jl
dmVyLgotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5
cGU6OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0
dGVyKSgpOwotICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0K
LSAgICAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJv
bUNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwot
ICAgICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICB0b0Nv
bG9yID0gQ29sb3IoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9y
OwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlw
ZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCi0gICAgICAgICAgICB8fCAoYi0+
Km1fcGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCi0gICAgICAg
ICAgICByZXR1cm47Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlciko
KTsKLSAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAg
aWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAg
ICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAg
ICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgp
KQotICAgICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRl
cikoYmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcu
Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRp
bmcgU1ZHUGFpbnQgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50
ZWdlcnMocHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTVkdQYWlu
dFR5cGUgKFJlbmRlclN0eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29s
b3IgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5
bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ckZvbnRTdHlsZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlv
blZhbHVlPj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckZvbnRTdHlsZSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlv
bmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4+KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5
bGU6OmZvbnRJdGFsaWMsICZSZW5kZXJTdHlsZTo6c2V0Rm9udEl0YWxpYykKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29u
c3QgUmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJu
IGZyb20tPmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNj
cmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5m
b250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsK
LSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGF1dG8gZGlzY3JldGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCi0gICAg
ICAgIGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAg
IGlmIChkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3Mg
PCAwLjUgPyBmcm9tIDogdG8pLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7Ci0K
LSAgICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKLSAgICAg
ICAgYXV0byB0b0ZvbnRJdGFsaWMgPSB0by0+Zm9udEl0YWxpYygpOwotICAgICAgICBhdXRvIGJs
ZW5kZWRGb250SXRhbGljID0gcHJvZ3Jlc3MgPCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9u
dEl0YWxpYzsKLSAgICAgICAgaWYgKCFkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRGb250
SXRhbGljID0gYmxlbmRGdW5jKGFuaW0sIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHBy
b2dyZXNzKTsKLQotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBk
c3QtPmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRp
b24gPSBkc3QtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFs
aWMoYmxlbmRlZEZvbnRJdGFsaWMpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVB
eGlzKGJsZW5kZWRTdHlsZUF4aXMpOwotICAgICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihX
VEZNb3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUo
Y3VycmVudEZvbnRTZWxlY3Rvcik7Ci0gICAgfQotfTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmlt
YXRpb25XcmFwcGVyTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQot
ICAgIHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1h
eWJlIHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NB
bmltYXRpb25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KLSAgICAgICAgc3RhdGljIE5ldmVyRGVz
dHJveWVkPENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD4gbWFwOwotICAgICAgICByZXR1
cm4gbWFwOwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBw
ZXJGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi0gICAgewotICAgICAgICBp
ZiAocHJvcGVydHlJRCA8IGZpcnN0Q1NTUHJvcGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQ
cm9wZXJ0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVuc2lnbmVk
IHdyYXBwZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCk7Ci0gICAgICAg
IGlmICh3cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAg
ICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBl
cnNbd3JhcHBlckluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKiB3cmFwcGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAg
ICBBU1NFUlQoaW5kZXggPCBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpKTsKLSAgICAgICAgcmV0
dXJuIG1fcHJvcGVydHlXcmFwcGVyc1tpbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdW5zaWdu
ZWQgc2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUo
KTsKLSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFw
KCk7Ci0gICAgfkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOwotCi0g
ICAgdW5zaWduZWQgY2hhciYgaW5kZXhGcm9tUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3Bl
cnR5SUQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJ
RCAtIGZpcnN0Q1NTUHJvcGVydHldOwotICAgIH0KLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKLSAg
ICB1bnNpZ25lZCBjaGFyIG1fcHJvcGVydHlUb0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOwotCi0g
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRl
eCA9IFVDSEFSX01BWDsKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD47Ci19OwotCi1DU1NQcm9wZXJ0eUFuaW1hdGlv
bldyYXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCi17Ci0gICAgLy8g
YnVpbGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25z
IGFuZCBibGVuZHMKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxl
TG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzW10gPSB7Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHls
ZTo6c2V0TGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlSaWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCi0g
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJT
dHlsZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVu
ZGVyU3R5bGU6OnNldEJvdHRvbSksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNl
dFdpZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1p
bldpZHRoLCAmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRo
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRo
LCAmUmVuZGVyU3R5bGU6Om1heFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKLQot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVu
ZGVyU3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6
Om1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNaW5IZWlnaHQpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1h
eEhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQpLAotCi0gICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJGbGV4KCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRo
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxl
Ojpib3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdp
ZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRl
clRvcFdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlCb3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxl
ZnQsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5S
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2lu
VG9wLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2lu
Qm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSksCi0gICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHls
ZTo6cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVy
U3R5bGU6OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCksCi0gICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVu
ZGVyU3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSks
Ci0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldENhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJT
dHlsZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRl
ZExpbmtDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNr
Z3JvdW5kQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNr
Z3JvdW5kQ29sb3IpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMs
ICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBTdHls
ZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJT
dHlsZTo6bGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAot
ICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0lt
YWdlKSwKLQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUJvcmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVu
ZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU291cmNlKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlh
bnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2Us
ICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
SW1hZ2VTbGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxM
ZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgpLAotICAgICAg
ICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5
Qm9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5k
ZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdl
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVu
ZGVyU3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1h
Z2VTb3VyY2UpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUlt
YWdlJj4oQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0Jv
eEltYWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZSksCi0KLSAgICAgICAgbmV3IEZp
bGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAm
UmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dy
b3VuZExheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJz
LCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgRmls
bExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVy
U3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExh
eWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
V2Via2l0QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLQotICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5k
ZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAg
ICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNr
UG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJl
TWFza0xheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5V2Via2l0TWFza1NpemUsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0
eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUs
ICZSZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PHVuc2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxl
Ojpjb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKLSAg
ICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9w
ZXJ0eUNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0
Q29sdW1uR2FwKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2Fw
TGVuZ3RoPihDU1NQcm9wZXJ0eVJvd0dhcCwgJlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJT
dHlsZTo6c2V0Um93R2FwKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBz
aG9ydD4oQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAm
UmVuZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhv
cml6b250YWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6
dmVydGljYWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3Bh
Y2luZyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRl
eCwgJlJlbmRlclN0eWxlOjpzcGVjaWZpZWRaSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lm
aWVkWkluZGV4KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVy
dHlPcnBoYW5zLCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFu
cyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dz
LCAmUmVuZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MpLAotICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRl
clN0eWxlOjpzcGVjaWZpZWRMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVP
ZmZzZXQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lT2Zmc2V0KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVy
dHlPdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6
OnNldE91dGxpbmVXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldExldHRlclNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcs
ICZSZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRJbmRlbnQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5UGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3Bl
Y3RpdmUsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmUpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5
bGU6OnBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdp
blgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3Bl
Y3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0
eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zv
cm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpLAotICAgICAgICBu
ZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJl
bmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9y
aWdpblkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRy
YW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0
eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5aKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9w
ZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAm
UmVuZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
VG9wTGVmdFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
PExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHls
ZTo6Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRS
YWRpdXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhT
aXplPihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFk
aXVzKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6
ZT4oQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3Jk
ZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJh
ZGl1cyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVy
dHlWaXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0
VmlzaWJpbGl0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5Wm9vbSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0
UmV0dXJuVmFsdWUpLAotCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
PExlbmd0aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJT
dHlsZTo6c2V0Q2xpcCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVk
T3BhY2l0eSgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zv
cm0oKSwKLSAgICAgICAgCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJv
cGVydHlGaWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRl
ciksCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6
OmJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKLSNlbmRp
ZgotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xv
ckZpbHRlciwgJlJlbmRlclN0eWxlOjphcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNl
dEFwcGxlQ29sb3JGaWx0ZXIpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0
aChDU1NQcm9wZXJ0eUNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5
bGU6OnNldENsaXBQYXRoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NT
UHJvcGVydHlTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVy
U3R5bGU6OnNldFNoYXBlT3V0c2lkZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJl
bmRlclN0eWxlOjpzZXRTaGFwZU1hcmdpbiksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5U2hhcGVJbWFnZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFw
ZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAot
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUNvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29s
dW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0
eWxlOjp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0NvbHVtblJ1bGVDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZh
bGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciksCi0gICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtp
dFRleHRGaWxsQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxs
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0Rmls
bENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9y
KENTU1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAm
UmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
clZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJ
bnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmln
aHRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlCb3JkZXJUb3BDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
VG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6
dmlzaXRlZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Jv
cmRlclRvcENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3Rl
ZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAm
UmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJv
dHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVD
b2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVu
ZGVyU3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxp
bmVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciksCi0KLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJl
bmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywg
JlJlbmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZS
ZW5kZXJTdHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKLQot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVu
ZGVyU3R5bGU6OmZpbGxQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0RmlsbFBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFj
aXR5LCAmUmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KSwKLQotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tl
UGFpbnRUeXBlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0U3Ryb2tlUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAm
UmVuZGVyU3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4+KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAm
UmVuZGVyU3R5bGU6OnN0cm9rZURhc2hBcnJheSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNo
QXJyYXkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0
cm9rZU1pdGVybGltaXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0
eWxlOjpzZXRTdHJva2VNaXRlckxpbWl0KSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5Q3gsICZSZW5kZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0
Q3gpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZS
ZW5kZXJTdHlsZTo6Y3ksICZSZW5kZXJTdHlsZTo6c2V0Q3kpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5
bGU6OnNldFIpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
UngsICZSZW5kZXJTdHlsZTo6cngsICZSZW5kZXJTdHlsZTo6c2V0UngpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZS
ZW5kZXJTdHlsZTo6c2V0UnkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5U3Ryb2tlRGFzaG9mZnNldCwgJlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0
LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hPZmZzZXQpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ry
b2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlV2lkdGgpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVy
U3R5bGU6OnNldFgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5WSwgJlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5bGU6OnNldFkpLAotCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVy
U3R5bGU6OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9v
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RD
b2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlT
dG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRT
dG9wT3BhY2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eVN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0U3RvcENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJ
bnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0
aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0TGlnaHRpbmdDb2xvciksCi0KLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0
LCAmUmVuZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNl
bGluZVNoaWZ0VmFsdWUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZh
bHVlPihDU1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0
eWxlOjpzZXRLZXJuaW5nKSwKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZh
cmlhdGlvblNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJl
bmRlclN0eWxlOjpzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MpLAotI2VuZGlmCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWln
aHQsICZSZW5kZXJTdHlsZTo6Zm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1By
b3BlcnR5Rm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHls
ZTo6c2V0Rm9udFN0cmV0Y2gpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxl
KCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+
KENTU1Byb3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERl
Y29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25l
c3MpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENT
U1Byb3BlcnR5VGV4dFVuZGVybGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5l
T2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldFRleHRVbmRlcmxpbmVPZmZzZXQpLAotICAgIH07Ci0g
ICAgY29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RG
X0FSUkFZX0xFTkdUSChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKLQotICAg
IHN0YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVz
W10gPSB7Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQt
Y29sb3IsIGJhY2tncm91bmQtcG9zaXRpb24sIGJhY2tncm91bmQtaW1hZ2UKLSAgICAgICAgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8g
Zm9yIGZvbnQtc2l6ZSwgZm9udC13ZWlnaHQKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNr
LCAvLyBmb3IgbWFzay1wb3NpdGlvbgotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvbiwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmln
aHQsIENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCi0gICAg
ICAgIENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFk
aXVzLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwKLSAgICAgICAgQ1NTUHJv
cGVydHlCb3JkZXJTcGFjaW5nLAotICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9y
IGxpc3Qtc3R5bGUtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCi0gICAgICAgIENT
U1Byb3BlcnR5T3V0bGluZSwKLSAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAotICAgICAgICBD
U1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2UsCi0gICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVs
ZSwKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1By
b3BlcnR5VHJhbnNmb3JtT3JpZ2luCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRh
YmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxl
U2hvcnRoYW5kUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUT0RPOgotICAgIC8vCi0gICAgLy8gIENT
U1Byb3BlcnR5VmVydGljYWxBbGlnbgotICAgIC8vCi0gICAgLy8gQ29tcG91bmQgcHJvcGVydGll
cyB0aGF0IGhhdmUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBhbmltYXRhYmxlOgotICAgIC8v
Ci0gICAgLy8gIENTU1Byb3BlcnR5Q29sdW1ucwotICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJv
eFJlZmxlY3QKLQotICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0g
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1f
cHJvcGVydHlUb0lkTWFwW2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKLQotICAg
IENPTVBJTEVfQVNTRVJUKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1h
dGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0
YWJsZVByb3BlcnRpZXNNdXN0QmVMZXNzVGhhblVDaGFyTWF4KTsKLSAgICBtX3Byb3BlcnR5V3Jh
cHBlcnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVz
Q291bnQgKyBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50KTsKLQotICAgIC8vIEZp
cnN0IHdlIHB1dCB0aGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBt
YXAsIHNvIHRoZSBzaG9ydGhhbmQtYnVpbGRpbmcKLSAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0u
Ci0KLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVy
dGllc0NvdW50OyArK2kpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSog
d3JhcHBlciA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbaV07Ci0gICAgICAg
IG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2U+KHdyYXBwZXIpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJv
cGVydHlJRCh3cmFwcGVyLT5wcm9wZXJ0eSgpKSA9IGk7Ci0gICAgfQotCi0gICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsK
LSAgICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFBy
b3BlcnRpZXNbaV07Ci0gICAgICAgIGF1dG8gc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVy
dHkocHJvcGVydHlJRCk7Ci0gICAgICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqPiBsb25naGFuZFdyYXBwZXJzOwotICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2Vy
dmVJbml0aWFsQ2FwYWNpdHkoc2hvcnRoYW5kLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChhdXRv
IGxvbmdoYW5kIDogc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5k
ZXggPSBpbmRleEZyb21Qcm9wZXJ0eUlEKGxvbmdoYW5kKTsKLSAgICAgICAgICAgIGlmICh3cmFw
cGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBl
ckluZGV4XSk7Ci0gICAgICAgICAgICBsb25naGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZCht
X3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAg
ICAgICBtX3Byb3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRo
YW5kUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMp
KSk7Ci0gICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxl
TG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZ2F0
aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5
SUQ+JiBwcm9wZXJ0eVNldCkKLXsKLSAgICBpZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBl
cigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBw
ZXIqIHNob3J0aGFuZFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBw
ZXIqPih3cmFwcGVyKTsKLSAgICBib29sIGNvbnRhaW5lZCA9IGZhbHNlOwotICAgIGZvciAoYXV0
byYgY3VycldyYXBwZXIgOiBzaG9ydGhhbmRXcmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsK
LSAgICAgICAgaWYgKGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHks
IGN1cnJXcmFwcGVyLCBwcm9wZXJ0eVNldCkgfHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0g
cHJvcGVydHkpCi0gICAgICAgICAgICBjb250YWluZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlm
IChjb250YWluZWQpCi0gICAgICAgIHByb3BlcnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgp
KTsKLQotICAgIHJldHVybiBjb250YWluZWQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBu
ZWVkIHRvIHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246
OmJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBD
U1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChw
cm9wICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAg
ICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0jaWYgIUxPR19E
SVNBQkxFRAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsK
LSNlbmRpZgotICAgIH0KLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0
eUFuaW1hdGFibGUoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9w
KTsKLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNp
bmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gd3JhcHBlciA/
IHdyYXBwZXItPmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwotfQotCi0vLyBOb3Rl
OiB0aGlzIGlzIGluZWZmaWNpZW50LiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0
aW9uQXRUaW1lKCkuCi1IYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9u
OjphbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJv
cGVydHkpCi17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgSGFzaFNldDxD
U1NQcm9wZXJ0eUlEPiBmb3VuZFByb3BlcnRpZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1hcC5zaXplKCk7ICsraSkKLSAgICAgICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJv
cGVydGllcyhwcm9wZXJ0eSwgbWFwLndyYXBwZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVz
KTsKLQotICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlB
bmltYXRpb246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpz
aW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0g
ICAgICAgIHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAgcmV0dXJuIHRydWU7Ci19
Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQo
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIpCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3Bl
cnR5KHByb3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2Fu
SW50ZXJwb2xhdGUoYSwgYik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DU1NQcm9wZXJ0eUlE
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFs
PGJvb2w+JiBpc1Nob3J0aGFuZCkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXAmIG1hcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0K
LSAgICBpZiAoaSA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkp
Ci0gICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0KLSAgICBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gbWFwLndyYXBwZXJGb3JJbmRleChpKTsKLSAgICBp
c1Nob3J0aGFuZCA9IHdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpOwotICAgIHJldHVybiB3
cmFwcGVyLT5wcm9wZXJ0eSgpOwotfQotCi1pbnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51
bVByb3BlcnRpZXMoKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXA6OnNpbmdsZXRvbigpLnNpemUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBA
IC0xLDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0j
aW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENT
U1Byb3BlcnR5QW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5
QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlBy
b3BlcnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9w
ZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVk
KENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
Yik7Ci0gICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0
aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKLSAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRp
ZXMoKTsKLQotICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9y
dGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICAvLyBSZXR1cm4g
dHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKLSAgICBz
dGF0aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
b21wb3NpdGVBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M0
OWJjZjZkOTFmNGRjZGY1NDY3MTRhNTQzNjgzZTEyZDQ3OTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NvbXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAot
LyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4g
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
LSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIElu
Yy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1h
eSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAg
ZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNz
aW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMg
Q09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRT
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAq
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRI
RU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVk
ZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRl
ICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5
QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIklt
cGxpY2l0QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNs
dWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJl
bmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbihD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICA6
IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotewotICAgIG1fc3Vz
cGVuZGVkID0gbV9hbmltYXRpb25Db250cm9sbGVyLmlzU3VzcGVuZGVkKCkgJiYgIW1fYW5pbWF0
aW9uQ29udHJvbGxlci5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQot
Q29tcG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUb3Nz
IHRoZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVt
IGZyb20KLSAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KLQotICAgIGNsZWFyRWxlbWVu
dCgpOwotICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jbGVhcigpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkK
LXsKLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENsZWFy
IHRoZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFy
ZSBpbiB0aGUgbWlkZGxlIG9mCi0gICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2Vl
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAg
Zm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAg
ICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5z
aXRpb24pOwotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAg
IH0KLSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBt
X2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0
byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAg
ICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRp
b24pOwotICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYg
ZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUmIHRhcmdldFN0eWxlKQotewotICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRo
ZXJlIGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNraXAgaXQKLSAgICBpZiAo
IWN1cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0
aW9ucy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGFsbCBleGlz
dGluZyB0cmFuc2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0
aWxsIGFjdGl2ZSBvbmVzCi0gICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRo
ZSBvbmVzIHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9u
IDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0aXZl
KGZhbHNlKTsKLSAgICAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtb2Rp
ZmllZEN1cnJlbnRTdHlsZTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0
byB1cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwotICAgIGlmICh0YXJnZXRTdHlsZS50cmFu
c2l0aW9ucygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUu
dHJhbnNpdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlv
biA9IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAgICAg
IGJvb2wgaXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0
aW9uLmRlbGF5KCkgPiAwOwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJv
cGVydHkoKS5tb2RlOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0
aW9uTW9kZTo6Tm9uZSB8fCBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlVua25v
d25Qcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NT
UHJvcGVydHlJRCBwcm9wID0gYW5pbWF0aW9uLnByb3BlcnR5KCkuaWQ7Ci0KLSAgICAgICAgICAg
IGJvb2wgYWxsID0gbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGw7Ci0KLSAg
ICAgICAgICAgIC8vIEhhbmRsZSBib3RoIHRoZSAnYWxsJyBhbmQgc2luZ2xlIHByb3BlcnR5IGNh
c2VzLiBGb3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UsIHdlIG1ha2Ugb25seSBvbmUgcGFzcwotICAg
ICAgICAgICAgLy8gdGhyb3VnaCB0aGUgbG9vcC4KLSAgICAgICAgICAgIGZvciAoaW50IHByb3Bl
cnR5SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51
bVByb3BlcnRpZXMoKTsgKytwcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFs
bCkgewotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2gg
aXMgbm90IGEgc2hvcnRoYW5kLgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBp
c1Nob3J0aGFuZDsKLSAgICAgICAgICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQotICAgICAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICAgICAgaWYgKHByb3AgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmICghYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICAKLSAgICAgICAgICAgICAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNo
ZWQgYnkgYWN0dWFsIHByb3BlcnRpZXMsIG5ldmVyIGFuaW1hdGVBbGwuCi0gICAgICAgICAgICAg
ICAgQVNTRVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9wIDwgKGZpcnN0Q1NTUHJv
cGVydHkgKyBudW1DU1NQcm9wZXJ0aWVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVy
ZSBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlv
biBpcyBvdmVycmlkZGVuCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRo
ZSB1bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0aGUgdGVzdAotICAg
ICAgICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdl
ICJvdmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCi0gICAgICAgICAgICAgICAgYXV0byog
a2V5ZnJhbWVBbmltYXRpb24gPSBhbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAg
ICAgICAgICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW1hdGlvbiA/ICZrZXlmcmFtZUFu
aW1hdGlvbi0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJv
cAotICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNp
dGlvbnMuZ2V0KHByb3ApOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWwgPSB0cnVlOwotCi0g
ICAgICAgICAgICAgICAgaWYgKGltcGxBbmltKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElm
IHdlIGFyZSBwb3N0IGFjdGl2ZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUgYWN0aXZlIGZsYWcu
IFRoaXMgd2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFuaW1hdGlvbiB0
byBnZXQgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAg
ICAgICAgIGlmICghaW1wbEFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAg
ICAgIGltcGxBbmltLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiB0aGF0IGlzIGp1
c3QgZmluaXNoaW5nLiBUaGF0IHdvdWxkIGJlIHRoZSBjYXNlCi0gICAgICAgICAgICAgICAgICAg
IC8vIGlmIGl0IHdlcmUgcG9zdEFjdGl2ZS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9y
IGVxdWFsaXR5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUganVz
dCBmaW5pc2hpbmcgQU5EIGNoYW5naW5nIHRvIGEgbmV3IGdvYWwgc3RhdGUuCi0gICAgICAgICAg
ICAgICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbEFuaW0gbWlnaHQg
YWxzbyBub3QgYmUgYW4gYWxyZWFkeSBydW5uaW5nIHRyYW5zaXRpb24uIEl0IG1pZ2h0IGJlCi0g
ICAgICAgICAgICAgICAgICAgIC8vIG5ld2x5IGFkZGVkIHRvIHRoZSBsaXN0IGluIGEgcHJldmlv
dXMgaXRlcmF0aW9uLiBUaGlzIHdvdWxkIGhhcHBlbiBpZgotICAgICAgICAgICAgICAgICAgICAv
LyB5b3UgaGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkgYW5kICdhbGwn
IGluIHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwg
dGhlIGxhdHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UKLSAgICAgICAg
ICAgICAgICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRp
b24gYmVpbmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1wbEFuaW0tPmlz
VGFyZ2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVkIHRvIHJldHVy
biBhIG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKLSAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNp
dGlvbnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgotICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2Nl
bGVyYXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllZEN1cnJlbnRTdHlsZSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIoKmN1cnJlbnRTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBp
bXBsQW5pbS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRT
dHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0
aW9uICVwIGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkp
OwotICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlv
bldpbGxCZVJlbW92ZWQoKmltcGxBbmltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJh
bnNpdGlvbnMucmVtb3ZlKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2l0aW9uIGlmIGl0
IGlzIGFjdGl2ZSBhbmQgdGhlIHByb3BlcnRpZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAg
ICAgICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0aW9u
Ojpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpIHx8ICFDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wLCBmcm9tU3R5
bGUsICZ0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAg
Ly8gV2UgY2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFp
c0FjdGl2ZVRyYW5zaXRpb24pLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gdGhh
dCB0byBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGNhbmNlbGluZyBhIHRyYW5zaXRpb24uIEJ1dCB3
ZSBkb24ndCB3YW50IHRvCi0gICAgICAgICAgICAgICAgLy8gc3RhcnQgb25lIG9mIHRoZSBpbmFj
dGl2ZSB0cmFuc2l0aW9ucy4gU28gc2hvcnQgY2lyY3VpdCB0aGF0IGhlcmUuIChTZWUKLSAgICAg
ICAgICAgICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0
Nzg3PgotICAgICAgICAgICAgICAgIGlmICghZXF1YWwgJiYgaXNBY3RpdmVUcmFuc2l0aW9uKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxpY2l0QW5pbWF0aW9uOjpj
cmVhdGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9kaWZpZWRDdXJyZW50U3R5
bGUgPyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsKLSAgICAgICAgICAgICAg
ICAgICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9uLT5oYXNTdHlsZSgpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0
ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICJDcmVhdGVkIEltcGxpY2l0QW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAg
Zm9yIHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxpY2l0QW5pbWF0
aW9uLnB0cigpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmltYXRpb24uZHVy
YXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3RyYW5z
aXRpb25zLnNldChwcm9wLCBXVEZNb3ZlKGltcGxpY2l0QW5pbWF0aW9uKSk7Ci0gICAgICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBwYXNzIGZvciB0
aGUgc2luZ2xlIHByb3AgY2FzZQotICAgICAgICAgICAgICAgIGlmICghYWxsKQotICAgICAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIE1ha2UgYSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHJlbW92ZWQKLSAgICBWZWN0b3I8
aW50PiB0b0JlUmVtb3ZlZDsKLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRp
b25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAg
ICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0
cmFuc2l0aW9uKTsKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5h
bmltYXRpbmdQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3Zp
bmcgSW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyIs
IHRyYW5zaXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+
YW5pbWF0aW5nUHJvcGVydHkoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHJl
bW92ZSB0aGUgdHJhbnNpdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoYXV0byBwcm9wZXJ0
eVRvUmVtb3ZlIDogdG9CZVJlbW92ZWQpCi0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHBy
b3BlcnR5VG9SZW1vdmUpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5
ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBOb3Ro
aW5nIHRvIGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2
ZSBhbnkgYmVmb3JlCi0gICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAh
dGFyZ2V0U3R5bGUuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgCi0gICAgaWYgKGN1cnJl
bnRTdHlsZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5o
YXNBbmltYXRpb25zKCkgJiYgKihjdXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJn
ZXRTdHlsZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBbmltYXRpb25O
YW1lTWFwIG5ld0FuaW1hdGlvbnM7Ci0KLSAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIg
bWFwLgotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwotCi0gICAgc3Rh
dGljIE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBub25lKCJub25l
IiwgQXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAotICAgIC8vIE5vdyBt
YXJrIGFueSBzdGlsbCBhY3RpdmUgYW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3
IGFuaW1hdGlvbnMuCi0gICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgewotICAgICAg
ICBpbnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRv
JiBhbmltYXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAg
ICAgICAgICAgIEF0b21TdHJpbmcgYW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKLQot
ICAgICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhl
cmUgaXMgYSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhpcyBuYW1lLgotICAgICAgICAgICAgUmVm
UHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9u
cy5nZXQoYW5pbWF0aW9uTmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5p
bSkgewotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKGtleWZyYW1lQW5pbS0+bmFt
ZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLQotICAgICAgICAgICAgICAgIGlmIChrZXlmcmFt
ZUFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgICAgICAgICAvLyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRp
ZmZlci4gVXBkYXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVw
ZGF0ZVBsYXlTdGF0ZShhbmltYXRpb24ucGxheVN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAg
Ly8gU2V0IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2Ug
dGhlIHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmlt
LT5zZXRBbmltYXRpb24oYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW1h
dGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpKSAmJiBhbmltYXRpb24uaXRlcmF0
aW9uQ291bnQoKSAmJiBhbmltYXRpb25OYW1lICE9IG5vbmUpIHsKLSAgICAgICAgICAgICAgICBr
ZXlmcmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVu
dCwgKnRoaXMsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IkNyZWF0aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFt
ZXMgJXMsIGR1cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZy
YW1lQW5pbS5nZXQoKSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwg
YW5pbWF0aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0
aW9uQ291bnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKLSAgICAg
ICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxh
eVN0YXRlOjpQYXVzZWQpOwotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAg
KGNyZWF0ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgICAgICB9
Ci0jaWYgIUxPR19ESVNBQkxFRAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlE
IDoga2V5ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5wcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3BlcnR5TmFtZShw
cm9wZXJ0eUlEKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuc2V0
KGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gdGhlIGFuaW1hdGlv
biBvcmRlciBtYXAuCi0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAgICAgICAgICAg
ICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1l
KCkuaW1wbCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgbGlzdCBv
ZiBhbmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBt
X2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIW5ld0FuaW1hdGlv
bnMuY29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5p
bWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0g
ICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1h
dGlvbi5nZXQoKSwgJmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6
c3dhcChuZXdBbmltYXRpb25zLCBtX2tleWZyYW1lQW5pbWF0aW9ucyk7Ci19Ci0KLUFuaW1hdGlv
blVwZGF0ZSBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoRWxlbWVudCYgZWxlbWVudCwgY29u
c3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0
eWxlKQotewotICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBo
YXZlIGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucyhl
bGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFtZUFu
aW1hdGlvbnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgbV9rZXlm
cmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1h
dGlvbkltcGFjdD4gaW1hcGN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBh
bmltYXRlZFN0eWxlOwotCi0gICAgaWYgKGN1cnJlbnRTdHlsZSkgewotICAgICAgICAvLyBOb3cg
dGhhdCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91
dCB0aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAgICAgLy8gdG8gZmlsbCBp
biBhIFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgICAgIGJvb2wgY2hlY2tGb3JT
dGFja2luZ0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0gdHJh
bnNpdGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAg
ICAgICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVk
KSkKLSAgICAgICAgICAgICAgICBjaGVja0ZvclN0YWNraW5nQ29udGV4dCB8PSBXaWxsQ2hhbmdl
RGF0YTo6cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRyYW5zaXRpb24tPmFuaW1hdGlu
Z1Byb3BlcnR5KCkpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRl
Q2hhbmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIHRyYW5zaXRpb24tPmFmZmVjdHNBY2NlbGVy
YXRlZFByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBh
Y3Q6OlJlcXVpcmVzUmVjb21wb3NpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFuaW1h
dGVkU3R5bGUgJiYgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIE5v
dGUgdGhhdCB0aGlzIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBTdHlsZTo6QWRqdXN0ZXI6OmFkanVz
dCgpIGJ1dCBvbmx5IG5lZWRzIHRvIGNvbnN1bHQKLSAgICAgICAgICAgIC8vIGFuaW1hdGFibGUg
cHJvcGVydGllcyB0aGF0IGNhbiB0cmlnZ2VyIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAg
ICBpZiAoYW5pbWF0ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICAgICAgICAgIHx8
IGFuaW1hdGVkU3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAg
ICAgICAgfHwgYW5pbWF0ZWRTdHlsZS0+aGFzTWFzaygpCi0gICAgICAgICAgICAgICAgfHwgYW5p
bWF0ZWRTdHlsZS0+Y2xpcFBhdGgoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUt
PmJveFJlZmxlY3QoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0ZpbHRl
cigpCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICB8fCBhbmlt
YXRlZFN0eWxlLT5oYXNCYWNrZHJvcEZpbHRlcigpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICAp
Ci0gICAgICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdD
b250ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5p
bWF0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0
YXRlLiAgV2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25s
eSBpZiBuZWVkZWQuCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9rZXlmcmFtZUFuaW1hdGlvbk9y
ZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmlt
ID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoa2V5ZnJhbWVB
bmltKSB7Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSBrZXlmcmFtZUFuaW0tPmFuaW1hdGUo
KnRoaXMsIHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGFu
Z2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYga2V5ZnJh
bWVBbmltLT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGlt
YXBjdC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1aXJlc1JlY29tcG9zaXRlKTsKLQotICAgICAg
ICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSAm
JiBrZXlmcmFtZUFuaW0tPnRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAg
ICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7Ci0K
LSAgICAgICAgICAgIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCB8PSBrZXlmcmFt
ZUFuaW0tPmRlcGVuZHNPbkxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IHsgV1RGTW92ZShhbmltYXRlZFN0eWxlKSwgaW1hcGN0IH07Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29u
c3QKLXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwotICAg
IGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAg
IHRyYW5zaXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotCi0gICAgbV9rZXlm
cmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgZm9yIChhdXRvJiBuYW1l
IDogbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFt
ZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQo
bmFtZSk7Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKLSAgICAgICAgICAgIGtleWZy
YW1lQW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLSAgICB9Ci0gICAg
Ci0gICAgcmV0dXJuIHJlc3VsdFN0eWxlOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDb21wb3Np
dGVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm5z
IHRoZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0
IG1lYW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlz
IHJlcXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFu
eSBzZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgT3B0aW9uYWw8U2Vjb25kcz4gbWluVDsKLSAg
ICAKLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0
byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9w
dGlvbmFsPFNlY29uZHM+IHQgPSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAg
ICAgICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
aWYgKCFtaW5UIHx8IHQudmFsdWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBt
aW5UID0gdC52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1f
a2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
bV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHQgPSBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBp
ZiAoIXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQg
fHwgdC52YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQgPSB0LnZh
bHVlKCk7Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAg
ICAgICByZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pblQ7Ci19
Ci0KLUtleWZyYW1lQW5pbWF0aW9uKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGlvbkZvclBy
b3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgS2V5ZnJhbWVBbmlt
YXRpb24qIHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNlbmQgYmFjayB0
aGUgbGFzdCBhbmltYXRpb24gd2l0aCB0aGUgcHJvcGVydHkgaWYgdGhlcmUgYXJlIG11bHRpcGxl
cy4KLSAgICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9ucwot
ICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBh
bmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAg
aWYgKGFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAg
ICAgICAgICAgIHJlc3VsdCA9IGFuaW1hdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRl
RXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewot
ICAgIC8vIElmIG1vcmUgdGhhbiBvbmUgdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0
cmFuc2Zvcm0sIGdpdmUgdXAuCi0gICAgYm9vbCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFs
c2U7Ci0gICAgCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9u
cy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAg
ICAgICAgaWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAg
aWYgKCFhbmltYXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMp
KQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRp
b24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5z
aXRpb24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAo
c2VlblRyYW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
ICAgICBpZiAoIXRyYW5zaXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihi
b3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1
cm4gdHJ1ZTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25z
KCkKLXsKLSAgICBpZiAobV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3Vz
cGVuZGVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAg
ICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMo
KSkKLSAgICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlT
dGF0ZTo6UGF1c2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVz
KCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQotICAgICAgICAg
ICAgICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBh
dXNlZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpy
ZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc3VzcGVuZGVkKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5p
bWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tD
b25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVB
bmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5wbGF5U3Rh
dGVQbGF5aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUo
QW5pbWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlm
ICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRp
b24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0
YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkp
IHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMo
KSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0g
cHJvcGVydHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbih0cnVl
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsK
LSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0
cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb24tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQot
fQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLXsKLSAgICBpZiAo
IW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9u
IDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmlt
YXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0g
ICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAo
IW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlv
biA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9u
LT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxz
ZTsKLX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNv
bnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4g
a2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKLSAg
ICBpZiAoIWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGtleWZyYW1lQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0
aW9uQXRUaW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIGlmICgo
cHJvcGVydHkgPCBmaXJzdENTU1Byb3BlcnR5KSB8fCAocHJvcGVydHkgPj0gZmlyc3RDU1NQcm9w
ZXJ0eSArIG51bUNTU1Byb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJ
bXBsaWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wZXJ0eSk7
Ci0gICAgaWYgKCFpbXBsQW5pbSkgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBw
cm9wZXJ0eSBpcyBiZWluZyBhbmltYXRlZCB2aWEgYSBzaG9ydGhhbmQuCi0gICAgICAgIC8vIFRo
aXMgY29kZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcsIHNvIHBlcmZvcm1hbmNlIGlzIG5vdCBj
cml0aWNhbCBoZXJlLgotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IHNob3J0aGFuZFBy
b3BlcnRpZXMgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZl
Y3RpbmdQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgYW55UGF1c2VkID0gZmFsc2U7
Ci0gICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgewot
ICAgICAgICAgICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKLSAg
ICAgICAgICAgICAgICBhbnlQYXVzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVy
biBhbnlQYXVzZWQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbXBsQW5pbS0+cnVubmluZygpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKHQgPj0gMC4wKSAmJiAodCA8PSBpbXBsQW5p
bS0+ZHVyYXRpb24oKSkpIHsKLSAgICAgICAgaW1wbEFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNp
Z25lZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0
Ci17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5
ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPnJ1bm5p
bmcoKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFu
c2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlv
bi0+cnVubmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0
dXJuIGNvdW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCA5NDIyNjkyMzk2ZDJmYmE2ODgwZDFjZDlmOWM4ZDY5YjgyZTdiMGM1
Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwK
QEAgLTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9s
bGVyLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFt
ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3Rl
eHQvQXRvbVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNs
YXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBDb21wb3NpdGVB
bmltYXRpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0IGFyZSBy
dW5uaW5nCi0vLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEgbnVtYmVyIG9m
IHByb3BlcnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgotY2xhc3MgQ29tcG9zaXRlQW5pbWF0
aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Ci0gICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmlt
YXRpb24+IGNyZWF0ZShDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29u
dHJvbGxlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFu
aW1hdGlvbihhbmltYXRpb25Db250cm9sbGVyKSk7Ci0gICAgfTsKLQotICAgIH5Db21wb3NpdGVB
bmltYXRpb24oKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwotCi0gICAgQW5pbWF0
aW9uVXBkYXRlIGFuaW1hdGUoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRl
RXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgT3B0
aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKLSAgICAKLSAgICBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsg
cmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIGJvb2wgaXNTdXNwZW5k
ZWQoKSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotICAgIAotICAgIGJvb2wgaGFzQW5p
bWF0aW9ucygpIGNvbnN0ICB7IHJldHVybiAhbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkgfHwgIW1f
a2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1By
b3BlcnR5KENTU1Byb3BlcnR5SUQsIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdDsKLQotICAg
IEtleWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBj
b25zdDsKLQotICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJ
RCk7Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3Bl
cnR5SUQpOwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9tU3RyaW5n
JiBuYW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJv
cGVydHlJRCwgZG91YmxlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
KSBjb25zdDsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpIGNv
bnN0IHsgcmV0dXJuIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dDsgfQotCi1wcml2
YXRlOgotICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSYpOwotCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVy
U3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAg
ICB2b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICAK
LSAgICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQ
cm9wZXJ0eVRyYW5zaXRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1w
bCosIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7Ci0KLSAgICBi
b29sIG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQW5pbWF0aW9uVGhhdERl
cGVuZHNPbkxheW91dCB7IGZhbHNlIH07Ci0KLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSYgbV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNN
YXAgbV90cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRp
b25zOwotICAgIFZlY3RvcjxBdG9tU3RyaW5nSW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRl
ck1hcDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggNDUzOWY2YTUzZWM1MTUwYzkwNzM3ZDIwZTFiYjJhNWJiNDBhMDlhOC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwzNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFy
ZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRp
b24uaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5j
bHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRp
b24uaCIKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkNvbnRlbnRDaGFuZ2VP
YnNlcnZlci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdl
b21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNs
dWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLQot
bmFtZXNwYWNlIFdlYkNvcmUgewotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRp
b24oY29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1By
b3BlcnR5LCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFu
aW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJh
c2UodHJhbnNpdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9mcm9t
U3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKGZyb21TdHlsZSkpCi0gICAgLCBtX3RyYW5zaXRp
b25Qcm9wZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkuaWQpCi0gICAgLCBtX2FuaW1hdGluZ1By
b3BlcnR5KGFuaW1hdGluZ1Byb3BlcnR5KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0g
ICAgZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEFkZFRyYW5z
aXRpb24oZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYW5pbWF0aW5n
UHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLX0KLQotSW1wbGljaXRBbmltYXRpb246
On5JbXBsaWNpdEFuaW1hdGlvbigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBp
ZiAoYXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9j
dW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVt
ZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIC8vIC8vIE1ha2Ugc3VyZSB0
byB0ZWxsIHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1
cmUgYW55IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0
QWN0aXZlKCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5p
bWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBl
IGluTGlzdGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50
KCkuaGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1h
dGVDaGFuZ2U+IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYg
Y29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2Ug
Z2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBj
bGVhbmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIFNvIGp1c3QgcmV0
dXJuLiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxsIGNsZWFuZWQgdXAuCi0gICAgaWYgKHBvc3RB
Y3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0
YXRlID0gc3RhdGUoKTsKLQotICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlm
IHdlIGFyZSBuZXcKLSAgICBpZiAoaXNOZXcoKSkKLSAgICAgICAgcmVzZXQodGFyZ2V0U3R5bGUs
IGNvbXBvc2l0ZUFuaW1hdGlvbik7Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24u
Ci0gICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtl
IG9uZSBpZiBuZWVkZWQKLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVk
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgQ1NTUHJv
cGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5
LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgp
LCBwcm9ncmVzcygpKTsKLSAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNl
cyB3aGVyZSB3ZSBoYXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCi0g
ICAgLy8gc3VjaCBhcyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0KLSAgICAvLyBGaXJl
IHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5l
ZWRlZCgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hh
bmdlOjpTdHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAg
ICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQ
YXVzZWRTdGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQ
YXVzZWRTdGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAg
IGNoYW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJl
dHVybiBjaGFuZ2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5
bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBp
ZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIoKm1fdG9TdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCks
IG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotfQotCi1i
b29sIEltcGxpY2l0QW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24o
TGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChoYXNTdHlsZSgpKTsKLQot
ICAgIGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7
IC8vIE5vbi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBBU1NFUlQobV9hbmlt
YXRpbmdQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0KLSAgICBSZW5kZXJCb3gm
IGJveCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UmVjdCBy
ZW5kZXJlckJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwg
Ym94LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHN0
YXJ0Qm91bmRzID0gYm91bmRzOwotICAgIExheW91dFJlY3QgZW5kQm91bmRzID0gYm91bmRzOwot
Ci0gICAgaWYgKHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKSB7Ci0gICAgICAgIGlmICgh
Y29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKm1f
ZnJvbVN0eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRl
cmVyQm94LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50Vmlh
TWF0cml4KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVu
dFZpYU1hdHJpeChyZW5kZXJlckJveCwgKm1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSB1bmlvblJlY3Qoc3RhcnRC
b3VuZHMsIGVuZEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1wbGljaXRB
bmltYXRpb246OmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVk
KG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFy
dEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0VHJhbnNp
dGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwg
bV90b1N0eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRB
bmltYXRpb246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChh
dXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFu
c2l0aW9uUGF1c2VkKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotICAgIC8vIFJl
c3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkp
Ci0gICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6Y2xlYXIoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
aWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRv
Y3VtZW50KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxl
bWVudCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICBBbmltYXRpb25CYXNlOjpj
bGVhcigpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkK
LXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICBy
ZW5kZXJlci0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi12
b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUp
Ci17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRo
aXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdl
T2JzZXJ2ZXIoKS5kaWRGaW5pc2hUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3Bl
cnR5KTsKLSNlbmRpZgotICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24g
dGhpcyBwcm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBr
ZXlmcmFtZQotICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNh
c2UgYSB0cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCi0g
ICAgLy8gcnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQs
IHdlIG5lZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3Ci0gICAgLy8gZGVzdGlu
YXRpb24uIElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5r
IGEgdHJhbnNpdGlvbiBoYWQgc3RhcnRlZAotICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFu
aW1hdGVkIHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbiku
Ci0gICAgaWYgKGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRp
b25Gb3JQcm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KSkKLSAgICAgICAgYW5pbWF0aW9uLT5z
ZXRVbmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCptX3RvU3R5bGUpKTsKLQot
ICAgIHNlbmRUcmFuc2l0aW9uRXZlbnQoZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCwg
ZWxhcHNlZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5p
bWF0aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwg
ZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LnRyYW5zaXRpb25lbmRFdmVudCkgewotICAgICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxp
c3RlbmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwotCi0gICAgICAg
IGlmIChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAg
ICAgICBTdHJpbmcgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKG1fYW5pbWF0
aW5nUHJvcGVydHkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzcGF0Y2gg
dGhlIGV2ZW50Ci0gICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVs
ZW1lbnQoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1
bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3
YXJkQ2FjaGUpOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAg
ICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRk
RXZlbnRUb0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNl
ZFRpbWUpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRl
ZCkgc3R5bGUKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5z
aXRpb25lbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHNl
dE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0
cnVlOyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJl
dHVybiBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgSW1wbGlj
aXRBbmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0
aW9uJiBjb21wb3NpdGVBbmltYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKLQot
ICAgIG1fdG9TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0byk7Ci0KLSAgICBpZiAoZWxl
bWVudCgpKQotICAgICAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKm1fdG9TdHlsZSwg
ZWxlbWVudCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkpOwotCi0gICAgLy8gUmVzdGFydCB0aGUg
dHJhbnNpdGlvbi4KLSAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlICYmICFjb21wb3Np
dGVBbmltYXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24sIC0xKTsKLQotICAgIC8vIFNldCB0
aGUgdHJhbnNmb3JtIGFuaW1hdGlvbiBsaXN0LgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rp
b25MaXN0KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZp
bHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZp
bHRlckZ1bmN0aW9uTGlzdHMoKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3Zl
cnJpZGRlbihib29sIGIpCi17Ci0gICAgaWYgKGIgPT0gbV9vdmVycmlkZGVuKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBtX292ZXJyaWRkZW4gPSBiOwotICAgIHVwZGF0ZVN0YXRlTWFjaGluZSht
X292ZXJyaWRkZW4gPyBBbmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlIDogQW5pbWF0
aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUsIC0xKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFu
aW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IHByb3BlcnR5KTsKLX0KLQotYm9v
bCBJbXBsaWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQg
cHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIC8vIFdlIGNhbiBn
ZXQgaGVyZSBmb3IgYSB0cmFuc2l0aW9uIHRoYXQgaGFzIG5vdCBzdGFydGVkIHlldC4gVGhpcyB3
b3VsZCBtYWtlIG1fdG9TdHlsZSB1bnNldCBhbmQgbnVsbC4gCi0gICAgLy8gU28gd2UgY2hlY2sg
dGhhdCBoZXJlIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
NjcwNj4pCi0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBy
ZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5
bGUuZ2V0KCksIHRhcmdldFN0eWxlKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFkZCBhIHRyYW5zaXRpb24g
d2l0aCBhIDAgZHVyYXRpb24gYW5kIGRlbGF5LiBCdXQgaWYgd2UgZXZlciBkaWQKLSAgICAvLyBp
dCB3b3VsZCBoYXZlIGEgbnVsbCB0b1N0eWxlLiBTbyBqdXN0IGluIGNhc2UsIGxldCdzIGNoZWNr
IHRoYXQgaGVyZS4gKFNlZQotICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjQ3ODc+Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBw
cm9wLCBjdXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHBy
b2dyZXNzKCkpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9y
bUZ1bmN0aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBm
YWxzZTsKLSAgICAKLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAg
IHJldHVybjsKLSAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0g
Jm1fZnJvbVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25z
KiB0b1ZhbCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0
aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAgdmFsID0gdG9WYWw7Ci0KLSAgICBpZiAodmFsLT5v
cGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8v
IEFuIGVtcHR5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55dGhpbmcuCi0gICAgaWYgKHZhbCAh
PSB0b1ZhbCAmJiAhdG9WYWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIXZhbC0+b3BlcmF0
aW9uc01hdGNoKCp0b1ZhbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyYW5zZm9ybSBs
aXN0cyBtYXRjaC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19
Ci0KLXN0YXRpYyBib29sIGZpbHRlck9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRp
b25zKiBmcm9tT3BlcmF0aW9ucywgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG9PcGVyYXRpb25z
KQotewotICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgZnJvbU9wZXJhdGlvbnMgPSAmdG9PcGVyYXRpb25zOwotCi0gICAgaWYgKGZyb21PcGVy
YXRpb25zLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICBpZiAoZnJvbU9wZXJhdGlvbnMgIT0gJnRvT3BlcmF0aW9ucyAmJiAhdG9PcGVyYXRpb25z
Lm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIWZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zTWF0
Y2godG9PcGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRy
dWU7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJG
dW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNl
OwotCi0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRj
aCgmbV9mcm9tU3R5bGUtPmZpbHRlcigpLCBtX3RvU3R5bGUtPmZpbHRlcigpKTsKLX0KLQotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zv
ck1hdGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9w
RmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxl
IHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2Ryb3BGaWx0ZXJG
dW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJvbVN0eWxlLT5i
YWNrZHJvcEZpbHRlcigpLCBtX3RvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpOwotfQotI2VuZGlm
Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1
bmN0aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7
Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25z
TWF0Y2goJm1fZnJvbVN0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCksIG1fdG9TdHlsZS0+YXBwbGVD
b2xvckZpbHRlcigpKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gSW1wbGljaXRBbmltYXRpb246
OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0ID0gQW5pbWF0
aW9uQmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAoIXQgfHwgdC52YWx1ZSgpICE9
IDBfcyB8fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBfTVNDX1ZFUiA+PSAx
OTIwCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHQ7
Ci0jZW5kaWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2
aWNlLiBCdXQgaWYgdGhpcyBpcyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gd2UgCi0gICAgLy8g
b25seSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi4KLSAgICBpZiAo
Q1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1f
YW5pbWF0aW5nUHJvcGVydHkpICYmIGlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICBib29sIGlz
TG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5n
KTsKLSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9u
LmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmRl
bGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI4NGFkY2VjZjkyOGQ4NGUxNWE0MGM1Yzg4
NTc2MDVmM2U2NDYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysr
IC9kZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMu
ICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMg
b2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJv
bW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQg
c3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFO
WQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4g
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExP
U1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlv
bkJhc2UuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1l
bnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotCi0v
LyBBbiBJbXBsaWNpdEFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGEgdHJhbnNpdGlvbiBv
ZiBhIHNwZWNpZmljIENTUyBwcm9wZXJ0eQotLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQu
Ci1jbGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1Ymxp
YzoKLSAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0
aW9uJiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQm
IGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBS
ZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpu
ZXcgSW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVu
dCwgY29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKLSAgICB9OwotICAgIAotICAgIENT
U1Byb3BlcnR5SUQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0
aW9uUHJvcGVydHk7IH0KLSAgICBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5KCkgY29u
c3QgeyByZXR1cm4gbV9hbmltYXRpbmdQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBvbkFuaW1hdGlv
bkVuZChkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRp
b24oZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24o
ZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wg
ZmlsbGluZ0ZvcndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgT3B0aW9uU2V0PEFuaW1h
dGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxl
KTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgYW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJT
dHlsZSYgdG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50
T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAg
Ym9vbCBhZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRP
dmVycmlkZGVuKGJvb2wpOwotICAgIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fb3ZlcnJpZGRlbjsgfQotCi0gICAgYm9vbCBhZmZlY3RzUHJvcGVydHkoQ1NTUHJv
cGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Ci0KLSAgICBib29sIGlzVGFyZ2V0UHJv
cGVydHlFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9p
ZCBibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKik7
Ci0KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwot
ICAgIAotICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KLSAgICB2
b2lkIHNldEFjdGl2ZShib29sIGIpIHsgbV9hY3RpdmUgPSBiOyB9Ci0KLSAgICBjb25zdCBSZW5k
ZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fZnJv
bVN0eWxlOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAg
ICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUp
IGNvbnN0OyAgICAKLSAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmlu
ZyYsIGRvdWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVu
Y3Rpb25MaXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0
cygpOwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNo
aW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNr
Rm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBJ
bXBsaWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBFbGVtZW50
JiwgQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2aXJ0dWFs
IH5JbXBsaWNpdEFuaW1hdGlvbigpOwotCi0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBh
cmUgYmxlbmRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHls
ZTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKLQotICAgIENT
U1Byb3BlcnR5SUQgbV90cmFuc2l0aW9uUHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkg
YXMgc3BlY2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5p
bWF0aW5nUHJvcGVydHk7IC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5p
bWF0aW9uCi0KLSAgICBib29sIG1fYWN0aXZlIHsgdHJ1ZSB9OyAvLyBVc2VkIGZvciBjdWxsaW5n
IHRoZSBsaXN0IG9mIHRyYW5zaXRpb25zLgotICAgIGJvb2wgbV9vdmVycmlkZGVuIHsgZmFsc2Ug
fTsgLy8gVHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJp
ZGVzIHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjU3MTUwNzcyMzg3N2I1
ZWJmMzMyYmIwOGM4NTA5Nzc3OTg4YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmlt
YXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmln
aHQgKEMpIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9u
LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxl
LmgiCi0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVU
cmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5p
bWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVk
U3R5bGUpCi0gICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRl
QW5pbWF0aW9uKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUoKSkKLSAgICAsIG1f
dW5hbmltYXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cih1bmFuaW1hdGVkU3R5bGUpKQot
ewotICAgIHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBtX3Ry
YW5zZm9ybUZ1bmN0aW9uTGlzdFZhbGlkIGZsYWcgYmFzZWQgb24gd2hldGhlciB0aGUgZnVuY3Rp
b24gbGlzdHMgaW4gdGhlIGtleWZyYW1lcyBtYXRjaC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1
bmN0aW9uTGlzdCgpOwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ry
b3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29s
b3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1f
a2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoV2lsbENoYW5nZURhdGE6OnBy
b3BlcnR5Q3JlYXRlc1N0YWNraW5nQ29udGV4dChwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIG1f
dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKENT
U1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9w
ZXJ0eUlEKSkKLSAgICAgICAgICAgIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSA9IHRydWU7Ci0g
ICAgICAgIAotICAgICAgICBpZiAobV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCAmJiBtX2hhc0Fj
Y2VsZXJhdGVkUHJvcGVydHkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb21w
dXRlTGF5b3V0RGVwZW5kZW5jeSgpOwotfQotCi1LZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1l
QW5pbWF0aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0aGUgcmVuZGVyZXIgdGhh
dCB3ZSBhcmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBhY2NlbGVyYXRlZCBhbmlt
YXRpb25zIGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgpKQotICAgICAgICBlbmRB
bmltYXRpb24oKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUxheW91dERl
cGVuZGVuY3koKQotewotICAgIGlmICghbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQ
cm9wZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1LZXlm
cmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu
dW1LZXlmcmFtZXM7IGkrKykgewotICAgICAgICBhdXRvKiBrZXlmcmFtZVN0eWxlID0gbV9rZXlm
cmFtZXNbaV0uc3R5bGUoKTsKLSAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKSB7Ci0gICAgICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChrZXlmcmFtZVN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAg
ICAgICAgYXV0byYgdHJhbnNmb3JtT3BlcmF0aW9ucyA9IGtleWZyYW1lU3R5bGUtPnRyYW5zZm9y
bSgpOwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiB0cmFuc2Zvcm1P
cGVyYXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24t
PmlzVHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gdHJhbnNsYXRpb24gPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRp
b24+KG9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlv
bi0+eCgpLmlzUGVyY2VudCgpIHx8IHRyYW5zbGF0aW9uLT55KCkuaXNQZXJjZW50KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1fZGVwZW5kc09uTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5k
ZXJTdHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKLXsKLSAgICBzaXplX3QgbnVt
S2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQot
ICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKLSAgICBkb3VibGUg
ZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwotICAgIGlmIChtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSAmJiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0
ZXJhdGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gc3RkOjptaW4oZWxh
cHNlZFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlv
bkNvdW50KCkpOwotCi0gICAgY29uc3QgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJh
Y3Rpb25hbFRpbWUoMSwgZWxhcHNlZFRpbWUsIDApOwotICAgIEFTU0VSVCghbV9rZXlmcmFtZXNb
MF0ua2V5KCkpOwotICAgIEFTU0VSVChtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkgLSAx
XS5rZXkoKSA9PSAxKTsKLQotICAgIGludCBwcmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dElu
ZGV4ID0gLTE7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIg
c2VhcmNoIHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZy
YW1lVmFsdWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotCi0gICAgICAgIGlmICgh
Y3VycktleUZyYW1lLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29u
dGludWU7Ci0KLSAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleUZyYW1lLmtleSgp
KSB7Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KLSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAocHJldkluZGV4
ID09IC0xKQotICAgICAgICBwcmV2SW5kZXggPSAwOwotICAgIGlmIChuZXh0SW5kZXggPT0gLTEp
Ci0gICAgICAgIG5leHRJbmRleCA9IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7Ci0KLSAgICBjb25z
dCBLZXlmcmFtZVZhbHVlJiBwcmV2S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1twcmV2SW5kZXhdOwot
ICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIG5leHRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW25leHRJ
bmRleF07Ci0KLSAgICBmcm9tU3R5bGUgPSBwcmV2S2V5ZnJhbWUuc3R5bGUoKTsKLSAgICB0b1N0
eWxlID0gbmV4dEtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICBkb3VibGUgb2Zmc2V0ID0gcHJldktl
eWZyYW1lLmtleSgpOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMCAvIChuZXh0SW5kZXggPT0gcHJl
dkluZGV4ID8gIDEgOiAobmV4dEtleWZyYW1lLmtleSgpIC0gcHJldktleWZyYW1lLmtleSgpKSk7
Ci0KLSAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWlu
Z0Z1bmN0aW9uKCkpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gS2V5ZnJhbWVBbmlt
YXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNv
bnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0YXRl
KCk7Ci0KLSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYg
bmVlZGVkIChGSVhNRTogdGhpcyBmdW5jdGlvbiBuZWVkcyBhIGJldHRlciBuYW1lKS4KLSAgICBm
aXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm90IHll
dCBzdGFydGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBz
dGFydCB0aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KLSAgICBpZiAoaXNOZXcoKSkgewotICAgICAg
ICBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxh
eWluZyAmJiAhY29tcG9zaXRlQW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICB1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0x
KTsKLSAgICAgICAgZWxzZSBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlv
blBsYXlTdGF0ZTo6UGF1c2VkKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCwgLTEpOwotICAgIH0KLQotICAgIC8vIElm
IHdlIGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBh
cmUgY2xlYW5pbmcgdXAgYSBqdXN0LWZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBzbywg
d2UgbmVlZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZl
KCkpIHsKLSAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICAgICAgYW5pbWF0ZWRT
dHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVy
biB7IH07Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0
aW1lciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldC4KLSAgICAvLyBTcGVj
aWFsIGNhc2UgMSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBz
ZXQgdGhlIGZpcnN0IGZyYW1lIG9mIHRoZQotICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBU
aGlzIGF2b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCi0gICAgLy8gU3Bl
Y2lhbCBjYXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUsIHRoZW4gd2Ug
d2FudCB0byBjb250aW51ZQotICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJsZW5kIHNvIHRo
YXQgd2UgZ2V0IHRoZSBmcm9tU3R5bGUuCi0gICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9h
bmltYXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1l
cywgZG9uJ3QgYW5pbWF0ZS4KLSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewotICAgICAg
ICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uLCAt
MSk7Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2Yg
YW5pbWF0aW9uLgotICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHls
ZSwgc28gbWFrZSBvbmUgaWYgbmVlZGVkLgotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAg
ICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0K
LSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1p
bmluZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgotICAgIC8vIFdl
IHNob3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGF1dG8g
cHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBHZXQg
dGhlIGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCi0gICAgICAgIGNvbnN0IFJl
bmRlclN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogdG9TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAg
ICAgIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBmcm9tU3R5
bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6
YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZy
b21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIE9wdGlvblNldDxBbmlt
YXRlQ2hhbmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKTsKLSAgICBpZiAo
c3RhdGUoKSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpT
dGF0ZUNoYW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3RhdGUob2xkU3RhdGUpIHx8IGlzUnVu
bmluZ1N0YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3RhdGUoc3RhdGUoKSkgfHwgaXNSdW5u
aW5nU3RhdGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlJ1
bm5pbmdTdGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hhbmdlOwotfQotCi12b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UncmUgZG9uZSwgb3IgaW4gdGhlIGRl
bGF5IHBoYXNlIGFuZCB3ZSdyZSBub3QgYmFja3dhcmRzIGZpbGxpbmcsIHRlbGwgdGhlIGNhbGxl
ciB0byB1c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8fCAod2Fp
dGluZ1RvU3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9u
LT5maWxsc0JhY2t3YXJkcygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2tleWZy
YW1lcy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkK
LSAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlcigp
LT5zdHlsZSgpKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJv
cGVydGllcygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dy
ZXNzIGJldHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxw
dHI7Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAg
ICAgZG91YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0Zv
clByb3BlcnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0g
ICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVy
dHlJRCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7
Ci0gICAgfQotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFu
c2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVCht
X2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSk7Ci0KLSAg
ICBpZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAv
LyBOb24tYm94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgYXV0byYgYm94ID0gZG93
bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZW5kZXJlckJveCA9IHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGN1bXVsYXRpdmVCb3VuZHM7
Ci0KLSAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsK
LSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBrZXlmcmFtZS5zdHls
ZSgpOwotCi0gICAgICAgIGlmICgha2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0
eVRyYW5zZm9ybSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBrZXlmcmFtZSBpcyBt
aXNzaW5nIHRyYW5zZm9ybSBzdHlsZSwgdXNlIHRoZSBjdXJyZW50IHN0eWxlLgotICAgICAgICAg
ICAgaWYgKCFrZXlmcmFtZS5rZXkoKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVN0eWxlID0g
JmJveC5zdHlsZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKLSAg
ICAgICAgCi0gICAgICAgIGJvb2wgY2FuQ29tcHV0ZTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUZ1
bmN0aW9uTGlzdHNNYXRjaCgpKQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFu
c2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxl
LCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbkNvbXB1dGUg
PSBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFt
ZVN0eWxlLCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNhbkNvbXB1
dGUpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBjdW11bGF0
aXZlQm91bmRzLnVuaXRlKGtleWZyYW1lQm91bmRzKTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBj
dW11bGF0aXZlQm91bmRzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5p
bWF0aW9uOjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBj
b25zdAotewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5
KTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkK
LSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2Fu
aW1hdGlvbiwgbV9rZXlmcmFtZXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLZXlm
cmFtZUFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAg
aWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJl
ciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25QYXVzZWQo
dGltZU9mZnNldCwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3Rv
cmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRzKQotewotICAgIGlm
ICghZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uRmluaXNoZWQo
bV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdp
bmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghZmlsbGluZ0ZvcndhcmRzICYmICFwYXVz
ZWQoKSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi1ib29s
IEtleWZyYW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6
TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgp
LT5kb2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShsaXN0ZW5lclR5cGUpOwotfQotCi12b2lkIEtl
eWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsK
LSAgICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQs
IGVsYXBzZWRUaW1lKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25J
dGVyYXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChl
dmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKLX0KLQot
dm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1l
KQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZl
bnQsIGVsYXBzZWRUaW1lKTsKLSAgICBlbmRBbmltYXRpb24obV9hbmltYXRpb24tPmZpbGxzRm9y
d2FyZHMoKSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVu
dChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAg
ICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZlbnRUeXBl
ID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCB8fCBldmVudFR5
cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50KQotICAgICAgICBsaXN0
ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9OX0xJU1RFTkVSOwotICAgIGVs
c2UgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQg
fHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKLSAgICAgICAg
bGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsKLSAgICBlbHNl
IHsKLSAgICAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0
aW9uU3RhcnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0
RXZlbnQpOwotICAgICAgICBpZiAobV9zdGFydEV2ZW50RGlzcGF0Y2hlZCkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICAgICAgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0g
ICAgICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFSVF9MSVNURU5FUjsK
LSAgICB9Ci0KLSAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBl
KSkgewotICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgYXV0byBlbGVtZW50
ID0gbWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwotCi0gICAgICAgIEFTU0VSVCghZWxlbWVu
dCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3Vt
ZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxp
bmcKLSAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
ZGRFdmVudFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0
aW9uTmFtZSgpLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2lu
YWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgICAgIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFt
ZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LmFuaW1hdGlvbmVuZEV2ZW50KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAg
c2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICByZXR1cm4gdHJ1
ZTsgLy8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAv
LyBEaWQgbm90IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246
Om92ZXJyaWRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGltcGxp
Y2l0IGFuaW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUg
YW5pbWF0aW9uCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0
aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5p
bWF0aW9ucyhwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1l
T3ZlcnJpZGRlbkFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgb3ZlcnJp
ZGRlbiBpbXBsaWNpdCBhbmltYXRpb25zCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tl
eWZyYW1lcy5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1
bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi1ib29sIEtl
eWZyYW1lQW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkg
Y29uc3QKLXsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0
eSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc29sdmVLZXlmcmFtZVN0eWxlcygp
Ci17Ci0gICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRv
KiBzdHlsZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKCplbGVtZW50KCksIG1fYW5p
bWF0aW9uLT5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHN0eWxlU2NvcGUtPnJl
c29sdmVyKCkua2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oKmVsZW1lbnQoKSwgbV91bmFuaW1h
dGVkU3R5bGUuZ2V0KCksIG1fa2V5ZnJhbWVzKTsKLQotICAgIC8vIEVuc3VyZSByZXNvdXJjZSBs
b2FkcyBmb3IgYWxsIHRoZSBmcmFtZXMuCi0gICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5
ZnJhbWVzLmtleWZyYW1lcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGNvbnN0X2Nh
c3Q8UmVuZGVyU3R5bGUqPihrZXlmcmFtZS5zdHlsZSgpKSkKLSAgICAgICAgICAgIFN0eWxlOjps
b2FkUGVuZGluZ1Jlc291cmNlcygqc3R5bGUsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgZWxlbWVu
dCgpKTsKLSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNm
b3JtRnVuY3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9
IGZhbHNlOwotICAgIAotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZy
YW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0
aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVt
S2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5
VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZSYgY3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGlmIChjdXJy
ZW50S2V5ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSkgewot
ICAgICAgICAgICAgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9u
RW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9
ICZtX2tleWZyYW1lc1tmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleF0uc3R5bGUo
KS0+dHJhbnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZh
bGlkCi0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUlu
ZGV4ICsgMTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1l
VmFsdWUmIGN1cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBjb25zdCBU
cmFuc2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmY3VycmVudEtleWZyYW1lLnN0eWxlKCktPnRyYW5z
Zm9ybSgpOwotICAgICAgICAKLSAgICAgICAgLy8gQW4gZW10cHkgdHJhbnNmb3JtIGxpc3QgbWF0
Y2hlcyBhbnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmaXJzdFZhbC0+
b3BlcmF0aW9uc01hdGNoKCp2YWwpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAg
IG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFt
ZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmIChjb25zdCBSZW5kZXJTdHlsZSYpPiYgZmlsdGVyc0dldHRlcikgY29uc3QKLXsKLSAgICBp
ZiAobV9rZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0
eShwcm9wZXJ0eUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW1wdHkgZmls
dGVycyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFz
IHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6
ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1l
czsKLQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAg
ICAgICAgaWYgKGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ldLnN0eWxlKCkpLm9wZXJhdGlv
bnMoKS5zaXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0g
aTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChm
aXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGF1dG8mIGZpcnN0VmFsID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFt
ZXNbZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXhdLnN0eWxlKCkpOwotICAgIAotICAgIGZvciAo
c2l6ZV90IGkgPSBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFt
ZXM7ICsraSkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJh
bWVzW2ldLnN0eWxlKCkpOwotCi0gICAgICAgIC8vIEFuIGVtdHB5IGZpbHRlciBsaXN0IG1hdGNo
ZXMgYW55dGhpbmcuCi0gICAgICAgIGlmICh2YWx1ZS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQot
ICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFmaXJzdFZhbC5vcGVyYXRpb25z
TWF0Y2godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJl
dHVybiB0cnVlOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5n
RmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2gg
PSBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUZpbHRlciwg
W10gKGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
ewotICAgICAgICByZXR1cm4gc3R5bGUuZmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBFTkFC
TEUoRklMVEVSU19MRVZFTF8yKQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRj
aGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRl
ckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3Rz
KENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHlsZSYg
c3R5bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0eWxl
LmJhY2tkcm9wRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0g
ICAgbV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0
ZXJGdW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgW10gKGNvbnN0IFJl
bmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICBy
ZXR1cm4gc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpOwotICAgIH0pOwotfQotCi1PcHRpb25hbDxT
ZWNvbmRzPiBLZXlmcmFtZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9w
dGlvbmFsPFNlY29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwot
ICAgIGlmICghdCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJ
TEVSKE1TVkMpICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7
Ci0jZWxzZQotICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFs
dWUgb2YgMCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgYWNjZWxl
cmF0ZWQgYW5pbWF0aW9ucyB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5k
IG9mIHRoZSB0cmFuc2l0aW9uLgotICAgIGJvb2wgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9
IHRydWU7Ci0gICAgCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9w
ZXJ0aWVzKCkpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9u
T2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkg
ewotICAgICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRQcm9w
ZXJ0aWVzT25seSkgewotICAgICAgICBib29sIGlzTG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRv
TmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDQ5MmUzOTE1NWM0YTliNzhjMWM2ZDZmZWUxYzJlZTNlMGJiNmJmMzguLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCww
IEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0g
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBw
bGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRv
cnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0g
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNw
cmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsK
LQotY2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIEtl
eWZyYW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0aW9u
IGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gZmlu
YWwgOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxLZXlm
cmFtZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50
JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9w
dFJlZigqbmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRl
QW5pbWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKLSAgICB9Ci0gICAgCi0gICAgT3B0aW9uU2V0
PEFuaW1hdGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVy
U3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRl
ZFN0eWxlKTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1B
bmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgS2V5ZnJh
bWVMaXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotCi0gICAg
Y29uc3QgQXRvbVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1h
dGlvbk5hbWUoKTsgfQotCi0gICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9w
ZXJ0eUlEKSBjb25zdDsKLQotICAgIGJvb2wgdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSBjb25z
dCB7IHJldHVybiBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0OyB9Ci0gICAgYm9vbCBkZXBlbmRz
T25MYXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2RlcGVuZHNPbkxheW91dDsgfQotICAgIGJvb2wg
YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJh
dGVkUHJvcGVydHk7IH0KLQotICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBXVEZNb3ZlKHN0
eWxlKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiAqbV91bmFuaW1hdGVkU3R5bGU7IH0KLQotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgS2V5
ZnJhbWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1h
dGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1YWwg
fktleWZyYW1lQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91Ymxl
IGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRv
dWJsZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3Vi
bGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91Ymxl
IHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0Zv
cndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMo
KSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgb3ZlcnJp
ZGU7Ci0KLSAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0
ZW5lclR5cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0OwotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2
ZW50KGNvbnN0IEF0b21TdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotCi0gICAgYm9vbCBh
ZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbkZvck1hdHJpeEFuaW1hdGlvbihjb25zdCBGbG9hdFJl
Y3QmIHJlbmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIGNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbkZvck1hdGNoaW5nVHJhbnNmb3JtTGlzdHMoY29uc3QgRmxvYXRSZWN0
JiByZW5kZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgdm9pZCBjb21wdXRlTGF5
b3V0RGVwZW5kZW5jeSgpOwotICAgIHZvaWQgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0gICAg
dm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAgIHZvaWQgY2hlY2tGb3JN
YXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8y
KQotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygp
OwotI2VuZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxp
c3RzKCk7Ci0gICAgYm9vbCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQ
cm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChj
b25zdCBSZW5kZXJTdHlsZSYpPiYpIGNvbnN0OwotICAgIAotICAgIC8vIEdldCB0aGUgc3R5bGVz
IGZvciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9u
IHRpbWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCi0gICAgdm9pZCBmZXRjaEludGVy
dmFsRW5kcG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUq
JiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVz
cykgY29uc3Q7Ci0KLSAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsgLy8gVGhlIHN0eWxlIGp1c3Qg
YmVmb3JlIHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0KLSAgICBib29sIG1fc3RhcnRFdmVudERpc3Bh
dGNoZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgeyBmYWxzZSB9OwotICAg
IGJvb2wgbV9kZXBlbmRzT25MYXlvdXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3Jh
cGhpY3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NM
YXllci5oCmluZGV4IDdlNGZlM2ZkMDBjYTU5ZDliNzgyYThhMDQwZjRkNWI3OTE4MDlmZTYuLmVl
MzQ3YmE4NTMyNjFjOTYyZWE5OTQyYjY4M2YyYTJkYTkxMmFkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTQ3NCw5ICs0NzQs
NyBAQCBwdWJsaWM6CiAgICAgLy8gVHJhbnNpdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBzcGVj
aWFsIGFuaW1hdGlvbiBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXlmcmFtZSBpZGVu
dGlmaWVyLgogICAgIHN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5p
bWF0ZWRQcm9wZXJ0eUlEKTsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24g
aXMgaGFuZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLiBJZiB0aGlzIHJldHVybnMKLSAg
ICAvLyBmYWxzZSwgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHJ1biBieSBDU1NBbmltYXRpb25Db250
cm9sbGVyLgotICAgIC8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIGJvdGggdHJhbnNpdGlvbnMgYW5k
IGtleWZyYW1lIGFuaW1hdGlvbnMuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlv
biBpcyBoYW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBib29s
IGFkZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYg
Lypib3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25O
YW1lKi8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmly
dHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8s
IGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKSB7IH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXJDbGllbnQuaAppbmRl
eCA3OWEzZjUzOTYzYmY0N2I2MDE0ODAwYTc1MzIzNGQ2YTFkMTNhMWQ0Li41NjQ4NThlMmFhYTkx
YTVlZWI3ZjhhMjQ1OWIxNmEwMDNiOGY0ZmIyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyQ2xpZW50LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllckNsaWVudC5oCkBAIC05Myw3ICs5Myw2
IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgdGlsZWRCYWNraW5nVXNhZ2VDaGFuZ2VkKGNv
bnN0IEdyYXBoaWNzTGF5ZXIqLCBib29sIC8qdXNpbmdUaWxlZEJhY2tpbmcqLykgeyB9CiAgICAg
CiAgICAgLy8gQ2FsbGJhY2sgZm9yIHdoZW4gaGFyZHdhcmUtYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
IHN0YXJ0ZWQuCi0gICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
R3JhcGhpY3NMYXllciosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25LZXkqLywgTW9ub3Rvbmlj
VGltZSAvKnRpbWUqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIG5vdGlmeUFuaW1hdGlvbkVuZGVk
KGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uS2V5Ki8pIHsg
fQogCiAgICAgLy8gTm90aWZpY2F0aW9uIHRoYXQgYSBsYXllciBwcm9wZXJ0eSBjaGFuZ2VkIHRo
YXQgcmVxdWlyZXMgYSBzdWJzZXF1ZW50IGNhbGwgdG8gZmx1c2hDb21wb3NpdGluZ1N0YXRlKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNz
TGF5ZXJDQS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGlj
c0xheWVyQ0EuY3BwCmluZGV4IDQ3MjBlMTI5OWVhNjRiNGNiYmRmOWZlMGVjMmI0M2RmY2U1YjRi
MWUuLmZlNzgzZmFhNzMxOWY5MjBjMTZjMzMzZWM5NjgyMDYzNTZmMmU1NzUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNB
LmNwcApAQCAtMTEwOCwxMiArMTEwOCw2IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpyZW1vdmVB
bmltYXRpb24oY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG5vdGVMYXllclByb3Bl
cnR5Q2hhbmdlZChBbmltYXRpb25DaGFuZ2VkIHwgQ292ZXJhZ2VSZWN0Q2hhbmdlZCk7CiB9CiAK
LXZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGNv
bnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICJHcmFwaGljc0xheWVyQ0Eg
IiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmltYXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxh
eWVyQW5pbWF0aW9uU3RhcnRlZCAiIDw8IGFuaW1hdGlvbktleSk7Ci0gICAgY2xpZW50KCkubm90
aWZ5QW5pbWF0aW9uU3RhcnRlZCh0aGlzLCBhbmltYXRpb25LZXksIHN0YXJ0VGltZSk7Ci19Ci0K
IHZvaWQgR3JhcGhpY3NMYXllckNBOjpwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25z
dCBTdHJpbmcmIGFuaW1hdGlvbktleSkKIHsKICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICJHcmFwaGljc0xheWVyQ0EgIiA8PCB0aGlzIDw8ICIgaWQgIiA8PCBwcmlt
YXJ5TGF5ZXJJRCgpIDw8ICIgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uRW5kZWQgIiA8PCBhbmlt
YXRpb25LZXkpOwpAQCAtMzA0MCw5ICszMDM0LDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVw
ZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5KCkKIAogc3RhdGljIGJvb2wgaXNLZXlmcmFtZShjb25z
dCBLZXlmcmFtZVZhbHVlTGlzdCYgbGlzdCkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCkpCi0gICAgICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDE7Ci0gICAgcmV0dXJuIGxpc3Quc2l6
ZSgpID4gMjsKKyAgICByZXR1cm4gbGlzdC5zaXplKCkgPiAxOwogfQogCiBib29sIEdyYXBoaWNz
TGF5ZXJDQTo6Y3JlYXRlQW5pbWF0aW9uRnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsdWVMaXN0LCBjb25zdCBBbmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5n
JiBhbmltYXRpb25OYW1lLCBTZWNvbmRzIHRpbWVPZmZzZXQpCkBAIC0zMjkzLDM5ICszMjg1LDI5
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjpzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNBQW5pbWF0
aW9uKiBwcm9wZXJ0eUFuaW0sIGNvbnN0IEFuCiAgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2
ZShhZGRpdGl2ZSk7CiAgICAgcHJvcGVydHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7CiAK
LSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgLy8gQSBD
U1MgVHJhbnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3Bl
cnR5KCkgd2lsbCBoYXZlCi0gICAgICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0
eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCi0gICAgICAg
IC8vIHRpbWluZyBmdW5jdGlvbiB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0
YXRpb24uCi0gICAgICAgIGlmIChhbmltLT5wcm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpU
cmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkpCi0gICAgICAgICAgICBwcm9wZXJ0eUFuaW0t
PnNldFRpbWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgIH0KKyAgICAv
LyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAor
ICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0
aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQ
cm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCisg
ICAgLy8gdGltaW5nIGZ1bmN0aW9uIHRvIHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGlt
aXRhdGlvbi4KKyAgICBpZiAoYW5pbS0+cHJvcGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJh
bnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5KQorICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRp
bWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWluZ0Z1bmN0aW9uKCkpOwogfQogCiBjb25zdCBUaW1pbmdG
dW5jdGlvbiYgR3JhcGhpY3NMYXllckNBOjp0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVl
KGNvbnN0IEFuaW1hdGlvblZhbHVlJiBhbmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbSkK
IHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGFuaW0ucHJv
cGVydHkoKS5tb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5
ICYmIGFuaW0udGltaW5nRnVuY3Rpb24oKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgICAgIC8v
IEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpw
cm9wZXJ0eSgpIHdpbGwgaGF2ZQotICAgICAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmds
ZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQotICAg
ICAgICAgICAgLy8gYW5pbWF0aW9uLXdpZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQg
b24gdGhlIHNpbmdsZSBrZXlmcmFtZSBpbnRlcnZhbAotICAgICAgICAgICAgLy8gdG8gd29yayBh
cm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgotICAgICAgICAgICAgcmV0dXJuICph
bmltLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKGFuaW1WYWx1ZS50
aW1pbmdGdW5jdGlvbigpKQotICAgICAgICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVu
Y3Rpb24oKTsKLSAgICAgICAgaWYgKGFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJh
bWVzKCkpCi0gICAgICAgICAgICByZXR1cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9y
S2V5ZnJhbWVzKCk7Ci0gICAgICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVk
TGluZWFyVGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0g
QW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdG
dW5jdGlvbigpKSB7CisgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjE1OTE4CisgICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhl
IG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAg
ICAgICAvLyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2Ug
Y2hvc2Ugbm90IHRvIHNldCBzZXQgdGhlCisgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRpbWlu
ZyBmdW5jdGlvbiwgc28gd2Ugc2V0IGl0IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2YWwK
KyAgICAgICAgLy8gdG8gd29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgor
ICAgICAgICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKICAgICB9Ci0KICAgICBpZiAo
YW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpCiAgICAgICAgIHJldHVybiAqYW5pbVZhbHVlLnRp
bWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYgKGFuaW0uaXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAg
ICAgICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKLSAgICByZXR1cm4gQ3ViaWNCZXpp
ZXJUaW1pbmdGdW5jdGlvbjo6ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0u
ZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiAqYW5p
bS5kZWZhdWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKTsKKyAgICByZXR1cm4gTGluZWFy
VGltaW5nRnVuY3Rpb246OnNoYXJlZExpbmVhclRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKIGJvb2wg
R3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1
ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FB
bmltYXRpb24qIGJhc2ljQW5pbSkKQEAgLTMzNDYsMTEgKzMzMjgsNiBAQCBib29sIEdyYXBoaWNz
TGF5ZXJDQTo6c2V0QW5pbWF0aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2
YWx1ZUxpc3QsCiAgICAgICAgIGJyZWFrOwogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGgg
aXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxv
b2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRo
ZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0
aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAg
ICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0
aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAg
IHJldHVybiB0cnVlOwogfQogCkBAIC0zNDQwLDExICszNDE3LDYgQEAgYm9vbCBHcmFwaGljc0xh
eWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmEKICAgICAgICAgfQogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNl
ZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4g
dGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZl
cnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGlt
aW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJh
c2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFs
dWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIGF1dG8g
dmFsdWVGdW5jdGlvbiA9IGdldFZhbHVlRnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9u
KHRyYW5zZm9ybU9wVHlwZSk7CiAgICAgaWYgKHZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFu
aW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uKQogICAgICAgICBiYXNpY0FuaW0tPnNldFZhbHVlRnVu
Y3Rpb24odmFsdWVGdW5jdGlvbik7CkBAIC0zNTUxLDExICszNTIzLDYgQEAgYm9vbCBHcmFwaGlj
c0xheWVyQ0E6OnNldEZpbHRlckFuaW1hdGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVl
TGlzdCYgdmFsdWUKICAgICBiYXNpY0FuaW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0aW9uLCBp
bnRlcm5hbEZpbHRlclByb3BlcnR5SW5kZXgpOwogICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0
b09wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKIAotICAgIC8vIFRoaXMg
Y29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBu
ZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBF
dmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBw
cm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCkpCi0gICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9u
Rm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRz
KTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCmluZGV4IGZlN2RjNTZhNDdmM2Zi
ZTc4ZDEzMWFhYTZkYzI5NjQ2ZTBlYzMyYmQuLmYyNmU1MWFkZmNmZjZiMzZmODg4M2Q0ZjY2NGNj
NzU2N2FiYmYxM2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL0dyYXBoaWNzTGF5ZXJDQS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5oCkBAIC0xOTUsNyArMTk1LDYgQEAgcHJpdmF0ZToKICAg
ICBib29sIHBsYXRmb3JtQ0FMYXllclJlc3BvbmRzVG9MYXlvdXRDaGFuZ2VzKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gZmFsc2U7IH0KICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3Jt
Q0FMYXllckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7
CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1RpbWUgYmVnaW5UaW1lKSBv
dmVycmlkZTsKICAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHBsYXRmb3JtQ0FMYXllckFuaW1hdGlv
bkVuZGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KSBvdmVycmlkZTsKICAgICBDb21wb3Np
dGluZ0Nvb3JkaW5hdGVzT3JpZW50YXRpb24gcGxhdGZvcm1DQUxheWVyQ29udGVudHNPcmllbnRh
dGlvbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIGNvbnRlbnRzT3JpZW50YXRpb24oKTsgfQog
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFpbnRDb250ZW50cyhQbGF0
Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9hdFJlY3QmIGNsaXAsIEdy
YXBoaWNzTGF5ZXJQYWludEJlaGF2aW9yKSBvdmVycmlkZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKaW5kZXggNTA0YjAx
YzI0NDRlOWU5NTljMThjMzQ2Y2I1ZWI3YmVjYTBkNjM3NC4uMzZiYmMyMGE4NDFkMjlmMzc3NmM1
MzY1NTFmZDA2ZGQwZGRmYTJmYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKQEAgLTEwMyw3ICsxMDMsNiBAQCBwdWJs
aWM6CiAgICAgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcigpIGNvbnN0IHsgcmV0dXJuIG1f
b3duZXI7IH0KICAgICB2aXJ0dWFsIHZvaWQgc2V0T3duZXIoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgeyBtX293bmVyID0gb3duZXI7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkgPSAw
OwogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgPSAw
OwogCiAgICAgdmlydHVhbCB2b2lkIHNldE5lZWRzRGlzcGxheSgpID0gMDsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllckNsaWVu
dC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKaW5kZXggNjc3OGRlNzE5YzUwZTFhNDVmYzgyNDZkNzNhOTA4YWJmYmFkMTMwNi4u
NGNkMDg0M2I1ZWQ5YTY0ZGNiZDcwZGEyZGE0Y2IyZWFmZDEwODNlZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyQ2xpZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
Q2xpZW50LmgKQEAgLTQwLDcgKzQwLDYgQEAgcHVibGljOgogCiAgICAgdmlydHVhbCB2b2lkIHBs
YXRmb3JtQ0FMYXllckN1c3RvbVN1YmxheWVyc0NoYW5nZWQoUGxhdGZvcm1DQUxheWVyKikgeyB9
CiAKLSAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyQW5pbWF0aW9uU3RhcnRlZChjb25z
dCBTdHJpbmcmIC8qYW5pbWF0aW9uS2V5Ki8sIE1vbm90b25pY1RpbWUpIHsgfQogICAgIHZpcnR1
YWwgdm9pZCBwbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIC8qYW5p
bWF0aW9uS2V5Ki8pIHsgfQogICAgIHZpcnR1YWwgR3JhcGhpY3NMYXllcjo6Q29tcG9zaXRpbmdD
b29yZGluYXRlc09yaWVudGF0aW9uIHBsYXRmb3JtQ0FMYXllckNvbnRlbnRzT3JpZW50YXRpb24o
KSBjb25zdCB7IHJldHVybiBHcmFwaGljc0xheWVyOjpDb21wb3NpdGluZ0Nvb3JkaW5hdGVzT3Jp
ZW50YXRpb246OlRvcERvd247IH0KICAgICB2aXJ0dWFsIHZvaWQgcGxhdGZvcm1DQUxheWVyUGFp
bnRDb250ZW50cyhQbGF0Zm9ybUNBTGF5ZXIqLCBHcmFwaGljc0NvbnRleHQmLCBjb25zdCBGbG9h
dFJlY3QmIGluQ2xpcCwgR3JhcGhpY3NMYXllclBhaW50QmVoYXZpb3IpID0gMDsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FM
YXllckNvY29hLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9Q
bGF0Zm9ybUNBTGF5ZXJDb2NvYS5oCmluZGV4IDk5MjJmNDhmYjcwZDA5Y2UwOGY2MmY0ZDFhMzdi
Mzg0OTU5MThlZjIuLjViMjE2M2VjMDI5NzdkZDk0NmMxNzAyNmVlMTJmNGEzYzAxZmZlYTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRm
b3JtQ0FMYXllckNvY29hLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaApAQCAtNjMsNyArNjMsNiBAQCBwdWJsaWM6
CiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3Jt
Q0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRp
b24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCBhbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2lu
VGltZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtl
eSkgb3ZlcnJpZGU7CiAKICAgICB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJp
ZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2Nv
YS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IDI4ODQ2ZjZiOTE1NjEx
YjkyZWY3NDBkOTNhOTgxZDAwMDNhNWI2OWMuLjU5NTQxZjg3NzRmODMyZmE3Y2RlNjA5MDdjMWRl
YmNjNTk1NTU5NmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBAIC05OSw1
NiArOTksMTggQEAgUmVmPFBsYXRmb3JtQ0FMYXllckNvY29hPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXQKICAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYSgoX19icmlkZ2UgQ0FMYXllciAqKXBsYXRmb3JtTGF5
ZXIsIG93bmVyKSk7CiB9CiAKLXN0YXRpYyBNb25vdG9uaWNUaW1lIG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUoQ0ZUaW1lSW50ZXJ2YWwgdCkKLXsKLSAgICByZXR1cm4gTW9ub3RvbmljVGltZTo6bm93
KCkgKyBTZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0KIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKIAotLy8gRGVsZWdhdGUgZm9yIGFuaW1hdGlvbkRpZFN0YXJ0IGNhbGxiYWNr
CiBAaW50ZXJmYWNlIFdlYkFuaW1hdGlvbkRlbGVnYXRlIDogTlNPYmplY3QgewogICAgIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllciogbV9vd25lcjsKIH0KIAotLSAodm9pZClhbmltYXRpb25EaWRT
dGFydDooQ0FBbmltYXRpb24gKilhbmltOwogLSAodm9pZClzZXRPd25lcjooV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyKilvd25lcjsKIAogQGVuZAogCiBAaW1wbGVtZW50YXRpb24gV2ViQW5pbWF0
aW9uRGVsZWdhdGUKIAotLSAodm9pZClhbmltYXRpb25EaWRTdGFydDooQ0FBbmltYXRpb24gKilh
bmltYXRpb24KLXsKLSAgICB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKLSNpZiBQTEFURk9STShJ
T1NfRkFNSUxZKQotICAgIFdlYlRocmVhZExvY2soKTsKLSNlbmRpZgotICAgIGlmICghbV9vd25l
cikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgTW9ub3RvbmljVGltZSBzdGFydFRpbWU7Ci0gICAg
aWYgKGhhc0V4cGxpY2l0QmVnaW5UaW1lKGFuaW1hdGlvbikpIHsKLSAgICAgICAgLy8gV2UgZG9u
J3Qga25vdyB3aGF0IHRpbWUgQ0EgdXNlZCB0byBjb21taXQgdGhlIGFuaW1hdGlvbiwgc28ganVz
dCB1c2UgdGhlIGN1cnJlbnQgdGltZQotICAgICAgICAvLyAoZXZlbiB0aG91Z2ggdGhpcyB3aWxs
IGJlIHNsaWdodGx5IG9mZikuCi0gICAgICAgIHN0YXJ0VGltZSA9IG1lZGlhVGltZVRvQ3VycmVu
dFRpbWUoQ0FDdXJyZW50TWVkaWFUaW1lKCkpOwotICAgIH0gZWxzZQotICAgICAgICBzdGFydFRp
bWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1lKFthbmltYXRpb24gYmVnaW5UaW1lXSk7Ci0KLSAg
ICBDQUxheWVyICpsYXllciA9IG1fb3duZXItPnBsYXRmb3JtTGF5ZXIoKTsKLQotICAgIFN0cmlu
ZyBhbmltYXRpb25LZXk7Ci0gICAgZm9yIChOU1N0cmluZyAqa2V5IGluIFtsYXllciBhbmltYXRp
b25LZXlzXSkgewotICAgICAgICBpZiAoW2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldID09IGFu
aW1hdGlvbikgewotICAgICAgICAgICAgYW5pbWF0aW9uS2V5ID0ga2V5OwotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFuaW1hdGlvbktleS5pc0VtcHR5
KCkpCi0gICAgICAgIG1fb3duZXItPmFuaW1hdGlvblN0YXJ0ZWQoYW5pbWF0aW9uS2V5LCBzdGFy
dFRpbWUpOwotfQotCiAtICh2b2lkKWFuaW1hdGlvbkRpZFN0b3A6KENBQW5pbWF0aW9uICopYW5p
bWF0aW9uIGZpbmlzaGVkOihCT09MKWZpbmlzaGVkCiB7CiAgICAgdXNpbmcgbmFtZXNwYWNlIFdl
YkNvcmU7CkBAIC0zOTMsMTIgKzM1NSw2IEBAIFBsYXRmb3JtQ0FMYXllckNvY29hOjp+UGxhdGZv
cm1DQUxheWVyQ29jb2EoKQogICAgICAgICBbc3RhdGljX2Nhc3Q8V2ViVGlsZWRCYWNraW5nTGF5
ZXIgKj4obV9sYXllci5nZXQoKSkgaW52YWxpZGF0ZV07CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxh
eWVyQ29jb2E6OmFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1v
bm90b25pY1RpbWUgYmVnaW5UaW1lKQotewotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293
bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGFuaW1hdGlvbktleSwgYmVnaW5U
aW1lKTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRW5kZWQoY29u
c3QgU3RyaW5nJiBhbmltYXRpb25LZXkpCiB7CiAgICAgaWYgKG1fb3duZXIpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhv
c3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXll
clRyZWVIb3N0LmNwcAppbmRleCBjNWJjNDdhMTQyZTNkZjE3ODhmNDNjZWZlN2RlMzgzMjQxNWI0
ZGYzLi40YjYwMDU5ZmUxNGRhZDdkYjEyY2YxMGFhMzg5ZGIwNTY5OThlNmQ2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vQ0FDRkxheWVyVHJlZUhv
c3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNG
TGF5ZXJUcmVlSG9zdC5jcHAKQEAgLTIwOCw5ICsyMDgsOCBAQCBQbGF0Zm9ybUNBTGF5ZXIqIENB
Q0ZMYXllclRyZWVIb3N0Ojpyb290TGF5ZXIoKSBjb25zdAogICAgIHJldHVybiBtX3Jvb3RMYXll
ci5nZXQoKTsKIH0KIAotdm9pZCBDQUNGTGF5ZXJUcmVlSG9zdDo6YWRkUGVuZGluZ0FuaW1hdGVk
TGF5ZXIoUGxhdGZvcm1DQUxheWVyJiBsYXllcikKK3ZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmFk
ZFBlbmRpbmdBbmltYXRlZExheWVyKFBsYXRmb3JtQ0FMYXllciYpCiB7Ci0gICAgbV9wZW5kaW5n
QW5pbWF0ZWRMYXllcnMuYWRkKCZsYXllcik7CiB9CiAKIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6
OnNldFJvb3RDaGlsZExheWVyKFBsYXRmb3JtQ0FMYXllciogbGF5ZXIpCkBAIC0zMTMsMjYgKzMx
Miw2IEBAIHZvaWQgQ0FDRkxheWVyVHJlZUhvc3Q6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlc05v
dygpCiAgICAgbV9pc0ZsdXNoaW5nTGF5ZXJDaGFuZ2VzID0gZmFsc2U7CiB9CiAKLXZvaWQgQ0FD
RkxheWVyVHJlZUhvc3Q6OmNvbnRleHREaWRDaGFuZ2UoKQotewotICAgIC8vIEFsbCBwZW5kaW5n
IGFuaW1hdGlvbnMgd2lsbCBoYXZlIGJlZW4gc3RhcnRlZCB3aXRoIHRoZSBmbHVzaC4gRmlyZSB0
aGUgYW5pbWF0aW9uU3RhcnRlZCBjYWxscy4KLSAgICBub3RpZnlBbmltYXRpb25zU3RhcnRlZCgp
OwotfQotCi12b2lkIENBQ0ZMYXllclRyZWVIb3N0Ojpub3RpZnlBbmltYXRpb25zU3RhcnRlZCgp
Ci17Ci0gICAgLy8gU2VuZCBjdXJyZW50VGltZSB0byB0aGUgcGVuZGluZyBhbmltYXRpb25zLiBU
aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBDQUNGIGluIGEgY2FsbGJhY2sKLSAgICAvLyB3aGlj
aCBvY2N1cnMgYWZ0ZXIgdGhlIGRyYXdJbkNvbnRleHQgY2FsbHMuIFNvIGN1cnJlbnRUaW1lIGlz
IHZlcnkgY2xvc2UgdG8gdGhlIHRpbWUKLSAgICAvLyB0aGUgYW5pbWF0aW9ucyBhY3R1YWxseSBz
dGFydAotICAgIE1vbm90b25pY1RpbWUgY3VycmVudFRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3co
KTsKLQotICAgIEhhc2hTZXQ8UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gPjo6aXRlcmF0b3IgZW5k
ID0gbV9wZW5kaW5nQW5pbWF0ZWRMYXllcnMuZW5kKCk7Ci0gICAgZm9yIChIYXNoU2V0PFJlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+ID46Oml0ZXJhdG9yIGl0ID0gbV9wZW5kaW5nQW5pbWF0ZWRMYXll
cnMuYmVnaW4oKTsgaXQgIT0gZW5kOyArK2l0KQotICAgICAgICAoKml0KS0+YW5pbWF0aW9uU3Rh
cnRlZChTdHJpbmcoKSwgY3VycmVudFRpbWUpOwotCi0gICAgbV9wZW5kaW5nQW5pbWF0ZWRMYXll
cnMuY2xlYXIoKTsKLX0KLQogQ0dSZWN0IENBQ0ZMYXllclRyZWVIb3N0Ojpib3VuZHMoKSBjb25z
dAogewogICAgIFJFQ1QgY2xpZW50UmVjdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9DQUNGTGF5ZXJUcmVlSG9zdC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKaW5kZXggYzc2
NzFhMDc0OTlhYzc4ZDY0NTdkYjNiNmNiM2RjNDZlZjAzYWE4NC4uNzQzNzljNmY0YzhmNGI5YmQ5
M2JmMzY3Y2U0NmIxMzdkNmE3NjhjYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL0NBQ0ZMYXllclRyZWVIb3N0LmgKQEAgLTExNSw3
ICsxMTUsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fcm9vdExh
eWVyOwogICAgIFJlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IG1fcm9vdENoaWxkTGF5ZXI7CiAgICAg
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbV9kZWJ1Z0luZm9MYXllcjsKLSAgICBIYXNoU2V0PFJl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+ID4gbV9wZW5kaW5nQW5pbWF0ZWRMYXllcnM7CiAgICAgSFdO
RCBtX3dpbmRvdyB7IG51bGxwdHIgfTsKICAgICBib29sIG1fc2hvdWxkRmx1c2hQZW5kaW5nR3Jh
cGhpY3NMYXllckNoYW5nZXMgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0ZsdXNoaW5nTGF5ZXJD
aGFuZ2VzIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKaW5kZXggOTMxNmYz
YWNhMzYyNmQ5Y2Y5MGQzZTJjNzViNDAzMWM1ZWVhYWJhZC4uNmRmYmM4Y2RjNzdjMWRmNmU0NDZk
NGJhNDNkNTRkZjU0ZTIyOTY1MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldpbi5jcHAKQEAgLTIw
OSwxOSArMjA5LDYgQEAgUGxhdGZvcm1DQUxheWVyKiBQbGF0Zm9ybUNBTGF5ZXJXaW46OnJvb3RM
YXllcigpIGNvbnN0CiAgICAgcmV0dXJuIGhvc3QgPyBob3N0LT5yb290TGF5ZXIoKSA6IG51bGxw
dHI7CiB9CiAKLXZvaWQgUGxhdGZvcm1DQUxheWVyV2luOjphbmltYXRpb25TdGFydGVkKGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uS2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkKLXsKLSAgICAv
LyBVcGRhdGUgc3RhcnQgdGltZSBmb3IgYW55IGFuaW1hdGlvbiBub3QgeWV0IHN0YXJ0ZWQKLSAg
ICBDRlRpbWVJbnRlcnZhbCBjYWNmQmVnaW5UaW1lID0gY3VycmVudFRpbWVUb01lZGlhVGltZShi
ZWdpblRpbWUpOwotCi0gICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiA+Ojpjb25zdF9pdGVyYXRvciBlbmQgPSBtX2FuaW1hdGlvbnMuZW5kKCk7Ci0gICAgZm9y
IChIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+ID46OmNvbnN0X2l0
ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkKLSAgICAg
ICAgaXQtPnZhbHVlLT5zZXRBY3R1YWxTdGFydFRpbWVJZk5lZWRlZChjYWNmQmVnaW5UaW1lKTsK
LQotICAgIGlmIChtX293bmVyKQotICAgICAgICBtX293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmlt
YXRpb25TdGFydGVkKGFuaW1hdGlvbktleSwgYmVnaW5UaW1lKTsKLX0KLQogdm9pZCBQbGF0Zm9y
bUNBTGF5ZXJXaW46OmFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uS2V5KQog
ewogICAgIGlmIChtX293bmVyKQpAQCAtMzMyLDExICszMTksNiBAQCB2b2lkIFBsYXRmb3JtQ0FM
YXllcldpbjo6YWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNB
QW5pbWF0aQogCiAgICAgQ0FDRkxheWVyQWRkQW5pbWF0aW9uKG1fbGF5ZXIuZ2V0KCksIGtleS5j
cmVhdGVDRlN0cmluZygpLmdldCgpLCBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPihh
bmltYXRpb24pLnBsYXRmb3JtQW5pbWF0aW9uKCkpOwogICAgIHNldE5lZWRzQ29tbWl0KCk7Ci0K
LSAgICAvLyBUZWxsIHRoZSBob3N0IGFib3V0IGl0IHNvIHdlIGNhbiBmaXJlIHRoZSBzdGFydCBh
bmltYXRpb24gZXZlbnQKLSAgICBBYnN0cmFjdENBQ0ZMYXllclRyZWVIb3N0KiBob3N0ID0gbGF5
ZXJUcmVlSG9zdEZvckxheWVyKHRoaXMpOwotICAgIGlmIChob3N0KQotICAgICAgICBob3N0LT5h
ZGRQZW5kaW5nQW5pbWF0ZWRMYXllcigqdGhpcyk7CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVy
V2luOjpyZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmgKaW5kZXggMTI4MDEyZDMzYzEyZDkzYjJlNDhmNzIxZjJiNDAzZjNiMTU5Yzkz
Mi4uZjA1N2EwNDcyMTczMmI4YmVmNTVjMzc3ZTE5YmM2MmZkNTdlYzM5ZSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FMYXllcldp
bi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9y
bUNBTGF5ZXJXaW4uaApAQCAtNTUsNyArNTUsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBhZGRBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVy
cmlkZTsKICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktl
eShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBhbmltYXRpb25TdGFydGVk
KGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKICAg
ICB2b2lkIHNldE1hc2soUGxhdGZvcm1DQUxheWVyKikgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvR3JhcGhpY3NMYXllclRleHR1
cmVNYXBwZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvdGV4bWFwL0dy
YXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyLmNwcAppbmRleCBiNzI0M2U5OTRjMDA0ZDIyMTVkY2I5
NGMxZTRlZWJkYTBlOTI1NDA4Li5hODM5NDliNGU5NDMyMTY2ZTdlMjE3ODNhNGYzMGNjZWFiNTQ1
ODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAv
R3JhcGhpY3NMYXllclRleHR1cmVNYXBwZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL3RleG1hcC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAKQEAgLTQ2
Nyw5ICs0NjcsNiBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJUZXh0dXJlTWFwcGVyOjpjb21taXRMYXll
ckNoYW5nZXMoKQogICAgIGlmIChtX2NoYW5nZU1hc2sgJiBBbmltYXRpb25DaGFuZ2UpCiAgICAg
ICAgIG1fbGF5ZXIuc2V0QW5pbWF0aW9ucyhtX2FuaW1hdGlvbnMpOwogCi0gICAgaWYgKG1fY2hh
bmdlTWFzayAmIEFuaW1hdGlvblN0YXJ0ZWQpCi0gICAgICAgIGNsaWVudCgpLm5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQodGhpcywgIiIsIG1fYW5pbWF0aW9uU3RhcnRUaW1lKTsKLQogICAgIG1fY2hh
bmdlTWFzayA9IE5vQ2hhbmdlczsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXll
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0
ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAppbmRleCBlMjg3MjI4NGRkNGVhYjkxY2Rk
ZmU2ZjVkOGE1ODkzM2FmZGMwMDQyLi42ZGZlYjIxNjY1NTY4YmEyYmYyNzNhMWFmOGYyNjQ0NDQz
ZjM2ZWMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXht
YXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29vcmRpbmF0ZWRH
cmFwaGljc0xheWVyLmNwcApAQCAtMTM5LDcgKzEzOSw2IEBAIENvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6Q29vcmRpbmF0ZWRHcmFwaGljc0xheWVyKFR5cGUgbGF5ZXJUeXBlLCBHcmFwaGljc0xh
eWVyCiAgICAgLCBtX3Nob3VsZFVwZGF0ZVBsYXRmb3JtTGF5ZXIoZmFsc2UpCiAgICAgLCBtX2Nv
b3JkaW5hdG9yKDApCiAgICAgLCBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cigwKQotICAgICwg
bV9hbmltYXRpb25TdGFydGVkVGltZXIoKnRoaXMsICZDb29yZGluYXRlZEdyYXBoaWNzTGF5ZXI6
OmFuaW1hdGlvblN0YXJ0ZWRUaW1lckZpcmVkKQogICAgICwgbV9yZXF1ZXN0UGVuZGluZ1RpbGVD
cmVhdGlvblRpbWVyKFJ1bkxvb3A6Om1haW4oKSwgdGhpcywgJkNvb3JkaW5hdGVkR3JhcGhpY3NM
YXllcjo6cmVxdWVzdFBlbmRpbmdUaWxlQ3JlYXRpb25UaW1lckZpcmVkKQogewogICAgIHN0YXRp
YyBOaWNvc2lhOjpQbGF0Zm9ybUxheWVyOjpMYXllcklEIG5leHRMYXllcklEID0gMTsKQEAgLTEz
ODgsNyArMTM4Nyw2IEBAIGJvb2wgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjphZGRBbmltYXRp
b24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKIAogICAgIG1fbGFzdEFuaW1h
dGlvblN0YXJ0VGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpIC0gU2Vjb25kcyhkZWxheUFzTmVn
YXRpdmVUaW1lT2Zmc2V0KTsKICAgICBtX2FuaW1hdGlvbnMuYWRkKE5pY29zaWE6OkFuaW1hdGlv
bihrZXlmcmFtZXNOYW1lLCB2YWx1ZUxpc3QsIGJveFNpemUsICphbmltLCBsaXN0c01hdGNoLCBt
X2xhc3RBbmltYXRpb25TdGFydFRpbWUsIDBfcywgTmljb3NpYTo6QW5pbWF0aW9uOjpBbmltYXRp
b25TdGF0ZTo6UGxheWluZykpOwotICAgIG1fYW5pbWF0aW9uU3RhcnRlZFRpbWVyLnN0YXJ0T25l
U2hvdCgwX3MpOwogICAgIGRpZENoYW5nZUFuaW1hdGlvbnMoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KQEAgLTE0MTcsMTEgKzE0MTUsNiBAQCB2b2lkIENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6
cmVzdW1lQW5pbWF0aW9ucygpCiAgICAgZGlkQ2hhbmdlQW5pbWF0aW9ucygpOwogfQogCi12b2lk
IENvb3JkaW5hdGVkR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uU3RhcnRlZFRpbWVyRmlyZWQoKQot
ewotICAgIGNsaWVudCgpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQodGhpcywgIiIsIG1fbGFzdEFu
aW1hdGlvblN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgQ29vcmRpbmF0ZWRHcmFwaGljc0xheWVyOjpy
ZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyRmlyZWQoKQogewogICAgIG5vdGlmeUZsdXNo
UmVxdWlyZWQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdyYXBoaWNzTGF5ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9jb29yZGluYXRlZC9Db29yZGluYXRlZEdy
YXBoaWNzTGF5ZXIuaAppbmRleCBlZThmNTc4NzlhZGE2YzkxZjAzOTkxOTJlZjk1YzkyNGVjZTEz
ZTQxLi5kOTI2YzcwMjM1NTQ4MWQ3YTFjNzE2MGM0YjQ4MTk0MTQyODY5MjM4IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90ZXhtYXAvY29vcmRpbmF0ZWQvQ29v
cmRpbmF0ZWRHcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvdGV4bWFwL2Nvb3JkaW5hdGVkL0Nvb3JkaW5hdGVkR3JhcGhpY3NMYXllci5oCkBAIC0x
OTEsNyArMTkxLDYgQEAgcHJpdmF0ZToKICAgICB2b2lkIHNldFNob3VsZFVwZGF0ZVZpc2libGVS
ZWN0KCk7CiAgICAgZmxvYXQgZWZmZWN0aXZlQ29udGVudHNTY2FsZSgpOwogCi0gICAgdm9pZCBh
bmltYXRpb25TdGFydGVkVGltZXJGaXJlZCgpOwogICAgIHZvaWQgcmVxdWVzdFBlbmRpbmdUaWxl
Q3JlYXRpb25UaW1lckZpcmVkKCk7CiAKICAgICBib29sIGZpbHRlcnNDYW5CZUNvbXBvc2l0ZWQo
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpIGNvbnN0OwpAQCAtMjI1LDcgKzIyNCw2IEBAIHByaXZh
dGU6CiAgICAgUmVmUHRyPEltYWdlPiBtX2NvbXBvc2l0ZWRJbWFnZTsKICAgICBOYXRpdmVJbWFn
ZVB0ciBtX2NvbXBvc2l0ZWROYXRpdmVJbWFnZVB0cjsKIAotICAgIFRpbWVyIG1fYW5pbWF0aW9u
U3RhcnRlZFRpbWVyOwogICAgIFJ1bkxvb3A6OlRpbWVyPENvb3JkaW5hdGVkR3JhcGhpY3NMYXll
cj4gbV9yZXF1ZXN0UGVuZGluZ1RpbGVDcmVhdGlvblRpbWVyOwogICAgIE5pY29zaWE6OkFuaW1h
dGlvbnMgbV9hbmltYXRpb25zOwogICAgIE1vbm90b25pY1RpbWUgbV9sYXN0QW5pbWF0aW9uU3Rh
cnRUaW1lOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1l
bnQuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4
IGQ2MzU4MTE5YjRjYzcxNGUxZGU1ODE2NDYzODVjYmVlMzJkYzg1MDMuLmRmZDBiZDk5MTAzZDBj
OWQzYWQ3ZjcxNmQ3OGIxY2YwYzdkNDgwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyRWxlbWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIkNv
bnRlbnREYXRhLmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50
VGltZWxpbmUuaCIKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUg
IkV2ZW50SGFuZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNjYsNiAr
NjcsNyBAQAogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNlbmRpZgogI2luY2x1ZGUg
IlJlbmRlckZyYWdtZW50Q29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNp
bmNsdWRlICJSZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwu
aCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMjI5MCw0ICsyMjkyLDE3IEBAIHZv
aWQgUmVuZGVyRWxlbWVudDo6cmVzZXRUZXh0QXV0b3NpemluZygpCiB9CiAjZW5kaWYgLy8gRU5B
QkxFKFRFWFRfQVVUT1NJWklORykKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5k
ZXJFbGVtZW50OjphbmltYXRlZFN0eWxlKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IHJlc3VsdDsKKworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50VGltZWxp
bmUoKSkKKyAgICAgICAgcmVzdWx0ID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJl
cigqdGhpcyk7CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5
bGU6OmNsb25lUHRyKHN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggZTBhNjJkMGVlMjYwYzc0
ODQzZDBlOWUxNGYyZjJmMzdiMzJkNDgyYy4uYmEzNDhiN2E1MzkwOGY5MTA5ZDc1YTQ0ZmUwZWJh
YTE3NWQ1NTQ4NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBA
IC0zMCw2ICszMCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRyb2xTdGF0ZXM7
CiBjbGFzcyBLZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlclN0
eWxlOwogY2xhc3MgUmVuZGVyVHJlZUJ1aWxkZXI7CiAKIGNsYXNzIFJlbmRlckVsZW1lbnQgOiBw
dWJsaWMgUmVuZGVyT2JqZWN0IHsKQEAgLTIyNiwxNSArMjI3LDEyIEBAIHB1YmxpYzoKICAgICBS
ZW5kZXJPYmplY3QqIGF0dGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVj
dD4gY2hpbGQsIFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlclB0cjxSZW5k
ZXJPYmplY3Q+IGRldGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyT2JqZWN0Jik7CiAKLSAgICB2
aXJ0dWFsIGJvb2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQ
cm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogLyogZnJvbVN0eWxlICovLCBjb25zdCBSZW5k
ZXJTdHlsZSogLyogdG9TdHlsZSAqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZv
aWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUgLyogdGltZU9mZnNldCAqLywgQ1NTUHJvcGVydHlJ
RCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlE
KSB7IH0KLQogICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLyogdGltZU9m
ZnNldCAqLywgY29uc3QgQW5pbWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0JikgeyByZXR1cm4g
ZmFsc2U7IH0KICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1l
T2Zmc2V0ICovLCBjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9p
ZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogCiAgICAg
dmlydHVhbCB2b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNU
aW1lKCkpIHsgfQorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHls
ZSgpOwogCiBwcm90ZWN0ZWQ6CiAgICAgZW51bSBCYXNlVHlwZUZsYWcgewpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKaW5kZXggN2QwN2NkYmQ4NDk3MDI4NTNlMWI5MjVh
MGJiYzk4ZDdkZGFmYTc2Ni4uYTBlMGUyM2U4Y2Y4ZDZlMjY4OWYxY2JiNjI2YzlhYWFkNWU1ZDRh
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00Niw3ICs0
Niw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkJveFNoYXBlLmgi
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZpbHRl
ci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIK
QEAgLTEzMjcsMjEgKzEzMjYsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6
OmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKIAogICAgIGF1
dG8mIHJlbmRlckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAKLSAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0g
cmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGlu
ZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENT
U1Byb3BlcnR5VHJhbnNmb3JtKSkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0
cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBzdHlsZSA9IHRpbWVsaW5lLT5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVy
ZXIoKSk7Ci0gICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3Qg
PSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3Jt
Qm94VG9DU1NCb3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1l
bnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+YXBwbHlU
cmFuc2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmln
aW4pOwotICAgICAgICAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0s
IGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VyclRy
YW5zZm9ybTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAg
IGlmIChyZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5p
bWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKKyAg
ICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgewor
ICAgICAgICBpZiAodGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5k
ZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKICAgICAgICAgICAgIFRy
YW5zZm9ybWF0aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5h
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRlZFN0eWxlKCk7
CiAgICAgICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0Jv
eFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJU
cmFuc2Zvcm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAg
ICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNm
b3JtcygpKTsKQEAgLTEzNDksMTEgKzEzMzcsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVu
ZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IK
ICAgICAgICAgfQogICAgIH0KIAotCiAgICAgLy8gbV90cmFuc2Zvcm0gaW5jbHVkZXMgdHJhbnNm
b3JtLW9yaWdpbiwgc28gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHRyYW5zZm9ybSBoZXJlLgog
ICAgIGlmIChhcHBseU9yaWdpbiA9PSBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdp
bikgewogICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3JtOwotICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lB
bmltYXRpb24oKS5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGVk
U3R5bGUoKTsKICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFw
UmVjdFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9D
U1NCb3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5k
ZXZpY2VTY2FsZUZhY3RvcigpKTsKICAgICAgICAgcmVuZGVyQm94LnN0eWxlKCkuYXBwbHlUcmFu
c2Zvcm0oY3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgUmVuZGVyU3R5bGU6
OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShj
dXJyVHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC02MTY1LDIwICs2MTUy
LDEzIEBAIGJvb2wgUmVuZGVyTGF5ZXI6OmdldE92ZXJsYXBCb3VuZHNJbmNsdWRpbmdDaGlsZHJl
bkFjY291bnRpbmdGb3JUcmFuc2Zvcm1BbmltYXRpCiAgICAgYm91bmRzID0gY2FsY3VsYXRlTGF5
ZXJCb3VuZHModGhpcywgTGF5b3V0U2l6ZSgpLCBib3VuZHNGbGFncyk7CiAgICAgCiAgICAgTGF5
b3V0UmVjdCBhbmltYXRlZEJvdW5kcyA9IGJvdW5kczsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVu
dFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9m
QW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewotICAgICAgICAgICAgICAg
IGJvdW5kcyA9IGFuaW1hdGVkQm91bmRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRl
cmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVy
KCksIGFuaW1hdGVkQm91bmRzKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVy
KCkuZG9jdW1lbnRUaW1lbGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewogICAgICAgICAg
ICAgYm91bmRzID0gYW5pbWF0ZWRCb3VuZHM7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0ZDU0N2M0
YjdmZGQxYWU0MDlhNmNlNmY4MjkyZjZhNmNkMzAzMjZmLi5iNzM4MGZlZGY3OTAzYjBhN2YwZjEx
NGU4YjIxNjViY2Y0OGMzNTU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyTGF5ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJCYWNraW5nLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxh
eWVyQmFja2luZy5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5o
IgpAQCAtMTI1MSwxMSArMTI1MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVH
ZW9tZXRyeShjb25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgIGNvbnN0
IGF1dG8gZGV2aWNlU2NhbGVGYWN0b3IgPSB0aGlzLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogCiAg
ICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwot
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxp
bmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkKLSAgICAgICAgICAgIGlzUnVubmlu
Z0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlzUnVubmluZ0FjY2Vs
ZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9y
bSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5p
bWF0aW9uID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRl
ZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwor
ICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQor
ICAgICAgICBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5l
LT5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NT
UHJvcGVydHlUcmFuc2Zvcm0pOwogCiAgICAgdXBkYXRlVHJhbnNmb3JtKHN0eWxlKTsKICAgICB1
cGRhdGVPcGFjaXR5KHN0eWxlKTsKQEAgLTM2NDgsOTkgKzM2NDQsNiBAQCB2b2lkIFJlbmRlckxh
eWVyQmFja2luZzo6YW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
KQogICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7
CiB9CiAKLWJvb2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRp
bWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9t
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKQotewotICAgIGJvb2wgZGlkQW5pbWF0
ZSA9IGZhbHNlOwotCi0gICAgQVNTRVJUKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7
Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlPcGFjaXR5KSB7Ci0gICAgICAgIGNv
bnN0IEFuaW1hdGlvbiogb3BhY2l0eUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVy
dHkoQ1NTUHJvcGVydHlPcGFjaXR5KTsKLSAgICAgICAgaWYgKG9wYWNpdHlBbmltICYmICFvcGFj
aXR5QW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1l
VmFsdWVMaXN0IG9wYWNpdHlWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAg
ICAgICAgb3BhY2l0eVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVl
PigwLCBjb21wb3NpdGluZ09wYWNpdHkoZnJvbVN0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAg
ICAgICBvcGFjaXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+
KDEsIGNvbXBvc2l0aW5nT3BhY2l0eSh0b1N0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAg
ICAvLyBUaGUgYm94U2l6ZSBwYXJhbSBpcyBvbmx5IHVzZWQgZm9yIHRyYW5zZm9ybSBhbmltYXRp
b25zICh3aGljaCBjYW4gb25seSBydW4gb24gUmVuZGVyQm94ZXMpLCBzbyB3ZSBwYXNzIGFuIGVt
cHR5IHNpemUgaGVyZS4KLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1h
dGlvbihvcGFjaXR5VmVjdG9yLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW0sIEdyYXBoaWNzTGF5
ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwg
dGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29y
cmVjdCBvcGFjaXR5IGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0
IHRoZSBmaW5hbCBvcGFjaXR5LgotICAgICAgICAgICAgICAgIHVwZGF0ZU9wYWNpdHkoKnRvU3R5
bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNm
b3JtICYmIG1fb3duaW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgQW5p
bWF0aW9uKiB0cmFuc2Zvcm1BbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENT
U1Byb3BlcnR5VHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUFuaW0gJiYgIXRyYW5z
Zm9ybUFuaW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFt
ZVZhbHVlTGlzdCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0g
ICAgICAgICAgICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5p
bWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIHRy
YW5zZm9ybVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZT4o
MSwgdG9TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5
ZXItPmFkZEFuaW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHNuYXBwZWRJbnRSZWN0KHJlbmRlckJv
eCgpLT5ib3JkZXJCb3hSZWN0KCkpLnNpemUoKSwgdHJhbnNmb3JtQW5pbSwgR3JhcGhpY3NMYXll
cjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSks
IHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNv
cnJlY3QgdHJhbnNmb3JtIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28g
c2V0IHRoZSBmaW5hbCB0cmFuc2Zvcm0uCi0gICAgICAgICAgICAgICAgdXBkYXRlVHJhbnNmb3Jt
KCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAg
ICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0
eUZpbHRlciAmJiBtX293bmluZ0xheWVyLmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgIGNvbnN0IEFu
aW1hdGlvbiogZmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUZpbHRlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJBbmltICYmICFmaWx0ZXJBbmltLT5p
c0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3Qg
ZmlsdGVyVmVjdG9yKEFuaW1hdGVkUHJvcGVydHlGaWx0ZXIpOwotICAgICAgICAgICAgZmlsdGVy
VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5
bGUtPmZpbHRlcigpKSk7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlx
dWU8RmlsdGVyQW5pbWF0aW9uVmFsdWU+KDEsIHRvU3R5bGUtPmZpbHRlcigpKSk7Ci0gICAgICAg
ICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmlsdGVyVmVjdG9yLCBGbG9h
dFNpemUoKSwgZmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5z
aXRpb24oQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlciksIHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAg
ICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmlsdGVyIGlzIHZpc2libGUgd2hl
biB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCBmaWx0ZXIuCi0gICAgICAg
ICAgICAgICAgdXBkYXRlRmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5p
bWF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFC
TEUoRklMVEVSU19MRVZFTF8yKQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtp
dEJhY2tkcm9wRmlsdGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzQmFja2Ryb3BGaWx0ZXIoKSkgewot
ICAgICAgICBjb25zdCBBbmltYXRpb24qIGJhY2tkcm9wRmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRy
YW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAg
ICAgICAgaWYgKGJhY2tkcm9wRmlsdGVyQW5pbSAmJiAhYmFja2Ryb3BGaWx0ZXJBbmltLT5pc0Vt
cHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgYmFj
a2Ryb3BGaWx0ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsK
LSAgICAgICAgICAgIGJhY2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRl
ckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAg
ICAgICAgIGJhY2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1h
dGlvblZhbHVlPigxLCB0b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7Ci0gICAgICAgICAgICBp
ZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oYmFja2Ryb3BGaWx0ZXJWZWN0b3IsIEZs
b2F0U2l6ZSgpLCBiYWNrZHJvcEZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5h
bWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciksIHRp
bWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJl
Y3QgYmFja2Ryb3AgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFs
c28gc2V0IHRoZSBmaW5hbCBiYWNrZHJvcCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgdXBkYXRl
QmFja2Ryb3BGaWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0g
dHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYg
KGRpZEFuaW1hdGUpCi0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29t
cG9zaXRpbmdVcGRhdGUoKTsKLQotICAgIHJldHVybiBkaWRBbmltYXRlOwotfQotCi12b2lkIFJl
bmRlckxheWVyQmFja2luZzo6dHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQ
cm9wZXJ0eSA9IGNzc1RvR3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAo
YW5pbWF0ZWRQcm9wZXJ0eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKLSAgICAgICAgbV9n
cmFwaGljc0xheWVyLT5wYXVzZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1l
Rm9yVHJhbnNpdGlvbihhbmltYXRlZFByb3BlcnR5KSwgdGltZU9mZnNldCk7Ci19Ci0KLXZvaWQg
UmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9IGNzc1Rv
R3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQcm9wZXJ0
eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXIt
PnJlbW92ZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlv
bihhbmltYXRlZFByb3BlcnR5KSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0
TGF5b3V0Q29tcG9zaXRpbmdVcGRhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25z
dCBTdHJpbmcmLCBNb25vdG9uaWNUaW1lIHRpbWUpCi17Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5ub3RpZnlBbmlt
YXRpb25TdGFydGVkKHJlbmRlcmVyKCksIHRpbWUpOwotfQotCiB2b2lkIFJlbmRlckxheWVyQmFj
a2luZzo6bm90aWZ5Rmx1c2hSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKIHsKICAgICBp
ZiAocmVuZGVyZXIoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCA5Yzc2NDdiYjI2NzZiM2Zj
MWY5MjZmYWQ5Mjg0N2Q4ZjhlYTdjMGYwLi44M2EyYTk1MThmNmYzNmNiN2IwZDg0ZDYyODZmMzdl
OTAwMDI4ZTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFj
a2luZy5oCkBAIC0xODQsMTEgKzE4NCw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RpZmljYXRpb24g
ZnJvbSB0aGUgcmVuZGVyZXIgdGhhdCBpdHMgY29udGVudCBjaGFuZ2VkLgogICAgIHZvaWQgY29u
dGVudENoYW5nZWQoQ29udGVudENoYW5nZVR5cGUpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIHN0
YXJ0LCBmaW5pc2gsIHN1c3BlbmQgYW5kIHJlc3VtZSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9u
cwotICAgIGJvb2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSwgQ1NTUHJvcGVydHlJRCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpOwotICAg
IHZvaWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCk7
Ci0gICAgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCk7Ci0KKyAgICAvLyBJ
bnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlvbnMK
ICAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRp
b24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKTsKICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3Vi
bGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGFuaW1hdGlvbkZp
bmlzaGVkKGNvbnN0IFN0cmluZyYgbmFtZSk7CkBAIC0yMjYsNyArMjIyLDYgQEAgcHVibGljOgog
CiAgICAgLy8gR3JhcGhpY3NMYXllckNsaWVudCBpbnRlcmZhY2UKICAgICB2b2lkIHRpbGVkQmFj
a2luZ1VzYWdlQ2hhbmdlZChjb25zdCBHcmFwaGljc0xheWVyKiwgYm9vbCAvKnVzaW5nVGlsZWRC
YWNraW5nKi8pIG92ZXJyaWRlOwotICAgIHZvaWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25z
dCBHcmFwaGljc0xheWVyKiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25LZXksIE1vbm90b25pY1Rp
bWUgc3RhcnRUaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIG5vdGlmeUZsdXNoUmVxdWlyZWQoY29u
c3QgR3JhcGhpY3NMYXllciopIG92ZXJyaWRlOwogICAgIHZvaWQgbm90aWZ5Rmx1c2hCZWZvcmVE
aXNwbGF5UmVmcmVzaChjb25zdCBHcmFwaGljc0xheWVyKikgb3ZlcnJpZGU7CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKaW5kZXgg
MTg0MWY5NmYwYjYyOThjYTUyM2VkN2YxZTY5ODlmMmMyNzZkZGQ3NS4uZjIzOWM0YTQ0ODBhZWU3
MmEzOTJiMzZjNTI0NWI3Y2Q0MWQ2MmQzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNs
dWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKIAogI2luY2x1ZGUgIkFzeW5jU2Nyb2xsaW5n
Q29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5j
bHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRl
eHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTU2MCw5ICs1NTksNiBAQCB2b2lkIFJlbmRl
ckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2VzKGJvb2wgaXNGbHVzaFJv
b3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBhdXRvJiBmcmFtZVZpZXcgPSBtX3Jl
bmRlclZpZXcuZnJhbWVWaWV3KCk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9u
VXBkYXRlQmxvY2soJmZyYW1lVmlldy5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKLQogICAg
IEFTU0VSVCghbV9mbHVzaGluZ0xheWVycyk7CiAgICAgewogICAgICAgICBTZXRGb3JTY29wZTxi
b29sPiBmbHVzaGluZ0xheWVyc1Njb3BlKG1fZmx1c2hpbmdMYXllcnMsIHRydWUpOwpAQCAtODE5
LDggKzgxNSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVDb21wb3NpdGlu
Z0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRlCiAKICAgICArK21fY29tcG9zaXRp
bmdVcGRhdGVDb3VudDsKIAotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0
ZUJsb2NrKCZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24o
KSk7Ci0KICAgICBTZXRGb3JTY29wZTxib29sPiBwb3N0TGF5b3V0Q2hhbmdlKG1faW5Qb3N0TGF5
b3V0VXBkYXRlLCB0cnVlKTsKIAogI2lmICFMT0dfRElTQUJMRUQKQEAgLTI5NzcsMTcgKzI5NzEs
NyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFu
aW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZQogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYg
KFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBhdXRv
JiBhbmltQ29udHJvbGxlciA9IHJlbmRlcmVyLmxlZ2FjeUFuaW1hdGlvbigpOwotICAgIHJldHVy
biAoYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwg
Q1NTUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAmJiAodXNlc0NvbXBvc2l0aW5nKCkgfHwgKG1f
Y29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6QW5pbWF0ZWRPcGFjaXR5VHJpZ2dl
cikpKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUZpbHRlcikKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZF
TF8yKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKQotI2VuZGlmCi0g
ICAgICAgIHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVu
ZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJv
b2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yVHJhbnNmb3Jt
KFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBjb25zdApAQCAtMzUxNSwxMCArMzQ5
OSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjppc1J1bm5pbmdUcmFuc2Zvcm1Bbmlt
YXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICAgICAgICAgICAgIHJldHVybiBlZmZlY3Rz
U3RhY2stPmlzQ3VycmVudGx5QWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0p
OwogICAgIH0KIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmlu
Z0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIElmIGFuIGVsZW1lbnQgaGFzIGNvbXBvc2l0ZWQgbmVn
YXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRyZW4gcmVuZGVyIGluIGZyb250IG9m
IHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9k
ZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxP
YmplY3QuY3BwCmluZGV4IGNmZWNhZTQ0ZDNkZDg4NmFkNjQ3NDk3YjlhMTFiODQwZTRkMTVkNmIu
LmNhZThmNzJmMzZjZDg1MzJhMjU5OGI0OGI2YmViZjgzNTM4ZjQ0NzYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKQEAgLTI1
MCwyNyArMjUwLDYgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojpjb21wdXRlUmVwYWlu
dExheW91dFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxPYmoKICAgICAgICAgc2V0UmVwYWlu
dExheW91dFJlY3RzKFJlcGFpbnRMYXlvdXRSZWN0cygqdGhpcywgcmVwYWludENvbnRhaW5lciwg
Z2VvbWV0cnlNYXApKTsKIH0KIAotYm9vbCBSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdGFydFRy
YW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCwgY29u
c3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpCi17
Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+YmFja2luZygpLT5zdGFydFRyYW5zaXRpb24o
dGltZU9mZnNldCwgcHJvcGVydHlJZCwgZnJvbVN0eWxlLCB0b1N0eWxlKTsKLX0KLQotdm9pZCBS
ZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXll
cigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBsYXllcigpLT5iYWNraW5nKCkt
PnRyYW5zaXRpb25QYXVzZWQodGltZU9mZnNldCwgcHJvcGVydHlJZCk7Ci19Ci0KLXZvaWQgUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJZCkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGxheWVyKCktPmJhY2tpbmcoKS0+dHJhbnNpdGlvbkZpbmlzaGVk
KHByb3BlcnR5SWQpOwotfQotCiBib29sIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0QW5p
bWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgY29u
c3QgS2V5ZnJhbWVMaXN0JiBrZXlmcmFtZXMpCiB7CiAgICAgaWYgKCFsYXllcigpIHx8ICFsYXll
cigpLT5iYWNraW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1MDQzNzcxM2RiNzJlYTIyYjYzMWZm
ZTJkYmE3Li5kOTc4MWNlY2M4OTdjMzU4NjlhNzcyOWJhMWNkMGU3NmUxOTQxZjBhIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKQEAg
LTY5LDEwICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFJlcGFpbnRMYXlvdXRSZWN0cyhj
b25zdCBSZXBhaW50TGF5b3V0UmVjdHMmKTsKICAgICB2b2lkIGNsZWFyUmVwYWludExheW91dFJl
Y3RzKCk7CiAKLSAgICBib29sIHN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJhbnNpdGlvblBhdXNlZChkb3VibGUg
dGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
RmluaXNoZWQoQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0KICAgICBib29sIHN0YXJ0QW5pbWF0
aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlmcmFtZUxp
c3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNl
dCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkZpbmlz
aGVkKGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcv
UmVuZGVyT2JqZWN0LmgKaW5kZXggMTkxMjVmZWY3OWZmZTI2MDA0ZmZlOTk4N2UxZmYwYjM0MGRk
ZjlhZC4uNTAwOWFkMTdiYTljYjdiNjIzMGZjMWMzZGZlNGM2ZGYwYWY3NzI4NCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAtNDYsNyArNDYsNiBAQCBjbGFzcyBU
ZXh0U3RyZWFtOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBBZmZpbmVUcmFuc2Zvcm07
Ci1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyOwogY2xhc3MgQ29sb3I7CiBjbGFzcyBDdXJz
b3I7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTcwNiw3ICs3MDUsNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIG92
ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5nZWQoV3JhcHBlZEltYWdlUHRyLCBj
b25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIHsgfQogCi0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ciYgbGVnYWN5QW5pbWF0aW9uKCkgY29uc3Q7CiAgICAgRG9jdW1lbnRUaW1lbGluZSogZG9jdW1l
bnRUaW1lbGluZSgpIGNvbnN0OwogCiAgICAgLy8gTWFwIHBvaW50cyBhbmQgcXVhZHMgdGhyb3Vn
aCBlbGVtZW50cywgcG90ZW50aWFsbHkgdmlhIDNkIHRyYW5zZm9ybXMuIFlvdSBzaG91bGQgbmV2
ZXIgbmVlZCB0byBjYWxsIHRoZXNlIGRpcmVjdGx5OyB1c2UKQEAgLTk3MywxMSArOTcxLDYgQEAg
aW5saW5lIFBhZ2UmIFJlbmRlck9iamVjdDo6cGFnZSgpIGNvbnN0CiAgICAgcmV0dXJuICpmcmFt
ZSgpLnBhZ2UoKTsKIH0KIAotaW5saW5lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIFJlbmRlck9i
amVjdDo6bGVnYWN5QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gZnJhbWUoKS5sZWdh
Y3lBbmltYXRpb24oKTsKLX0KLQogaW5saW5lIERvY3VtZW50VGltZWxpbmUqIFJlbmRlck9iamVj
dDo6ZG9jdW1lbnRUaW1lbGluZSgpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGRvY3VtZW50KCkuZXhp
c3RpbmdUaW1lbGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3Vw
ZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy91
cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXggOGE3ZmQ2NThiMmRkOTkwNzA5NzA1
MmQxMTNiZGNmODdkZDgxOGQ4Ni4uYjEzMjhhYTk5OTk5NjNmYzI0ZmM1OWVlZWI4ZmNkNWFkZTJk
ZmU2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRl
clRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcv
UmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiUmVuZGVy
VHJlZVVwZGF0ZXIuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKLSNpbmNsdWRlICJD
U1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJ
dGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKQEAgLTU1Niw3ICs1NTUsNiBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0
ZWFyRG93blJlbmRlcmVycyhFbGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeQog
CiAgICAgYXV0byYgZG9jdW1lbnQgPSByb290LmRvY3VtZW50KCk7CiAgICAgYXV0byogdGltZWxp
bmUgPSBkb2N1bWVudC5leGlzdGluZ1RpbWVsaW5lKCk7Ci0gICAgYXV0byYgYW5pbWF0aW9uQ29u
dHJvbGxlciA9IGRvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOyAgICAKIAogICAg
IGF1dG8gcG9wID0gWyZdICh1bnNpZ25lZCBkZXB0aCkgewogICAgICAgICB3aGlsZSAodGVhcmRv
d25TdGFjay5zaXplKCkgPiBkZXB0aCkgewpAQCAtNTc1LDcgKzU3Myw2IEBAIHZvaWQgUmVuZGVy
VHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3QsIFRlYXJkb3duVHlw
ZSB0ZWFyZG93blR5CiAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKHRlYXJkb3duVHlwZSA9
PSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2VsaW5nQW5pbWF0aW9ucykKICAgICAg
ICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5jYW5jZWxEZWNsYXJhdGl2ZUFuaW1hdGlvbnNG
b3JFbGVtZW50KGVsZW1lbnQsIFdlYkFuaW1hdGlvbjo6U2lsZW50bHk6Ok5vKTsKICAgICAgICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlci5jYW5jZWxBbmlt
YXRpb25zKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2Fz
ZSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlOgogICAgICAgICAgICAgICAgIGlmICh0aW1l
bGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKaW5kZXggOGNlMDc1MmE2
MzY2ZDgzMzAwMjYyYjAyZWUwODNlZTU5ZmMxMDczOC4uYTNlYmY2ZmI2N2YxZmE2MTJiZjA2NDY3
YTdkNThkODlhM2ViOTlhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVB
ZGp1c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAK
QEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZUFk
anVzdGVyLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgiCiAjaW5jbHVkZSAiQ1NTRm9u
dFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCiAjaW5jbHVkZSAiRWxlbWVudC5o
IgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUgIlNWR1VSSVJlZmVyZW5jZS5oIgogI2luY2x1
ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2luY2x1ZGUgIldlYkFuaW1hdGlv
blR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5hbWVzcGFjZSBTdHlsZSB7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKaW5kZXggYjg1Y2Y0NjZjMTcz
Yjg4MDNmNzVlMzc2MjViZjAyNTg2ZWY5MGFlNS4uZjdmZmQ0NGY5YWE0Yjk3MWRkOWYxYjY2YWM1
MmUwMzNlZjY3ZmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVl
UmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVy
LmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIlN0
eWxlVHJlZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgi
CiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRUcmVlQW5j
ZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0ZXJhdG9yLmgiCkBAIC01
NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZlci5oIgogI2luY2x1ZGUgIlN0eWxl
U2NvcGUuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMu
aCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMTIsMjYgKzMxMiwyMyBAQCBFbGVtZW50
VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRFbGVtZW50VXBkYXRlKHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdAogCiAgICAgT3B0aW9uU2V0PEFuaW1hdGlvbkltcGFjdD4gYW5pbWF0
aW9uSW1wYWN0OwogCi0gICAgLy8gTmV3IGNvZGUgcGF0aCBmb3IgQ1NTIEFuaW1hdGlvbnMgYW5k
IENTUyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAg
ICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgYW55IG5ldyBDU1MgYW5pbWF0
aW9uIG9jY3VyaW5nIG9uIHRoaXMgZWxlbWVudCBoYXMgYSBtYXRjaGluZyBXZWJBbmltYXRpb24K
LSAgICAgICAgLy8gb24gdGhlIGRvY3VtZW50IHRpbWVsaW5lLiBOb3RlIHRoYXQgd2UgZ2V0IHRp
bWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhlcmUgYmVjYXVzZSB3ZSBuZWVkIGEgdGltZWxpbmUg
Y3JlYXRlZAotICAgICAgICAvLyBpbiBjYXNlIG5vIFdlYiBBbmltYXRpb25zIGhhdmUgYmVlbiBj
cmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KLSAgICAgICAgaWYgKGVsZW1lbnQuZG9jdW1lbnQo
KS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENh
Y2hlICYmICFlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmlldygpLT5wcmludGluZygpKSB7Ci0g
ICAgICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5oYXNUcmFuc2l0aW9ucygpIHx8
IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50
LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRT
dHlsZSwgKm5ld1N0eWxlKTsKLQotICAgICAgICAgICAgLy8gVGhlIG9yZGVyIGluIHdoaWNoIENT
UyBUcmFuc2l0aW9ucyBhbmQgQ1NTIEFuaW1hdGlvbnMgYXJlIHVwZGF0ZWQgbWF0dGVycyBzaW5j
ZSBDU1MgVHJhbnNpdGlvbnMgZGVmaW5lIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUKLSAgICAgICAg
ICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2aW91cyBz
dHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9ucyBhZnRl
ciBDU1MgVHJhbnNpdGlvbnMKLSAgICAgICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFu
c2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBh
cyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4KLSAgICAgICAgICAgIGlm
ICgob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgfHwgbmV3U3R5bGUtPmhh
c0FuaW1hdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBo
YWNrIGFuZCBwYXNzIHRoZSBwYXJlbnQgc3R5bGUgdmlhIHVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JF
bGVtZW50LgotICAgICAgICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVu
dFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICBt
X2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVu
dCwgb2xkU3R5bGUsICpuZXdTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICBzY29wZSgpLnJlc29s
dmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktleWZyYW1lcyhudWxscHRyKTsKLSAgICAgICAg
ICAgIH0KKyAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCBhbnkgbmV3IENT
UyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50IGhhcyBhIG1hdGNoaW5nIFdlYkFu
aW1hdGlvbgorICAgIC8vIG9uIHRoZSBkb2N1bWVudCB0aW1lbGluZS4gTm90ZSB0aGF0IHdlIGdl
dCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVudCBoZXJlIGJlY2F1c2Ugd2UgbmVlZCBhIHRpbWVs
aW5lIGNyZWF0ZWQKKyAgICAvLyBpbiBjYXNlIG5vIFdlYiBBbmltYXRpb25zIGhhdmUgYmVlbiBj
cmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KKyAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmJh
Y2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUg
JiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpIHsKKyAgICAg
ICAgaWYgKG9sZFN0eWxlICYmIChvbGRTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSB8fCBuZXdTdHls
ZS0+aGFzVHJhbnNpdGlvbnMoKSkpCisgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCku
dXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5ld1N0
eWxlKTsKKworICAgICAgICAvLyBUaGUgb3JkZXIgaW4gd2hpY2ggQ1NTIFRyYW5zaXRpb25zIGFu
ZCBDU1MgQW5pbWF0aW9ucyBhcmUgdXBkYXRlZCBtYXR0ZXJzIHNpbmNlIENTUyBUcmFuc2l0aW9u
cyBkZWZpbmUgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZQorICAgICAgICAvLyB0byB1c2UgQ1NTIEFu
aW1hdGlvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LiBB
cyBzdWNoLCB3ZSB1cGRhdGUgQ1NTIEFuaW1hdGlvbnMgYWZ0ZXIgQ1NTIFRyYW5zaXRpb25zCisg
ICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUg
Q1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0
eWxlIGNoYW5nZSBldmVudC4KKyAgICAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFz
QW5pbWF0aW9ucygpKSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB7CisgICAgICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBhbmQgcGFzcyB0aGUgcGFyZW50IHN0eWxlIHZp
YSB1cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudC4KKyAgICAgICAgICAgIHNjb3BlKCkucmVz
b2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7
CisKKyAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NBbmltYXRpb25z
Rm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0eWxlKTsKKworICAgICAgICAgICAg
c2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMobnVsbHB0
cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0NywxNyArMzQ0LDYgQEAgRWxlbWVudFVwZGF0
ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZShzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3QKICAgICB9IGVsc2UKICAgICAgICAgZWxlbWVudC5zZXRMYXN0U3R5bGVDaGFu
Z2VFdmVudFN0eWxlKG51bGxwdHIpOwogCi0gICAgLy8gT2xkIGNvZGUgcGF0aCBmb3IgQ1NTIEFu
aW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGF1dG8mIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBtX2RvY3VtZW50LmZy
YW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOwotCi0gICAgICAgIGF1dG8gYW5pbWF0aW9uVXBkYXRl
ID0gYW5pbWF0aW9uQ29udHJvbGxlci51cGRhdGVBbmltYXRpb25zKGVsZW1lbnQsICpuZXdTdHls
ZSwgb2xkU3R5bGUpOwotICAgICAgICBhbmltYXRpb25JbXBhY3QuYWRkKGFuaW1hdGlvblVwZGF0
ZS5pbXBhY3QpOwotCi0gICAgICAgIGlmIChhbmltYXRpb25VcGRhdGUuc3R5bGUpCi0gICAgICAg
ICAgICBuZXdTdHlsZSA9IFdURk1vdmUoYW5pbWF0aW9uVXBkYXRlLnN0eWxlKTsKLSAgICB9Ci0K
ICAgICBpZiAoYW5pbWF0aW9uSW1wYWN0KQogICAgICAgICBBZGp1c3Rlcjo6YWRqdXN0QW5pbWF0
ZWRTdHlsZSgqbmV3U3R5bGUsIHBhcmVudEJveFN0eWxlKCksIGFuaW1hdGlvbkltcGFjdCk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCmluZGV4IGIzNzZi
ZjZjMTc1ZDU0NTlhNGUwYjQ2M2NhNDhiOWJmMGNhNjY3OTkuLjZhNWI2ZjRhZTQyMDI5Y2U2NjA4
YzA0YmM5MjY0ZmQwMzZmZWQ4ZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bFNldHRpbmdzLmNwcApAQCAtMTAyOSwxMSArMTAyOSw2IEBAIHZvaWQgSW50ZXJuYWxTZXR0aW5n
czo6c2V0Rm9yY2VkU3VwcG9ydHNIaWdoRHluYW1pY1JhbmdlVmFsdWUoSW50ZXJuYWxTZXR0aW5n
czo6CiAgICAgc2V0dGluZ3MoKS5zZXRGb3JjZWRTdXBwb3J0c0hpZ2hEeW5hbWljUmFuZ2VWYWx1
ZShpbnRlcm5hbFNldHRpbmdzVG9TZXR0aW5nc1ZhbHVlKHZhbHVlKSk7CiB9CiAKLWJvb2wgSW50
ZXJuYWxTZXR0aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpCi17Ci0g
ICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQotCiB2b2lkIEludGVybmFsU2V0dGlu
Z3M6OnNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbCBzaG91bGQpCiB7CiAjaWYg
RU5BQkxFKFZJREVPKSB8fCBFTkFCTEUoV0VCX0FVRElPKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBiNTI3ZTE1NWM5MGQ0NjY4ZTMxMjRjNWU5YjQ4YmZl
MGQwZTM5NTcyLi5mNjVhNzQxMzQ5ZmZjYTI5YjE5NTVjNjc0YWE0ODMzZDcyMzY1NzVhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaApAQCAtMTM1LDggKzEzNSw2
IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRQaWN0dXJlSW5QaWN0dXJlQVBJRW5hYmxl
ZChib29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoYm9v
bCk7CiAKLSAgICBzdGF0aWMgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCk7Ci0KICAgICB2b2lkIHNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbCk7CiAg
ICAgCiAgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChib29s
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCmluZGV4IDQx
YTI3ZDYyZTI3NjQ2NGFhZTVlMTI4YjhlOWJlMWVjZjkxZmVkZmYuLjVjYzYyZjMyNWEyZjY4OTYw
MGUzYmY4OGNlYTA1YzY1NmZhZTRlZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbApAQCAtMTE3LDggKzExNyw2IEBAIGVudW0gRm9udExvYWRUaW1pbmdP
dmVycmlkZSB7ICJCbG9jayIsICJTd2FwIiwgIkZhaWx1cmUiIH07CiAgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bmRlZmluZWQgc2V0U2hvdWxkTWFuYWdlQXVkaW9TZXNzaW9uQ2F0ZWdvcnkoYm9v
bGVhbiBzaG91bGQpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHNldEN1c3Rv
bVBhc3RlYm9hcmREYXRhRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwogCi0gICAgW0VuYWJsZWRB
dFJ1bnRpbWU9V2ViQW5pbWF0aW9uc10gYm9vbGVhbiB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCk7Ci0KICAgICB1bmRlZmluZWQgc2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vz
c2lvbihib29sZWFuIHNob3VsZERlYWN0aXZhdGUpOwogICAgIAogICAgIHVuZGVmaW5lZCBzZXRT
dG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChib29sZWFuIGVuYWJsZWQpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFkMTRkNzBlZDhmMTJhMWU2ZDNkMGYy
NTVjYjFiYTBmNTA3ODNlOGMuLjdjNGRmMDNlNWUxODRiNWI1OWM5MGQ0NmY2NmVjZTEwNjhkNmZi
NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKQEAgLTM3LDcgKzM3LDYgQEAK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUg
IkNTU01lZGlhUnVsZS5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5UGFyc2VyLmgiCkBAIC0xMDY5
LDkgKzEwNjgsNyBAQCBib29sIEludGVybmFsczo6YW5pbWF0aW9uV2l0aElkRXhpc3RzKGNvbnN0
IFN0cmluZyYgaWQpIGNvbnN0CiAKIHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAg
ICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9mQWN0aXZl
QW5pbWF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0
aW9uKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lKCktPmRvY3VtZW50KCkpOworICAg
IHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgpLm51bWJlck9mQWN0aXZlQW5p
bWF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjph
bmltYXRpb25zQXJlU3VzcGVuZGVkKCkgY29uc3QKQEAgLTEwODAsOSArMTA3Nyw3IEBAIEV4Y2Vw
dGlvbk9yPGJvb2w+IEludGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpIGNvbnN0CiAg
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9s
bGVyKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwotICAgIHJldHVybiBkb2N1bWVudC0+ZnJh
bWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50
KGRvY3VtZW50KTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xs
ZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7CiB9CiAKIGRvdWJsZSBJbnRlcm5hbHM6OmFu
aW1hdGlvbnNJbnRlcnZhbCgpIGNvbnN0CkBAIC0xMDkxLDE1ICsxMDg2LDkgQEAgZG91YmxlIElu
dGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50KQog
ICAgICAgICByZXR1cm4gSU5GSU5JVFk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkp
IHsKLSAgICAgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBkb2N1bWVudC0+ZXhpc3RpbmdUaW1lbGlu
ZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5hbmltYXRpb25JbnRlcnZhbCgpLnNl
Y29uZHMoKTsKLSAgICAgICAgcmV0dXJuIElORklOSVRZOwotICAgIH0KLQotICAgIGlmICghZG9j
dW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBJTkZJTklUWTsKLSAgICByZXR1cm4gZG9j
dW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGlvbkludGVydmFsKCkudmFs
dWUoKTsKKyAgICBpZiAoYXV0byB0aW1lbGluZSA9IGRvY3VtZW50LT5leGlzdGluZ1RpbWVsaW5l
KCkpCisgICAgICAgIHJldHVybiB0aW1lbGluZS0+YW5pbWF0aW9uSW50ZXJ2YWwoKS5zZWNvbmRz
KCk7CisgICAgcmV0dXJuIElORklOSVRZOwogfQogCiBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5h
bHM6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKQEAgLTExMDgsMTkgKzEwOTcsMTAgQEAgRXhj
ZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0CiAgICAg
aWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNl
cHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1
c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQt
PmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsK
LSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkK
LSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1
c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkb2N1
bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1
bWVudChkb2N1bWVudCk7Ci0KLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+
ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewot
ICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQot
ICAgICAgICAgICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9u
c0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQorICAgIGRvY3VtZW50LT5lbnN1cmVU
aW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKEZyYW1l
KiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgp
LnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFt
ZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250
cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwpA
QCAtMTEzMiw3MyArMTExMiwxNyBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnJlc3Vt
ZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFt
ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
LSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmVuc3Vy
ZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJl
VGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQotICAg
IH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5y
ZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0
aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQor
ICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5pbWF0aW9u
cygpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBm
cmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYgKERvY3Vt
ZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9jdW1lbnQt
PmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7CiAgICAgfQog
CiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8
IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAg
ICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUo
ZWxlbWVudCwgQXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKLX0KLQotRXhj
ZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxl
bWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1l
bnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYgKHBhdXNlVGlt
ZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsK
LQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAiYWZ0ZXIiKQot
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBQ
c2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVt
ZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7
Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9u
KCkucGF1c2VBbmltYXRpb25BdFRpbWUoKnBzZXVkb0VsZW1lbnQsIEF0b21TdHJpbmcoYW5pbWF0
aW9uTmFtZSksIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6
cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1l
LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmIChwYXVzZVRp
bWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0
VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9y
PGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNv
bnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIGlmIChw
c2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBQc2V1ZG9FbGVtZW50
KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBz
ZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFw
c2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vy
cm9yIH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VUcmFu
c2l0aW9uQXRUaW1lKCpwc2V1ZG9FbGVtZW50LCBwcm9wZXJ0eSwgcGF1c2VUaW1lKTsKLX0KLQog
VmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxl
cmF0ZWRBbmltYXRpb25zRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQogewotICAgIGlmICgh
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KICAgICBWZWN0b3I8
SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYW5pbWF0aW9uczsKICAgICBmb3IgKGNv
bnN0IGF1dG8mIGFuaW1hdGlvbkFzUGFpciA6IGVsZW1lbnQuZG9jdW1lbnQoKS50aW1lbGluZSgp
LmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCkpCiAgICAgICAgIGFuaW1h
dGlvbnMuYXBwZW5kKHsgYW5pbWF0aW9uQXNQYWlyLmZpcnN0LCBhbmltYXRpb25Bc1BhaXIuc2Vj
b25kIH0pOwpAQCAtMTIwNyw5ICsxMTMxLDcgQEAgVmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0
ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWUKIAog
dW5zaWduZWQgSW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9u
cygpIGNvbnN0CiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFuaW1hdGlvblRpbWVs
aW5lSW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4gMDsKKyAgICByZXR1cm4g
ZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1iZXJPZkFuaW1hdGlvblRpbWVsaW5l
SW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogZG91YmxlIEludGVybmFsczo6dGltZVRv
TmV4dEFuaW1hdGlvblRpY2soV2ViQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oIGIvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCAzNzExNzZmNmMyYTNjNzg3ZTAzNmY1MjI2NjI1ODM1
ZmRjMTNlZThhLi5kMTdjZGVkMWQyMTllNjUzOGNjMTQ4MTMzYzU2ZWZiMTJhYWM1YWUzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTIzMywxNCArMjMzLDggQEAgcHVibGljOgog
ICAgIEV4Y2VwdGlvbk9yPGJvb2w+IGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBjb25zdDsKICAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0OwogICAgIEV4Y2Vw
dGlvbk9yPHZvaWQ+IHJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdDsKLSAgICBFeGNlcHRpb25Pcjxi
b29sPiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlv
bk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmKTsKLSAgICBFeGNlcHRpb25Pcjxib29s
PiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1h
dGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHBzZXVk
b0lkKTsKICAgICBkb3VibGUgYW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3Q7CiAKLSAgICAvLyBD
U1MgVHJhbnNpdGlvbiB0ZXN0aW5nLgotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlVHJhbnNp
dGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBh
dXNlVGltZSwgRWxlbWVudCYpOwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1
c2VUaW1lLCBFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCk7Ci0KICAgICAvLyBXZWIg
QW5pbWF0aW9ucyB0ZXN0aW5nLgogICAgIHN0cnVjdCBBY2NlbGVyYXRlZEFuaW1hdGlvbiB7CiAg
ICAgICAgIFN0cmluZyBwcm9wZXJ0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApp
bmRleCA4ZDFhZDQyZmQ1YTdiNTAwNGNiMDhmYTY2ZWVmNzRhYmM0NjQ4ZDQzLi5mZDY3ZTcxMjJh
Y2Q0MTZiY2RkNzA0ZWE1ZDAwMzU1ZjljNjhiMDQyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaWRsCkBAIC0zMTUsMTQgKzMxNSw4IEBAIGVudW0gQ29udGVudFNpemVDYXRlZ29yeSB7
CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsK
ICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCByZXN1bWVBbmltYXRpb25zKCk7CiAg
ICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsK
LSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVs
ZW1lbnQoRE9NU3RyaW5nIGFuaW1hdGlvbk5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VU
aW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBw
YXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChET01TdHJpbmcgYW5pbWF0aW9uTmFt
ZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9NU3Ry
aW5nIHBzZXVkb0lkKTsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgZG91YmxlIGFuaW1hdGlvbnNJ
bnRlcnZhbDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgW01heVRocm93
RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChET01TdHJp
bmcgcHJvcGVydHlOYW1lLCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBl
bGVtZW50KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0aW9u
QXRUaW1lT25Qc2V1ZG9FbGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eSwgdW5yZXN0cmljdGVkIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsKLQog
ICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAgc2VxdWVuY2U8QWNjZWxlcmF0ZWRB
bmltYXRpb24+IGFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVudCBlbGVtZW50
KTsKICAgICB1bnNpZ25lZCBsb25nIG51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRp
b25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55
YW1sIGIvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCBhODE0
MjJjOWIxZDcwZTAwY2Y1YWYyMjdiM2JkN2EyYmY2Y2IzY2Q5Li5iZDExZmE2MWJlNGFjZmMxZWI3
MmI4NGUxOWE3MWYwN2JhYTZkMmM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9X
ZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzLnlhbWwKQEAgLTE0MDUsMjIgKzE0MDUsNiBAQCBDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdF
bmFibGVkOgogICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJFbmFibGUgRE9NIEFQSSBhbmQg
Q1NTIHByb3BlcnR5IGZvciAnc21vb3RoJyBzY3JvbGwgYmVoYXZpb3IiCiAgIGNhdGVnb3J5OiBl
eHBlcmltZW50YWwKIAotV2ViQW5pbWF0aW9uc0VuYWJsZWQ6Ci0gIHR5cGU6IGJvb2wKLSAgZGVm
YXVsdFZhbHVlOiB0cnVlCi0gIGh1bWFuUmVhZGFibGVOYW1lOiAiV2ViIEFuaW1hdGlvbnMiCi0g
IGh1bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIldlYiBBbmltYXRpb25zIHByb3RvdHlwZSIKLSAg
Y2F0ZWdvcnk6IGV4cGVyaW1lbnRhbAotICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRG
ZWF0dXJlcwotCi1XZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOgotICB0eXBlOiBi
b29sCi0gIGRlZmF1bHRWYWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxlTmFtZTogIkNTUyBBbmlt
YXRpb25zIHZpYSBXZWIgQW5pbWF0aW9ucyIKLSAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAi
RXhwb3NlIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgdGhyb3VnaCBnZXRBbmlt
YXRpb25zKCkiCi0gIGNhdGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29yZUJpbmRpbmc6IFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXMKLQogV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNF
bmFibGVkOgogICB0eXBlOiBib29sCiAgIGRlZmF1bHRWYWx1ZTogREVGQVVMVF9FWFBFUklNRU5U
QUxfRkVBVFVSRVNfRU5BQkxFRApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9X
S1ByZWZlcmVuY2VzLmNwcAppbmRleCBlYmMyZDI3YWY3NzRlODMyNWQ1YWRiM2E5NDQ2MDMxNjYz
MTAwMDNlLi4xN2RjZjM4M2U1NTA3ZTFiNzBkMGRlODMxMzE3ZGRkMWM3ZjljYWYxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcApAQCAtNDg2
LDI2ICs0ODYsNiBAQCBib29sIFdLUHJlZmVyZW5jZXNHZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5h
YmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmKQogICAgIHJldHVybiB0b0ltcGwo
cHJlZmVyZW5jZXNSZWYpLT5hY2NlbGVyYXRlZDJkQ2FudmFzRW5hYmxlZCgpOwogfQogCi12b2lk
IFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHBy
ZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+
c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tQcmVmZXJlbmNlc0dl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYpCi17
Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlvbnNFbmFibGVk
KCk7Ci19Ci0KLXZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewot
ICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoZmxhZyk7Ci19Ci0KLWJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKLXsK
LSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+d2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpOwotfQotCiB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVj
aWZpY1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpCiB7
CiAgICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3Mo
ZmxhZyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzUmVmUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVm
ZXJlbmNlc1JlZlByaXZhdGUuaAppbmRleCA3ZTE0YTJhYzQ1Y2IxYmY1ZmFlMDM5MTRlYzkyOGI5
MTMyZmJjNTYxLi4yMWRmMzc0ODY2Y2QyNTgyOTc5N2M3MjliMzgyNjFkNThmMGZiNjJmIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJp
dmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNS
ZWZQcml2YXRlLmgKQEAgLTk3LDE0ICs5Nyw2IEBAIFdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5j
ZXNHZXRXZWJHTEVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiBXS19FWFBPUlQgdm9pZCBXS1By
ZWZlcmVuY2VzU2V0QWNjZWxlcmF0ZWQyRENhbnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwg
Ym9vbCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWQyRENhbnZh
c0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7CiAKLS8vIERlZmF1bHRzIHRvIGZhbHNlCi1XS19F
WFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiwgYm9vbCBmbGFnKTsKLVdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJB
bmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKLQotLy8gRGVmYXVsdHMgdG8gZmFs
c2UKLVdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQgYm9v
bCBXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1By
ZWZlcmVuY2VzUmVmKTsKLQogLy8gRGVmYXVsdHMgdG8gZmFsc2UuCiBXS19FWFBPUlQgdm9pZCBX
S1ByZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiwg
Ym9vbCk7CiBXS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0TmVlZHNTaXRlU3BlY2lmaWNR
dWlya3MoV0tQcmVmZXJlbmNlc1JlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1tCmluZGV4IDEzYTg4MTBjM2FmNGI3M2ZlMmUwYjJi
YmRkN2U4YjU3Njg2MTJkYTYuLmRhZGE5MTMzZmNkOTczYmY1ZmI2NjAwMmI1MzkxOTk2ZTIwOWVj
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZl
cmVuY2VzLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZl
cmVuY2VzLm1tCkBAIC0xNDMwLDE2ICsxNDMwLDYgQEAgLSAoQk9PTClfdmlkZW9RdWFsaXR5SW5j
bHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkCiAgICAgcmV0dXJuIF9wcmVmZXJlbmNlcy0+
dmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVkKCk7CiB9CiAKLS0g
KHZvaWQpX3NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KEJPT0wpZW5hYmxl
ZAotewotICAgIF9wcmVmZXJlbmNlcy0+c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZChlbmFibGVkKTsKLX0KLQotLSAoQk9PTClfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZAotewotICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPndlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogLSAodm9pZClfc2V0RGV2aWNlT3JpZW50YXRpb25FdmVu
dEVuYWJsZWQ6KEJPT0wpZW5hYmxlZAogewogI2lmIEVOQUJMRShERVZJQ0VfT1JJRU5UQVRJT04p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZl
cmVuY2VzUHJpdmF0ZS5oCmluZGV4IGEzNDk4OTU2OTI2OTQ0Nzg1MzZjNGE0NDQ1ZTVhODBlNDQz
ZjE4NzIuLjU4NDA0YTY4NDVkN2E0OWM4YTc2YWFlYWY4ODRkZjJhMGUzM2NkZGUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0
ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2Vz
UHJpdmF0ZS5oCkBAIC0xNTEsNyArMTUxLDYgQEAgdHlwZWRlZiBOU19FTlVNKE5TSW50ZWdlciwg
X1dLRWRpdGFibGVMaW5rQmVoYXZpb3IpIHsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldExvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkOikgQk9PTCBfbG93UG93ZXJW
aWRlb0F1ZGlvQnVmZmVyU2l6ZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFNob3VsZEln
bm9yZU1ldGFWaWV3cG9ydDopIEJPT0wgX3Nob3VsZElnbm9yZU1ldGFWaWV3cG9ydCBXS19BUElf
QVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9t
aWMsIHNldHRlcj1fc2V0VmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFi
bGVkOikgQk9PTCBfdmlkZW9RdWFsaXR5SW5jbHVkZXNEaXNwbGF5Q29tcG9zaXRpbmdFbmFibGVk
IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7Ci1AcHJvcGVydHkg
KG5vbmF0b21pYywgc2V0dGVyPV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
OikgQk9PTCBfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0
ZXI9X3NldERldmljZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkOikgQk9PTCBfZGV2aWNlT3JpZW50
YXRpb25FdmVudEVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldE5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzOikgQk9PTCBfbmVlZHNTaXRlU3BlY2lmaWNRdWlya3MgV0tfQVBJX0FWQUlMQUJMRSht
YWNvcygxMC4xMy40KSwgaW9zKDEzLjApKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9
X3NldEl0cERlYnVnTW9kZUVuYWJsZWQ6KSBCT09MIF9pdHBEZWJ1Z01vZGVFbmFibGVkIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTUpLCBpb3MoMTMuMCkpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdB
cmVhUHJveHkuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5LmgKaW5kZXggYjZlYzUyZGI4MjFkOTY1MWVhMjJk
OGYwYzNlMmYzNTZjY2FmZDU2YS4uZjVmY2M3ZmJiNTEzODY1OWNiZGU4NzAxZWJkMWJjM2JiYTJi
MzVmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVl
L1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5o
CkBAIC00OCw3ICs0OCw2IEBAIHB1YmxpYzoKICAgICBjb25zdCBSZW1vdGVMYXllclRyZWVIb3N0
JiByZW1vdGVMYXllclRyZWVIb3N0KCkgY29uc3QgeyByZXR1cm4gKm1fcmVtb3RlTGF5ZXJUcmVl
SG9zdDsgfQogICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW1vdGVMYXllclRyZWVIb3N0PiBkZXRhY2hS
ZW1vdGVMYXllclRyZWVIb3N0KCk7CiAKLSAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlk
U3RhcnQodWludDY0X3QgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lKTsKICAgICB2b2lkIGFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90
IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5KTsKIAogICAgIFRyYW5zYWN0aW9uSUQgbmV4dExh
eWVyVHJlZVRyYW5zYWN0aW9uSUQoKSBjb25zdCB7IHJldHVybiBtX3BlbmRpbmdMYXllclRyZWVU
cmFuc2FjdGlvbklELm5leHQoKTsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHkubW0gYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWFQcm94eS5tbQppbmRleCA2NDlhMDg0ODBjYmM5ZjdkMTFkZjNiN2I2MzU0NmViZmZh
ZWQ2MDY4Li5jYTVmOWJkYTIzMzFkNjI0ZTYzZmI0Zjk3ZWQxYWYyZTAwOGQ1YTJjIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWFQcm94eS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1v
dGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWFQcm94eS5tbQpAQCAtMjc1LDEx
ICsyNzUsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmNvbW1pdExh
eWVyVHJlZShjb25zdCBSZW1vdGVMYXllclRyZWVUcmFucwogICAgIH0KIH0KIAotdm9pZCBSZW1v
dGVMYXllclRyZWVEcmF3aW5nQXJlYVByb3h5OjphY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0
KHVpbnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5LCBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZSkKLXsKLSAgICBzZW5kKE1lc3NhZ2VzOjpEcmF3aW5nQXJlYTo6QWNjZWxlcmF0ZWRBbmlt
YXRpb25EaWRTdGFydChsYXllcklELCBrZXksIHN0YXJ0VGltZSkpOwotfQotCiB2b2lkIFJlbW90
ZUxheWVyVHJlZURyYXdpbmdBcmVhUHJveHk6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVp
bnQ2NF90IGxheWVySUQsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIHNlbmQoTWVzc2FnZXM6
OkRyYXdpbmdBcmVhOjpBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZChsYXllcklELCBrZXkpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVIb3N0LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRy
ZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5oCmluZGV4IGU4YTMwNzhlNDgwZDIxMmQ0NmNkNjM4ZTI4
ZGQ5NWQyNWY4ZjgyMWQuLjYzZTJhYjc5NjQ2ZTIyNTVmNGZmMzJhZWE5MjdhYWRjODIzM2Y1Y2Ug
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1JlbW90ZUxheWVyVHJlZS9SZW1v
dGVMYXllclRyZWVIb3N0LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QuaApAQCAtNjAsNyArNjAsNiBAQCBwdWJsaWM6CiAg
ICAgdHlwZWRlZiBIYXNoTWFwPFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJ
RCwgUmV0YWluUHRyPFdLQW5pbWF0aW9uRGVsZWdhdGU+PiBMYXllckFuaW1hdGlvbkRlbGVnYXRl
TWFwOwogICAgIExheWVyQW5pbWF0aW9uRGVsZWdhdGVNYXAmIGFuaW1hdGlvbkRlbGVnYXRlcygp
IHsgcmV0dXJuIG1fYW5pbWF0aW9uRGVsZWdhdGVzOyB9CiAKLSAgICB2b2lkIGFuaW1hdGlvbkRp
ZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRp
b24gKiwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQgYW5pbWF0aW9uRGlkRW5k
KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwgQ0FBbmltYXRpb24gKik7
CiAKICAgICB2b2lkIGRldGFjaEZyb21EcmF3aW5nQXJlYSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUhvc3QubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVl
SG9zdC5tbQppbmRleCBlMjRhOGZmZTRmMzA1YmNkNDA3MGEzMTZmMmVjYzljOTQ4NzhjNjEzLi4z
NWMwM2M4NzZmNzkxNTk0YTJiYmJjODM4YmJiNTQzYmE0ZGVjZWJjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlSG9zdC5t
bQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5
ZXJUcmVlSG9zdC5tbQpAQCAtMTUzLDI3ICsxNTMsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUhv
c3Q6OmxheWVyV2lsbEJlUmVtb3ZlZChXZWJDb3JlOjpHcmFwaGljc0xheWVyOjpQbGF0Zm9ybUxh
eQogICAgIG1fbm9kZXMucmVtb3ZlKGxheWVySUQpOwogfQogCi12b2lkIFJlbW90ZUxheWVyVHJl
ZUhvc3Q6OmFuaW1hdGlvbkRpZFN0YXJ0KFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3Jt
TGF5ZXJJRCBsYXllcklELCBDQUFuaW1hdGlvbiAqYW5pbWF0aW9uLCBNb25vdG9uaWNUaW1lIHN0
YXJ0VGltZSkKLXsKLSAgICBpZiAoIW1fZHJhd2luZ0FyZWEpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIENBTGF5ZXIgKmxheWVyID0gbGF5ZXJGb3JJRChsYXllcklEKTsKLSAgICBpZiAoIWxheWVy
KQotICAgICAgICByZXR1cm47Ci0KLSAgICBTdHJpbmcgYW5pbWF0aW9uS2V5OwotICAgIGZvciAo
TlNTdHJpbmcgKmtleSBpbiBbbGF5ZXIgYW5pbWF0aW9uS2V5c10pIHsKLSAgICAgICAgaWYgKFts
YXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSA9PSBhbmltYXRpb24pIHsKLSAgICAgICAgICAgIGFu
aW1hdGlvbktleSA9IGtleTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKCFhbmltYXRpb25LZXkuaXNFbXB0eSgpKQotICAgICAgICBtX2RyYXdpbmdBcmVh
LT5hY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0KGxheWVySUQsIGFuaW1hdGlvbktleSwgc3Rh
cnRUaW1lKTsKLX0KLQogdm9pZCBSZW1vdGVMYXllclRyZWVIb3N0OjphbmltYXRpb25EaWRFbmQo
V2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQsIENBQW5pbWF0
aW9uICphbmltYXRpb24pCiB7CiAgICAgaWYgKCFtX2RyYXdpbmdBcmVhKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNw
cCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAKaW5kZXggNDE5YzE1Zjk3MDE3ZGRiZDJkYjhiMzg3MDY4Mzc1MGFhMDM0ZWYxMS4uYmU1
ZGVkNTc4MzcyMjA1NDBlMDEzMmM3MmU4MmM2NDFmYWMzZmY5NCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUu
Y3BwCkBAIC0xODcsMTIgKzE4Nyw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKFdlYlBhZ2VHcm91cFByb3h5KiBwYWdlCiAgICAgfQog
I2VuZGlmCiAKLSAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJs
ZWQiKQotICAgICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKGVuYWJsZWQpOwotCi0gICAgaWYgKHByZWZlcmVuY2UgPT0g
IldlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci0KICAgICBpZiAocHJlZmVyZW5jZSA9PSAiV2Vi
S2l0Q2FjaGVBUElFbmFibGVkIikKICAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS5zZXRDYWNoZUFQSUVuYWJsZWQoZW5hYmxlZCk7CiAKQEAgLTU4OSwxNiAr
NTgzLDYgQEAgdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1l
bnRzKFdlYlBhZ2UqIHBhZ2UsIGJvb2wgZW5hYmxlZCkKICAgICBwYWdlLT5jb3JlUGFnZSgpLT5z
ZXRUYWJLZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoZW5hYmxlZCk7CiB9CiAKLXZvaWQgSW5qZWN0
ZWRCdW5kbGU6OnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNF
bmFibGVkKGVuYWJsZWQpOwotfQotCi12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGJvb2wgZW5hYmxlZCkKLXsKLSAgICBSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldEFjY2Vz
c2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKGJvb2wgZW5hYmxlZCkKIHsKICNpZiBFTkFCTEUo
QUNDRVNTSUJJTElUWV9JU09MQVRFRF9UUkVFKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmggYi9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAppbmRleCAwOWExMjVj
YTRjOTZjYzNhMDMyYWU1OGE0ZWJiYzJiYzQzYzc1ZmJmLi5jMDFkZTgwZmNjYmNlM2QzNWJlMzJh
ZjdhMGRhNGIzYzNjMWRmNjQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
SW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5kbGUuaApAQCAtMTQyLDggKzE0Miw2IEBA
IHB1YmxpYzoKIAogICAgIHZvaWQgc2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKFdlYlBh
Z2UqLCBib29sIGVuYWJsZWQpOwogICAgIHZvaWQgc2V0U2VyaWFsTG9hZGluZ0VuYWJsZWQoYm9v
bCk7Ci0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNl
dFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBzZXRB
Y2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChib29sKTsKICAgICB2b2lkIGRpc3BhdGNo
UGVuZGluZ0xvYWRSZXF1ZXN0cygpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvRHJhd2luZ0FyZWEuaAppbmRleCBjZTc3NThkMGI5NDY4ZDliN2Y2Zjg0NWI0ZGVhZjU2
NzEyNzRmZWNkLi5iMDkxNzZmMjEyYmRhYjM2OThkMDY2YmYzY2YxMWZlMDEwZDA3MmJlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9EcmF3aW5nQXJlYS5oCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLmgKQEAgLTk1
LDcgKzk1LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRWaWV3RXhwb3NlZFJlY3Qo
T3B0aW9uYWw8V2ViQ29yZTo6RmxvYXRSZWN0PikgPSAwOwogICAgIHZpcnR1YWwgT3B0aW9uYWw8
V2ViQ29yZTo6RmxvYXRSZWN0PiB2aWV3RXhwb3NlZFJlY3QoKSBjb25zdCA9IDA7CiAKLSAgICB2
aXJ0dWFsIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCAvKmxheWVy
SUQqLywgY29uc3QgU3RyaW5nJiAvKmtleSovLCBNb25vdG9uaWNUaW1lIC8qc3RhcnRUaW1lKi8p
IHsgfQogICAgIHZpcnR1YWwgdm9pZCBhY2NlbGVyYXRlZEFuaW1hdGlvbkRpZEVuZCh1aW50NjRf
dCAvKmxheWVySUQqLywgY29uc3QgU3RyaW5nJiAvKmtleSovKSB7IH0KICAgICB2aXJ0dWFsIHZv
aWQgYWRkRmVuY2UoY29uc3QgV1RGOjpNYWNoU2VuZFJpZ2h0JikgeyB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL0RyYXdpbmdBcmVhLm1lc3NhZ2VzLmlu
IGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMu
aW4KaW5kZXggZjIwN2UxMDdlOTUyNzBhN2Y5MTg5Y2JhOWFiNjc3NTM0YWEyMjc5Mi4uMTNhNzNm
ZjA1ZjkwODQ5OGM4OTIzODhlYzIyY2NjNjNjM2UxY2Q4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvRHJhd2luZ0FyZWEubWVzc2FnZXMuaW4KQEAg
LTM3LDcgKzM3LDYgQEAgbWVzc2FnZXMgLT4gRHJhd2luZ0FyZWEgTm90UmVmQ291bnRlZCB7CiAg
ICAgQWRqdXN0VHJhbnNpZW50Wm9vbShkb3VibGUgc2NhbGUsIFdlYkNvcmU6OkZsb2F0UG9pbnQg
b3JpZ2luKQogICAgIENvbW1pdFRyYW5zaWVudFpvb20oZG91YmxlIHNjYWxlLCBXZWJDb3JlOjpG
bG9hdFBvaW50IG9yaWdpbikKICAgICAKLSAgICBBY2NlbGVyYXRlZEFuaW1hdGlvbkRpZFN0YXJ0
KHVpbnQ2NF90IGxheWVySUQsIFN0cmluZyBrZXksIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQog
ICAgIEFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVySUQsIFN0cmluZyBr
ZXkpCiAgICAgCiAgICAgQWRkVHJhbnNhY3Rpb25DYWxsYmFja0lEKFdlYktpdDo6Q2FsbGJhY2tJ
RCBjYWxsYmFja0lEKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0gYi9Tb3VyY2Uv
V2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1h
dGlvblJlbW90ZS5tbQppbmRleCBkZTdkNzI4MDI5MmQwNTBkNzJkMDZhYzk0YWI5MzFjZjIzZmE0
ZThlLi5lZTM1NTI5MmE3MzI1OWUzMTY0ZTdkNTU3NmI1MGU3MTNmOGY2ZDg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbQpAQCAtNDEs
MTEgKzQxLDYgQEAKICNpbXBvcnQgPHd0Zi9jb2NvYS9WZWN0b3JDb2NvYS5oPgogI2ltcG9ydCA8
d3RmL3RleHQvVGV4dFN0cmVhbS5oPgogCi1zdGF0aWMgTW9ub3RvbmljVGltZSBtZWRpYVRpbWVU
b0N1cnJlbnRUaW1lKENGVGltZUludGVydmFsIHQpCi17Ci0gICAgcmV0dXJuIFdURjo6TW9ub3Rv
bmljVGltZTo6bm93KCkgKyBTZWNvbmRzKHQgLSBDQUN1cnJlbnRNZWRpYVRpbWUoKSk7Ci19Ci0K
IHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IFdLRXhwbGljaXRCZWdpblRpbWVGbGFnID0gQCJXS1Bs
YXRmb3JtQ0FBbmltYXRpb25FeHBsaWNpdEJlZ2luVGltZUZsYWciOwogCiBAaW50ZXJmYWNlIFdL
QW5pbWF0aW9uRGVsZWdhdGUgKCkgPENBQW5pbWF0aW9uRGVsZWdhdGU+CkBAIC02NywyNCArNjIs
NiBAQCAtICh2b2lkKWludmFsaWRhdGUKICAgICBfbGF5ZXJUcmVlSG9zdCA9IG51bGxwdHI7CiB9
CiAKLS0gKHZvaWQpYW5pbWF0aW9uRGlkU3RhcnQ6KENBQW5pbWF0aW9uICopYW5pbWF0aW9uCi17
Ci0gICAgaWYgKCFfbGF5ZXJUcmVlSG9zdCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgYm9vbCBo
YXNFeHBsaWNpdEJlZ2luVGltZSA9IFtbYW5pbWF0aW9uIHZhbHVlRm9yS2V5OldLRXhwbGljaXRC
ZWdpblRpbWVGbGFnXSBib29sVmFsdWVdOwotICAgIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lOwot
Ci0gICAgaWYgKGhhc0V4cGxpY2l0QmVnaW5UaW1lKSB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGtu
b3cgd2hhdCB0aW1lIENBIHVzZWQgdG8gY29tbWl0IHRoZSBhbmltYXRpb24sIHNvIGp1c3QgdXNl
IHRoZSBjdXJyZW50IHRpbWUKLSAgICAgICAgLy8gKGV2ZW4gdGhvdWdoIHRoaXMgd2lsbCBiZSBz
bGlnaHRseSBvZmYpLgotICAgICAgICBzdGFydFRpbWUgPSBtZWRpYVRpbWVUb0N1cnJlbnRUaW1l
KENBQ3VycmVudE1lZGlhVGltZSgpKTsKLSAgICB9IGVsc2UKLSAgICAgICAgc3RhcnRUaW1lID0g
bWVkaWFUaW1lVG9DdXJyZW50VGltZShbYW5pbWF0aW9uIGJlZ2luVGltZV0pOwotCi0gICAgX2xh
eWVyVHJlZUhvc3QtPmFuaW1hdGlvbkRpZFN0YXJ0KF9sYXllcklELCBhbmltYXRpb24sIHN0YXJ0
VGltZSk7Ci19Ci0KIC0gKHZvaWQpYW5pbWF0aW9uRGlkU3RvcDooQ0FBbmltYXRpb24gKilhbmlt
YXRpb24gZmluaXNoZWQ6KEJPT0wpZmluaXNoZWQKIHsKICAgICBpZiAoIV9sYXllclRyZWVIb3N0
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nl
c3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAppbmRl
eCBhNTkxNzE5YmRhOTBhMzljZGE0MGJhNDE5ODllZGEyZDRlMDYzMDQzLi4yMTBhNjY4MTU4ZTA0
YjY5N2Y3YjJlMWU1MTI2YmUyODQ2MDZmYzgxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcApAQCAtMzk2LDE2ICszOTYsNiBAQCBzdGF0aWMgaW5s
aW5lIGJvb2wgaXNFcXVpdmFsZW50TGF5ZXIoY29uc3QgUGxhdGZvcm1DQUxheWVyKiBsYXllciwg
R3JhcGhpY3NMYXllcgogICAgIHJldHVybiBsYXllcklEID09IG5ld0xheWVySUQ7CiB9CiAKLXZv
aWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRpb25TdGFydGVkKGNvbnN0IFN0cmluZyYg
a2V5LCBNb25vdG9uaWNUaW1lIGJlZ2luVGltZSkKLXsKLSAgICBhdXRvIGl0ID0gbV9hbmltYXRp
b25zLmZpbmQoa2V5KTsKLSAgICBpZiAoaXQgIT0gbV9hbmltYXRpb25zLmVuZCgpKQotICAgICAg
ICBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPigqaXQtPnZhbHVlKS5kaWRTdGFy
dChjdXJyZW50VGltZVRvTWVkaWFUaW1lKGJlZ2luVGltZSkpOwotICAgIAotICAgIGlmIChtX293
bmVyKQotICAgICAgICBtX293bmVyLT5wbGF0Zm9ybUNBTGF5ZXJBbmltYXRpb25TdGFydGVkKGtl
eSwgYmVnaW5UaW1lKTsKLX0KLQogdm9pZCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlv
bkVuZGVkKGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIGlmIChtX293bmVyKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FMYXllclJlbW90ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCmluZGV4IDBjMGEwODJiZThmOWI4
YmM3NWYwMzhiMDdlNzVkOTlhOTNlYTI2OWQuLmVhYzdiN2M5MjA0NWYyYzNlMWE1ZWZjMmZlNmY5
YjU2YzgyMmE0MjkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUxheWVyUmVt
b3RlLmgKQEAgLTY3LDcgKzY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5LCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3Zl
cnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
IG92ZXJyaWRlOwogICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIHZvaWQgYW5pbWF0
aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBiZWdpblRpbWUpIG92
ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOwogCiAgICAgdm9pZCBzZXRNYXNrKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllciopIG92ZXJy
aWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3Rl
TGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVDb250ZXh0LmgKaW5k
ZXggNGY3Yjk4M2NkODBlYTU1NzVkOGIzOTAzMzI1NmRjMDFhMTdjOWFlMC4uOGYwZDExMzdkNDE2
MmNjMjdmMjZjZDQzNDIwMGNiZDM2ZmZiMzY1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQu
aAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5oCkBAIC02Niw3ICs2Niw2IEBAIHB1YmxpYzoKICAgICB2
b2lkIGxheWVyUHJvcGVydHlDaGFuZ2VkV2hpbGVCdWlsZGluZ1RyYW5zYWN0aW9uKFBsYXRmb3Jt
Q0FMYXllclJlbW90ZSYpOwogCiAgICAgLy8gRnJvbSB0aGUgVUkgcHJvY2VzcwotICAgIHZvaWQg
YW5pbWF0aW9uRGlkU3RhcnQoV2ViQ29yZTo6R3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
LCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpOwogICAgIHZvaWQg
YW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCwg
Y29uc3QgU3RyaW5nJiBrZXkpOwogCiAgICAgdm9pZCB3aWxsU3RhcnRBbmltYXRpb25PbkxheWVy
KFBsYXRmb3JtQ0FMYXllclJlbW90ZSYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZUNvbnRleHQubW0g
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3Rl
TGF5ZXJUcmVlQ29udGV4dC5tbQppbmRleCA1MjIwNTVlMmQ5NTY3YzZkZTMxNjg3MzVhYjM4N2Iw
NmZhZDU3MGQ2Li43NjNmOTU0MmI4YTUwMjczMjFiYzI2ODdkN2EyZDA5ZTI3MGRiNWRlIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlQ29udGV4dC5tbQpAQCAtMTc0
LDEzICsxNzQsNiBAQCB2b2lkIFJlbW90ZUxheWVyVHJlZUNvbnRleHQ6OndpbGxTdGFydEFuaW1h
dGlvbk9uTGF5ZXIoUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBsYQogICAgIG1fbGF5ZXJzV2l0aEFu
aW1hdGlvbnMuYWRkKGxheWVyLmxheWVySUQoKSwgJmxheWVyKTsKIH0KIAotdm9pZCBSZW1vdGVM
YXllclRyZWVDb250ZXh0OjphbmltYXRpb25EaWRTdGFydChXZWJDb3JlOjpHcmFwaGljc0xheWVy
OjpQbGF0Zm9ybUxheWVySUQgbGF5ZXJJRCwgY29uc3QgU3RyaW5nJiBrZXksIE1vbm90b25pY1Rp
bWUgc3RhcnRUaW1lKQotewotICAgIGF1dG8gaXQgPSBtX2xheWVyc1dpdGhBbmltYXRpb25zLmZp
bmQobGF5ZXJJRCk7Ci0gICAgaWYgKGl0ICE9IG1fbGF5ZXJzV2l0aEFuaW1hdGlvbnMuZW5kKCkp
Ci0gICAgICAgIGl0LT52YWx1ZS0+YW5pbWF0aW9uU3RhcnRlZChrZXksIHN0YXJ0VGltZSk7Ci19
Ci0KIHZvaWQgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDo6YW5pbWF0aW9uRGlkRW5kKFdlYkNvcmU6
OkdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5ZXJJRCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtl
eSkKIHsKICAgICBhdXRvIGl0ID0gbV9sYXllcnNXaXRoQW5pbWF0aW9ucy5maW5kKGxheWVySUQp
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlBy
b2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEu
aAppbmRleCBiNzBlZWUyY2Y2OTlmODRiYjFmN2NhNjYwOTVjMDExZmRlNjExMjM4Li5mZmMzZTZl
N2IyY2M2MjA4YWJjNTBkN2FlODEzNTAxMjdiYTRkNmY4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJh
d2luZ0FyZWEuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVM
YXllclRyZWUvUmVtb3RlTGF5ZXJUcmVlRHJhd2luZ0FyZWEuaApAQCAtOTIsNyArOTIsNiBAQCBw
cml2YXRlOgogICAgIHZvaWQgc2V0Vmlld0V4cG9zZWRSZWN0KE9wdGlvbmFsPFdlYkNvcmU6OkZs
b2F0UmVjdD4pIG92ZXJyaWRlOwogICAgIE9wdGlvbmFsPFdlYkNvcmU6OkZsb2F0UmVjdD4gdmll
d0V4cG9zZWRSZWN0KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV92aWV3RXhwb3NlZFJlY3Q7
IH0KIAotICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRTdGFydCh1aW50NjRfdCBsYXll
cklELCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpIG92ZXJyaWRl
OwogICAgIHZvaWQgYWNjZWxlcmF0ZWRBbmltYXRpb25EaWRFbmQodWludDY0X3QgbGF5ZXJJRCwg
Y29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogCiAgICAgV2ViQ29yZTo6RmxvYXRSZWN0IGV4
cG9zZWRDb250ZW50UmVjdCgpIGNvbnN0IG92ZXJyaWRlOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURy
YXdpbmdBcmVhLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5
ZXJUcmVlL1JlbW90ZUxheWVyVHJlZURyYXdpbmdBcmVhLm1tCmluZGV4IDI2YzM3NDc2YzdiMDFk
ZWY4YjQ2ZjFjZGIxMDNmZjg1OWFkYWEzMWQuLmE1M2MyZTEzMDNmMmM0ZjA4NzY5YmYyN2I2NTI3
MDNlYmZhMDQyOGUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9SZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWEubW0KQEAgLTIyMiwxMSArMjIyLDYgQEAgdm9pZCBSZW1vdGVMYXllclRy
ZWVEcmF3aW5nQXJlYTo6Zm9yY2VSZXBhaW50KCkKICAgICB1cGRhdGVSZW5kZXJpbmcoKTsKIH0K
IAotdm9pZCBSZW1vdGVMYXllclRyZWVEcmF3aW5nQXJlYTo6YWNjZWxlcmF0ZWRBbmltYXRpb25E
aWRTdGFydCh1aW50NjRfdCBsYXllcklELCBjb25zdCBTdHJpbmcmIGtleSwgTW9ub3RvbmljVGlt
ZSBzdGFydFRpbWUpCi17Ci0gICAgbV9yZW1vdGVMYXllclRyZWVDb250ZXh0LT5hbmltYXRpb25E
aWRTdGFydChsYXllcklELCBrZXksIHN0YXJ0VGltZSk7Ci19Ci0KIHZvaWQgUmVtb3RlTGF5ZXJU
cmVlRHJhd2luZ0FyZWE6OmFjY2VsZXJhdGVkQW5pbWF0aW9uRGlkRW5kKHVpbnQ2NF90IGxheWVy
SUQsIGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIG1fcmVtb3RlTGF5ZXJUcmVlQ29udGV4dC0+
YW5pbWF0aW9uRGlkRW5kKGxheWVySUQsIGtleSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCBl
MjNiODQwNjhmMjQwY2UyMWJiYWQxNzA0YjllMzZjN2RhZTQxZGViLi4xYmNhN2JmYTg3YmNmMzkw
OWE0Nzc2ZWY5NDk5NWYwZTE5YmEwMDIwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTUyLDcg
KzUyLDYgQEAKICNkZWZpbmUgV2ViS2l0SmF2YUVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0
SmF2YUVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdEphdmFTY3JpcHRFbmFibGVkUHJlZmVyZW5jZUtl
eSBAIldlYktpdEphdmFTY3JpcHRFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0TWFy
a3VwRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRKYXZhU2NyaXB0TWFya3VwRW5hYmxlZCIK
LSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0
V2ViQW5pbWF0aW9uc0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDb21wb3Np
dGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zQ29t
cG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNNdXRh
YmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zTXV0
YWJsZVRpbWVsaW5lc0VuYWJsZWQiCiAjZGVmaW5lIFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkIgpAQCAtMjA1LDcgKzIwNCw2IEBACiAjZGVmaW5lIFdlYktpdENvbG9y
RmlsdGVyRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDb2xvckZpbHRlckVuYWJsZWQiCiAj
ZGVmaW5lIFdlYktpdFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGVQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJrTW9kZSIKICNkZWZpbmUg
V2ViS2l0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEZldGNo
QVBJS2VlcEFsaXZlRW5hYmxlZCIKLSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkIgogI2RlZmluZSBXZWJLaXRDU1NTaGFkb3dQYXJ0c0VuYWJsZWRQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0Q1NTU2hhZG93UGFydHNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRMYXlv
dXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJL
aXRMYXlvdXRGb3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZCIKICNkZWZpbmUgV2Vi
S2l0V2ViU1FMRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRXZWJTUUxFbmFibGVkIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5t
bSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KaW5k
ZXggNTdiNjQ4NmU5OTM3ZmMxYmRhYmVhYmUzMGFjYTFiMjdhOTYwOWI1Yy4uYWRhZGU5NzAwNDE2
N2E4NGZjNWVmMWU0ODg4MDYwZDJlMTkzMmNlMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCkBAIC02MzYsNyArNjM2LDYgQEAgKyAo
dm9pZClpbml0aWFsaXplCiAgICAgICAgIEBOTywgV2ViS2l0RGlhbG9nRWxlbWVudEVuYWJsZWRQ
cmVmZXJlbmNlS2V5LAogICAgICAgICBATk8sIFdlYktpdEhpZ2hsaWdodEFQSUVuYWJsZWRQcmVm
ZXJlbmNlS2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZFByZWZlcmVuY2VLZXksCi0gICAgICAgIEBZRVMsIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRMYXlvdXRG
b3JtYXR0aW5nQ29udGV4dEludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBF
TkFCTEUoV0VCR0wyKQpAQCAtNjU4LDcgKzY1Nyw2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAg
ICAgICBATk8sIFdlYktpdERvd25sb2FkQXR0cmlidXRlRW5hYmxlZFByZWZlcmVuY2VLZXksCiAj
ZW5kaWYKICAgICAgICAgQE5PLCBXZWJLaXREaXJlY3RvcnlVcGxvYWRFbmFibGVkUHJlZmVyZW5j
ZUtleSwKLSAgICAgICAgQFlFUywgV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNl
S2V5LAogICAgICAgICBAWUVTLCBXZWJLaXRTeW50aGV0aWNFZGl0aW5nQ29tbWFuZHNFbmFibGVk
UHJlZmVyZW5jZUtleSwKIAogI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCkBAIC0zMTc2LDE2ICsz
MTc0LDYgQEAgLSAodm9pZClzZXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkOihCT09M
KWZsYWcKICAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdENTU09NVmll
d1Ntb290aFNjcm9sbGluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAotLSAoQk9PTCl3ZWJB
bmltYXRpb25zRW5hYmxlZAotewotICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5Oldl
YktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KLS0gKHZvaWQpc2V0
V2ViQW5pbWF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtzZWxmIF9zZXRCb29sVmFs
dWU6ZmxhZyBmb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsK
LX0KLQogLSAoQk9PTCl3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQKIHsK
ICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ29t
cG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKQEAgLTMyNDYsMTYgKzMyMzQs
NiBAQCAtICh2b2lkKXNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOihCT09MKWZsYWcKICAg
ICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9CiAKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZAotewotICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5Oldl
YktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0K
LQotLSAodm9pZClzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOihCT09MKWZs
YWcKLXsKLSAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0KLQogLSAoQk9PTClp
bnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQKIHsKICAgICByZXR1cm4gW3NlbGYgX2Jvb2xWYWx1
ZUZvcktleTpXZWJLaXRJbnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWRQcmVmZXJlbmNlS2V5XTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oCmluZGV4IDczMGViNmJmMWYyZDY3YmY0NzEyNzBjOTU5NWNiZDJkM2M5ODRk
MDUuLmI5ODdjOWMyODhkN2I1MzA3MzQ1MzYzYTljODI0ODlkYWNlMjEzNDkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgK
KysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaApAQCAtNTY0LDkgKzU2NCw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXND
YWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAtICh2b2lk
KXNldERpcmVjdG9yeVVwbG9hZEVuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpZGlyZWN0b3J5
VXBsb2FkRW5hYmxlZDsKIAotLSAodm9pZClzZXRXZWJBbmltYXRpb25zRW5hYmxlZDooQk9PTClm
bGFnOwotLSAoQk9PTCl3ZWJBbmltYXRpb25zRW5hYmxlZDsKLQogLSAodm9pZClzZXRXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpd2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOwogCkBAIC01ODUsOSArNTgyLDYg
QEAgZXh0ZXJuIE5TU3RyaW5nICpXZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJu
YWxOb3RpZmljYXRpb24gV0VCS0lUX0RFUFIKIC0gKHZvaWQpc2V0TW9kZXJuTWVkaWFDb250cm9s
c0VuYWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ7
CiAKLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDooQk9PTClm
bGFnOwotLSAoQk9PTCl3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOwotCiAtICh2
b2lkKXNldEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDooQk9PTClmbGFnOwogLSAoQk9PTClp
bnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQ7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbSBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQppbmRleCA0ZWMwMjM3YTc0YzdjNDlkZGU4Mjg1OWNlNTg5ZTE3NGNk
NWU5NDA1Li5jZTRjYjNkNGMwNjgxMTg5NjI2MmNhODk1MjA2MzdkMTNlNTFlYTQ1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCkBAIC0xMzIsNyArMTMyLDYg
QEAKICNpbXBvcnQgPFdlYkNvcmUvQXBwbGljYXRpb25DYWNoZVN0b3JhZ2UuaD4KICNpbXBvcnQg
PFdlYkNvcmUvQmFja0ZvcndhcmRDYWNoZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2Fy
ZENvbnRyb2xsZXIuaD4KLSNpbXBvcnQgPFdlYkNvcmUvQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5o
PgogI2ltcG9ydCA8V2ViQ29yZS9DYWNoZVN0b3JhZ2VQcm92aWRlci5oPgogI2ltcG9ydCA8V2Vi
Q29yZS9DaHJvbWUuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ29sb3JNYWMuaD4KQEAgLTMzMzQsNyAr
MzMzMyw2IEBAIC0gKHZvaWQpX3ByZWZlcmVuY2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilw
cmVmZXJlbmNlcwogCiAgICAgc2V0dGluZ3Muc2V0SW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVu
YWJsZWQoW3NlbGYgaW50ZXJhY3RpdmVGb3JtVmFsaWRhdGlvbkVuYWJsZWRdKTsKICAgICBSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkKFtwcmVmZXJlbmNlcyBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZF0pOwotICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZF0pOwogCiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5zZXRDYWNoZUFQSUVuYWJsZWQoW3ByZWZlcmVuY2VzIGNhY2hlQVBJRW5hYmxlZF0p
OwogCkBAIC0zMzU4LDcgKzMzNTYsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdl
YlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKICAgICBzZXR0aW5ncy5zZXREb3dubG9hZEF0dHJp
YnV0ZUVuYWJsZWQoW3ByZWZlcmVuY2VzIGRvd25sb2FkQXR0cmlidXRlRW5hYmxlZF0pOwogI2Vu
ZGlmCiAKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdl
YkFuaW1hdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zRW5hYmxlZF0pOwog
ICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0
aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25z
Q29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxl
ZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkXSk7CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZl
cmVuY2VzUHJpdmF0ZS5pZGwgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCmluZGV4IDlhODc1ZDQ3OWU3YmZhZDczNjFhNmYyZjhh
NGQzMTkzMzdlZTU3ZjIuLmIwYmQwNWYyNTA1ODJlMTQ3YTZhN2ZiZGEzYjZkYmY0YjZhYjYwODcg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZl
cmVuY2VzUHJpdmF0ZS5pZGwKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNl
cy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbApAQCAtMTgzLDE2ICsxODMsMTIgQEAgaW50ZXJm
YWNlIElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzIDogSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTIKICAg
ICBIUkVTVUxUIHNldEN1c3RvbUVsZW1lbnRzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7CiAg
ICAgSFJFU1VMVCBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wq
IGVuYWJsZWQpOwogICAgIEhSRVNVTFQgc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW2lu
XSBCT09MIGVuYWJsZWQpOwotICAgIEhSRVNVTFQgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqIGVuYWJsZWQpOwotICAgIEhSRVNVTFQgc2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7CiB9CiAK
IFt1dWlkKEY5NTgyRDcyLTYzNDgtNDVCMS1BQjA5LTM5RTMzNDU5QjVCOSldCiBpbnRlcmZhY2Ug
SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTQgOiBJV2ViUHJlZmVyZW5jZXNQcml2YXRlMwogewogICAg
IEhSRVNVTFQgc2V0QXBwbGljYXRpb25JZChbaW5dIEJTVFIgYXBwbGljYXRpb25JZCk7Ci0gICAg
SFJFU1VMVCB3ZWJBbmltYXRpb25zRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqKTsKLSAgICBI
UkVTVUxUIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKICAgICBI
UkVTVUxUIHVzZXJUaW1pbmdFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwogICAgIEhSRVNV
TFQgc2V0VXNlclRpbWluZ0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQpOwogICAgIEhSRVNVTFQg
cmVzb3VyY2VUaW1pbmdFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCAyYTIx
MjFhZGI5Njg2OTg0MTIxYzBlNGJhOGRhZmZjYTdiY2M2Y2FiLi45MjE3Yjg1ZTQ5N2RhMTNkYTc2
ODIyOTViMmRlNzYyYTJkZTcxNjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaApAQCAtMTg4LDE0ICsxODgsMTAgQEAKIAogI2Rl
ZmluZSBXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktp
dE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkIgogCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlv
bnNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWQiCi0KICNk
ZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVy
ZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIgog
CiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZl
cmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKIAot
I2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5j
ZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIKLQogI2RlZmlu
ZSBXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkg
IldlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkIgogCiAjZGVmaW5lIFdl
YktpdFVzZXJUaW1pbmdFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0VXNlclRpbWluZ0VuYWJs
ZWQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5j
cHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggOWQ5
YjBkZmUxMTliY2YxOGJlNDAzNTYxMjQ1NmViNmE4M2ViYWVjOC4uZjc0MjZhOTU2M2Q5ZmRiYmJh
NTc2NGIxNjdjNWMwMWJhZDFiMzg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VzLmNwcApAQCAtMzExLDE0ICszMTEsMTAgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6
aW5pdGlhbGl6ZURlZmF1bHRTZXR0aW5ncygpCiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShk
ZWZhdWx0cywgQ0ZTVFIoV2ViS2l0Q3VzdG9tRWxlbWVudHNFbmFibGVkUHJlZmVyZW5jZUtleSks
IGtDRkJvb2xlYW5GYWxzZSk7CiAKLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywg
Q0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVh
blRydWUpOwotCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktp
dFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBr
Q0ZCb29sZWFuRmFsc2UpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENG
U1RSKFdlYktpdFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VL
ZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVs
dHMsIENGU1RSKFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJl
bmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKLQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRl
ZmF1bHRzLCBDRlNUUihXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFBy
ZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFs
dWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFVzZXJUaW1pbmdFbmFibGVkUHJlZmVyZW5jZUtleSks
IGtDRkJvb2xlYW5GYWxzZSk7CkBAIC0yMTM4LDIwICsyMTM0LDYgQEAgSFJFU1VMVCBXZWJQcmVm
ZXJlbmNlczo6bW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkK
ICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQotewotICAgIGlm
ICghZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqZW5hYmxlZCA9IGJv
b2xWYWx1ZUZvcktleShXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJl
ZmVyZW5jZUtleSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5j
ZXM6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoQk9PTCBlbmFibGVkKQot
ewotICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkUHJlZmVyZW5jZUtleSwgZW5hYmxlZCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNV
TFQgV2ViUHJlZmVyZW5jZXM6OmZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZChfT3V0XyBCT09MKiBl
bmFibGVkKQogewogICAgIGlmICghZW5hYmxlZCkKQEAgLTIzNDAsMjAgKzIzMjIsNiBAQCBIUkVT
VUxUIFdlYlByZWZlcmVuY2VzOjpzZXRBcHBsaWNhdGlvbklkKEJTVFIgYXBwbGljYXRpb25JZCkK
ICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5p
bWF0aW9uc0VuYWJsZWQoQk9PTCBlbmFibGVkKQotewotICAgIHNldEJvb2xWYWx1ZShXZWJLaXRX
ZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBT
X09LOwotfQotCi1IUkVTVUxUIFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zRW5hYmxlZChf
T3V0XyBCT09MKiBlbmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkKLSAgICAgICAgcmV0dXJu
IEVfUE9JTlRFUjsKLSAgICAqZW5hYmxlZCA9IGJvb2xWYWx1ZUZvcktleShXZWJLaXRXZWJBbmlt
YXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVT
VUxUIFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0Vu
YWJsZWQoQk9PTCBlbmFibGVkKQogewogICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRp
b25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmggYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IDI0MzdiMGU3NjI4OTUw
NmMyNjQwNDg4NmJkMmMwM2Y1ODMyNTNjNTEuLjIxMjkwNWNiMWJhNjAwOTQwMzg2OTUzOTE3OGEz
ZmVhNzAzYTM4ZTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZl
cmVuY2VzLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaApA
QCAtMjM2LDEzICsyMzYsOSBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHNldEN1c3RvbUVsZW1lbnRzRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8g
Qk9PTCopOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRNb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZChCT09MKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChfT3V0XyBCT09MKik7
Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoQk9PTCk7CiAgICAgCiAgICAgLy8gSVdlYlByZWZlcmVuY2Vz
UHJpdmF0ZTQKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QXBwbGlj
YXRpb25JZChCU1RSKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2Vi
QW5pbWF0aW9uc0VuYWJsZWQoX091dF8gQk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdXNlclRpbWluZ0VuYWJsZWQoX091dF8gQk9PTCop
OwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRVc2VyVGltaW5nRW5h
YmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVzb3Vy
Y2VUaW1pbmdFbmFibGVkKF9PdXRfIEJPT0wqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlZpZXcuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5j
cHAKaW5kZXggYjZhMjgzYzkzZTg4MmEzZTIxZDQxNjhjNGIzMWNiODQ5ZDE1ZDFhYy4uMmUyNWJl
OTZiMmFkNDViNWY0ZTVlMzE4OGQ2MmMxNGUwMmU5OWQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
V2ViVmlldy5jcHAKQEAgLTUyNDQsMTEgKzUyNDQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlm
eVByZWZlcmVuY2VzQ2hhbmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAg
ICAgIHJldHVybiBocjsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKCEhZW5hYmxlZCk7CiAKLSAgICBociA9
IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0VuYWJsZWQoJmVuYWJsZWQpOwotICAgIGlmIChG
QUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZCghIWVuYWJsZWQpOwot
CiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPndlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25z
RW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBo
cjsKQEAgLTUyNTksMTEgKzUyNTQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVu
Y2VzQ2hhbmdlZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVy
biBocjsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdl
YkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0gICAgaHIg
PSBwcmVmc1ByaXZhdGUtPndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoJmVuYWJs
ZWQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKCEhZW5hYmxlZCk7Ci0KICAgICBociA9IHByZWZzUHJpdmF0ZS0+Q1NT
Q3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlM
RUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cg
Yi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggNGZhNzA5NDdjMzgzODJmYzAzMGMyMWFlN2U2YmUyNWUx
YjI2ZWUzZS4uODMzMDc1MjFjODg0MmIyMDhlMjhkZmNlMzNjMjQzNWFmNmNiZWZjNiAxMDA2NDQK
LS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDI0
IEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisg
ICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB3ZSBub3cgaGF2ZSBhIHNpbmds
ZSBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVudGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJs
ZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5lIGFyZQorICAgICAgICBub3QgbmVlZGVkIGFueW1v
cmUgYW5kIGFyZSBub3cgcmVtb3ZlZC4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RP
cHRpb25zLmNwcDoKKyAgICAgICAgKFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyk6CisgICAgICAg
IChUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zIGNvbnN0KToKKyAg
ICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oOgorICAgICAgICAqIER1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbToKKyAgICAgICAgKGVuYWJsZUV4cGVyaW1lbnRh
bEZlYXR1cmVzKToKKyAgICAgICAgKHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMpOgor
ICAgICAgICAqIER1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAg
IChlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNl
c0ZvclRlc3RPcHRpb25zKToKKwogMjAyMC0wOS0xNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0ZsYXRwYWsgU0RLXSBDaGVycnktcGljayBNZXNh
IHVzZS1hZnRlci1mcmVlIGZpeGVzCmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0T3B0aW9ucy5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKaW5k
ZXggMDY0NTdkZmRmZGVlYTUwMzA0ZTMzMmQwYTMxODJmNWFiYTRhZjgwNS4uMGRiZmFjOWYzYzg3
NDk0MmNkN2IxZGVmMTQwODg0ODQzMmU0MjY0ZiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE9wdGlvbnMuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcApAQCAtMTI2LDggKzEyNiw2IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25z
dCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiAgICAg
ICAgICAgICBkdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVy
VmFsdWUodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5T
dWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzIikKICAgICAgICAgICAgIGFsbG93Q3Jvc3NP
cmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKLSAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUo
dmFsdWUpOwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImludGVybmFsOnNlbGVjdGlvbkFjcm9z
c1NoYWRvd0JvdW5kYXJpZXNFbmFibGVkIikKICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUp
OwogICAgICAgICBlbHNlIGlmIChrZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKQEAgLTE2Nyw2
ICsxNjUsNSBAQCBUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBh
dGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdQogYm9vbCBUZXN0T3B0aW9uczo6d2Vi
Vmlld0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvdGhlcikgY29u
c3QKIHsKICAgICByZXR1cm4gb3RoZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2Vk
V2ViVmlldwotICAgICAgICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnMKLSAgICAg
ICAgJiYgb3RoZXIuZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uID09IGVuYWJsZVdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbjsKKyAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9
PSBqc2NPcHRpb25zOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9w
dGlvbnMuaCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKaW5kZXggYzVjOGM4
NTk5MmUxY2ZmMzc1MDgyMWM4MWZmMjg0M2RkMDllYjk5Ny4uZDc2NjgxN2I3MDViNDYyNTBkMmVm
ZjU1MzM0NmE3ZGQ5MzdlYjM2NiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVz
dE9wdGlvbnMuaAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCkBAIC0y
OSw3ICsyOSw2IEBACiAKIHN0cnVjdCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVBdHRh
Y2htZW50RWxlbWVudCB7IGZhbHNlIH07Ci0gICAgYm9vbCBlbmFibGVXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb24geyB0cnVlIH07CiAgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBm
YWxzZSB9OwogICAgIGJvb2wgZW5hYmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9Owog
ICAgIGJvb2wgdXNlRXBoZW1lcmFsU2Vzc2lvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KaW5kZXggNDYzYzliOTJlZWI1ZWVlOTdhMWE3MjBk
ZWY4NWZjNjBkNDg3ODUzYy4uNjkxNTdjNDMwMDFjNTQ0MTQzMGIxMTE3Y2RhM2FjYzQ3MDI3NGU4
OSAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1t
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtODE0
LDcgKzgxNCw2IEBAIHN0YXRpYyB2b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFdlYlBy
ZWZlcmVuY2VzKiBwcmVmZXJlbmNlcykKICAgICBbcHJlZmVyZW5jZXMgc2V0TWVkaWFQcmVsb2Fk
aW5nRW5hYmxlZDpZRVNdOwogICAgIC8vIEZJWE1FOiBJbnB1dEV2ZW50cwogICAgIFtwcmVmZXJl
bmNlcyBzZXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQ6WUVTXTsKLSAgICBbcHJlZmVyZW5jZXMg
c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVm
ZXJlbmNlcyBzZXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZDpZRVNdOwpAQCAt
OTc5LDcgKzk3OCw2IEBAIHN0YXRpYyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlv
bnMoY29uc3QgVGVzdE9wdGlvbnMmIG9wdGlvbnMpCiAgICAgcHJlZmVyZW5jZXMuaXNTZWN1cmVD
b250ZXh0QXR0cmlidXRlRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlSXNTZWN1cmVDb250ZXh0QXR0
cmlidXRlOwogICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUluc3BlY3RvckFkZGl0aW9uczsKICAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3Nz
T3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9z
c09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMu
d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlV2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uOwogICAgIHByZWZlcmVuY2VzLmNvbG9yRmlsdGVyRW5hYmxl
ZCA9IG9wdGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXI7CiAgICAgcHJlZmVyZW5jZXMuc2VsZWN0aW9u
QWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVNlbGVjdGlvbkFj
cm9zc1NoYWRvd0JvdW5kYXJpZXM7CiAgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlV2ViR1BVOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2lu
L0R1bXBSZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVy
VHJlZS5jcHAKaW5kZXggYTcyNzM0ZjZmNGZhZjZhZGU5NTdjYzNjYjM0M2Q1NjdlNDg3ZDMzZS4u
ZDc0NzEzMWY5MmJkZmRmYmMzN2E5MWEzZjdlOGZiYjJmNDZiMTY1OSAxMDA2NDQKLS0tIGEvVG9v
bHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC03OTYsNyArNzk2LDYgQEAgc3Rh
dGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoSVdlYlByZWZlcmVuY2VzKiBwcmVm
ZXJlbmNlcykKICAgICBwcmVmc1ByaXZhdGUtPnNldFZpc3VhbFZpZXdwb3J0QVBJRW5hYmxlZChU
UlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldENTU09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQo
VFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRSZXNpemVPYnNlcnZlckVuYWJsZWQoVFJVRSk7
Ci0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChUUlVFKTsKICAgICBw
cmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChU
UlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVz
RW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldENTU0N1c3RvbVByb3BlcnRpZXNB
bmRWYWx1ZXNFbmFibGVkKFRSVUUpOwpAQCAtOTA5LDcgKzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNl
dFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNl
cywgY29uc3QKIHsKICAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTg+IHByZWZzUHJp
dmF0ZSB7IFF1ZXJ5LCBwcmVmZXJlbmNlcyB9OwogCi0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVu
YWJsZWQob3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+
c2V0S2V5Z2VuRWxlbWVudEVuYWJsZWQob3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKICAg
ICBwcmVmc1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKG9wdGlvbnMuZW5h
YmxlTW9kZXJuTWVkaWFDb250cm9scyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTlhZWQ3NjQ5YjQ4ZDg5NGFmZmE5NGEw
NWIyNGRiZDg4ODQyMWMxYS4uNjIzMmVlMjU2MmYxZjliZjhlMjlmN2VmNTA5ZmQyMzlkNTc3N2E1
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0No
YW5nZUxvZwpAQCAtMSwzICsxLDkxIEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW1v
dmUgYW55IHVzZSBvZiBub3ctcmVtb3ZlZCB0ZXN0aW5nIG1ldGhvZHMgYW5kIHNvbWUgcnVudGlt
ZSBmbGFncyBmcm9tIGxheW91dCB0ZXN0cy4KKworICAgICAgICAqIGFuaW1hdGlvbnMvbGVnYWN5
LWVuY29kaW5nLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIGFuaW1hdGlvbnMvcmVz
b3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgIChwYXVzZUFuaW1hdGlv
bkF0VGltZU9uRWxlbWVudCk6CisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9u
cy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWw6CisgICAgICAgICogaW1wb3J0ZWQvYmxp
bmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWlu
c2lkZS1pZnJhbWUtaW5uZXIuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiB0cmFuc2l0aW9ucy9i
YWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2Js
ZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2JvcmRlci1y
YWRpdXMtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAtcGF0aC1w
YXRoLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRy
YW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvZGVsYXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9mbGV4LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZm9udC1mYW1p
bHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9mcmFtZXMt
dGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQt
YWxsLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9sb25naGFuZC12cy1z
aG9ydGhhbmQtaW5pdGlhbC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21hc2stdHJhbnNp
dGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93
LXN0eWxlcy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRy
YW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sOgor
ICAgICAgICAqIHRyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvc3Zn
LXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmct
dHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFu
c2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0
Y2guaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRj
aC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRl
cmluZy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJh
bnNmb3JtLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250
ZW50Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVs
YXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlv
bi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5odG1s
OgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVw
dGlvbi1kaXNwbGF5LW5vbmUuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJh
dGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWw6Cisg
ICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1y
ZW1vdmluZy1wcm9wZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZXNzaW5n
LWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sOgor
ICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5p
c2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWw6CisgICAgICAgICogd2ViYW5p
bWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24t
cmVtb3ZhbC1jcmFzaC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlv
bi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sOgorICAg
ICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbDoKKyAgICAgICAgKiB3ZWJh
bmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWw6
CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1i
eS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvc2V0dGlu
Zy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWw6CisgICAgICAg
ICogd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZp
YS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbDoKKwogMjAyMC0wOS0xNSAgUm9iIEJ1
aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAgICAgIEZpeCBsYXp5IGltYWdlIGxvYWQgcGFp
bnRpbmcKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5n
LXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5j
b2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXggNDAyZjk4ZWEzMTE1YWExZDc3NmZhZjg4
ZWVkYjkxYTI4NzUxZjk3My4uMDhlYmM0NGM0ZDE2ZGE2OTI1ZDY1ZWRjMTMxOTRkOGFkMzI1NjQ3
NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGlt
aW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5j
b2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRt
bD4gPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD1mYWxzZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4K
IDxoZWFkPgogICAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMv
cmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMgYi9MYXlvdXRUZXN0cy9hbmltYXRp
b25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCmluZGV4IDE4YTVhMDEyOWZm
N2YyYWUyNGJkMzNlMzE5ZTYwNmY1NzlhYTQxOWUuLjZkZTA4ZDM4NTUxODQ0MzY3MTE3ZjAwNzIy
NTcwOTAzZWFmNWJjZmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3Vy
Y2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9u
cy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcwpAQCAtNTE0LDExICs1MTQsNiBA
QCBmdW5jdGlvbiBjaGVja0V4cGVjdGVkVmFsdWVDYWxsYmFjayhleHBlY3RlZCwgaW5kZXgpCiAK
IGZ1bmN0aW9uIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGFuaW1hdGlvbk5hbWUsIHRp
bWUsIGVsZW1lbnQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2ZW4ndCBvcHRlZCBpbnRvIENTUyBBbmlt
YXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgYXMgV2ViIEFuaW1hdGlvbnMsIHVzZSB0aGUgaW50
ZXJuYWwgQVBJLgotICAgIGlmICgnaW50ZXJuYWxzJyBpbiB3aW5kb3cgJiYgIWludGVybmFscy5z
ZXR0aW5ncy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJl
dHVybiBpbnRlcm5hbHMucGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoYW5pbWF0aW9uTmFt
ZSwgdGltZSwgZWxlbWVudCk7Ci0KLSAgICAvLyBPdGhlcndpc2UsIHVzZSB0aGUgV2ViIEFuaW1h
dGlvbnMgQVBJLgogICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnMo
KTsKICAgICBmb3IgKGxldCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykgewogICAgICAgICBpZiAo
YW5pbWF0aW9uIGluc3RhbmNlb2YgQ1NTQW5pbWF0aW9uICYmIGFuaW1hdGlvbi5hbmltYXRpb25O
YW1lID09IGFuaW1hdGlvbk5hbWUpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sIGIvTGF5
b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtl
eWZyYW1lLmh0bWwKaW5kZXggYzFjNmZkNjcyYzRkMGVmNzlmOGJlN2JhODgxOTQ5ZmIyNmQ5NGM5
OS4uYTVjZTM0MmQ1MmViZmIwMDVmZDA0MWI3ODhmYmIxMTZiMTY3ZjZkZiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25l
LWtleWZyYW1lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5z
aW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgSFRNTD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZUEUgSFRNTD4K
IDxzY3JpcHQ+CiBpZiAod2luZG93LnRlc3RSdW5uZXIpIHsKICAgICB0ZXN0UnVubmVyLmR1bXBB
c1RleHQoKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRp
b25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1l
LWlubmVyLmh0bWwgYi9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNv
dXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5o
dG1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBjYjQxY2JjOGJmYzc4NDNjM2JiOTg5
MzJmYzllYzk5NzNiYzUwNzI0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwCi0tLSBhL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRpb25zL3Jlc291cmNl
cy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1lLWlubmVyLmh0bWwK
KysrIC9kZXYvbnVsbApAQCAtMSw3NyArMCwwIEBACi08IURPQ1RZUEU+Ci08aHRtbD4KLTxoZWFk
PgotPHN0eWxlPgotICAgICNiYWNrZ3JvdW5kIHsKLSAgICAgICAgd2lkdGg6IDIwMHB4OwotICAg
ICAgICBoZWlnaHQ6IDIwMHB4OwotICAgICAgICBkaXNwbGF5OiBibG9jazsKLSAgICAgICAgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47Ci0gICAgfQotICAgIC5vdmVybGF5IHsKLSAgICAgICAgd2lk
dGg6IDUwcHg7Ci0gICAgICAgIGhlaWdodDogNTBweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xv
cjogcmdiYSgyNTUsIDI1NSwgMjU1LCAxKTsKLSAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiBv
cGFjaXR5IDFzOwotICAgIH0KLQotICAgICNwb3B1cCB7Ci0gICAgICAgIHdpZHRoOiAyMHB4Owot
ICAgICAgICBoZWlnaHQ6IDIwcHg7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJlZDsKLSAg
ICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwotICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IC13
ZWJraXQtdHJhbnNmb3JtIDFzOwotICAgIH0KLQotICAgIC50cmFuc3BhcmVudCB7Ci0gICAgICAg
IG9wYWNpdHk6IDA7Ci0gICAgfQotCi0gICAgW2hpZGRlbl0gewotICAgICAgICBkaXNwbGF5OiBu
b25lOwotICAgIH0KLQotICAgIC5vdmVybGF5LnRyYW5zcGFyZW50IC5wYWdlIHsKLSAgICAgICAg
dHJhbnNmb3JtOiBzY2FsZSgxKSB0cmFuc2xhdGVZKDBweCk7Ci0gICAgfQotCi08L3N0eWxlPgot
PHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04Ij4KLSAgICBmdW5j
dGlvbiBydW5UZXN0KCkKLSAgICB7Ci0gICAgICAgIHZhciBzb2xpZF9jb2xvcl9vdmVybGF5ID0g
ZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNvbGlkX2NvbG9yX292ZXJsYXkiKTsKLSAgICAgICAg
c29saWRfY29sb3Jfb3ZlcmxheS5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwotCi0gICAgICAg
IHZhciBwb3B1cCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJwb3B1cCIpOwotICAgICAgICBw
b3B1cC5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwotCi0gICAgICAgIC8vIE5PVEU6IFRoaXMg
aXMgYSBoYWNreSB3YXkgdG8gZm9yY2UgdGhlIGNvbnRhaW5lciB0byBsYXlvdXQgd2hpY2gKLSAg
ICAgICAgLy8gd2lsbCBhbGxvdyB1cyB0byB0cmlnZ2VyIHRoZSB3ZWJraXQgdHJhbnNpdGlvbi4K
LSAgICAgICAgLy8gU2VlIGNyYnVnLmNvbS8zMjQ2ODUKLSAgICAgICAgc29saWRfY29sb3Jfb3Zl
cmxheS5zY3JvbGxUb3A7Ci0gICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXkuY2xhc3NMaXN0LnJl
bW92ZSgndHJhbnNwYXJlbnQnKTsKLQotICAgICAgICAvLyBkdW1wIHRoZSBwaXhlbCBpbiB0aGUg
bWlkZGxlIG9mIHRoZSB0cmFuc2l0aW9uCi0gICAgICAgIGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7
Ci0gICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLmZvcmNlQ29tcG9zaXRpbmdVcGRhdGUoZG9j
dW1lbnQpOwotICAgICAgICAgICAgd2luZG93LmludGVybmFscy5wYXVzZUFuaW1hdGlvbnMoMC41
KTsKLSAgICAgICAgfQotICAgICAgICB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCk7Ci0gICAgfQotCi0g
ICAgZnVuY3Rpb24gdHJpZ2dlclBpeGVsUmVzdWx0cygpCi0gICAgewotICAgICAgICBwYXJlbnQu
cG9zdE1lc3NhZ2UoIlRyaWdnZXJQaXhlbFJlc3VsdHMiLCAnKicpOwotICAgIH0KLQotICAgIHdp
bmRvdy5hZGRFdmVudExpc3RlbmVyKCdsb2FkJywgcnVuVGVzdCwgZmFsc2UpOwotPC9zY3JpcHQ+
Ci08L2hlYWQ+Ci08Ym9keT4KLTxkaXYgaWQ9ImJhY2tncm91bmQiPgotICAgIDxkaXYgaWQ9InNv
bGlkX2NvbG9yX292ZXJsYXkiIGNsYXNzPSJvdmVybGF5IHRyYW5zcGFyZW50IiBoaWRkZW49dHJ1
ZT4KLSAgICAgICAgPGRpdiBpZD0icG9wdXAiIGNsYXNzPSJwYWdlIiBoaWRkZW49dHJ1ZT48L2Rp
dj4KLSAgICA8L2Rpdj4KLTwvZGl2PgotPC9ib2R5PgotPC9odG1sPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9u
cy5odG1sCmluZGV4IDYwMWNkNWE4N2YyMDQxMDYyZjFhOWQwOTgwMDljNTQ3ZjUyZjM0NWUuLmQ5
MTRmY2JiZTgxZDQ3Y2RiYjFhZWViYWNiNzk1YTM3OTMxYTRhMWIgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYTgzN2UwNTdk
YmMxMThjNzRhYmJiNjAzZWVjNTU2ZTdjODg3ZTVhOC4uYmE0MDBjYWM5ZWJmZTFjYTEwZTI5MGE3
OThlOTlkNzJiMzQ4ODBiYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFj
a2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Jh
Y2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwK
aW5kZXggODk3Y2I0Nzg5MGVjZjQ4ZTFmZDAwNTg4ZDRiODhjOTE3MmIyNjEwMy4uYTViZmEyN2Qz
YWQzMjE5OTIwODkyMTYxNTMwYjVkNzNlMTlkNTY5NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1s
PgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Ym9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9i
b3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbAppbmRleCBiOGEzZmI1M2U3YmQ2YmIwNmQxOTlk
OTU1ZTQwM2M5MTM3MDdkNTg5Li41NjNiYTljOGZmNGY4YWMyZGIzZDUxNGFiMWIzNjE2MjRjY2Uz
MzBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRy
YW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVz
LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1s
CmluZGV4IGZmMjNmYTA0NTEyM2VkMzEwNTdlODI3ZDcxYWFkYzk4OGQyMTJkNzguLmMxZmFhNWNm
NDIxMjE4MDM1YjQxMGUyYWVjMmJkNjIzYjc0MGE3NmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGI1NWVkZmI3ZWE4NDU1NWQ4
YWM0NGJjYWZmY2E4NDBjNzU3OGVmNTYuLjVlNjY0NGE4ODRmY2NkNjA3YmI3NjBiMTk4ZDk5MGY3
MWUyOWFmZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10
cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10
cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0bWwKaW5kZXggM2M3ZTI5
ZjE5NzAxMmRmZGVhNDMwNDNjYzA0MmE3MjFkZTA4MTNlMS4uZmRlMWYxNzNhYmM5NmI5MWFhNDZi
ZWY5N2E4ZjkwOWVjZjdkMDFiOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y2xpcC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10
cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKaW5k
ZXggMzNjNTk4MGU2ODdhYjNlMDJlN2UzZjI1Nzc2Yzg3M2ZkNWRlOGFiOS4uYTQ5MmU3MTMzOTQ0
MDBjMjZkMzQ3ZTg4YWUxZDEzYzMxN2UzZGM3ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlv
bi1wcmVtdWx0aXBsaWVkLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbAppbmRleCBjNzNmZDRhYTgzY2ZhZDk1YjUwYjZlNjM1
OTFlOWFlNjc5ODk1NmRkLi41N2M2M2VjOWE4YzFhZTA3ZGFkOGMzNzg1ZGYzYjgxNDRiOTI4ZjIw
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXBy
ZW11bHRpcGxpZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgog
PGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0
aW9uLXJvdW5kaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0
aW9uLXJvdW5kaW5nLmh0bWwKaW5kZXggNmU3NTZiZjMzNzgzZmQ3MjFmMzNhNjdjOGZiZDZmMjhm
MTU1ZTViMC4uY2FhYTExNTc5ZjliMGRmODZlMDgxOTRjMGQ5MGYxZGRmOGI1MDMxNyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRp
bmcuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKaW5kZXgg
NzZlOWRiMjZhM2IxNGQ0YTM4YTNjZGFmMDBlZjY2YmZmOGVkZGI2NC4uYjhkNzBhMjc5MzUxNTVi
ZWFiMjhlNzg1Y2FlZjhmMjUzOGRjOTU2YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9z
cy1mYWRlLWJvcmRlci1pbWFnZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3Mt
ZmFkZS1ib3JkZXItaW1hZ2UuaHRtbAppbmRleCA0ZGJkZjdhNmIxM2Y4YWVlMDNhNzc4OWIzNjhj
MTA4ZTNkMWE0ZGRmLi44N2RjMDA3ZWRmNWZiNzZmZjE0NTFjYTlhZmY4Y2I5Y2FhYTQxODk1IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFn
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWlt
YWdlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCmluZGV4
IGI3NmViNjVhZWQzM2M4NDZjNGRjZWM0NWI5N2Q1NDFhMDM4Y2U3YmEuLjc0NzRmNjZkMTE2YzZm
MmEyM2EyYWY2MzNhNTA0NGUyOGMyYjc2NzMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5
cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVl
IG92ZXJmbG93OiBDb2xvcnM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCmluZGV4IDY2ZmViYWNm
Zjk3ZTQyYTY3M2IxZGE1OWFhYzBmNjM3MWY5ZWM1YWQuLjFiNWRkYWZkZjY0OGQ5ZjEwZjBlYzhm
MjBkOTQ5YmEzNjE2ZmU4NGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1s
PgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZs
b3c6IExlbmd0aHM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCmluZGV4IGE5OWE0ZGJhNzM2YWZi
MmY5NTgwNWFlODg4NWUwMmJlMGMwYTczZjguLjBiY2NhODhlODcxN2RhZGY1OWUzY2ViZDA2OTE5
Y2VhYzRhMmE3NmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJl
emllci1vdmVyZmxvdy1zaGFkb3cuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5
cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0
bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFNo
YWRvd3M8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKaW5kZXggNzIwMjQ2ODFiM2Mz
YTdjZGQxOWEyOGY0YzI4MzhlNjA0YWQ1YjdjYi4uMzU1NTMwMzlmYzlkYThkYjZlZWEzMjk1NmQ5
MWFjMWU2NDJjYTFkMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUg
aHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92
ZXJmbG93OiBTVkcgTGVuZ3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKaW5kZXgg
NjYwOTcyNTM0ZGM2NjJiYzNiODBmZjc2NDkzNmZmYjRhZGE1ZjI2OC4uNjUyOTExMmIxMWQ2NGYx
ZWM0MGFiYWM1NzVhNjg2ODE1NDA1ZDU3NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemll
ciB2YWx1ZSBvdmVyZmxvdzogVHJhbnNmb3JtczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA3OTgzZmRj
ZWQyMjYzNzBlMWEzNDQ5MDEzZTBjOTg1ZTBkNmUyODZjLi4zNTA4N2MzNjRhM2YxYzk4ZTQ0MGQ5
YTc5OWUwYmRkMGNiZjAwMGFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9k
ZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKaW5kZXggOTljMzFlYTg3ZGEw
OTFkNWQ2N2RhNTlmMTFiM2YyNjkzYTBmZjRjMC4uM2EwMmI2Mjc5ODEwNWEzNmQ2MGVlYTE4MjFh
ZjcwMzgwZWNjZWEyZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXku
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlv
bnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbApp
bmRleCA5ZmM0NjYwMzdhNTM5NTJmZGI5MDBkYzBlOTYzZjQzNTJlOTE2OTQ1Li42MWY0NTZhY2U5
MTczMGU3YjI0Y2ZmNmM1NDE4ZjcyMDVkNzUzY2Q3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvZmxleC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1
cmluZy10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWls
eS1kdXJpbmctdHJhbnNpdGlvbi5odG1sCmluZGV4IGNkY2QyMGYxNTc0OTM3ZDlhYmNiNzY2ZjJl
OTIwN2RjNzhmZGNjNzguLjAzZjk1MmRhMWI3MzNlODQ5NjkxNGM1YTE3NjlhODAxN2JjNmM4ZmYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10
cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHkt
ZHVyaW5nLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1
bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0
aW9uLmh0bWwKaW5kZXggMzBmZWNjNmQ1MWQ0YzA2ZTY0ZWM3YWVmMDAwOTg1MDQ2YmI1ZjA4YS4u
ZThiMTYyMTBlYTc2NTdlNDcwYjBkYTI4MTQwMzlmODU1MjJhNDMwOSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbAppbmRleCA3ZDQ3M2U5
MTIxNDY1ODNmODExMDkzZGUyOTdiZTNhYWY1MzhiYjQ4Li45ZTY2Y2Q0ZjkyNjE0ZTFlNTA3ZjJj
ZmE2NDIzZjdkMmU2MTAwOWRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9p
bnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9u
Z2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKaW5kZXggNjA5OTMzZjYwNGE3MTUy
OGNlZjQzMWE3YmE0OTU4YmE3MmU0Nzk1Zi4uMjAyZTY0ZDY0NGRmNWM4ZDVmNWU0Zjk5MTg3YjQ3
N2EzYThmYmQxZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQt
dnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9s
b25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9u
cy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCmlu
ZGV4IGJjN2M3MTgzZWFmM2Y5ZDliNGMwNjg3ZGJiOTc2NGQzYTk3MmY1MDguLjBjM2QzOWFiOWYy
MWFkMWZiMDk3ODYyZjAzZWQxMmVlNWZjYTE2YjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1o
ZWlnaHQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCAxMjA0MTE3YmNjMzIwYzEyYTgxZWUyYmVlZTIy
OGU0MTFmOTliOWM3Li45ZGRmMzkzOGEyOWJmM2UxMGM4YzhiNmI3NDZlMzFiMDNkNzQyNjBiIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lk
dGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogICA8
c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNo
YWRvdy1zdHlsZXMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hh
ZG93LXN0eWxlcy5odG1sCmluZGV4IGUyZTVjYjA3MjlkODEzZDk4NDYwYjg5ODRhNDEyMGI0ZmI5
ZWRlMjcuLjg3MjNjMjc0MTY4OGJlZDQ5MDNjNzhjODI5Njg0YjQ1ZDRjYzc2MDEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IGNiNmQzNGQ4NDc1YmZhNjExMzZiMzYzMzhiYmM3ODdlMGU4ZWM1MDguLjY4N2Qx
MGYxMjA4YTgzNWNkMjVmZTkwMDlkNDUzN2Q0YTA4YzY3MDQgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL21peGVkLXR5cGUuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVk
LXR5cGUuaHRtbAppbmRleCAyNGZiMTFmZWY0ZTE4NzJmMTQyYjBmNTcyZGY1NTFjMDczOTNiMWJk
Li4zMzMyMzY4ZDZlNDQ4NTIwZmI4MTY4MzdkNDlmN2M5NzhlNDQ4OWZhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxzdHlsZT4K
ICNib3ggewogICAgIHdpZHRoOiAxMCU7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sCmluZGV4IGNlZDJkNWEyMjIyODA3MDE3ZTUzNjlh
ZDAxZTEzZGI2MTVmM2U3MmYuLmRjNDQ1OGYyZDUyNzY3NmM4Y2Q3MzJlMGUyYmVjOTYwZWQ4YjNi
NmYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNp
dGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNp
dGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFu
c2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3Vu
ZC1zaXplLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggMjEzZTIxYWRjZWQ2NmE3YWFkNjdlYzhiNWY5
NTY4YzdmN2JlZmYyNC4uMTRkNzUxYzY0OTczM2MxYzMwYTA3YmRjNGZmYjhlZTM2MWM1MjAyOSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1z
aXplLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlw
bGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgog
PGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNr
Z3JvdW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBs
ZS1iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYjI5ZWU3M2QzNTBkOTViMzdiNzIx
NzE4NmVhYTliYzI5MzE4MDZjNS4uNTAzMDY3YzE2NGNhNjA3OTU3YWQ1OGYzNjZkZmZkYTI3NGU3
NTg1NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dy
b3VuZC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRp
cGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJh
bnNpdGlvbnMuaHRtbAppbmRleCAzOTIzZDkzYzZkODQ1MzRlNWY3ZDc4ZWI5ZjNlMzZhZGE0ZmQz
MDJjLi41Y2JlNjlmYzA0NzU3MmVhYmU2MGEwNDg3ZjE1MzY1YTRjYTlhOTE5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAppbmRleCAzNGEw
YWQyNjNjYTlmMTU4ZDc0OTkwNWE0YzVkZmM2NTUxZTkzZWI2Li40YTlkNGVjNTY0ZjMzYzU1NDcz
MzE3ZTExOGY0ZjkwN2VjZTc1MDg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0aXZl
LWRlbGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1s
CmluZGV4IGM3NWJlN2YzY2M2ZDU5M2NmZDEwNjJhNzc1NjU3NmI1YmFhNmE2YjYuLmQzM2U0YjU3
NjBmNTUzYzdjY2Q3MGI3ZDRjN2Q4MzY2NTUzZDFmNGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxo
ZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFj
aXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFj
aXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwKaW5kZXggZDg2MzcwNTllZjcwZmU3YTIyZWIwY2Qy
MDk1NmU3YWJkZDg3NzE4ZS4uODYyYmEwMmIxNWY2MmViMzQyODdmYTU4ZjQ0Y2I1ZWI0N2Y5Yzli
NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9u
LXppbmRleC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNp
dGlvbi16aW5kZXguaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10
ZXN0LWhlbHBlcnMuanMgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNp
dGlvbi10ZXN0LWhlbHBlcnMuanMKaW5kZXggN2U3OWQwYzllMWI0OWE4ZTc4MTY5M2U4NGJmZjQw
OTE4MzI1YmZjNi4uZjM1NzMxYjY1ZmE0Yzc1MmZkMTI2MDJkNzAxZmMwOWI4NjBkMDdlYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVz
dC1oZWxwZXJzLmpzCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFu
c2l0aW9uLXRlc3QtaGVscGVycy5qcwpAQCAtMzgxLDE0ICszODEsOSBAQCBjb25zdCBwcm9wZXJ0
aWVzUmVxdWlyaW5nUHJlZml4ID0gWyItd2Via2l0LXRleHQtc3Ryb2tlLWNvbG9yIiwgIi13ZWJr
aXQtdGV4dC1maQogCiBmdW5jdGlvbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQodHJh
bnNpdGlvblByb3BlcnR5LCB0aW1lLCBlbGVtZW50KQogewotICAgIC8vIElmIHdlIGhhdmVuJ3Qg
b3B0ZWQgaW50byBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIGFzIFdlYiBBbmlt
YXRpb25zLCB1c2UgdGhlIGludGVybmFsIEFQSS4KLSAgICBpZiAoJ2ludGVybmFscycgaW4gd2lu
ZG93ICYmICFpbnRlcm5hbHMuc2V0dGluZ3Mud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnBhdXNlVHJhbnNpdGlvbkF0VGltZU9u
RWxlbWVudCh0cmFuc2l0aW9uUHJvcGVydHksIHRpbWUsIGVsZW1lbnQpOwotCiAgICAgaWYgKHRy
YW5zaXRpb25Qcm9wZXJ0eS5zdGFydHNXaXRoKHByZWZpeCkgJiYgIXByb3BlcnRpZXNSZXF1aXJp
bmdQcmVmaXguaW5jbHVkZXModHJhbnNpdGlvblByb3BlcnR5KSkKICAgICAgICAgdHJhbnNpdGlv
blByb3BlcnR5ID0gdHJhbnNpdGlvblByb3BlcnR5LnN1YnN0cihwcmVmaXgubGVuZ3RoKTsKIAot
ICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBXZWIgQW5pbWF0aW9ucyBBUEkuCiAgICAgY29uc3Qg
YW5pbWF0aW9ucyA9IGVsZW1lbnQuZ2V0QW5pbWF0aW9ucygpOwogICAgIGZvciAobGV0IGFuaW1h
dGlvbiBvZiBhbmltYXRpb25zKSB7CiAgICAgICAgIGlmIChhbmltYXRpb24gaW5zdGFuY2VvZiBD
U1NUcmFuc2l0aW9uICYmIGFuaW1hdGlvbi50cmFuc2l0aW9uUHJvcGVydHkgPT0gdHJhbnNpdGlv
blByb3BlcnR5KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1v
dXRzaWRlLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1v
dXRzaWRlLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggNzA4ODFmZTkwMjFjODk1MDExMDUzZjQyZjFj
YmJhYWM0MzI4NjI0ZC4uYWVmYzlhMDUzOGZlYjA0ZjgzYWUxNWU0OGIyNTIzOTlkZDgxNjVmMSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0
aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJh
bnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5z
aXRpb25zLmh0bWwKaW5kZXggMzVjOWUzMjkxZmFhMTI2MjIyZDQ0MTBlMmEyZmUzZTc0NDllN2Y5
Yy4uZmFhNzQ1YzFiMWU3ZTFhMzkxZDYyNGNlYjFmNTE1NGMzZDAwODcyOCAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlv
bnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGQz
MjJiNGUxZjQxYzU1ZTA0ZDMwOTkzN2ZkZGNiYjExNjVmOTk3Y2MuLmI1NTFhMmNiYzc2NGJjZTJl
Y2ZkYjU3MTYyYjRhMTdhMjRkMzE2ZDAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRp
bWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5n
LWZ1bmN0aW9uLmh0bWwKaW5kZXggM2VlNTVlMDBhNGNjYzI3ZGE0Nzc5NTU3Y2EzZjk2ZmU3MGVj
YmZlZi4uYmI5NjJiY2I5NzA0MzIyOTYyOWI4NGE5MmU0YTBjZTA1ODAxNTQxZSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbAppbmRleCAxNDVkODNhMDJiMDIy
YzYxZTZmYTg4ZDk0NjcwM2ZiYWE0YWExOTUxLi4wMDU4YWI1ZDE0MTZkYTRiN2NkZWJiZDJkMTRl
YWQyODYwZjdiY2JlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5
b3V0LXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5
b3V0LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5o
dG1sCmluZGV4IDNmY2FkMzg4MDZjYTYwMDdiYTc4ZjVmMGI0MjAyODAxNTQyM2E2NWYuLjU3OTdl
NWVkZTNkZWFkZDcyZDNjM2FhMzUxNTZhMTJhMTA0YzdhYWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogICAgIDxzdHlsZT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggOGYzZDgyZjRlNzVkMzRk
NWFiNmZiMzg3YjQzZWQ4YjM1YjhlYzRjMS4uYWEzOTg4MDc4ZmM5ZWRjYTZlMjBlMjI1OGYxM2Vj
OWUxOWU5ZGU3NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5z
aXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25z
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0
bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sCmluZGV4IDQ3NDRiNTg1Y2VlZmI4MTQ1ZWIyZTQ5
Yzc5NjAxYTYxOTMxZGQxZTEuLjE2ZjhhZjE4ODJhNWE3NmNhZDNjZjczNTQ0YWY1OTNhOWYyMDA3
MWMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5z
aXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFu
c2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbApp
bmRleCAwZjljNDg3MzRkZGZlZGNmNmZjZmZiN2UzOTc4OTA1OGFlYjgxNTQyLi4wZDNmMzNlZDE1
Mjc5MzQwMzE1OWMzMjI2MGQyYjJmZDgwMmQ2MzVmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKaW5kZXggODZkZWE3ZTBmYTVlYmQz
NTY3YmMyMTQwOGMwNzdmMmE0NzI4MmEyNy4uYmY2ZDMwZGQzZGE2YTI4Yzc4MTU4MGQ2NDFmN2Jk
MmMyZWMwYTk5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3Jt
LW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
ZW5kLWV2ZW50LXJlbmRlcmluZy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwKaW5kZXggMDA3Y2U4ZGQwNTg1MzU2NzI3ZGU5
MTY1MTVmYmIzY2M0MjdiMTdiZC4uOTU5YWZkNjBkMDliMDExYmNlM2FlMTA2ZDY3OWNhOWI2ZDBj
M2E5ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQt
ZXZlbnQtcmVuZGVyaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5z
aXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwKaW5kZXggM2QzMjlmNDYwMjE5NmFhMWY0OTM0
MDA4ODJjODg4MGNmNDU4MjM3Yy4uZWY4MDZjNzExYTFlMTVhYmRkMzc5NmM1YTU4NzFiNjkxMmRj
N2QzOCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQt
dGVzdC10cmFuc2Zvcm0uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0
aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
aGl0LXRlc3QuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRl
c3QuaHRtbAppbmRleCBkOWRmODVjMTQ0N2YwOWFkZTUyYWFhNDJiMDFmMjIzOGNiY2JlM2M3Li44
M2E2MGE2ZTJlNTUzZjM3YTdmNTllNjcyMWI5ODViZWQ3M2EwMTY1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbAppbmRleCA5M2UwNGYyYTMyOGZmMmNk
YTE2NTZhNDM0OTEwNGYyMTQyMTAzYWIwLi5mYzJjZTk5NTEwYWRlNzJkNmNlODE1NjkxNzQ1Yjk5
MDA4MGE2ODJjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9u
LWluLWRlbGF5LXBoYXNlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1pbi1kZWxheS1waGFzZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRo
LWNvbnRlbnQuaHRtbAppbmRleCAxZjAzZWVhNzc0OTZmN2I3M2ZhZWE3ZjJjMGNjN2Q2N2Q4NGEy
YmFiLi4zYzQ3Mjk0OTE2N2Q2ODMyMmEyNzM3MWVhMDcxZjI3NjExZjY1MzY5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250
ZW50Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVt
ZW50LXdpdGgtY29udGVudC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXku
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5
Lmh0bWwKaW5kZXggNjg3MzIyOWQxNGQ3OTQ2M2NlMGY0NGRmNDQ5MGFiNDk4N2RjYmMzYy4uZGYw
OTg5ZDlmNjRmYTdkZTRlNGViMzUwODNhZThkNDQ5YmVmNDZmNiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDkx
MTc0OTJiMGJiM2ExMmI4MTAzN2VkMjI5ZmM1OWUwYjZlY2ZkOTkuLjA1MGM1MmQzMTcxYzg2Mjk2
ZmMyNzY1NWNiMTM0M2E1NDRmMTliZjQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20t
YXV0by5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1
dG8uaHRtbAppbmRleCA0ZTM3ZTE2N2Y0MWYxMjNiZWRlZGIwMjgwZTIxYjAwYzkxNmIwOGVmLi5k
ODQ1OWI3MWQ0YzgzYTljM2Q3ZTM2OTE1MzZmNThiYTY5MDk0YmE0IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCmluZGV4IDE0
ZTc4YzUwMTYxZGU4MjQyNmRhYzJmNzlmNDY0NjhmMDQyNGVjZTAuLjYyOGNmMjY4NTJlYWE4Zjkz
NTY2MjRkOTExOWM2ZTg3OGViYWY3ODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92
aXNpdGVkLWxpbmstY29sb3IuaHRtbAppbmRleCAyZWE0NDZjNmIyZjk1YWEyY2YzZGVkMzY2NzYx
ZTQwNjU4MzYyYzJlLi5iMTg3OGQzMTkwNTIxNzY4ZTYzYmE1ZTVhZDdjNmQ1MzJkZWU3M2UxIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxo
ZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1k
dXJhdGlvbi1pbi1saXN0Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0
aW9uLWluLWxpc3QuaHRtbAppbmRleCBlNjZhZGYzYjE5MGM5ZTBkODVlYTc4MDJjMWQ5NzFkMzhh
MWNmZTJkLi5iMmJjYmY1MjU5N2RkYjNkNmVkZmU4OTBjZGQ2MDU2ZjUwZTJkN2RiIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVy
by1kZWxheS1zdGFydC5odG1sCmluZGV4IDY2NjFmOTFhNDA5YTkxYWJkM2I5YzA1ZTE0YmE0NzQ0
MTA1MzI0NTAuLjYwOGUwMDNmNWMwZGU3ZjYzMDM1OGE2YjA0NzNhNDM1OTU0NWMyMjYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVy
by1kZWxheS1zdGFydC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVy
YXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
YWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlv
bi1kaXNwbGF5LW5vbmUuaHRtbAppbmRleCA5YzdhMTNiNDViNjQ1M2E4NDVkNThlMjA1YzliNGUz
ZWM4NTQ2NTRjLi5kMTE1Yzk1MTE4NDdjYzViMWE4ZjY4ODQ5OTM1N2U2ZWIwYTIwMGJjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1p
bnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFs
LXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0
aW9uLmh0bWwKaW5kZXggYjM3NjY4MTdjZjQwZTNkOWRhZTY1ZTQzOWNhMmRmZjNjNjllNWJiNi4u
YTFjODQ4YTNhMTU2YTBhMDRjMDBkYjNkOTI3NjRiNGQwNzliNjEyMyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9u
LXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRp
b24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24t
c3VzcGVuc2lvbi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1h
bmltYXRpb24tc3VzcGVuc2lvbi5odG1sCmluZGV4IDA2NTRhNjk1ZjViMjRiYzQyZmNhN2YxZDIz
ODFkYTBmNzJhYjY4OGMuLmVmYWE1NDM5ZDRmYjc0MGFiNWM3NDMxMGQxNDc2ODg4M2MzNjhmZWYg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0
aW9uLXN1c3BlbnNpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vs
ZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0
bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5n
LXByb3BlcnR5Lmh0bWwKaW5kZXggYmVmMDgwOGU5NDdjOTZhMDU0YzMxOGI5MWQ1OWE1MjQwMjFl
M2IyNy4uZjM0MDFiNmNlNjYwZmI2MjA3ZDhiOTFmM2M1MjZlYmY2YzZjMDdkNiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJl
bW92aW5nLXByb3BlcnR5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
bGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPGJvZHk+CiA8c3R5bGU+CiAgICAgZGl2IHsKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1j
c3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
c3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0
bWwKaW5kZXggYjYwNWMwODkxMWJhNjkzMWIwY2YzODM1Yjc5Y2NiMGM0ZmY1MzY3NC4uOWRkNTYx
OGJiNjc1MDFlZjkwOWY2MzcyZDFmMTE5MWY1YWVjOTI2NyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNz
cy1hbmltYXRpb24tZWZmZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9h
Y2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5D
cmFzaCBhY2Nlc3NpbmcgYSBDU1NBbmltYXRpb24ncyBjdXJyZW50IHRpbWUgYWZ0ZXIgc2V0dGlu
ZyBpdHMgZWZmZWN0IHRvIG51bGw8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVk
LWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9u
LXRhcmdldC1yZW1vdmFsLmh0bWwKaW5kZXggNThmNmM0OWI5YzhjMDgyZGY4Y2U5MTZkOGM2MTY4
YTBkODk4Y2UzZi4uNDMwNmExOWViYmQzY2NmOGRlOTkxYjVjNTgzMmI0YjEzZjdkMGExYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1l
LWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmlu
aXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggYWNjZXNzaW5nIGEgQ1NTQW5p
bWF0aW9uJ3MgY3VycmVudCB0aW1lIGFmdGVyIHJlbW92YWwgb2YgaXRzIHRhcmdldDwvdGl0bGU+
CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmlt
YXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdl
dC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKaW5kZXggZDk4MGQzNTYy
OGU0YWEzOWExODM0MDM1ZDU3ZTQ3YWYwY2QxY2JiNy4uNjZmYmE1NTJmODVkZDNjMjgxN2Q3MjEx
OTgzNzU2MzJiOGQ2OTkyZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9j
c3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1j
cmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1l
ZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KIApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1n
ZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1h
bmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRt
bAppbmRleCA1NjA4NzIxM2E0NWVkZDQ3NmEwOGVkOTM5Y2MxNmIwOGY1MTRjYzdiLi45ZTU1M2Jk
ZmJhNGJmNmU1ZjExMTNlODE4OWZjMmEwMTM3NzQxODc2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdl
dC1rZXlmcmFtZXMtY3Jhc2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nz
cy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2gu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KIApkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sCmluZGV4IDgzZmU5NWNhN2RmMTY2
M2FkNTkwOGFiZTA0YTM2YmY1NzFhNTUxYWUuLmU1Zjk1MjAwMGM2YTRlZWU1ZWZkYjIxYWE2ZTdl
NDc3ZDU5YmJhMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFu
aW1hdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRs
ZT5DU1MgQW5pbWF0aW9uczwvdGl0bGU+CiA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJz
Y3JlZW4iPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNp
dGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbCBiL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVk
Lmh0bWwKaW5kZXggMzA3ODNhOGJmZjBiYjAxYTRlZmI0MDU4YmFkYzcwOTE4YTJlOTcwZi4uMDRk
YmFhNTNjYTFkMjM2ZmQ5ODBiY2NkNzFjYThiOWEzYWY5Mjg3NyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNj
ZWxlcmF0ZWQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0
aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIDxtZXRhIGNoYXJzZXQ9InV0Zi04Ij4KIDx0aXRsZT5SZXZlcnNhbCBvZiBhY2NlbGVyYXRl
ZCBpbi1mbGlnaHQgQ1NTIFRyYW5zaXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0L2Nz
cyIgbWVkaWE9InNjcmVlbiI+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9l
bXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbAppbmRleCA2MGFjMzY1ZjMwNTY1NDNhM2YxODY1NGI5
ZjdjMmYzZTEyNDdjNTYyLi4wZjVmZmIzZjI3MDg2N2IzYTYzZWUwMzFhMzI1YmJhYmFhNDE3N2Qz
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1j
cmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVz
LWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVk
LXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVy
dHkuaHRtbAppbmRleCA0ZGJmNzA2ZTQxNzRmMjlhYjE5NWI4ZTJmZjU2MmE5ZDA5MzdhZjdhLi5m
YTNjODU1ZGJjYjI2ZThkOTk3YzEyNTI0Mjg4MzJjOTExMTg3YzhmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJl
bW92aW5nLXByb3BlcnR5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0
bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHByZSBpZD0icmVzdWx0cyI+PC9wcmU+CiA8ZGl2IGlk
PSJ0YXJnZXQiIHN0eWxlPSJwb3NpdGlvbjogYWJzb2x1dGU7IHRvcDogMDsgbGVmdDogMDsgd2lk
dGg6IDEwMHB4OyBoZWlnaHQ6IDEwMHB4OyBiYWNrZ3JvdW5kLWNvbG9yOiBibGFjazsiPjwvZGl2
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmlt
YXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0
Lmh0bWwKaW5kZXggYmQyNDA2OGJjYzQ1ZGMzODI5MDg4OWZkN2MzYTM0NjRjZjIwMTdlYi4uZjgw
YjA0N2YyNjU2ZmU1OTE4ODE1YjAzMmM4NzU1NDg2ZTA3YmZiYSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVh
cmluZy1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmct
Y3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENT
UyBBbmltYXRpb24gdG8gIm5vbmUiIGFmdGVyIHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90
aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0
dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJp
bmctZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFu
aW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5o
dG1sCmluZGV4IDRiMTUwNGFiY2FkM2U3ZGIwNDEzY2RkYmYzMzM2MWVhNDk0NTRhZjEuLjkzMmJj
OTFhNzZlYTE1NWY5YWI4NmQ4YzkwNGQ4ZmViNTM1Yzc3NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12
aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHls
ZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBo
dG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBj
aGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIHNldHRpbmcgYSBDU1NBbmltYXRpb24ncyBwcm9w
ZXJ0eSB2aWEgc3R5bGUgYWZ0ZXIgc2V0dGluZyBpdHMgZWZmZWN0IHRvIG51bGw8L3RpdGxlPgog
PHN0eWxlPgo=
</data>
<flag name="commit-queue"
          id="424492"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408941</attachid>
            <date>2020-09-16 12:22:28 -0700</date>
            <delta_ts>2020-09-16 13:26:11 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916212226.patch</filename>
            <type>text/plain</type>
            <size>528184</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGE2ZjY0MjBjNDcyMzJiNWE4MTBiOGY4YjAzYWUz
NjczNjU1ZWY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzIGFuZCBzb21lIFJl
bmRlckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRp
b25zIHdoaWNoCisgICAgICAgIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkb2VzIG5vdCB1c2Uu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0YWJsZS5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbDoKKyAgICAgICAg
KiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3I6OlByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKToKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmguCisgICAgICAgICogYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbDoKKyAgICAgICAgKiBhbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZXN1bWUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAgICAqIGRv
bS9Qc2V1ZG9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmlkbDoKKyAgICAgICAg
KiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1l
OjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dN
b2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1
c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2Vi
QW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVu
YWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZy
YW1lcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6YW5pbWF0ZWRTdHlsZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0
YXJ0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50
Ojp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50
VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFy
dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omlz
UnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6c3RhcnRUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlzaGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6bGVnYWN5QW5pbWF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpjcmVhdGVBbmlt
YXRlZEVsZW1lbnRVcGRhdGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbFNldHRpbmdzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsOgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnN1c3BlbmRBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9ucyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VB
bmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVk
b0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXVsxLjE4XSBS
ZWdyZXNzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZDg4ZDA5YzYwZDI2OWViOGViOTFmODEyYzIxMmU3Nzk4
Y2MxMzU4Li43NGFkZDdjZTMyMjYxMGU2NjliNzNhYzY5MDdiNzhhZDdhNzQyZWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB3ZSBu
b3cgaGF2ZSBhIHNpbmdsZSBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVudGltZSBmbGFncyB0byBv
cHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5lIGFyZQorICAgICAgICBu
b3QgbmVlZGVkIGFueW1vcmUgYW5kIGFyZSBub3cgcmVtb3ZlZC4KKworICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zRW5hYmxl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJs
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dldFdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tQcmVmZXJlbmNl
cyBfc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tQcmVmZXJlbmNlcyBfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZF0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGU6OnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGU6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaDoKKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlMRUQg
aW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3NDYx
M2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ug
d2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3Mg
dG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAg
ICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToK
KyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorCiAy
MDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcyZGQ0
NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJiYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wOS0x
NiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUg
dGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVu
Z2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmlt
YXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93
IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdl
YlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVm
YXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpz
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBzZXR0
aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAyMGY4YzQxMmFhMjMzNzU1NWIzN2Q1OTQxZTE4YjJlYWRmZDM3YmVmLi41OWY3OTJh
OTQ4N2ZhOThiODE2NTliYTEyMWEyMjBjYzJjMTA0OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0v
bWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVfRElSfS9w
YWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybSIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1NWExOGQzMjA0OGU3NmU2NTFlMDA2MDVmODBiMDVhMzI3
YTExZWUuLmNiNGE5ZGU5Mjc3YWZlOWI3NDRlY2ZlNTQzZDA1Y2RhYTU5YWE1MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtODg5LDkgKzg4OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAgcGFnZS9X
aW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKLSAg
ICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQyZmEyMTQ2Y2ZiYTlkOC4u
Mzg4MjdjNDNjMWM1MWVlMjhlODY5N2Y5Y2RkN2IxZmJhNjhmYmVmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNwcAogYW5p
bWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0aW9uVGlt
ZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmltYXRpb24v
RGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5jcHAK
QEAgLTE2NzUsMTIgKzE2NzYsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5jcHAKIHBh
Z2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5j
cHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0
ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAotcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuY3BwCiBw
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjY1NTk4ZjYz
NTA0ZDgzNWQ0ZGRhNzNlMjY3ZTYyMjlkMDcxMzNkMi4uMjhlOWYyOTFiZjMwOTlkNmMyNTNiZmVm
ZWJmMGVkMmRmMTliM2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4MjJFM0M0
N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBGcmFtZUlk
ZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUwRjM5
MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQg
LyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVy
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
MTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURBODkw
RjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87IH07
CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdFQzdDNTAw
RURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFu
aW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsgfTsK
IAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgxODAwRDM3
QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC05MTYsMTEgKzkxNSw2IEBACiAJCTMxNkRFNzAyMUU4M0FFMUQwMDg0
QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0YUNo
YW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NL
ZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oICovOyB9
OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3MDBFNkND
QkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZFMTEyMEU2
RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0
aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwQTBF
NkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFEQTcwMEJG
NjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVB
bmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0
QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLzsgfTsK
LQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBFNkUxREE3
MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQxNjYzNjYw
OTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8qIFNp
bXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxN0QzRkYy
MjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JGODkgLyog
SW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIxNTIsNyBA
QAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0MjFD
OTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1
RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIzOEE5
MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9u
RWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0
NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcg
LyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5
MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJv
cGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0Yy
MzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2IEBACiAJ
CTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAxQjFFRDcy
MkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3N0Q1MTAy
NTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1NTAwREE0
Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQxMkY5REI3
NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAwQzc3QkQy
IC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJDNjE1NEEx
OERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAyMTI2NkUg
LyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3NpdGlvbkV2
ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUYy
RjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3QTA5
Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JEQiAvKiBG
aWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMx
NjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRm
b3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMTVE
QTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VDN0M1MDBF
RERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2VkQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIxNSwx
NiArNzIwOCw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1l
c1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlmcmFtZXNS
dWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NEN0YwMEJG
NjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENTU0tl
eWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkyMEU2
Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25C
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4IC8q
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZFMURBNzAw
QkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYwODgg
LyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1l
QW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtleWZy
YW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMTAw
RTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2ludGVyRXZl
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTk4ODMsNiArOTg2Niw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmlt
YXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9u
RWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAyQjM4OEYw
MEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRWZm
ZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVGN0UyNTEy
NDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURE
NEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3Vj
aFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBG
MTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTk5
MSw4ICs5OTc2LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2aWdhdG9y
Q3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0
b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VGNjJGMTEy
RjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURCNzQwMEM3
N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAy
QkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3Np
dGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29t
cG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5MjE3
MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0aW9uRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTIsMjYgKzE4Njk1LDYg
QEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
LQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJCWlzYSA9
IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4
IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAv
KiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4IC8qIENv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4IC8q
IENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4OCAv
KiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUxREE3MDBC
RjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5MEYzQUFF
RTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAotCQkJCTc4
RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCi0J
CQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8s
Ci0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNwcCAq
LywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAq
LywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uY3Bw
ICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5o
ICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0aW9ucyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQzMSw3ICsy
MTM5NCw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUxRDg0MDBC
RjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3OCAvKiBj
b2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAogCQkJCTE4
QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3NCw2ICsyMTgzNiw4IEBA
CiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAgKi8sCiAJ
CQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAogCQkJCTcx
QzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJCTcxRjA1
RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCisJCQkJ
NzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8sCiAJ
CQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQu
aCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5jcHAg
Ki8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaCAqLywK
QEAgLTMwMzE1LDcgKzMwMjc5LDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyog
QU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIxOUMw
NDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlF
OTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZl
Y3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4IC8q
IEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjk4LDcgKzMwNjYxLDYgQEAK
IAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9zZWRU
cmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNBNkI1
QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
MTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1h
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAvKiBDb21w
b3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3MTEwMEVC
N0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApAQCAtMzA4
MzgsOCArMzA4MDAsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBDcnlwdG9S
c2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0MUYzQ0NF
NjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFkZXJzICov
LAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEwMTQ2
NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDkwOCw3ICszMDg2OCw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVEOEFD
MzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmggaW4g
SGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlB
bmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcxMzQxRkJF
NzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzIsNyArMzE2OTIsNiBAQAogCQkJCTU1QkJE
NDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWls
ZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1w
bGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMzOEMwMEQw
N0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzg2MzNF
OTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA5LDcgKzMyNjY4LDYgQEAKIAkJCQk1MTdBNjNDNjFC
NzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0UgLyogS2V5
ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNCNDFGOUYw
OUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3
RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRs
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0NjQ3MTAw
MDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1NjIyZWNh
ZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJsZS5p
ZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcv
d2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1bCi0gICAg
RW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBBbmltYXRh
YmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dFeGNlcHRp
b24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0PyBr
ZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5pbWF0
aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmlt
YXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJkZjFmZTJj
NjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlhM2M1MTIz
Mjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
bkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0UnVu
dGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3RvbVRvSlNP
YmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2OTFiNDg1
MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVlMWUwZTgz
MmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAg
ICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3csCiBd
IGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNvbnN0cnVj
dG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCBl
dmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Bbmlt
YXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5p
bWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBlODIxZGI0
N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFiYjI2MDdj
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFj
a0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblBs
YXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rpb25hcnkg
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFyeSBBbmlt
YXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBjdXJyZW50
VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4IDA0ZmE5
NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIxNDNlZmM4
NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBFbmFi
bGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBP
UlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGltZWxpbmUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAxZTViODg0
YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5NmY5YmU5
NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0
aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7
CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwK
ICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2ViQW5pbWF0
aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9uTmFtZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZmYTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmlt
YXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJ
bWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5o
IgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JCbGVuZGlu
Zy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUgIkZvbnRU
YWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUgIklkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5
bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5l
cmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1l
bW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
b2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
aW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChm
cm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUgdG8s
IGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNz
KTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7
CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICog
cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jl
c3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3Mp
OworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVuZ3Ro
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgpIHx8
IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwg
cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZyb20s
IGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIHsg
YmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5kRnVu
YyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKworc3RhdGlj
IGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAg
ZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKKyAg
ICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7CisgICAg
ZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3Mp
OworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRvd1N0
eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0
YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0
IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgpICE9IHRv
LT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8pOwor
CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24o
KSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+cmFkaXVz
KCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5zcHJlYWQo
KSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9t
LT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5pc1dlYmtp
dEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwg
cHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rpb25M
aXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25z
KGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJw
b2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRlcmVy
KCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3JkZXJC
b3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJldHVy
biB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNTaGFw
ZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQYXRo
T3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpTaGFw
ZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBl
ID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUoKTsK
KyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9w
ZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5jYW5CbGVu
ZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsK
K30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hh
cGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAgICAgcmV0
dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZyb20t
PnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUoKTsK
KworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICByZXR1cm4g
dG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJvbVNo
YXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7CisgICAgQVNT
RVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVu
ZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxl
bmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OworICAg
IHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qg
dG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6
bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJv
bVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ld
LmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0g
dG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dyZXNz
KSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVzcywg
dHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3VsdC5v
cGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgp
OworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5h
cHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0ZXJPcGVy
YXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywg
ZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUZp
bHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElmIHdlIGhh
dmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rpb24g
YW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIHN3aXRj
aCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAgICAgIGxp
c3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJl
YWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJvcEZp
bHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNh
c2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0gYW5p
bS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0c01hdGNo
KQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwgdG8s
IHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5jdGlv
biBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBkb24n
dCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAgIC8vIEZv
ciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9IHRvOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFN0
eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NFUlQo
aW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGltYWdlVmFs
dWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRlclZhbHVl
ID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVudFN0
eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFsdWUp
LCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9wZXJh
dGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0eSBm
cm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55IG5vbi16
ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUuIE9u
bHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52aXNpYmxl
LiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBWaXNp
YmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFsdWVz
LgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8gMS4g
OiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8gMS4g
OiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRvOworICAg
IGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNz
KTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRvICE9
IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5saW5lIFRl
eHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRVbmRl
cmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNMZW5n
dGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNl
dDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0
by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zm
c2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNvcmF0aW9u
VGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29yYXRp
b25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNMZW5n
dGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlj
a25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUo
KSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERlY29yYXRp
b25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
Qm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25z
dCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
K3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0by50
b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZy
b20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAg
YmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyksCisg
ICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxlZnQo
KSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFNW
R0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
Y29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZG91
YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbSwg
dG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGlu
ZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3QgVmVj
dG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBzaXplX3Qg
ZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNpemUo
KTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBmcm9t
IDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzID09IDEg
PyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7CisgICAg
aWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIoc3Rk
OjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xlbmd0
aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9M
ZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9tTGVu
Z3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVzdWx0
KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5ndGg7
ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21baSAl
IGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBy
b2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8
U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdlKiB0
b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVzcyBpcyBh
dCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hvdyB0
aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhhbmQg
YmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNzKQorICAg
ICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEpCisgICAg
ICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2FjaGVk
SW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICByZXR1cm4g
dG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8gdG9JbWFn
ZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZEltYWdl
KCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBjcm9zc2Zh
ZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VWYWx1
ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsKKyAg
ICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRlVmFs
dWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20sIFN0
eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0bykK
KyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsK
KyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRvKQor
ICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdl
bmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAgICBpZiAo
aXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9
IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CisgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlzPENTU0Zp
bHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFsdWU+
KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRlZCBp
bWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KKyAgICAg
ICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRl
cikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBi
bGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmls
dGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdlbmVy
YXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAg
ICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2Zh
ZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYg
dG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpOwor
ICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3NzZmFk
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jvc3Nm
YWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAgfSBl
bHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJ
bWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJh
dGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsK
KyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7Cisg
ICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NT
RmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAoZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykuY2Fj
aGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwor
ICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGNy
b3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2FjaGVk
SW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAgICAg
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5l
cmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJ
bWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFs
dWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQp
OworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8U3R5
bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVkSW1h
Z2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0ZXIu
Y2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRp
b25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRkIGludGVy
cG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAgfQorCisg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5kIGdl
bmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxT
dHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQoYW5p
bSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2FjaGVk
SW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMgaW5s
aW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNlSW1h
Z2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkgfHwg
IXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1FICg3NDEx
Mik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0IGRp
ZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmltYWdlU2xp
Y2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRvLmJv
cmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5maWxs
KCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9udGFs
UnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCisgICAg
ICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAxLjAp
ICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAgICAgIHJl
dHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5jKGFu
aW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLmlt
YWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNl
dCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOworfQorCisj
aWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9u
U2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlvblNl
dHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUoKSAhPSB0
by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAgICBG
b250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBmcm9tLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVtID0gdG8u
YXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCisgICAg
ICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0IGlu
dGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0udmFs
dWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFnKCks
IGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9u
dFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIEZvbnRT
ZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBz
dGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5lIE9w
dGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwgT3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0
Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dyZXNz
KSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJvcChwcm9w
KQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91
YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBj
b25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25Jc0Fj
Y2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBDU1NQ
cm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUHJv
cGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAg
ICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgIH0KKwor
ICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
dm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwK
KyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAg
YmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwg
dmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpG
b3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1
ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJlbmRlclN0
eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Ns
YXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+Ojpt
X2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBS
ZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRy
PFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0dGVy
KQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIp
KCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNz
KSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRl
cikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDogcHVi
bGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAgIDogUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAgICAgICAg
LCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50ZXJwb2xh
dGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAgICB9CisK
KyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRzdC0+
Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29u
c3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVy
KHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4q
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYmKTsK
K307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50ZWRQ
cm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0
eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+
JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRp
b24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1l
LCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBu
dWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAg
ICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8
fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0aE9wZXJh
dGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBhdGhPcGVy
YXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChjbGlwUGF0
aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
Y2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKworI2lmIEVO
QUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9u
U2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5ncz4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJpYXRp
b25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUg
c3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3Qu
CisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJl
IG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNldHRp
bmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0
aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0
dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAgfQorfTsK
KyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3As
IFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUg
c3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3Qu
CisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJl
IG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAo
c2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUlt
YWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3R5bGVJ
bWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJl
ZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICByZXR1
cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQorfTsKKwor
Y2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3Im
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYp
OworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVibGlj
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisgICAgICAg
IDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJTdHls
ZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9wYWNp
dHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJBY2Nl
bGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDogUHJvcGVy
dHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5zZm9y
bSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0sIGEt
PnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitj
bGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQorICAg
ICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVydHlJ
RCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9uSXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVy
dHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCisg
ICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0
ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhh
bmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj46
Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgIH0KK307
CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93RGF0
YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0gMDsgc2hh
ZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAgICByZXR1
cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93Rm9y
QmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBv
dGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVm
YXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
ZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAw
LCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hTaGFk
b3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93
RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAw
LCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKwor
ICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAgICBpZiAo
b3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAgICByZXR1
cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2ViS2l0
Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOworCisg
ICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRXZWJL
aXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOworfQorCitj
bGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0YSog
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQor
ICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cworICAg
ICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3RzCisg
ICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93
QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dB
ID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9
IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dMaXN0
TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3Ro
KHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChmcm9t
TGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywgc2hh
ZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMoYW5p
bSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwgZmFs
c2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0
ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8
PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hh
ZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5l
d1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOworCisgICAg
ICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0IpOwor
ICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRp
bmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFk
b3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hh
ZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93UHRy
ID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93KQor
ICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQoV1RG
TW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVuZGVk
U2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0EtPm5l
eHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5leHQo
KSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKKyAgICB9
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hhZG93
TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHByb2dy
ZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dC
LCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
VGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIHNv
IHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVyc2UgdGhl
bSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93RGF0
YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gZnJv
bUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93c1tpXSA9
IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOworICAgICAg
ICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3ModG9M
ZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAgIHNoYWRv
d0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVuZ3RoID0g
c3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9t
U2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAgICAgICAg
ICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93c1tp
XSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRv
d0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9tU2hh
ZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kZWRT
aGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsK
KyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2Vy
dmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3Zl
KG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJs
ZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7
CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIp
KCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlxdWVf
cHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJT
dHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0
IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09
IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVl
KGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICByZXR1cm4g
ZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOworICAg
ICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9tQ29sb3Iu
aXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3Ig
PSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRG
dW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAgICBD
b2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVy
dHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2
YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVy
KSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9y
Jik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRDb2xv
ciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJsaWMg
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8
UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAgLCBt
X3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIHZp
c2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVydHlX
cmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUludmFs
aWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9yJiAo
UmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3Bl
cnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCisgICAg
ICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICB7Cisg
ICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyYXBwZXIt
PmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CisgICAgfQor
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3dyYXBw
ZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zpc2l0ZWRX
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoYSwg
YiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5k
KGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBwZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fdmlz
aXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1hdGFi
bGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAgICB9Cisg
ICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0gZGVm
YXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciosIGNv
bnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29u
c3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7CisjZW5k
aWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIgOiBw
dWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVyKSgp
IGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uo
cHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29u
c3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBz
dHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwg
IiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBU
ZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIg
LT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAg
IFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVy
KHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBh
LCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dy
ZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29u
c3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVy
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnByb3Bl
cnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisgICAgICAg
ICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBGaWxsTGF5
ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlcikoKSBj
b25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChGaWxs
TGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdpblNl
dHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKKyAgICAg
ICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5HZXR0
ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRlcikK
KyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRvTGVuZ3Ro
ID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1f
Z2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9vcmln
aW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRlciko
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYmIGZy
b21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIq
IGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAgIExlbmd0
aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExl
bmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAo
YS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmln
aW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdlKSB7
CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMgZXhw
cmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisgICAgICAg
ICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChmcm9t
TGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aCh0
b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9tRWRn
ZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8gdGhl
IGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAoZHN0
LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCwg
cHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVu
ZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBn
ZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0
byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNw
ZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAg
ICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVuZ3Ro
U2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVyKSgp
IGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsKKyAg
ICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgRmls
bExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXll
cjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVz
dWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1h
dGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAgPDwg
IiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUoYSkK
KyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1h
dE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNlbmRp
ZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0cjxU
PiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIgOiBw
dWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyU3R5bGVJ
bWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdlKiAo
RmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFJl
ZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVy
dHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5
ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVy
KSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAg
fQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVy
KiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHBy
b3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8
PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHBy
b2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCit9Owor
CitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0ZXIp
KCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVyc0Fj
Y2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3NvcikK
KyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAgICAg
ICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29yKGFj
Y2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3Jh
cHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHByb3Bl
cnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwgJkZp
bGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRYT3Jp
Z2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIg
PSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eSwg
JkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxsTGF5
ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdpbiwg
RWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3Jv
dW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAgICAg
ICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVMZW5n
dGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBtX2ZpbGxM
YXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVByb3Bl
cnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJ
bWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byogZnJv
bUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIg
PSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxheWVyICYm
IHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIt
PmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAgICAg
ICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOworICAg
ICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0
byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAgICAgd2hp
bGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5ZXIs
IHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOworICAgICAg
ICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXllciA9IGRz
dExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dl
dHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgp
OworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7
CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAg
ICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgYUxh
eWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4
dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBk
c3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXllcnNHZXR0
ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3NvcjsK
K307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJzKQor
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAgICAg
ICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEg
PT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDog
bV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhh
LCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykK
KyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwor
ICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRzdCwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiB3
cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+bG9nQmxl
bmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBWZWN0
b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBy
b3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3coKSA9
PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7Cisg
ICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+Zmxl
eEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRGdW5j
KGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7CisgICAgICAg
IGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBiLT5m
bGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAg
IHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9CisjZW5k
aWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwgU1ZH
UGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29sb3Ig
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQorICAg
ICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVy
KSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBTVkdQ
YWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBldmVyeXRo
aW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lzZQor
ICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2ZXIu
CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlwZTo6
UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIp
KCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAg
ICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAg
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRvQ29sb3Ig
PSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChiLT4qbV9w
YWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICBpZiAo
IWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBT
VkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1BhaW50VHlw
ZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBDb2xvciAo
UmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6
Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9u
dFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9uVmFs
dWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVy
dHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHlsZTo6
Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gZnJv
bS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2NyaXB0
aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZvbnRE
ZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50OworICAg
IH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAgICAgICAg
YXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAgICAgaWYg
KGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8IDAu
NSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKworICAg
ICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAgICAgICBh
dXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8gYmxlbmRl
ZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250SXRh
bGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJdGFs
aWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJvZ3Jl
c3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRzdC0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9
IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhi
bGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMo
YmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJy
ZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlv
bldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCisgICAg
eworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5YmUg
d2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJldHVybiBt
YXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlckZv
clByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAgIGlmIChw
cm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1Byb3Bl
cnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQgd3Jh
cHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYg
KHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyc1t3
cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBz
aXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKTsK
KyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisKKyAgICB1
bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlEIC0g
Zmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworICAgIHVu
c2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4ID0g
VUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0aW9uV3Jh
cHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAvLyBidWls
ZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5k
IGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVMb25n
aGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpz
ZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0eWxl
Ojp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5kZXJT
dHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lk
dGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluV2lk
dGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgpLAor
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgsICZS
ZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAorCisgICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5kZXJT
dHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6bWlu
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4SGVp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
V2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVmdCwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5Ub3As
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5Cb3R0
b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBhZGRp
bmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJTdHls
ZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5kZXJT
dHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwKKwor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0eWxl
Ojpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tncm91
bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxl
OjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCisgICAg
ICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0lt
YWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1hZ2Up
LAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgJlJl
bmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFn
ZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlcklt
YWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJT
dHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZVNv
dXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1hZ2Um
PihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94SW1h
Z2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5k
TGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHls
ZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJz
KSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxsTGF5ZXJz
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRlclN0
eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorICAgICAg
ICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNr
TGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwgJlJl
bmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5z
aWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAorICAgICAg
ICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3BlcnR5
Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5n
dGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0eWxl
OjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0
PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2ZXJ0
aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFjaW5n
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4LCAm
UmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZpZWRa
SW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eU9y
cGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5zKSwK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3MsICZS
ZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9mZnNl
dCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVP
ZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91
dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5kZXJT
dHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJl
bmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQsICZS
ZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2
ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6
cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWCks
CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2
ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6
OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9y
aWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVy
U3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2lu
WSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5bGU6
OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5
V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BM
ZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpi
b3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1
cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJC
b3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMp
LAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0eVZp
c2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNp
YmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHla
b29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRSZXR1
cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0eWxl
OjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFj
aXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgp
LAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0
eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVyKSwK
KyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
RmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6YmFj
a2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2VuZGlmCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmls
dGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QXBw
bGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENT
U1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6
c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9w
ZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJTdHls
ZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVuZGVy
U3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBlSW1h
Z2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCisKKyAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Q29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZl
Y3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFsaWRD
b2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4
dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4
dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxsQ29s
b3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlz
aXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdodENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVy
VG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9t
Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRl
clN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9y
LCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKworICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVuZGVy
U3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJlbmRl
clN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAorCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5kZXJT
dHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQYWlu
dFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRT
dHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZSZW5k
ZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hBcnJh
eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ryb2tl
TWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5bGU6
OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRDeCks
CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJlbmRl
clN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHlsZTo6
c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeCwg
JlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJlbmRl
clN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQsICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJva2VX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJTdHls
ZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlZ
LCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJTdHls
ZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29kQ29s
b3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENvbG9y
KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0b3BP
cGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0b3BP
cGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENT
U1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFs
aWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRpbmdD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQsICZS
ZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2VsaW5l
U2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFsdWU+
KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5bGU6
OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFyaWF0
aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVuZGVy
U3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
JlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJvcGVy
dHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpz
ZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUoKSwK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4oQ1NT
UHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NTUHJv
cGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsKKyAgICBj
b25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJS
QVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisgICAgc3Rh
dGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNbXSA9
IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1jb2xv
ciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBmb3Ig
Zm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ssIC8v
IGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
LAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodCwg
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAgICAgICAg
Q1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXMs
CisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3IgbGlz
dC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAgQ1NTUHJv
cGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAgIENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxlLAor
ICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVTaG9y
dGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAgQ1NTUHJv
cGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVzIHRo
YXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgLy8KKyAg
ICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94UmVm
bGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgbV9wcm9w
ZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisgICAgQ09N
UElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0YWJs
ZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRhYmxl
UHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlXcmFwcGVy
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3Vu
dCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8gRmlyc3Qg
d2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1hcCwg
c28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVz
Q291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAgICAgbV9w
cm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Qcm9wZXJ0
eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgeworICAg
ICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVy
dGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShw
cm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1dG8gbG9u
Z2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRleCA9
IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdyYXBwZXJJ
bmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5k
ZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1fcHJv
cGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpKTsK
KyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVMb25n
aGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnYXRoZXJF
bmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
IHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciog
c2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcio+
KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBj
dXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgeworICAg
ICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwgY3Vy
cldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBwcm9w
ZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGNv
bnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkpOwor
CisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQg
dG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENTU1By
b3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKHByb3Ag
IT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigp
LndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAgICAgICB3
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOworI2Vu
ZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5QW5p
bWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwor
fQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2Nl
bGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xl
dG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVyID8gd3Jh
cHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5vdGU6IHRo
aXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRpb25B
dFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFu
aW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0PENTU1By
b3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0
aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMpOwor
CisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQ
cm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHko
cHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5JbnRl
cnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5SUQgQ1NT
UHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8Ym9v
bD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYg
bWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKworICAg
IGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAgIGlzU2hv
cnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJuIHdyYXBw
ZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVtUHJv
cGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6
c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgwYzUzZjUw
YTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVydHlJ
RCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQoQ1NT
UHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5
SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAgc3Rh
dGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBDU1NQcm9w
ZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0aGFu
ZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMgSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBzdGFy
dCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQcm9wZXJ0
aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlELCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFiNWFkZmQw
NmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEzOWIwNTlm
MWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9uLmlk
bApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAKIFsK
LSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwKICAgICBF
eHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1hdGlvbiB7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9wZXJ0eTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKaW5k
ZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRlNDllMjAy
ZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwogCiAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9ucy10
by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmlt
YXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50ZXJmYWNl
IERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0aW1l
bGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRP
clNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4YTUzNGMx
ZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0YTc4ZWRl
NTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9yU2hh
ZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8KIAog
Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lvbnMt
dG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAgIEVuYWJs
ZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1
bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVudE9yU2hh
ZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25zKCk7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCmluZGV4
IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEyNTQ0MjU1
ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAg
RW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogXSBp
bnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAgICBbQ2Fs
bFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxpbmVPcHRp
b25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZy
YW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5p
ZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4uZjBmMzJi
MGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVmIFVT
VlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0
aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3Qs
CiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNlYzNmYTg0
MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0ZThkYTAw
ZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCkBA
IC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwogICAgIEFj
dGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAg
SW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBFeHBv
cnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5p
bWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZjOWE2ZDRh
NTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiArNTAsMTEg
QEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAgfQogfTsK
IAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21wb3NpdGUg
ICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAxCit9Owor
CiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0aW9uc01h
cmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9IExpc3RI
YXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBhYzBkODA1
YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uMzY5YjFiZDZjMDZkMGM2NGVjNjIwOTZkZmZjYTM4YmEz
OGEyYTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKLSNp
bmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0
aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NTQm9y
ZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94Q29udGFp
blZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24u
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQ
YXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEgKzIyNDYs
OCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVyID0gZWxl
bWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0NvbXBv
c2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVkQW5p
bWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICBpZiAoYXV0byB0aW1lbGlu
ZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAgICBv
d25lZFN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvd25lZFN0eWxlID0gcmVuZGVyZXItPmxlZ2Fj
eUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIpOworICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVydHlBbmlt
YXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKSB7Cisg
ICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0ZWRTdHlsZSgpOwogICAgICAgICBp
ZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBQc2V1ZG9JZDo6Tm9uZSAmJiAhZWxlbWVudC5p
c1BzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FjaGVkIHBz
ZXVkbyBzdHlsZSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIGFuaW1hdGlvbiBoYXMgYmVlbiBydW4g
YXQgbGVhc3Qgb25jZS4KICAgICAgICAgICAgIHJldHVybiBvd25lZFN0eWxlLT5nZXRDYWNoZWRQ
c2V1ZG9TdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDkwOTZmMjY0Njc5MTMwYTc4NGE1MWE5YWRjOGJhZGViZWM3YzdhYzQuLjI5NDBjNThi
ZjE3OGM1MjBhNjA5ZWIxYjczNzczOGViNjY5ZmRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVV
bmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgpA
QCAtMTk2Miw3ICsxOTYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29sdmVT
dHlsZVR5cGUgdHlwZSkKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShTdHlsZVJlY2FsY1N0
YXJ0LCBTdHlsZVJlY2FsY0VuZCk7CiAKICAgICBSZW5kZXJWaWV3OjpSZXBhaW50UmVnaW9uQWNj
dW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXcoKSk7Ci0gICAgQW5p
bWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fZnJhbWUtPmxlZ2FjeUFu
aW1hdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHVwZGF0ZSBwZXIgdHJlZSBzY29w
ZS4KICAgICB7CkBAIC0yNDIyLDE5ICsyNDIwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmRpZEJlY29t
ZUN1cnJlbnREb2N1bWVudEluRnJhbWUoKQogICAgIC8vIGJlIG91dCBvZiBzeW5jIGlmIHRoZSBE
T00gc3VzcGVuc2lvbiBzdGF0ZSBjaGFuZ2VkIHdoaWxlIHRoZSBkb2N1bWVudCB3YXMgbm90IGlu
IHRoZSBmcmFtZSAocG9zc2libHkgaW4gdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlLCBv
ciBzaW1wbHkgbmV3bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAgICAg
ICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5zdXNw
ZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1lbGluZXND
b250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5kQW5p
bWF0aW9ucygpOwogICAgICAgICBzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVu
c2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdW1l
U2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7
Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYgKG1f
dGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xs
ZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2Zy
YW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7
CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3RpbWVs
aW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CiAKQEAgLTI1Mjgs
OSArMjUyMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQogICAg
IGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5kZXRhY2hG
cm9tRG9jdW1lbnQodGhpcyk7Ci0KICNpZiBVU0UoTElCV0VCUlRDKQogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBtb3ZlZCB0byBNb2R1bGVzL21lZGlhc3RyZWFtLgogICAgIGlmIChMaWJX
ZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkpIHsKQEAgLTMwNjYsOCArMzA1NSw2IEBA
IHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICBpZiAoYXV0byogZG9jdW1l
bnRMb2FkZXIgPSBsb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zdGFydElj
b25Mb2FkaW5nKCk7CiAKLSAgICAgICAgZi0+bGVnYWN5QW5pbWF0aW9uKCkuc3RhcnRBbmltYXRp
b25zSWZOb3RTdXNwZW5kZWQodGhpcyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBiZSBkaXNwYXRjaGluZyBwZW5kaW5nIGV2ZW50cyBnbG9iYWxseSBvbiBhbGwgRG9jdW1lbnRz
IGhlcmUuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgZG8gdGhpcyB3aGVuIHRoZXJlIGlzIGEg
RnJhbWUsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIEpTIHJlZW50cmFuY3kKICAgICAgICAg
Ly8gYmVsb3cgU1ZHIGZvbnQgcGFyc2luZywgZm9yIGV4YW1wbGUuIDxodHRwczovL3dlYmtpdC5v
cmcvYi8xMzYyNjk+CkBAIC01NDU0LDExICs1NDQxLDggQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1l
KFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgQVNTRVJUKG1fZnJhbWUpOwogCi0g
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX3RpbWVsaW5lc0Nv
bnRyb2xsZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1h
dGlvbnMoKTsgIAotICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgaWYgKG1fdGltZWxpbmVz
Q29udHJvbGxlcikKKyAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVBbmltYXRp
b25zKCk7CiAKICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhyZWFzb24pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggOGY4NmZmNDFhNjY0NjgyYzJmYzY4N2UzZWJhNjgzYzUzZmM2Mzg2YS4u
YzViMzMxNmNjZjY0MjE2ZjI5MWU2YmE1NmFiODcwODEzMGY3MTQ2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmgi
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgpAQCAt
MTE5LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRlICJWb2lk
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJXZWJBbmlt
YXRpb25UeXBlcy5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTGlua05h
bWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjI4OCw5ICsyMjg4LDYgQEAgdm9p
ZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVudCgp
LmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNSZW1vdmVk
KCp0aGlzKTsKIAotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1hdGlv
bigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOwotCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xB
VENISU5HKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFtZS0+cGFnZSgpLT5zY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1BzZXVkb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3Bw
CmluZGV4IDE1ZDgxYzEwNmQ4MDkzNTNmMjFiZTdlYzg0ODNkZDg4Yjc2MjhiMzcuLmRhZDE1NjZj
YzA2YTNkMTRkNmJjYjdjNTA3NmVjYzE4YjZjN2E3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQc2V1ZG9FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWVsaW5l
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05Myw5ICs5Miw2
IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgaWYgKGF1dG8q
IHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAgICAgICAgIHRpbWVs
aW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAgICAgCi0gICAgaWYgKGF1dG8qIGZyYW1l
ID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCku
Y2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCmluZGV4IGNhZGZiOTY5YjJhNGE0Y2Y5YjU4
MThkNzM0NDY2YmEzNGJlYjYyODMuLjA2ZmUxY2IyMGVhZmRlZGJiOGUxYzY3ZDZjYmNiYzY4YmZm
ZmUwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKQEAgLTM0LDMgKzM0LDQgQEAKIAog
U2hhZG93Um9vdCBpbmNsdWRlcyBEb2N1bWVudE9yU2hhZG93Um9vdDsKIFNoYWRvd1Jvb3QgaW5j
bHVkZXMgSW5uZXJIVE1MOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Nh
Y2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmlu
ZGV4IDQ2OTg1NzRkMzI1MDVlNmY5YzVjM2ExY2JhY2FiZmViMmQwZDQxZGMuLjhkZTI2ZTFiYzE1
MzNmZDBiM2YwNzRmMDZiMWYzNGQzZTgwYjg5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkRnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUuaCIK
IAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNpbmNs
dWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0yNzMsOCArMjcy
LDYgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAKICAgICBGcmFtZTo6Y2xlYXJUaW1l
cnMobV92aWV3LmdldCgpLCBtX2RvY3VtZW50LmdldCgpKTsKIAotICAgIG1fdmlldy0+ZnJhbWUo
KS5sZWdhY3lBbmltYXRpb24oKS5kZXRhY2hGcm9tRG9jdW1lbnQobV9kb2N1bWVudC5nZXQoKSk7
Ci0KICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCByZW1vdmVBbGxFdmVudExp
c3RlbmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNrL2ZvcndhcmQgY2FjaGUs
IHRoaXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3YXksIGJlY2F1c2UgdGhl
IGRvY3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01XaW5kb3cgb2JqZWN0IChk
dWUgdG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5yZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzYzVhZTQ1ODU0YzcyYmRmNmZiNzM2
NWVmNWYyN2ZhYTZmZGJlNWVjLi5iZDM0OTdjMWEyMjAwMTU2NTZlMDAyMDQ1ZTRlNjE3N2MzOTM5
OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFw
cGx5U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1
ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5o
IgpAQCAtMTU2LDcgKzE1NSw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25h
dmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhp
cykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdCht
YWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fYW5pbWF0aW9u
Q29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkK
ICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAg
LCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV9l
dmVudEhhbmRsZXIobWFrZVVuaXF1ZVJlZjxFdmVudEhhbmRsZXI+KCp0aGlzKSkKQEAgLTczNywx
MSArNzM1LDggQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1
bWVudCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+bGF5b3V0
Q29udGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQtPnRp
bWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRB
bmltYXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS5s
ZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsK
KyAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LT50aW1lbGluZXNDb250cm9s
bGVyKCkpCisgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAg
ICAgIHZpZXctPmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcigpOwog
ICAgIH0KIH0KQEAgLTEwMjksMTEgKzEwMjQsOCBAQCB2b2lkIEZyYW1lOjpyZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpCiAKICAgICAvLyBGcmFtZTo6Y2xlYXJUaW1lcnMoKSBz
dXNwZW5kZWQgYW5pbWF0aW9ucyBhbmQgcGVuZGluZyByZWxheW91dHMuCiAKLSAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IG1fZG9j
LT50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFu
aW1hdGlvbnMoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGVnYWN5QW5pbWF0aW9uKCkucmVzdW1l
QW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZG9jLmdldCgpKTsKKyAgICBpZiAoYXV0byogdGltZWxp
bmVzID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgdGltZWxpbmVzLT5y
ZXN1bWVBbmltYXRpb25zKCk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlv
dXRDb250ZXh0KCkuc2NoZWR1bGVMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA2OGZk
YzExNTVkOTEzZWVjZjI1NzA2YWQ5ODg5YjUwMjFmYWJmMmM0Li41MGM2NWY1ZTViMDc1M2MxZTZk
MzA3YjIxM2I1MjAwYzQ1MGFhMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC02Niw3ICs2Niw2IEBA
IGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xhc3MgRE9NV2luZG93OwogY2xhc3Mg
RG9jdW1lbnQ7CkBAIC0xNzQsOCArMTczLDYgQEAgcHVibGljOgogICAgIEZyYW1lU2VsZWN0aW9u
JiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIGNv
bnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgp
LT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwotICAgIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9u
Q29udHJvbGxlcjsgfQotICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFu
aW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIFNj
cmlwdENvbnRyb2xsZXImIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAgICAgY29uc3Qg
U2NyaXB0Q29udHJvbGxlciYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KIApA
QCAtMzQ1LDcgKzM0Miw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsK
IAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVS
ZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYg
RU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRl
Y3Rpb25SZXN1bHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc1YjllMmJmYzll
YWUzZTM1YmVlMThmZWJkNDkxZjQwZjM2N2M2MTYuLmQ0OTI0MWVmMDg4YjgzNzYyNTYwOWQyYzY1
YWJmMjgzNGRhNDE4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRD
YWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01ODYs
OCArNTg1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKCkKIAogICAg
IEFTU0VSVCghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9zbG93UmVwYWlu
dE9iamVjdHMgfHwgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0KLSAg
ICBBU1NFUlQoIWZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuaGFzQW5pbWF0aW9ucygpKTsKIH0K
IAogdm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpA
QCAtNDQxNyw4ICs0NDE0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxl
SWZOZWVkZWRSZWN1cnNpdmUoKQogICAgIC8vIFN0eWxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgc2Ny
aXB0LCB3aGljaCBjYW4gY2F1c2UgdGhpcyBGcmFtZVZpZXcgdG8gYmUgZGVzdHJveWVkLgogICAg
IFJlZjxGcmFtZVZpZXc+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgQW5pbWF0aW9uVXBk
YXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkp
OwotCiAgICAgdXNpbmcgRGVzY2VuZGFudHNEZXF1ZSA9IERlcXVlPFJlZjxGcmFtZVZpZXc+LCAx
Nj47CiAgICAgYXV0byBuZXh0UmVuZGVyZWREZXNjZW5kYW50ID0gW3RoaXNdIChEZXNjZW5kYW50
c0RlcXVlJiBkZXNjZW5kYW50c0RlcXVlKSAtPiBSZWZQdHI8RnJhbWVWaWV3PiB7CiAgICAgICAg
IGlmIChkZXNjZW5kYW50c0RlcXVlLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDBjOGJlNzk0OTUxYjc4ZTE5Yjc1OTI4
ODViYmY4MzVlYjFjOTUzYjEuLjlmYTUxNzBmYTE1MTVmM2FmYjY3Y2YzMTA3ZDk4Y2ZiOTVlYjJk
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNw
cApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlld0xheW91dENvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0yMDQsNyArMjAzLDYgQEAgdm9pZCBGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQoKQogICAgIExheW91dFNjb3BlIGxheW91dFNjb3BlKCp0
aGlzKTsKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlvdXRTdGFydCwgTGF5b3V0RW5k
KTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZyYW1l
KCkpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZ2aWV3
KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7CiAgICAgV2Vha1B0cjxSZW5kZXJFbGVtZW50
PiBsYXlvdXRSb290OwogICAgIAogICAgIG1fbGF5b3V0VGltZXIuc3RvcCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggYTBhNzdkMjg4MzY0ODIxYzUxMGIyZDUxMmJhNzBlNzI5YzIxYjZkNS4uZjky
M2JhODkyOTljMDA4ZTEwZjBkMjhlZTgwYTNmM2Y5N2JhYTk4NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1
ZGUgIkJhY2tGb3J3YXJkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hl
U3RvcmFnZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKQEAgLTE2NDgsOSArMTY0Nyw2IEBAIHZvaWQgUGFnZTo6aGFuZGxl
TG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogICAgIG1fdGhy
b3R0bGluZ1JlYXNvbnMgPSBtX3Rocm90dGxpbmdSZWFzb25zIF4gVGhyb3R0bGluZ1JlYXNvbjo6
TG93UG93ZXJNb2RlOwogICAgIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpLmFkanVzdFJlbmRl
cmluZ1VwZGF0ZUZyZXF1ZW5jeSgpOwogCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkK
LSAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0
YXRlKCk7Ci0KICAgICB1cGRhdGVET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiB9CiAKQEAg
LTIxODUsMTMgKzIxODEsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29s
IGlzVmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPnNob3coKTsKIAogICAgICAgICBpZiAobV9z
ZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKLSAg
ICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZv
ckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICAg
ICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xs
ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRpb25zKCk7
CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVudChb
XSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yMjA5LDEzICsyMjAyLDEwIEBAIHZvaWQgUGFn
ZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAKICAgICBpZiAoIWlzVmlz
aWJsZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1
c3BlbnNpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkgewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3Vt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVu
dC50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGlu
ZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5z
dXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1
bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0g
ZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0aW1l
bGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQog
CiAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0y
NTYwLDIxICsyNTUwLDE0IEBAIHZvaWQgUGFnZTo6cmVzZXRTZWVuTWVkaWFFbmdpbmVzKCkKIHZv
aWQgUGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKQog
ewogICAgIGlmICghaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGlt
ZWxpbmVzQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldHRpbmdz
LT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVB
bmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1h
dGlvblN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVn
YWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQu
dGltZWxpbmVzQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3Mt
PmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICAgICAg
ICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDA4NDNlZDc2MGNkZWM3M2E5Y2Ix
YWZmN2RhMjljY2E0MDI0YTZhNDMuLmU2NGIyZTYxOWIxYWQ0MDFlY2U5OGM3ZWE4NDA5ZWY1YTk5
NmFhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
CkBAIC03MCwxMiArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1NlY3VyZUNvbnRleHRB
dHRyaWJ1dGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNTZWN1cmVDb250ZXh0QXR0cmli
dXRlRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0QXR0cmli
dXRlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5h
YmxlZDsgfQogCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGFyZUVuYWJs
ZWQpIHsgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KLSAgICBib29s
IHdlYkFuaW1hdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25z
RW5hYmxlZDsgfQotCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCAmJiBtX2lz
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsgfQotCiAgICAgdm9pZCBzZXRXZWJB
bmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7IG1f
YXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkID0gYXJlRW5hYmxlZDsg
fQogICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7
IH0KIApAQCAtMzAwLDggKzI5NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTWVudUl0ZW1F
bGVtZW50RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGlyZWN0b3J5VXBsb2FkRW5h
YmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVk
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgeyB0cnVlIH07
Ci0gICAgYm9vbCBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNF
bmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbWFnZUJpdG1hcEVuYWJsZWQgeyB0cnVl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFlNzQzNTk3N2ZhOTI1MGVjMTBjMTcz
OTQxNWRlNGNkNGY1NTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmlt
YXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkKLSAg
ICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2Fu
aW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikpCi17Ci0gICAgLy8gQ29t
cHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCkgPiAwKQotICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotfQotCi1BbmltYXRpb25CYXNl
Ojp+QW5pbWF0aW9uQmFzZSgpID0gZGVmYXVsdDsKLQotY29uc3QgUmVuZGVyU3R5bGUmIEFuaW1h
dGlvbkJhc2U6OmN1cnJlbnRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpOwot
ICAgIHJldHVybiB1bmFuaW1hdGVkU3R5bGUoKTsKLX0KLQotUmVuZGVyRWxlbWVudCogQW5pbWF0
aW9uQmFzZTo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgPyBtX2Vs
ZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmNs
ZWFyKCkKLXsKLSAgICBlbmRBbmltYXRpb24oKTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRyOwot
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRpb25C
YXNlOjpzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFl
bGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tG
b3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwot
ICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFz
ZTo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KTsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0
ZTo6UGxheWluZzsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2goY29u
c3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9u
LT5hbmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXN0
YXRpYyBjb25zdCBjaGFyKiBuYW1lRm9yU3RhdGUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGU6Ok5ldzogcmV0dXJuICJOZXciOwotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOiByZXR1cm4gIlN0YXJ0V2FpdFRp
bWVyIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRT
dHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6IHJldHVy
biAiU3RhcnRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGU6Okxvb3Bpbmc6IHJldHVybiAiTG9vcGluZyI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNl
OjpBbmltYXRpb25TdGF0ZTo6RW5kaW5nOiByZXR1cm4gIkVuZGluZyI7Ci0gICAgY2FzZSBBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OiByZXR1cm4gIlBhdXNlZE5ldyI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVy
OiByZXR1cm4gIlBhdXNlZFdhaXRUaW1lciI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlBhdXNlZFdhaXRT
dHlsZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6
UGF1c2VkV2FpdFJlc3BvbnNlOiByZXR1cm4gIlBhdXNlZFdhaXRSZXNwb25zZSI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOiByZXR1cm4gIlBhdXNl
ZFJ1biI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RG9uZTogcmV0
dXJuICJEb25lIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpGaWxs
aW5nRm9yd2FyZHM6IHJldHVybiAiRmlsbGluZ0ZvcndhcmRzIjsKLSAgICB9Ci0gICAgcmV0dXJu
ICIiOwotfQotI2VuZGlmCi0KLSNpZiAhRVJST1JfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFy
KiBuYW1lRm9yU3RhdGVJbnB1dChBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0IGlu
cHV0KQotewotICAgIHN3aXRjaCAoaW5wdXQpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXc6IHJldHVybiAiTWFrZU5ldyI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbjogcmV0dXJu
ICJTdGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlJlc3RhcnRBbmltYXRpb24iOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVk
OiByZXR1cm4gIlN0YXJ0VGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdHlsZUF2YWlsYWJsZSI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVT
ZXQ6IHJldHVybiAiU3RhcnRUaW1lU2V0IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkOiByZXR1cm4gIkxvb3BUaW1lckZpcmVkIjsK
LSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmly
ZWQ6IHJldHVybiAiRW5kVGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlOiByZXR1cm4gIlBhdXNlT3ZlcnJpZGUiOwot
ICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJp
ZGU6IHJldHVybiAiUmVzdW1lT3ZlcnJpZGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5p
bWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZzogcmV0dXJuICJQbGF5U3RhdGVSdW5u
aW5nIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlT
dGF0ZVBhdXNlZDogcmV0dXJuICJQbGF5U3RhdGVQYXVzZWQiOwotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uOiByZXR1cm4gIkVuZEFuaW1h
dGlvbiI7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLSNlbmRpZgotCi12b2lkIEFuaW1hdGlv
bkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3Vi
bGUgcGFyYW0pCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmlt
YXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUu
Ci0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKLSAgICAg
ICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0g
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0gV1RGOjpu
dWxsb3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgbV9y
ZXF1ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFu
aW1hdGlvbikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0
ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1h
dGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgbV9z
dGFydFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxs
b3B0OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4dEl0
ZXJhdGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24oKTsK
LQotICAgICAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5p
bWF0aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAgIGVu
ZEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ID09
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fYW5p
bWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNl
LCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKLSAgICAgICAgICAgIC8v
IHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAg
ICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0
aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBB
bmltYXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSkgewotICAgICAgICBpZiAobV9hbmlt
YXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyB8fCBtX2FuaW1hdGlvblN0YXRl
ID09IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBh
bmltYXRpb24KLSAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRl
VGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEV4ZWN1dGUgc3RhdGUgbWFjaGluZQotICAgIHN3aXRjaCAo
bV9hbmltYXRpb25TdGF0ZSkgewotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpOZXc6Ci0g
ICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmlt
YXRpb24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8
fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0gICAg
ICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24g
fHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewotICAg
ICAgICAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBTdGFydFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0
YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIHBhdXNpbmcgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZC4KLSAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWROZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3
OwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6
OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFy
YW0gPj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxs
IHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBz
dGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlzLCBu
YW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBt
X2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxl
OwotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLQotICAgICAgICAg
ICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24K
LSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VU
b0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIXBhdXNlZCgpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5n
IGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNlbCB0
aGUgdGltZXIsIHBhdXNlIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRUaW1lciIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3R5bGVBdmFpbGFibGUgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGlt
ZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0
IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSAodGltZSBpcyAl
ZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAg
ICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJl
c3BvbnNlOwotCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG92
ZXJyaWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkgdG8gc3Rh
cnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQKLSAgICAg
ICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAg
ICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0
YXJ0V2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9m
ZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBmb3IgJ2FuaW1h
dGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9uIGFwcGVhcnMgdG8gaGF2
ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRp
b24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1t
X2FuaW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0g
c3RhcnRBbmltYXRpb24odGltZU9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9jb21w
b3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAgICAg
ICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhl
IHN0eWxlIHRvIGJlIGF2YWlsYWJsZSBhbmQgd2UgZ290IGEgcGF1c2UuIFBhdXNlIGFuZCB3YWl0
Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1h
dGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9u
c2U6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3Rh
cnRUaW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNl
ZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFy
dFRpbWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPiAtMC4wMDEpOyAvLyBT
b21ldGltZXMgQ29yZSBBbmltYXRpb24gZ2l2ZXMgdXMgYSBiZWdpblRpbWUgc2xpZ2h0bHkgaW50
byB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0
aW9uU3RhdGUgJXMgLT4gU3RhcnRUaW1lU2V0ICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBhIHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxyZWFk
eSBzZXQKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSB2YWx1ZSBmb3IgJ2FuaW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0
aW9uIGFwcGVhcnMgdG8gaGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZSgpICsgbV9hbmltYXRpb24tPmRlbGF5
KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Ug
a25vdyB0aGUgc3RhcnQgdGltZSwgZmlyZSB0aGUgc3RhcnQgZXZlbnQuCi0gICAgICAgICAgICAg
ICAgb25BbmltYXRpb25TdGFydCgwKTsgLy8gVGhlIGVsYXBzZWRUaW1lIGlzIDAuCi0KLSAgICAg
ICAgICAgICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5n
IHN0YXRlCi0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2UgY2Fu
IHN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAg
ICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0aW5n
IGZvciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4gV2hl
biAKLSAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91Z2gg
dGhlIHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9
IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5pbWF0
aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7
Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAt
PiBQYXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmc6Ci0gICAgICAgICAgICBBU1NFUlQo
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQgfHwgaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYg
KGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRp
b25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTG9vcFRpbWVyRmlyZWQgKHRpbWUgaXMgJWYp
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KLSAgICAg
ICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRlCi0g
ICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmlu
Zy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3BhdXNl
VGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNl
QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVP
cigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QW5pbWF0aW9uU3RhdGU6OkVuZGluZzoKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgICAg
IGlmIChpbnB1dCAhPSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkICYmIGlucHV0
ICE9IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIlN0YXRlIGlzIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcsIGJ1dCBpbnB1dCBp
cyBub3QgQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCBvciBBbmltYXRpb25TdGF0
ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQuIEl0IGlzICVzLiIsIG5hbWVGb3JTdGF0ZUlucHV0KGlu
cHV0KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpFbmRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDAp
OwotICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCi0gICAgICAg
ICAgICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lICh0aW1lIGlzICVmKSIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEZpbGxpbmdG
b3J3YXJkcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkZpbGxp
bmdGb3J3YXJkczsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZp
bmFsIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNp
bmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAg
ICAgICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAg
ICAgICAgICAgIHBhdXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9z
dGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIl
cCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9h
bmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gfHRo
aXN8IG1heSBiZSBkZWxldGVkIGhlcmUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyk7Ci0gICAgICAgICAg
ICBBU1NFUlQocGF1c2VkKCkpOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwotICAg
ICAgICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5Bbmlt
YXRpb25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAgICAg
bV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgIC8vIHdlIHdlcmUgd2Fp
dGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4K
LSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc6
Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZToKLSAgICAg
ICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOgotICAgICAg
ICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46Ci0gICAgICAgICAgICAvLyBXZSB0cmVh
dCB0aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwg
d2hlbiB3ZSBhcmUgaW4KLSAgICAgICAgICAgIC8vIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0
UmVzcG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBzZW5k
IDAgdG8gc3RhcnRBbmltYXRpb24uCi0gICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgY29tZXMgaW4gYW5kIHdlIHdlcmUgaW4gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFJ1biwgd2Ugd2lsbCBub3RpY2UKLSAgICAgICAgICAgIC8vIHRoYXQgd2Ug
aGF2ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAgICAg
ICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVz
ZWQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8fCBp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0gQW5p
bWF0aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpOwotICAgICAgICAgICAgQVNTRVJUKHBh
dXNlZCgpKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6
OlBsYXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0
ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdlcmUgcGF1c2VkIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQsIGFuZCBub3cgd2UncmUgc3Vw
cG9zZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RhcnQsIHNvIGp1bXAgYmFjayB0byB0
aGUgTmV3IHN0YXRlIGFuZCByZXNldC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6TmV3IiwgdGhpcywg
bmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9h
bmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICAgICAgICAg
IG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoaW5wdXQsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwot
ICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRSdW4pCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWUu
dmFsdWVPcigwKSArIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUudmFs
dWVPcigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc3Rh
cnRUaW1lID0gMDsKLQotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0
OwotCi0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxh
YmxlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSB3ZXJlIGVpdGhlciBydW5uaW5nIG9yIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGltZSBy
ZXNwb25zZSBmcm9tIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhl
ciB3YXkgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhbmltYXRpb24gKHBvc3NpYmx5IHdpdGggYW4g
b2Zmc2V0IGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhZCBhbHJlYWR5IGJlZW4gcnVu
bmluZykgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFyZSBv
dmVycmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRv
IHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
IC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYW5pbWF0
aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2UgZ290IHRo
ZSBjYWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
IHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBzdGFydCB0aW1lIGFu
ZCBqdXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KLSAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biAodGltZSBp
cyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1
bjsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAgICAg
ICBtX3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gbV9w
YXVzZVRpbWUudmFsdWVPcigwKSArIHBhcmFtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkTmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9
PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0
OjpTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0IHdl
IGdvdCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IHN0eWxlIGhhcyBiZWVuIHVw
ZGF0ZWQuCi0gICAgICAgICAgICAvLyBXZSBtb3ZlIHRvIHRoZSBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkV2FpdFJlc3BvbnNlIHN0YXRlCi0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFu
aW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0
ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5p
bWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIG92ZXJyaWRlQW5p
bWF0aW9ucygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3Rh
dGU6OkZpbGxpbmdGb3J3YXJkczoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RG9uZToK
LSAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3ZSBh
cmUgZGVsZXRlZAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlv
bkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NvbXBv
c2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRp
bmcgZm9yIHRoZSBkZWxheSB0aW1lIHRvIGV4cGlyZSBhbmQgaXQgaGFzLCBnbyB0byB0aGUgbmV4
dCBzdGF0ZQotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRUaW1lciAmJiBtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpMb29waW5n
ICYmIG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0byB0
aGUgdGhpcyBwb2ludGVyLCBiZWNhdXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAvLyBk
dXJpbmcgYW4gYW5pbWF0aW9uIGNhbGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4gU2luY2Ug
dGhlIG93bmVyIGlzIGEgQ29tcG9zaXRlQW5pbWF0aW9uCi0gICAgLy8gYW5kIGl0IHJlZiBjb3Vu
dHMgdGhpcyBvYmplY3QsIHdlIHdpbGwga2VlcCBhIHJlZiB0byB0aGF0IGluc3RlYWQuIFRoYXQg
d2F5IHRoZSBBbmltYXRpb25CYXNlCi0gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGUgcmVzb3Vy
Y2VzIG9mIGl0cyBDb21wb3NpdGVBbmltYXRpb24gYXMgbmVlZGVkLgotICAgIFJlZjxBbmltYXRp
b25CYXNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBSZWY8Q29tcG9zaXRlQW5pbWF0aW9u
PiBwcm90ZWN0Q29tcG9zaXRlQW5pbWF0aW9uKCptX2NvbXBvc2l0ZUFuaW1hdGlvbik7Ci0gICAg
Ci0gICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKLSAgICBpZiAobV9hbmltYXRpb25TdGF0
ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIpIHsKLSAgICAgICAgaWYgKGJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPj0gbV9hbmltYXRp
b24tPmRlbGF5KCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAt
IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBlbnN1
cmUgdGhhdCBlbGFwc2VkRHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBzdWdn
ZXN0cyB0aGF0Ci0gICAgLy8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJlZ2lu
QW5pbWF0aW9uVXBkYXRlKCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCi0gICAgLy8gQWxzbyBjaGVj
ayBpbiBnZXRUaW1lVG9OZXh0RXZlbnQoKS4KLSAgICBlbGFwc2VkRHVyYXRpb24gPSBzdGQ6Om1h
eChlbGFwc2VkRHVyYXRpb24sIDAuMCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGVuZCB0aW1l
b3V0Ci0gICAgaWYgKG1fdG90YWxEdXJhdGlvbiAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90b3Rh
bER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGJlIGluIEFuaW1h
dGlvblN0YXRlOjpMb29waW5nIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2tpcCBhCi0gICAgICAgIC8v
IHdob2xlIGl0ZXJhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQganVtcCB0byB0aGUgZW5k
IHN0YXRlLgotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IEVuZGluZyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAg
IG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOwotCi0gICAgICAgIC8v
IEZpcmUgYW4gZW5kIGV2ZW50Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkLCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlvbiB0aW1lb3V0Ci0gICAgICAg
IGlmICghbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEhhc24ndCBi
ZWVuIHNldCB5ZXQsIHNldCBpdAotICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1f
YW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9u
LT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxh
cHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoZWxhcHNlZER1cmF0aW9uID49IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0gICAg
ICAgICAgICAvLyBTZXQgdG8gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICBkb3VibGUg
cHJldmlvdXMgPSBtX25leHRJdGVyYXRpb25EdXJhdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAg
ZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFw
c2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBldmVudAotICAgICAgICAgICAgdXBk
YXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkLCBwcmV2
aW91cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRl
UGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSBwbGF5U3RhdGUpCi17Ci0gICAgaWYgKCFtX2Nv
bXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2hlbiB3ZSBnZXQg
aGVyZSwgd2UgY2FuIGhhdmUgb25lIG9mIDQgZGVzaXJlZCBzdGF0ZXM6IHJ1bm5pbmcsIHBhdXNl
ZCwgc3VzcGVuZGVkLCBwYXVzZWQgJiBzdXNwZW5kZWQuCi0gICAgLy8gVGhlIHN0YXRlIG1hY2hp
bmUgY2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQuCi0gICAgLy8g
U2V0IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgIGJvb2wgcGF1
c2UgPSBwbGF5U3RhdGUgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQgfHwgbV9jb21wb3Np
dGVBbmltYXRpb24tPmlzU3VzcGVuZGVkKCk7Ci0KLSAgICBpZiAocGF1c2UgPT0gcGF1c2VkKCkg
JiYgIWlzTmV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShw
YXVzZSA/ICBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQgOiBBbmltYXRpb25T
dGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nLCAtMSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+
IEFuaW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICAvLyBSZXR1cm5zIHRo
ZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1l
YW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJl
cXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBz
ZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkgfHwgcG9z
dEFjdGl2ZSgpIHx8IGZpbGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lcikgewotICAgICAgICBkb3VibGUgdGltZUZyb21Ob3cgPSBtX2FuaW1hdGlv
bi0+ZGVsYXkoKSAtIChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVkU3Rh
cnRUaW1lKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KFNlY29uZHMgeyB0aW1lRnJvbU5vdyB9
LCAwX3MpOwotICAgIH0KLSAgICAKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsK
LSAgICAgICAgCi0gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2Ugcmln
aHQgYXdheS4KLSAgICByZXR1cm4gMF9zOwotfQotCi0vLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFs
IHRpbWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotLy8gVGhlcmUgaXMgbm8gbmVl
ZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZl
Ci0vLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lLgotCi1kb3VibGUgQW5p
bWF0aW9uQmFzZTo6ZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNlZFRp
bWUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0g
bV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSkgOiAxOwotICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0aGUg
Y3VycmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0aGUg
ZnJhbWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIuIFNv
IHdlIG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3NzaWJs
ZQotICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3RpY2Vh
YmxlLiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3Ci0gICAgLy8gQVNTRVJUKGZy
YWN0aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCi0gICAgICAg
IGZyYWN0aW9uYWxUaW1lID0gMDsKLQotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBjb25zdCBpbnQgaW50ZWdyYWxJdGVyYXRpb25D
b3VudCA9IHN0YXRpY19jYXN0PGludD4obV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpOwot
ICAgIGNvbnN0IGJvb2wgaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsID0gbV9hbmltYXRpb24t
Pml0ZXJhdGlvbkNvdW50KCkgLSBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50OwotICAgIGlmIChtX2Fu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5m
aW5pdGUgJiYgIWl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCkKLSAgICAgICAgaW50ZWdyYWxU
aW1lID0gc3RkOjptaW4oaW50ZWdyYWxUaW1lLCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50IC0gMSk7
Ci0KLSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0KLSAgICBpZiAoKChtX2Fu
aW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgKChtX2FuaW1hdGlvbi0+
ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZl
cnNlKSAmJiAhKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCBtX2FuaW1hdGlvbi0+ZGly
ZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAgICAg
ICBmcmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2FsZSAh
PSAxIHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRpbWUg
LSBvZmZzZXQpICogc2NhbGU7Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0KLWRv
dWJsZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQs
IGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
cHJlQWN0aXZlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUoKSkK
LSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2Vk
VGltZSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7
Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKLSAgICAgICAgZHVy
YXRpb24gKj0gbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoZmlsbGlu
Z0ZvcndhcmRzKCkpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gZHVyYXRpb247Ci0KLSAgICBkb3Vi
bGUgZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZShzY2FsZSwgZWxhcHNlZFRp
bWUsIG9mZnNldCk7Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAw
ICYmIGVsYXBzZWRUaW1lID49IGR1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChXVEY6OmlzSW50ZWdy
YWwoZnJhY3Rpb25hbFRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOwot
ICAgIH0KLQotICAgIGlmICghdGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9u
ID0gbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gdGltaW5nRnVu
Y3Rpb24tPnRyYW5zZm9ybVRpbWUoZnJhY3Rpb25hbFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoU2Vjb25k
cyYgdGltZSwgYm9vbCYgaXNMb29waW5nKSBjb25zdAotewotICAgIC8vIERlY2lkZSB3aGVuIHRo
ZSBlbmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgY29uc3QgZG91YmxlIGVsYXBz
ZWREdXJhdGlvbiA9IHN0ZDo6bWF4KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFy
dFRpbWUudmFsdWVPcigwKSwgMC4wKTsKLSAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsKLSAg
ICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb24udmFsdWVPcigwKTsK
LQotICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90YWxE
dXJhdGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5k
dXJhdGlvbigpID4gMCA/IChtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1
cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkpIDogMDsKLSAgICAgICAgbmV4dEl0ZXJh
dGlvblRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgfQotICAgIAot
ICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3RhbER1
cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUgZW5kIHlldAot
ICAgICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKLSAgICAgICAgaXNMb29waW5n
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZAotICAg
ICAgICBpc0xvb3BpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdGltZSA9IFNlY29uZHMg
eyBkdXJhdGlvbkxlZnQgfTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdP
ckxvb3BpbmdTdGF0ZSgpCi17Ci0gICAgU2Vjb25kcyB0OwotICAgIGJvb2wgaXNMb29waW5nOwot
ICAgIGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOwotICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gJXMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmlt
YXRpb25TdGF0ZSksIGlzTG9vcGluZyA/ICJMb29waW5nIiA6ICJFbmRpbmciKTsKLSAgICBtX2Fu
aW1hdGlvblN0YXRlID0gaXNMb29waW5nID8gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgOiBBbmlt
YXRpb25TdGF0ZTo6RW5kaW5nOwotfQotICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZnJlZXplQXRU
aW1lKGRvdWJsZSB0KQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2
ZW4ndCBzdGFydGVkIHlldCwgbWFrZSBpdCBhcyBpZiB3ZSBzdGFydGVkLgotICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgb25B
bmltYXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQobV9zdGFydFRpbWUpOyAvLyBJZiBtX3N0YXJ0VGltZSBpcyB6ZXJvLCB3ZSBoYXZl
bid0IHN0YXJ0ZWQgeWV0LCBzbyB3ZSdsbCBnZXQgYSBiYWQgcGF1c2UgdGltZS4KLSAgICBpZiAo
dCA8PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0
VGltZS52YWx1ZU9yKDApOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0
VGltZS52YWx1ZU9yKDApICsgdCAtIG1fYW5pbWF0aW9uLT5kZWxheSgpOwotCi0gICAgaWYgKGF1
dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnN1c3Bl
bmRBbmltYXRpb25zKE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKG1fcGF1c2VUaW1lLnZh
bHVlKCkpKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBkYXRl
VGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnNlY29uZHMoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1lKCkg
Y29uc3QKLXsKLSAgICBpZiAocGF1c2VkKCkpIHsKLSAgICAgICAgZG91YmxlIGRlbGF5T2Zmc2V0
ID0gKCFtX3N0YXJ0VGltZSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApID8gbV9hbmltYXRp
b24tPmRlbGF5KCkgOiAwOwotICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWUudmFsdWVPcigwKSAt
IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkgLSBkZWxheU9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fc3RhcnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZlKCkg
fHwgZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBtX3RvdGFsRHVyYXRpb24udmFs
dWVPcigwKTsKLQotICAgIHJldHVybiBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3Rh
cnRUaW1lLnZhbHVlT3IoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0RWxhcHNlZFRp
bWUoZG91YmxlIHRpbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAot
ICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwbGF5KCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0KLXZvaWQgQW5pbWF0
aW9uQmFzZTo6cGF1c2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QK
LX0KLQotc3RhdGljIGJvb2wgY29udGFpbnNSb3RhdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4+JiBvcGVyYXRpb25zKQotewotICAgIGZvciAoY29uc3QgYXV0byYg
b3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkg
PT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1
dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZW5k
ZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNv
bnN0Ci17Ci0gICAgRmxvYXRSZWN0IGZsb2F0Qm91bmRzID0gYm91bmRzOwotICAgIEZsb2F0UG9p
bnQgdHJhbnNmb3JtT3JpZ2luOwotICAgIAotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1PcmlnaW4g
PSBjb250YWluc1JvdGF0aW9uKHN0eWxlLnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKSkgfHwgc3R5
bGUudHJhbnNmb3JtKCkuYWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdpbigpOwotICAgIGlmIChhcHBs
eVRyYW5zZm9ybU9yaWdpbikgewotICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSByZW5kZXJlckJv
eC5sb2NhdGlvbigpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnRyYW5zZm9ybU9y
aWdpblhZKCksIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgIC8vIElnbm9yZSB0cmFuc2Zv
cm1PcmlnaW5aIGJlY2F1c2Ugd2UnbGwgYmFpbCBpZiB3ZSBlbmNvdW50ZXIgYW55IDNEIHRyYW5z
Zm9ybXMuCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2luKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHN0eWxlLnRyYW5zZm9ybSgp
Lm9wZXJhdGlvbnMoKSkgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEUpIHsKLSAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3QgdHJl
YXQgdGhpcyBhcyBhIGZ1bGwgcm90YXRpb24uIFRoaXMgY291bGQgdGFrZSBhbmdsZSBpbnRvIGFj
Y291bnQgdG8gcmVkdWNlIGluZmxhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gYm91
bmRzT2ZSb3RhdGluZ1JlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICAgICAgb3BlcmF0
aW9uLT5hcHBseSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgICAgICBp
ZiAoIXRyYW5zZm9ybS5pc0FmZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYIHx8IG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFU
UklYXzNEKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9z
ZWQyVHlwZSB0b0RlY29tcDsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZGVjb21wb3NlMih0
b0RlY29tcCk7Ci0gICAgICAgICAgICAgICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVzIGZy
b20gdXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgICAgICAgICAgICAg
aWYgKHRvRGVjb21wLmFuZ2xlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gdHJhbnNmb3JtLm1hcFJl
Y3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFwcGx5VHJhbnNm
b3JtT3JpZ2luKQotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkodHJhbnNmb3JtT3JpZ2luKTsK
LQotICAgIGJvdW5kcyA9IExheW91dFJlY3QoZmxvYXRCb3VuZHMpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1h
dHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5kZXJl
ckJveCwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgIGlmICghdHJh
bnNmb3JtLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5cGUgZnJvbURlY29tcDsKLSAgICB0cmFuc2Zvcm0u
ZGVjb21wb3NlMihmcm9tRGVjb21wKTsKLSAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMgdXMg
ZnJvbSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICBpZiAoZnJvbURl
Y29tcC5hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm91bmRzID0gTGF5b3V0
UmVjdCh0cmFuc2Zvcm0ubWFwUmVjdChib3VuZHMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLQotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQyMDRl
ZDc5NmFlNTIxYWE4YjFjOGU0NzI4OTI0MDI0NTRhODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlQW5p
bWF0aW9uOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheW91dFJl
Y3Q7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUaW1p
bmdGdW5jdGlvbjsKLQotZW51bSBjbGFzcyBBbmltYXRlQ2hhbmdlIHsKLSAgICBTdHlsZUJsZW5k
ZWQgICAgICAgICAgICA9IDEgPDwgMCwgLy8gU3R5bGUgd2FzIGNoYW5nZWQuCi0gICAgU3RhdGVD
aGFuZ2UgICAgICAgICAgICAgPSAxIDw8IDEsIC8vIEFuaW1hdGlvbiBzdGF0ZSgpIGNoYW5nZWQu
Ci0gICAgUnVubmluZ1N0YXRlQ2hhbmdlICAgICAgPSAxIDw8IDIsIC8vIEFuaW1hdGlvbiAicnVu
bmluZyBvciBwYXVzZWQiIGNoYW5nZWQuCi19OwotCi1lbnVtIGNsYXNzIEFuaW1hdGlvbkltcGFj
dCB7Ci0gICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAgICAgPSAxIDw8IDAsCi0gICAgRm9yY2VzU3Rh
Y2tpbmdDb250ZXh0ICAgPSAxIDw8IDEKLX07Ci0KLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxBbmltYXRpb25CYXNlPgotICAgICwgcHVibGljIENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci0gICAg
ZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFu
c2l0aW9uLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0gICAgdmlydHVhbCB+QW5p
bWF0aW9uQmFzZSgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3Q7Ci0KLSAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRo
ZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKLSAgICAvLyB0
aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBkZWZl
cnJlZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KLSAgICAvLyBJZiBzbywgd2Ugc3RheSBp
biB0aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1
cm5zIHRoZSBzdGFydCB0aW1lKS4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3VycmVu
dCB0aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byBBbmltYXRpb25T
dGF0ZTo6TG9vcGluZwotICAgIC8vIG9yIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcuCi0gICAgZW51
bSBjbGFzcyBBbmltYXRpb25TdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBOZXcsICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBy
dW5uaW5nIHlldAotICAgICAgICBTdGFydFdhaXRUaW1lciwgICAgICAgICAgICAgLy8gc3RhcnQg
dGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZSwgICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFu
aW1hdGlvbnMKLSAgICAgICAgU3RhcnRXYWl0UmVzcG9uc2UsICAgICAgICAgIC8vIGFuaW1hdGlv
biBzdGFydGVkLCB3YWl0aW5nIGZvciByZXNwb25zZQotICAgICAgICBMb29waW5nLCAgICAgICAg
ICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBsb29w
IHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgRW5kaW5nLCAgICAgICAg
ICAgICAgICAgICAgIC8vIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVyIHJ1
bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgUGF1c2VkTmV3LCAgICAgICAgICAgICAg
ICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24gd2FzIGNyZWF0ZWQKLSAgICAgICAg
UGF1c2VkV2FpdFRpbWVyLCAgICAgICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRp
b24gc3RhcnRlZAotICAgICAgICBQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGUsICAgLy8gaW4gcGF1
c2UgbW9kZSB3aGVuIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwCi0gICAgICAgIFBhdXNlZFdhaXRS
ZXNwb25zZSwgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcgc3Rh
dGUKLSAgICAgICAgUGF1c2VkUnVuLCAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVz
ZWQgd2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQotICAgICAgICBEb25lLCAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5k
IHJlbW92ZWQKLSAgICAgICAgRmlsbGluZ0ZvcndhcmRzICAgICAgICAgICAgIC8vIGFuaW1hdGlv
biBoYXMgZW5kZWQgYW5kIGlzIHJldGFpbmluZyBpdHMgZmluYWwgdmFsdWUKLSAgICB9OwotCi0g
ICAgZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZUlucHV0IDogdWludDhfdCB7Ci0gICAgICAgIE1h
a2VOZXcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0ZQotICAg
ICAgICBTdGFydEFuaW1hdGlvbiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQKLSAg
ICAgICAgUmVzdGFydEFuaW1hdGlvbiwgIC8vIGZvcmNlIGEgcmVzdGFydCBmcm9tIGFueSBzdGF0
ZQotICAgICAgICBTdGFydFRpbWVyRmlyZWQsICAgLy8gc3RhcnQgdGltZXIgZmlyZWQKLSAgICAg
ICAgU3R5bGVBdmFpbGFibGUsICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFydCBh
bmltYXRpbmcKLSAgICAgICAgU3RhcnRUaW1lU2V0LCAgICAgIC8vIG1fc3RhcnRUaW1lIHdhcyBz
ZXQKLSAgICAgICAgTG9vcFRpbWVyRmlyZWQsICAgIC8vIGxvb3AgdGltZXIgZmlyZWQKLSAgICAg
ICAgRW5kVGltZXJGaXJlZCwgICAgIC8vIGVuZCB0aW1lciBmaXJlZAotICAgICAgICBQYXVzZU92
ZXJyaWRlLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQotICAgICAg
ICBSZXN1bWVPdmVycmlkZSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9uCi0g
ICAgICAgIFBsYXlTdGF0ZVJ1bm5pbmcsICAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5uaW5n
Ci0gICAgICAgIFBsYXlTdGF0ZVBhdXNlZCwgICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1
c2VkCi0gICAgICAgIEVuZEFuaW1hdGlvbiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBhbnkg
c3RhdGUKLSAgICB9OwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIEFuaW1h
dGlvblN0YXRlOjpOZXcgdG8gc3RhcnQgYW5pbWF0aW9uCi0gICAgdm9pZCB1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCwgZG91YmxlIHBhcmFtKTsKLQotICAgIC8vIEFuaW1h
dGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKLSAgICB2b2lkIG9uQW5p
bWF0aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLSAgICB7Ci0gICAg
ICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQs
IHN0YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQotICAgIHZvaWQgdXBk
YXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSk7Ci0gICAgYm9vbCBwbGF5U3RhdGVQbGF5
aW5nKCkgY29uc3Q7Ci0KLSAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyIHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgcHJlQWN0aXZlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0
YXRlOjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
VGltZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5
bGVBdmFpbGFibGUgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0UmVzcG9uc2U7Ci0gICAgfQotCi0gICAgYm9vbCBwb3N0QWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotICAgIGJvb2wg
ZmlsbGluZ0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmlt
YXRpb25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7
IHJldHVybiAhcG9zdEFjdGl2ZSgpICYmICFwcmVBY3RpdmUoKTsgfQotICAgIGJvb2wgcnVubmlu
ZygpIGNvbnN0IHsgcmV0dXJuICFpc05ldygpICYmICFwb3N0QWN0aXZlKCk7IH0KLSAgICBib29s
IHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNQYXVz
ZWRTdGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZE5ldyAmJiBzdGF0ZSA8PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOyB9
Ci0gICAgc3RhdGljIGJvb2wgaXNSdW5uaW5nU3RhdGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUpIHsg
cmV0dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAm
JiBzdGF0ZSA8IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0KLSAgICBib29sIGluUGF1c2VkU3Rh
dGUoKSBjb25zdCB7IHJldHVybiBpc1BhdXNlZFN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpOyB9Ci0g
ICAgYm9vbCBpblJ1bm5pbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUnVubmluZ1N0YXRlKG1f
YW5pbWF0aW9uU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0YXJ0
VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlN0YXJ0V2FpdFJlc3BvbnNlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUo
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRTdHlsZUF2YWlsYWJsZTsgfQotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0FjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNj
YWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51bGxw
dHIpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKLQotICAgIHZpcnR1
YWwgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNv
bnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7
Ci0KLSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBjb25zdDsKLQot
ICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbikg
eyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsgfQotCi0g
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3
aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCi0gICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBp
cyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKLSAgICAv
LyBzZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3
aWxsIHByb2JhYmx5IG5vdCBnZXQKLSAgICAvLyBiYWNrIHRoZSBBbmltYXRpb25TdGF0ZUlucHV0
OjpTdGFydFRpbWVTZXQgaW5wdXQuCi0gICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0
aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PwotICAgIHZpcnR1YWwgYm9vbCBhZmZlY3Rz
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCAvKnByb3BlcnR5Ki8pIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYWNjZWxl
cmF0ZWRPbmx5ICYmICFtX2lzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKCFhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBpblJ1bm5pbmdTdGF0ZSgpIHx8IGluUGF1
c2VkU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRj
aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNo
OyB9Ci0gICAgYm9vbCBmaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2lmIEVOQUJMRShGSUxURVJT
X0xFVkVMXzIpCi0gICAgYm9vbCBiYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7
IH0KLSNlbmRpZgotICAgIGJvb2wgY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0K
LSAgICAvLyBGcmVlemUgdGhlIGFuaW1hdGlvbjsgdXNlZCBieSBEdW1wUmVuZGVyVHJlZS4KLSAg
ICB2b2lkIGZyZWV6ZUF0VGltZShkb3VibGUgdCk7Ci0KLSAgICAvLyBQbGF5IGFuZCBwYXVzZSBB
UEkKLSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0gICAgCi0gICAgZG91Ymxl
IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIGNvbnN0OwotICAgIAotICAgIGRvdWJsZSBnZXRF
bGFwc2VkVGltZSgpIGNvbnN0OwotICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3aWxs
IGFkanVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KLSAgICB2b2lk
IHNldEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0gICAgCi0gICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgp
IAotICAgIHsKLSAgICAgICAgQVNTRVJUKHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKTsKLSAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxh
YmxlLCAtMSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJyaWRl
QW5pbWF0aW9ucygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0
aW9ucygpIHsgfQotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24o
KSB7IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgfQotCi0gICAgLy8gVGhlc2UgYXJlIGNh
bGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMgY2Fu
IGRvIGFueSBleHRyYSB3b3JrCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91
YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRl
cmF0aW9uKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkFu
aW1hdGlvbkVuZChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICAKLSAgICAvLyB0aW1l
T2Zmc2V0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgd2hlbiB0aGUgYW5pbWF0
aW9uIHNob3VsZCBzdGFydC4gTmVnYXRpdmUgdmFsdWVzIGFyZSBPSy4KLSAgICAvLyBSZXR1cm4g
dmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhwZWN0IGFuIGFzeW5jaHJvbm91cyBub3RpZnlB
bmltYXRpb25TdGFydGVkKCkgY2FsbGJhY2suCi0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0
aW9uKGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyB0aW1l
T2Zmc2V0IGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhbmltYXRpb24gaXMgYmVpbmcgcGF1c2Vk
LgotICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgLyp0aW1lT2Zmc2V0Ki8p
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKmZpbGxpbmdGb3J3YXJk
cyovID0gZmFsc2UpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmlt
YXRlZFN0eWxlKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3BpbmdT
dGF0ZSgpOwotCi0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvblN0YXRlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKEVs
ZW1lbnQqKTsKLSAgICAKLSAgICB2b2lkIGdldFRpbWVUb05leHRFdmVudChTZWNvbmRzJiB0aW1l
LCBib29sJiBpc0xvb3BpbmcpIGNvbnN0OwotCi0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lKGRv
dWJsZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBkb3VibGUgb2Zmc2V0KSBjb25zdDsKLQot
ICAgIC8vIFRoZXNlIHJldHVybiB0cnVlIGlmIHdlIGNhbiBlYXNpbHkgY29tcHV0ZSBhIGJvdW5k
aW5nIGJveCBieSBhcHBseWluZyB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gdG8gdGhlIGJvdW5kcyBy
ZWN0LgotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChj
b25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJl
Y3QmIGJvdW5kcykgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFN
YXRyaXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBM
YXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2lzQWNj
ZWxlcmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0
Y2ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxz
ZSB9OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgYm9vbCBtX2JhY2tkcm9wRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBDb21wb3NpdGVB
bmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAvLyBJZGVhbGx5IHRoaXMgd291bGQgYmUg
YSByZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xlYXJlZCBpZiBhbiBhbmltYXRpb24gaXMg
ZGVzdHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFjay4KLSAgICBSZWY8QW5pbWF0aW9uPiBt
X2FuaW1hdGlvbjsKLQotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV9zdGFydFRpbWU7Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRp
bWUgeyAwIH07Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3RvdGFsRHVyYXRpb247Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBtX25leHRJdGVyYXRpb25EdXJhdGlvbjsKLQotICAgIEFuaW1hdGlvblN0
YXRlIG1fYW5pbWF0aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07Ci0gICAgYm9vbCBt
X2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMmFjOWRhNzhkMzI2YzU4NDE1MmYyMzlmMjdkZTgzNDEyZjYxNzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0
aW9uQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUg
IkFuaW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNTU1By
b3BlcnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVHJhbnNpdGlvbkV2ZW50LmgiCi0jaW5j
bHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbGxvdyBhIGxpdHRsZSBtb3Jl
IHRoYW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSBy
YXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9uVGltZXJEZWxheSB7IDE1X21zIH07
Ci0vLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gMzBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBh
dCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0
aW9uVGltZXJUaHJvdHRsZWREZWxheSB7IDMwX21zIH07Ci0KLWNsYXNzIEFuaW1hdGlvblByaXZh
dGVVcGRhdGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2Nr
KENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQotICAg
ICAgICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAgIHsK
LSAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0g
ICAgfQotICAgIAotICAgIH5BbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2soKQotICAgIHsKLSAg
ICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0K
LSAgICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25Db250
cm9sbGVyOwotfTsKLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fYW5pbWF0aW9uVGltZXIo
KnRoaXMsICZDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJl
ZCkKLSAgICAsIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKnRoaXMsICZDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJl
ZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291
bnQoMCkKLSAgICAsIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24oZmFsc2UpCi0g
ICAgLCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChmYWxzZSkKLXsKLX0KLQot
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5DU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSgpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBjb21wb3Np
dGUgYW5pbWF0aW9ucyBoZXJlIGJlY2F1c2UgdGhlCi0gICAgLy8gZGVzdHJ1Y3RvciBvZiBDb21w
b3NpdGVBbmltYXRpb24gd2lsbCBjYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBiYWNrLgotICAg
IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5jbGVhcigpOwotfQotCi1Db21wb3NpdGVBbmltYXRpb24m
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRpb24o
RWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnNldEhhc0NTU0FuaW1hdGlvbigpOwot
Ci0gICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJlKCZlbGVtZW50
LCBbJl0gewotICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRoaXMp
OwotICAgIH0pOwotCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudCgm
ZWxlbWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3Vz
cGVuZEFuaW1hdGlvbnMoKTsKLQotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
LX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoRWxlbWVudCYg
ZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNDU1NBbmltYXRpb24oKSA9PSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuY29udGFpbnMoJmVsZW1lbnQpKTsKLQotICAgIGlmICghZWxlbWVu
dC5oYXNDU1NBbmltYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1lbnQu
Y2xlYXJIYXNDU1NBbmltYXRpb24oKTsKLQotICAgIGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuZmluZCgmZWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HKEFuaW1hdGlvbnMsICJD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAmZWxlbWVu
dCk7Ci0KLSAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25z
dCBFdmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluZm8uZWxlbWVudC5w
dHIoKSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3Bh
dGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjdXJyZW50RWxlbWVudCkgewotICAgICAg
ICByZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0gICAg
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUg
c3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIGludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCi0gICAgLy8gRklYTUU6IFRoZSBjb2RlIGJl
bG93IGRvZXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cyByZWdh
cmRpbmcgc3VzcGVuZGVkIHN0YXRlLgotICAgIGF1dG8mIGFuaW1hdGlvbiA9ICppdC0+dmFsdWU7
Ci0gICAgYm9vbCByZXN1bHQgPSBhbmltYXRpb24uaXNTdXNwZW5kZWQoKTsKLSAgICBhbmltYXRp
b24uY2xlYXJFbGVtZW50KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMucmVtb3ZlKGl0
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNl
dENoYW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBBbmltYXRpb25Qcml2
YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotICAgIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlOwotICAgIGJvb2wgY2FsbGVkU2V0Q2hhbmdlZCA9IGZhbHNlOwot
Ci0gICAgZm9yIChhdXRvJiBjb21wb3NpdGVBbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqY29tcG9zaXRl
QW5pbWF0aW9uLnZhbHVlOwotICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpICYm
IGFuaW1hdGlvbi5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlmICh0
ICYmICghdGltZVRvTmV4dFNlcnZpY2UgfHwgdC52YWx1ZSgpIDwgdGltZVRvTmV4dFNlcnZpY2Uu
dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0LnZhbHVlKCk7
Ci0gICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYgdGltZVRvTmV4dFNlcnZpY2Uu
dmFsdWUoKSA9PSAwX3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQgIT0g
Q2FsbFNldENoYW5nZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9zaXRlQW5pbWF0
aW9uLmtleTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tG
b3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwot
ICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgICAgICAg
ICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoY2FsbGVkU2V0Q2hhbmdlZCkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdGltZVRvTmV4dFNlcnZp
Y2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotCi0gICAgY29uc3QgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wb3NpdGVBbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50
KTsKLSAgICBpZiAoIWNvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKSAmJiBjb21wb3Np
dGVBbmltYXRpb24tPmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdGltZVRvTmV4dFNlcnZpY2Ug
PSBjb21wb3NpdGVBbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBpZiAoIXRp
bWVUb05leHRTZXJ2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hbmltYXRpb25U
aW1lci5pc0FjdGl2ZSgpICYmIChtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfHwg
bV9hbmltYXRpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCkgPD0gdGltZVRvTmV4dFNlcnZpY2Uu
dmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRP
bmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxT
ZXRDaGFuZ2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgT3B0aW9uYWw8U2Vj
b25kcz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFuZ2Vk
KTsKLQotICAgIExPRyhBbmltYXRpb25zLCAidXBkYXRlQW5pbWF0aW9uVGltZXI6IHRpbWVUb05l
eHRTZXJ2aWNlIGlzICUuMmYiLCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZU9yKFNlY29uZHMgeyAt
MSB9KS52YWx1ZSgpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2VydmljZSwgd2Ugd2Fu
dCB0byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5nCi0gICAgaWYgKCF0
aW1lVG9OZXh0U2VydmljZSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3YW50IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdlIHN0
YXJ0IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRpbmcK
LSAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byogcGFn
ZSA9IG1fZnJhbWUucGFnZSgpOwotICAgICAgICBib29sIHNob3VsZFRocm90dGxlID0gcGFnZSAm
JiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgU2Vjb25kcyBkZWxheSA9
IHNob3VsZFRocm90dGxlID8gYW5pbWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSA6IGFuaW1hdGlv
blRpbWVyRGVsYXk7Ci0KLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkg
fHwgbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IGRlbGF5KQotICAgICAgICAg
ICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhkZWxheSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gc3RhcnQgYSBvbmUtc2hv
dCB0aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRP
bmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCkK
LXsKLSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKLXsKLSAgICAv
LyBQcm90ZWN0IHRoZSBmcmFtZSBmcm9tIGdldHRpbmcgZGVzdHJveWVkIGluIHRoZSBldmVudCBo
YW5kbGVyCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICBib29sIHVw
ZGF0ZVN0eWxlID0gIW1fZXZlbnRzVG9EaXNwYXRjaC5pc0VtcHR5KCkgfHwgIW1fZWxlbWVudENo
YW5nZXNUb0Rpc3BhdGNoLmlzRW1wdHkoKTsKLQotICAgIC8vIGZpcmUgYWxsIHRoZSBldmVudHMK
LSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RGTW92ZSht
X2V2ZW50c1RvRGlzcGF0Y2gpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHNUb0Rpc3Bh
dGNoKSB7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBldmVudC5lbGVtZW50OwotICAgICAg
ICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQp
Ci0gICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50OjpjcmVh
dGUoZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNldWRv
RWxlbWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgpKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1l
bnQuZGlzcGF0Y2hFdmVudChBbmltYXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlwZSwg
ZXZlbnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0VsZW1l
bnROYW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6bnVsbG9wdCwgbnVsbHB0
cikpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hhbmdlc1Rv
RGlzcGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBtX2Vs
ZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwotCi0gICAgaWYgKHVwZGF0ZVN0eWxlKQot
ICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVTdHlsZUlmTmVl
ZGVkRGlzcGF0Y2hlcigpCi17Ci0gICAgaWYgKCFtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRj
aGVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIu
c3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5n
JiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotewot
ICAgIG1fZXZlbnRzVG9EaXNwYXRjaC5hcHBlbmQoeyBlbGVtZW50LCBldmVudFR5cGUsIG5hbWUs
IGVsYXBzZWRUaW1lIH0pOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIo
KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVudENo
YW5nZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRDaGFuZ2Vz
VG9EaXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5nZXNU
b0Rpc3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBE
b2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBzdGFydFVwZGF0ZVN0eWxlSWZO
ZWVkZWREaXNwYXRjaGVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJlZCgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25k
cz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2VkKTsK
LQotICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT52aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIC8vIFdlIG5lZWQg
dG8ga2VlcCB0aGUgZnJhbWUgYWxpdmUsIHNpbmNlIGl0IG93bnMgdXMuCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICAvLyBUaGUgYW5pbWF0aW9uIHRpbWVyIG1pZ2h0
IGZpcmUgYmVmb3JlIHRoZSBsYXlvdXQgdGltZXIsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3ZSBt
aWdodCBjcmVhdGUgc29tZSBhbmltYXRpb25zIHdpdGggaW5jb3JyZWN0Ci0gICAgLy8gdmFsdWVz
IGlmIHdlIGRvbid0IGxheW91dCBmaXJzdC4KLSAgICBpZiAobV9yZXF1aXJlc0xheW91dCkgewot
ICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS5kb2N1bWVudCgpLT52aWV3KCkp
IHsKLSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAg
ICAgICAgZnJhbWVWaWV3LT5mb3JjZUxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVx
dWlyZXNMYXlvdXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYW5pbWF0aW9u
VXBkYXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBubwot
ICAgIC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmltYXRp
b25zKQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7
Ci0KLSAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hh
bmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRv
IGFuIGltbWVkaWF0ZQotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQuIEl0IHdpbGwgdGhlbiBj
YWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0aW9u
VGltZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdheSwg
dG8gYXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlvbiBj
b21wbGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0gICAg
ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5k
ZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiBhbmltYXRp
b24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0gICAg
aWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYW5pbWF0
aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSk7Ci19Ci0KLWJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9u
T25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQo
cmVuZGVyZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVy
dHksIHRydWUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRh
dGVUaHJvdHRsaW5nU3RhdGUoKQotewotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0KLSAg
ICBmb3IgKGF1dG8qIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNo
aWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgY2hpbGRGcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0
YXRlKCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1h
dGlvbkludGVydmFsKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBJTkZJTklUWSB9OwotCi0gICAgcmV0dXJu
IFNlY29uZHMgeyBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQotewot
ICAgIGlmIChpc1N1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdXNwZW5kQW5p
bWF0aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2ZXJz
ZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAg
ICAgICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLQotICAg
IG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIWlzU3VzcGVuZGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2ZyYW1l
LmRvY3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVzCi0gICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmxlZ2FjeUFuaW1hdGlv
bigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLX0K
LQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uc0FyZVN1c3Bl
bmRlZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gaXNTdXNw
ZW5kZWQoKSB8fCBtX3N1c3BlbmRlZERvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7Ci19Ci0K
LXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmRldGFjaEZyb21Eb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMucmVtb3ZlKGRv
Y3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVu
ZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKGFu
aW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci0KLSAgICBBbmlt
YXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9yIChh
dXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZh
bmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5pbWF0
aW9uLnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1h
dGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
c3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYg
KCFhbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgQW5pbWF0
aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAoYXV0
byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5p
bWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1hdGlv
bi52YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0
QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAo
IWFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkgfHwgYWxsb3dzTmV3
QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JE
b2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sIGFsbG93ZWQpCi17
Ci0gICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBhbGxvd2VkOwotfQot
Ci1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGlt
ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsK
LSAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBv
c2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNl
QW5pbWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0
eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAg
Q29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRyYW5z
aXRpb25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIGVsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERp
c3BhdGNoZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Nb25vdG9uaWNUaW1lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0aW9u
VXBkYXRlQ291bnQpOwotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpCi0gICAg
ICAgIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0K
LSAgICByZXR1cm4gbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUudmFsdWUoKTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5BbmltYXRpb25VcGRhdGUoKQot
ewotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KQotICAgICAgICBtX2JlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICArK21fYmVnaW5BbmltYXRp
b25VcGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
ZW5kQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVwZGF0
ZUNvdW50ID4gMCk7Ci0gICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCA9PSAxKSB7
Ci0gICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgICAgIGlmICghbV93YWl0aW5nRm9yQXN5
bmNTdGFydE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICB9Ci0gICAgLS1tX2JlZ2luQW5pbWF0aW9uVXBk
YXRlQ291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlY2Vp
dmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIExPRyhBbmlt
YXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgcmVjZWl2ZWRTdGFydFRp
bWVSZXNwb25zZSAlZiIsIHRoaXMsIHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkp
OwotCi0gICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotICAg
IHN0YXJ0VGltZVJlc3BvbnNlKHRpbWUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRlZFN0eWxlRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRl
QW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRp
b25VcGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBhdXRvIGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7Ci0gICAgaWYgKCFhbmltYXRpbmdTdHlsZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFuaW1hdGluZ1N0eWxlOwotfQot
Ci1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24oRWxlbWVudCYgZWxlbWVudCwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAg
IGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwot
ICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYW5p
bWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBmYWxzZSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbi0+Y29tcHV0ZUV4
dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcyk7Ci19Ci0KLXVuc2lnbmVkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQq
IGRvY3VtZW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBp
ZiAoJmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBj
b3VudCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwotICAg
IH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFu
aW1hdGlvbikKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2Uu
cmVtb3ZlKCZhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5hZGQo
JmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlv
blRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFu
aW1hdGlvblRvUmVtb3ZlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6c3R5bGVBdmFpbGFibGUoKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJz
IGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3YWl0aW5n
QW5pbWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKQotICAgICAgICB3YWl0aW5n
QW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNl
JiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQotewotICAgIC8vIElmIHdpbGxHZXRS
ZXNwb25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3YWl0
aW5nIGZvciBhIHJlc3BvbnNlCi0gICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNhbGwg
dG8gbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgZG9u
J3QgbmVlZCB0byBhZGQgaXQgdG8gdGhpcyBsaXN0LiBXZSBqdXN0IHNldCBhIHdhaXRpbmdGb3JB
UmVzcG9uc2UgZmxhZyAKLSAgICAvLyB3aGljaCBzYXlzIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUg
cmVzcG9uc2UuIElmIHdpbGxHZXRSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24gCi0g
ICAgLy8gaXMgbm90IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJhdGhl
ciBmb3IgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCBmb3IgCi0gICAgLy8gYW5vdGhlciBhbmlt
YXRpb24gdG8gd2hpY2ggaXQgd2lsbCBzeW5jLgotICAgIC8vCi0gICAgLy8gV2hlbiBlbmRBbmlt
YXRpb25VcGRhdGUoKSBpcyBjYWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5nRm9y
QVJlc3BvbnNlIGZsYWcgaXMKLSAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4gYW5k
IHdpbGwgZG8gb3VyIHdvcmsgd2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwK
LSAgICAvLyBjb21lcyBpbi4gSWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRpbmcg
YSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCwgc28gd2Ugd2lsbAotICAgIC8vIGRvIG91ciB3b3Jr
IHJpZ2h0IGF3YXkuIEluIGJvdGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFydFJl
c3BvbnNlKCkgbWV0aG9kCi0gICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJzdCBj
YXNlIHdlIHNlbmQgaW4gdGhlIHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgpLgot
ICAgIC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKS4KLSAgICAvLwotICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBh
bGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2Ft
ZSAKLSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgotICAgIC8vCi0KLSAgICBpZiAo
d2lsbEdldFJlc3BvbnNlKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0
aW9uID0gdHJ1ZTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZS5hZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1h
dGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICBpZiAo
bV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShNb25vdG9u
aWNUaW1lIHRpbWUpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5kIHNl
bmQgdGhlbSBvbiB0aGVpciB3YXkKLQotICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uIDog
bV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKQotICAgICAgICBhbmltYXRp
b24tPm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsKLSAgICAKLSAgICBtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKLSAgICBtX3dhaXRpbmdGb3JB
c3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYgYW5p
bWF0aW9uKQotewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9uKTsK
LQotICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7Ci0g
ICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5pbWF0
aW9uKTsKLQotICAgIGJvb2wgYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0gZmFs
c2U7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+d2FpdGluZ0ZvclN0YXJ0
VGltZSgpICYmIGFuaW1hdGlvbi0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBhbnlB
bmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5
bmNTdGFydCkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZh
bHNlOwotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9sbGVy
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZGF0YShtYWtlVW5pcXVlPENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlPihmcmFtZSkpCi17Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6On5D
U1NBbmltYXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAo
IW1fZGF0YS0+Y2xlYXIoZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlbGVt
ZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgp
ID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIGVsZW1lbnQuaW52YWxp
ZGF0ZVN0eWxlKCk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0ZSBDU1NBbmltYXRpb25Db250cm9sbGVy
Ojp1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBu
ZXdTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGJvb2wgaGFzT3JI
YWRBbmltYXRpb25zID0gKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zT3JUcmFu
c2l0aW9ucygpKSB8fCBuZXdTdHlsZS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpOwotICAg
IGlmICghaGFzT3JIYWRBbmltYXRpb25zKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYg
KGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6
Tm90SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gRG9u
J3QgcnVuIHRyYW5zaXRpb25zIHdoZW4gcHJpbnRpbmcuCi0gICAgaWYgKGVsZW1lbnQuZG9jdW1l
bnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEg
aGFzaHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQotICAgIC8vIGFnYWluc3QgdGhlIGFuaW1h
dGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gSWYgZGVzdGlu
YXRpb24gdmFsdWVzCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0aW9u
LiBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgotICAg
IC8vIGEgbmV3IHN0eWxlLgotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmlt
YXRpb24gPSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBh
dXRvIHVwZGF0ZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9sZFN0eWxl
LCBuZXdTdHlsZSk7Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsK
LSAgICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUuYW5p
bWF0aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewotICAg
ICAgICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICAg
ICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0
KCkpCi0gICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAgIG1f
ZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICBm
cmFtZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXBkYXRl
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKLQotICAgIGlmIChyZW5k
ZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxl
bWVudCgpKQotICAgICAgICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KCpyZW5kZXJlci5lbGVtZW50KCkpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3Vs
dCA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y29tcHV0ZUV4dGVu
dE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBMYXlvdXRSZWN0JiBib3VuZHMp
IGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9u
cygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIExPRyhBbmlt
YXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlciAlcCBub3RpZnlBbmltYXRpb25TdGFydGVk
IG9uIHJlbmRlcmVyICVwLCB0aW1lPSVmIiwgdGhpcywgJnJlbmRlcmVyLCBzdGFydFRpbWUuc2Vj
b25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7
Ci0KLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsK
LSAgICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKLX0KLQot
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBBbmlt
YXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4g
bV9kYXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBuYW1lLCB0KTsKLX0KLQotdW5z
aWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERv
Y3VtZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5udW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcm
IHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRp
b25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9kYXRhLT5wYXVzZVRyYW5zaXRpb25B
dFRpbWUoZWxlbWVudCwgcHJvcGVydHksIHQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5z
dHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRl
cmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNSdW5u
aW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuc3R5
bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmlzU3VzcGVuZGVk
KCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMo
KQotewotICAgIExPRyhBbmltYXRpb25zLCAiY29udHJvbGxlciBpcyBzdXNwZW5kaW5nIGFuaW1h
dGlvbnMiKTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFuaW1h
dGlvbnMsICJjb250cm9sbGVyIGlzIHJlc3VtaW5nIGFuaW1hdGlvbnMiKTsKLSAgICBtX2RhdGEt
PnJlc3VtZUFuaW1hdGlvbnMoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjph
bGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X2RhdGEtPmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRl
ZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbGxvd3NOZXdBbmltYXRpb25zV2hp
bGVTdXNwZW5kZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6
c2VydmljZUFuaW1hdGlvbnMoKQotewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxsYmFj
a0ZpcmVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlVGhyb3R0
bGluZ1N0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwotfQot
Ci1TZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbkludGVydmFsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25JbnRlcnZhbCgpOwotfQotCi1ib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVu
dChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAg
IHJldHVybiBtX2RhdGEtPmRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJzdXNwZW5kaW5nIGFuaW1h
dGlvbnMgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIG1fZGF0YS0+c3VzcGVuZEFu
aW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
LXsKLSAgICBMT0coQW5pbWF0aW9ucywgInJlc3VtaW5nIGFuaW1hdGlvbnMgZm9yIGRvY3VtZW50
ICVwIiwgZG9jdW1lbnQpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0
ZUJsb2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRv
Y3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlv
bnNJZk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlv
bnMsICJhbmltYXRpb25zIG1heSBzdGFydCBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0K
LSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAg
ICBtX2RhdGEtPnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKGRvY3VtZW50KTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17Ci0g
ICAgbV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5lbmRBbmlt
YXRpb25VcGRhdGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0
c0FjY2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQot
ewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQocHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
Omhhc0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmhhc0FuaW1hdGlv
bnMoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlY2Q2MDU4NDUzOThhYThlNzVhOWE1MjY1ZTAwZWY2NGQ2MjIy
ODEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFz
ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIExheW91dFJlY3Q7Ci1jbGFz
cyBSZW5kZXJFbGVtZW50OwotCi1zdHJ1Y3QgQW5pbWF0aW9uVXBkYXRlIHsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBh
Y3Q+IGltcGFjdDsKLQotfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcihGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7Ci0K
LSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYpOwotICAgIEFuaW1hdGlvblVwZGF0
ZSB1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwotCi0gICAg
Ly8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5zZm9y
bSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCi0gICAgLy8gdXNpbmcgdGhlIGdpdmVu
IHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBSZXR1cm4gZmFsc2UgaWYg
dGhlcmUgaXMgc29tZQotICAgIC8vIHRyYW5zZm9ybSBhbmltYXRpb24gYnV0IHdlIHdlcmUgdW5h
YmxlIHRvIGNoZWFwbHkgY29tcHV0ZSBpdHMgYWZmZWN0IG9uIHRoZSBleHRlbnQuCi0gICAgYm9v
bCBjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3QmKSBj
b25zdDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gYWNjZWxlcmF0ZWQgYW5pbWF0
aW9uIG9yIHRyYW5zaXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgdG8gYW5pbWF0ZS4KLSAgICB2
b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYsIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRpb25BdFRp
bWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUg
dXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5z
aXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsg
Ly8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWdu
ZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJlIHVz
ZWQgb25seSBmb3IgdGVzdGluZwotICAgIAotICAgIC8vICJSdW5uaW5nIiBoZXJlIG1lYW5zIHRo
ZSBhbmltYXRpb24gaXMgcnVubmluZyBvciBwYXVzZWQuCi0gICAgYm9vbCBpc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLSAg
ICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVt
ZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
U3VzcGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAg
IHZvaWQgc2VydmljZUFuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGluZ1N0
YXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBhbmltYXRpb25JbnRlcnZhbCgpIGNv
bnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3Vt
ZW50KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRpb25z
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFuaW1hdGlv
bnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJv
bURvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1c3Bl
bmRlZChEb2N1bWVudCopOwotCi0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAg
IHZvaWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFs
bG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwotICAg
IAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5
KENTU1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiBtX2RhdGE7Ci19OwotCi1jbGFzcyBBbmltYXRpb25VcGRhdGVCbG9jayB7Ci1wdWJs
aWM6Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlciogYW5p
bWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0
aW9uQ29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xsZXIp
Ci0gICAgICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmJlZ2luQW5pbWF0aW9uVXBkYXRl
KCk7Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25VcGRhdGVCbG9jaygpCi0gICAgewotICAg
ICAgICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICAgICAgbV9hbmltYXRpb25D
b250cm9sbGVyLT5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250cm9sbGVyOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQzMjAzNzdkZWNjOWM1MzRkZWViN2I0ZTk1Y2UwZWQyZDg1YWVkYjEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFz
ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBEb2N1bWVudDsK
LWNsYXNzIEZyYW1lOwotCi1lbnVtIFNldENoYW5nZWQgeyBEb05vdENhbGxTZXRDaGFuZ2VkLCBD
YWxsU2V0Q2hhbmdlZCB9OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGUoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgdW50aWwgdGhlIG5l
eHQgYW5pbWF0aW9uIG5lZWRzIHRvIGJlIHNlcnZpY2VkLCBvciAtMSBpZiB0aGVyZSBhcmUgbm9u
ZS4KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2Fs
bFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVwZGF0ZUFuaW1h
dGlvblRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2Vk
KTsKLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKEVs
ZW1lbnQmKTsKLSAgICBib29sIGNsZWFyKEVsZW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRlU3R5
bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnRVcGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlcigpOwotICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1lbnQm
LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91Ymxl
IGVsYXBzZWRUaW1lKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKEVsZW1l
bnQmKTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzU3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMo
KTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLSAg
ICBTZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN1c3BlbmRB
bmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlv
bnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3BlbmRl
ZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1
c3BlbmRlZChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50
Kik7Ci0KLSAgICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVu
dCYsIENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRB
bmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsK
LQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVt
ZW50JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwotICAgIHVuc2lnbmVkIG51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yRWxlbWVudChFbGVtZW50Jik7Ci0K
LSAgICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVjdCYp
IGNvbnN0OwotCi0gICAgTW9ub3RvbmljVGltZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsK
LSAgICAKLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRBbmlt
YXRpb25VcGRhdGUoKTsKLSAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3Rv
bmljVGltZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
QW5pbWF0aW9uQmFzZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3BvbnNl
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3Bv
bnNlKEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChB
bmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVu
dChFbGVtZW50Jik7Ci0KLSAgICBib29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9
Ci0gICAgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7Ci0K
LSAgICB2b2lkIHNldFJlcXVpcmVzTGF5b3V0KCkgeyBtX3JlcXVpcmVzTGF5b3V0ID0gdHJ1ZTsg
fQotCi1wcml2YXRlOgotICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9p
ZCBzdHlsZUF2YWlsYWJsZSgpOwotICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7
Ci0gICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLQotICAgIEhhc2hN
YXA8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3Np
dGVBbmltYXRpb25zOwotICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7Ci0gICAgVGltZXIgbV91
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKLSAgICBGcmFtZSYgbV9mcmFtZTsKLQotICAg
IHN0cnVjdCBFdmVudFRvRGlzcGF0Y2ggewotICAgICAgICBSZWY8RWxlbWVudD4gZWxlbWVudDsK
LSAgICAgICAgQXRvbVN0cmluZyBldmVudFR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAg
ICAgICBkb3VibGUgZWxhcHNlZFRpbWU7Ci0gICAgfTsKLSAgICBWZWN0b3I8RXZlbnRUb0Rpc3Bh
dGNoPiBtX2V2ZW50c1RvRGlzcGF0Y2g7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9lbGVt
ZW50Q2hhbmdlc1RvRGlzcGF0Y2g7Ci0gICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3VzcGVuZGVk
RG9jdW1lbnRzOwotCi0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gbV9iZWdpbkFuaW1hdGlv
blVwZGF0ZVRpbWU7Ci0KLSAgICB1c2luZyBBbmltYXRpb25zU2V0ID0gSGFzaFNldDxSZWZQdHI8
QW5pbWF0aW9uQmFzZT4+OwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlOwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlOwotCi0gICAgaW50IG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLQotICAg
IGJvb2wgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbjsKLSAgICBib29sIG1faXNT
dXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZXF1aXJlc0xheW91dCB7IGZhbHNlIH07
Ci0KLSAgICAvLyBVc2VkIHRvIGZsYWcgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHByZXZp
b3VzIGJ1Z2d5Ci0gICAgLy8gYmVoYXZpb3Igb2YgYWxsb3dpbmcgbmV3IHRyYW5zaXRpb25zIGFu
ZCBhbmltYXRpb25zIHRvCi0gICAgLy8gcnVuIGV2ZW4gd2hlbiB0aGlzIG9iamVjdCBpcyBzdXNw
ZW5kZWQuCi0gICAgYm9vbCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWJlNzU5YjA4MTYwOWJmNTMzMzQwZDMwYTAyNjE0NzM3NjUwNTAwNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxODcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0K
LSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1ND
cm9zc2ZhZGVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRl
ICJDbGlwUGF0aE9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKLSNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1
ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKLSNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJHYXBMZW5ndGguaCIKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5j
bHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2Uu
aCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBh
cmlzb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGlu
dCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9tLCBp
bnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHBy
b2dyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVy
biBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsK
LX0KLQotc3RhdGljIGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQot
c3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05vcm1h
bCgpKSA/IHRvIDogYmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNzKTsK
LX0KLQotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBMZW5n
dGhTaXplJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiB7IGJsZW5kRnVuYyhh
bmltLCBmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJv
bS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU2hh
ZG93U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0g
ICAgaWYgKGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGRvdWJsZSBmcm9t
VmFsID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91YmxlIHRv
VmFsID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSByZXN1
bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICByZXR1
cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dEYXRh
KiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFT
U0VSVChmcm9tICYmIHRvKTsKLSAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKLQotICAgIHJldHVy
biBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5sb2Nh
dGlvbigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFk
aXVzKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5zcHJl
YWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUoKSwg
dG8tPnN0eWxlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFkb3co
KSwKLSAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNzKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dy
ZXNzKQotewotICAgIGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgp
KQotICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBwcm9n
cmVzcyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJv
bSwgcHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25j
YXN0PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNp
emUoKSA6IExheW91dFNpemUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRo
T3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENs
aXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAg
ICAvLyBPdGhlciBjbGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBub3Qg
YmUgYW5pbWF0ZWQuCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6
U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCi0gICAgICAg
IHJldHVybiB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25jYXN0
PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7Ci0gICAgY29uc3Qg
QmFzaWNTaGFwZSYgdG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCp0
bykuYmFzaWNTaGFwZSgpOwotCi0gICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFwZSkp
Ci0gICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0aW9u
OjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0K
LSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRvLT50
eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiB0bzsKLQot
ICAgIGlmIChmcm9tLT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCi0gICAgICAgIHJldHVybiB0
bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgpOwot
ICAgIGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0KLSAgICBpZiAo
IWZyb21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAg
cmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jl
c3MpLCB0by0+Y3NzQm94KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsdGVy
T3BlcmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNz
LCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQotewotICAgIEFTU0VSVCh0b09wKTsK
LSAgICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJv
dWdoKTsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLSAgICBzaXplX3QgZnJv
bVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvU2l6ZSA9IHRv
Lm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9tU2l6
ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZy
b20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7
Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVu
ZEZ1bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9w
ID8gYmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDogMCk7
Ci0gICAgICAgIGlmIChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygp
LmFwcGVuZChibGVuZGVkT3ApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gaWRl
bnRpdHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9u
cygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21P
cCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9n
cmVzcywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCi17Ci0g
ICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGZ1bmN0aW9uIGxpc3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlvbi4K
LSAgICAKLSAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHByb3BlcnR5
SUQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0g
YW5pbS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9w
RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlv
bkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QXBwbGVDb2xvckZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9yRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdHNNYXRjaCkKLSAgICAgICAg
cmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMgZG9u
J3QgbWF0Y2gsIHdlIGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhhdmUg
YSB3YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4gQ1NTLgotICAgICAgICAvLyBGb3Igbm93IHdlJ2xs
IGp1c3QgZmFpbCB0byBhbmltYXRlLgotICAgICAgICByZXN1bHQgPSB0bzsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBi
bGVuZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNoZWRJ
bWFnZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAg
ICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhh
bmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotCi0gICAgYXV0byBpbWFnZVZhbHVlID0gQ1NTSW1h
Z2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBmaWx0
ZXJSZXN1bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwotCi0gICAgYXV0byByZXN1bHQgPSBD
U1NGaWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92ZShm
aWx0ZXJWYWx1ZSkpOwotICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZpbHRl
clJlc3VsdCk7Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3Zl
KHJlc3VsdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJp
bGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEFueSBub24temVybyByZXN1bHQg
bWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8g
d2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQotICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlz
aWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29s
bGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KLSAgICBkb3Vi
bGUgZnJvbVZhbCA9IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAg
ZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAg
aWYgKGZyb21WYWwgPT0gdG9WYWwpCi0gICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUgcmVz
dWx0ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAgcmV0
dXJuIHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5
OjpWaXNpYmxlID8gdG8gOiBmcm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5l
T2Zmc2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0
JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8u
aXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdp
dGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3RoVmFs
dWUoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRl
V2l0aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8u
aXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVh
dGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0
aFZhbHVlKCksIHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
OjpjcmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoQm94
JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgTGVu
Z3RoQm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0KCks
IHRvLnJpZ2h0KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhh
bmltLCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAg
ICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dyZXNz
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTVkdMZW5ndGhWYWx1
ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNWR0xl
bmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKLXsKLSAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9yPFNW
R0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgc2l6ZV90IGZyb21MZW5ndGgg
PSBmcm9tLnNpemUoKTsKLSAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7Ci0gICAgaWYg
KCFmcm9tTGVuZ3RoKQotICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOwotICAg
IGlmICghdG9MZW5ndGgpCi0gICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6IHRv
OwotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOwotICAgIGlmIChmcm9tTGVu
Z3RoICE9IHRvTGVuZ3RoKSB7Ci0gICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZyb21M
ZW5ndGgsIHRvTGVuZ3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKLSAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRvTGVu
Z3RoOwotICAgIH0KLSAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRMZW5n
dGgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0gICAg
ICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVuZ3Ro
XSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+
IGNyb3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNh
Y2hlZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdl
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9mIHRo
ZSBleHRyZW1lcywgd2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdlLAot
ICAgIC8vIG5vdCBhIGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25lIG9m
IHRoZSBleGlzdGluZyBpbWFnZXMuCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0dXJu
IGZyb21TdHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4g
dG9TdHlsZUltYWdlOwotICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgfHwg
IXRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvU3R5bGVJbWFn
ZTsKLQotICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmZy
b21TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9IENT
U0ltYWdlVmFsdWU6OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBh
dXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3Ms
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUgPSBD
U1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZNb3Zl
KHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7Ci0gICAgcmV0dXJuIFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdlKiB0
bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJl
dHVybiB0bzsKLQotICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7Ci0gICAgdG8gPSB0
by0+c2VsZWN0ZWRJbWFnZSgpOwotCi0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0
dXJuIHRvOyAgICAKLQotICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQgaW1h
Z2VzLiBDcm9zcyBmYWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gICAgaWYgKGlzPFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Ci0g
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxT
dHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykuaW1hZ2VWYWx1ZSgpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZh
bHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRl
ZCkpIHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1c3Qg
cG9zc2libGUgaWYgaW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KLSAgICAgICAgICAgIC8vIE90aGVy
d2lzZSBmYWxsIGJhY2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCi0gICAgICAgICAgICBDU1NG
aWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0Zp
bHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAg
ICAgICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZyb21G
aWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIo
YW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlv
bnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlz
PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Nyb3Nz
ZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZy
b21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRl
ID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAgICAg
IGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVuZChm
cm9tQ3Jvc3NmYWRlLCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW9u
IGJldHdlZW4gdHdvICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgotICAgIH0gZWxzZSBpZiAoaXM8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykp
IHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25j
YXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlm
IChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewotICAgICAgICAgICAg
Q1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdl
VmFsdWU+KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdlKCkg
PT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVu
ZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVy
T3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRlIGFu
ZCBpbWFnZSBzb3VyY2UuCi0gICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJv
bSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRl
ciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1h
Z2U+KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZEltYWdl
KCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9n
cmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJl
dHdlZW4gaW1hZ2Ugc291cmNlIGFuZCBjcm9zcy1mYWRlLgotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQgaW1h
Z2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI5
MwotICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJ
bWFnZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25jYXN0
PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0byks
IHByb2dyZXNzKTsKLQotICAgIHJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSBOaW5lUGll
Y2VJbWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywgZG91
YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFn
ZSgpKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBwb3J0
IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkgbW9y
ZSB0aGFuIGltYWdlIGNvbnRlbnQuCi0KLSAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9IHRv
LmltYWdlU2xpY2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGljZXMo
KSB8fCBmcm9tLm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRvLmZp
bGwoKSB8fCBmcm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8fCBm
cm9tLnZlcnRpY2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQotICAgICAgICByZXR1cm4g
dG87Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7Ci0gICAg
ICAgIGlmIChmcm9tLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5pbWFn
ZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkpCi0gICAgICAgICAgICByZXR1cm4gdG87Ci0g
ICAgfQotCi0gICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9tLmlt
YWdlKCksIHRvLmltYWdlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS5pbWFnZVNsaWNlcygp
LCBmcm9tLmZpbGwoKSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJvbS5o
b3Jpem9udGFsUnVsZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKLX0KLQotI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCi0KLXN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBGb250
VmFyaWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgRm9udFZhcmlhdGlv
blNldHRpbmdzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBhdXRvJiBmcm9t
SXRlbSA9IGZyb20uYXQoaSk7Ci0gICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOwotICAg
ICAgICBpZiAoZnJvbUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQotICAgICAgICAgICAgcmV0
dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBpbnRlcnBvbGF0ZWQg
PSBibGVuZEZ1bmMoYW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHByb2dy
ZXNzKTsKLSAgICAgICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBvbGF0
ZWQgfSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25W
YWx1ZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFs
dWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9udFNl
bGVjdGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1
ZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotfQotCi1j
bGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKLSAgICB7Ci0g
ICAgfQotICAgIHZpcnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1
bHQ7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5J
bnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0gICAgCi0jaWYgIUxPR19ESVNBQkxF
RAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29uc3Qg
PSAwOwotI2VuZGlmCi0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJRCBt
X3Byb3A7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ckdldHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIo
Q1NTUHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKLSAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9n
ZXR0ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
ICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChh
LT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVl
KGNvbnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4q
bV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIg
PDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8
ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBUIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9wZXJ0
eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihw
cm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+
Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46
Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCks
IHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoVCk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFJlZkNv
dW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6KmdldHRl
cikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAg
ICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKLSAgICAgICAg
LCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhh
bmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KlBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0K
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0cjxU
PiYmKTsKLX07Ci0KLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHBy
b3AsIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3Ro
Jj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7Ci0gICAgfQotCi0gICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+
OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
KFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcCwgY29uc3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoVCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgVCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVj
dGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Ci19OwotCi1jbGFz
cyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPENsaXBQYXRoT3BlcmF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9wLCBD
bGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAgICAg
ICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9wLCBn
ZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90
aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJu
IGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0g
YikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQ
YXRoQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlw
UGF0aEIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNsaXBQ
YXRoQikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWNsaXBQYXRoQSB8
fCAhY2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4g
KmNsaXBQYXRoQSA9PSAqY2xpcFBhdGhCOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzIDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJGb250VmFy
aWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGluZ3Mg
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoRm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Rm9u
dFZhcmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50
ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAv
LyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1
cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAoYS0+
Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlh
dGlvblNldHRpbmdzQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiB2YXJpYXRp
b25TZXR0aW5nc0EgPT0gdmFyaWF0aW9uU2V0dGluZ3NCOwotICAgIH0KLX07Ci0jZW5kaWYKLQot
Y2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3Jh
cHBlcjxTaGFwZVZhbHVlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50
ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAv
LyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1
cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgU2hhcGVWYWx1ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU2hhcGVW
YWx1ZSogc2hhcGVCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKHNoYXBlQSA9PSBz
aGFwZUIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaGFwZUEgfHwg
IXNoYXBlQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpzaGFw
ZUEgPT0gKnNoYXBlQjsKLSAgICB9Ci19OwotCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJ
bWFnZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdl
Pihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
U3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU3R5bGVJbWFn
ZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5n
VG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5
V3JhcHBlckNvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdy
YXBwZXJDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xv
ciYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHByb3As
IGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVy
U3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9z
ZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBD
b2xvciY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29s
b3ImPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
dm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNz
IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQotICAgICAgICA6IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZS
ZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmltYXRp
b25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0T3Bh
Y2l0eShibGVuZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dyZXNz
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zv
cm0gOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPiB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFw
cGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0oKSwg
Yi0+dHJhbnNmb3JtKCksIHByb2dyZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlX
cmFwcGVyRmlsdGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3Bl
cnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKLSAgICAgICAgOiBQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwgc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NTUHJv
cGVydHlGaWx0ZXIKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAgfHwg
cHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCi0jZW5kaWYKLSAg
ICAgICAgICAgIDsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlcikoKSwg
KGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dl
dHRlcikoKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgaW5s
aW5lIHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKLXsK
LSAgICBzaXplX3QgY291bnQ7Ci0gICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93ID0g
c2hhZG93LT5uZXh0KCkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50OwotfQot
Ci1zdGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNvbnN0
IFNoYWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cpCi17
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dEYXRh
KExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+
IGRlZmF1bHRJbnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6
Okluc2V0LCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQ
b2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJ
bnNldFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6
Okluc2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0KLSAgICBpZiAoc3JjU2hh
ZG93KQotICAgICAgICByZXR1cm4gc3JjU2hhZG93OwotCi0gICAgaWYgKG90aGVyU2hhZG93LT5z
dHlsZSgpID09IFNoYWRvd1N0eWxlOjpJbnNldCkKLSAgICAgICAgcmV0dXJuIG90aGVyU2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEu
Z2V0KCkgOiAmZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKLQotICAgIHJldHVybiBvdGhl
clNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0
YS5nZXQoKSA6ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKLX0KLQotY2xhc3MgUHJvcGVydHlX
cmFwcGVyU2hhZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNo
YWRvdyhDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiwgYm9vbCkpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKLSAgICAgICAgICAgIGlmICgh
c2hhZG93QSAmJiAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgLy8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cwotICAgICAgICAgICAgaWYg
KCFzaGFkb3dBIHx8ICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAg
ICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0
ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVy
KSgpOwotCi0gICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dB
KTsKLSAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsKLQot
ICAgICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAxICYm
IHRvTGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kU2lt
cGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0Ip
LCBmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAoZHN0
LT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBz
aGFkb3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0g
ICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcg
U2hhZG93RGF0YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwot
ICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKLQotICAgICAgICB3aGlsZSAoc2hh
ZG93QSB8fCBzaGFkb3dCKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFk
b3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKLSAgICAgICAgICAgIGNv
bnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNo
YWRvd0EpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRl
ZFNoYWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3Mp
OwotICAgICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFk
b3cuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKLSAgICAgICAgICAgICAg
ICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRlZFNo
YWRvdykpOwotCi0gICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsKLQot
ICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOwotICAg
ICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21MZW5n
dGgsIGludCB0b0xlbmd0aCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3dzIGlu
IFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1hdGlu
ZyBtaXNtYXRjaGVkIGxpc3RzLAotICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNoIGZy
b20gdGhlIGVuZC4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9tU2hh
ZG93cyhmcm9tTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOwotICAg
ICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAg
IHRvU2hhZG93c1tpXSA9IHNoYWRvd0I7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93Qi0+
bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IG5ld1NoYWRvd0RhdGE7Ci0KLSAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZyb21M
ZW5ndGgsIHRvTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkgPCBm
cm9tTGVuZ3RoID8gZnJvbVNoYWRvd3NbaV0gOiAwOwotICAgICAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogdG9TaGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOwotCi0gICAg
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhm
cm9tU2hhZG93LCB0b1NoYWRvdyk7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBkc3RT
aGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7Ci0KLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRG
dW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICAv
LyBJbnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRlci4K
LSAgICAgICAgICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dEYXRh
KSk7Ci0gICAgICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQotICAg
IGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAg
IHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRh
PiwgYm9vbCk7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6
IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQotICAg
ICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX2dl
dHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAg
Q29sb3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFs
aWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3Ig
PSBhLT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0
b0NvbG9yOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3IgdG9D
b2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAh
dG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsK
LSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3IgPSBi
LT5jb2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9t
Q29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgdmFsdWUoY29u
c3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPiptX2dl
dHRlcikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0
eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1h
dGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0
eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAg
ICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotCi1l
bnVtIE1heWJlSW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNzIFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJv
cCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9yJiAo
UmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3Bl
cnR5V3JhcHBlckNvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92aXNp
dGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNpdGVk
R2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFByb3BlcnR5V3JhcHBl
clZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlkQ29s
b3JUYWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBDb2xv
ciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQot
ICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0gICAg
ewotICAgIH0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbV93cmFw
cGVyLT5lcXVhbHMoYSwgYikgJiYgbV92aXNpdGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOwotICAg
IH0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV93
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNp
dGVkV3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0JsZW5k
KGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dC
bGVuZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93cmFw
cGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBt
X3Zpc2l0ZWRXcmFwcGVyOwotfTsKLQotLy8gV3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBhbmlt
YXRhYmxlIHByb3BlcnR5IGluIGEgRmlsbExheWVyCi1jbGFzcyBGaWxsTGF5ZXJBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHkpCi0gICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICB7Ci0gICAg
fQotICAgIHZpcnR1YWwgfkZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9
IGRlZmF1bHQ7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0eTsgfQotCi0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIq
LCBjb25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5
ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLQotI2lmICFMT0dfRElT
QUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQs
IGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOwot
I2VuZGlmCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLX07Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
IDogcHVibGljIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcik7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKEZpbGxMYXllcjo6KmdldHRl
cikoKSBjb25zdCkKLSAgICAgICAgOiBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3BlcnR5KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlciko
KTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gKGxheWVyLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQs
IGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkp
IDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIg
PDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8
PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoK
LSAgICBUIChGaWxsTGF5ZXI6OiptX2dldHRlcikoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXll
ciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+
KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBw
cm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxM
YXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojpw
cm9wZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8gIiA8
PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQotICAg
ICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwotfTsKLQotY2xhc3MgRmls
bExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRnZSAo
RmlsbExheWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6Oipvcmln
aW5TZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIpCi0g
ICAgICAgICwgbV9sZW5ndGhTZXR0ZXIobGVuZ3RoU2V0dGVyKQotICAgICAgICAsIG1fb3JpZ2lu
R2V0dGVyKG9yaWdpbkdldHRlcikKLSAgICAgICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5TZXR0
ZXIpCi0gICAgICAgICwgbV9mYXJFZGdlKGZhckVkZ2UpCi0gICAgewotICAgIH0KLQotICAgIGJv
b2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0b0xl
bmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+
OjptX2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+Km1f
b3JpZ2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5HZXR0
ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCAm
JiBmcm9tRWRnZSA9PSB0b0VkZ2U7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExh
eWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICBM
ZW5ndGggdG9MZW5ndGggPSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdl
ID0gKGEtPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1f
b3JpZ2luR2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyb21FZGdlICE9IHRvRWRn
ZSkgewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBjYWxj
IGV4cHJlc3Npb24sCi0gICAgICAgICAgICBpZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQotICAg
ICAgICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgo
ZnJvbUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdlKSB7
Ci0gICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5n
dGgodG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChkc3QtPiptX29yaWdpblNldHRlcikoZnJv
bUVkZ2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZlIHRv
IHRoZSBsZWZ0L3RvcCBlZGdlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
KGRzdC0+Km1fbGVuZ3RoU2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9MZW5n
dGgsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3Qg
RmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIg
PDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8
ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX2xl
bmd0aFNldHRlcikoTGVuZ3RoKTsKLSAgICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdldHRl
cikoKSBjb25zdDsKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRnZSk7
Ci0gICAgRWRnZSBtX2ZhckVkZ2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNz
IEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBUKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxs
TGF5ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEs
IGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShB
bmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAgICAg
IDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVl
KGEpCi0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPFQqPjo6dmFsdWUoYikKLSAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpG
b3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0j
ZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShSZWZQ
dHI8VD4mJik7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVy
IDogcHVibGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4g
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJbWFn
ZSogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVy
KShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogRmlsbExheWVyUmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAg
ewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRl
cikoKTsKLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAg
ICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAg
IH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXll
ciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShw
cm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikg
PDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhw
cm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotfTsK
LQotY2xhc3MgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIGNvbnN0IEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0dGVy
KSgpIGNvbnN0OwotICAgIHR5cGVkZWYgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNB
Y2Nlc3NvcikoKTsKLQotICAgIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgTGF5ZXJzR2V0dGVyIGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNzb3Ip
Ci0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAg
ICAgLCBtX2xheWVyc0dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9sYXllcnNBY2Nlc3Nvcihh
Y2Nlc3NvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsKLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25YOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9w
ZXJ0eSwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZG
aWxsTGF5ZXI6OmJhY2tncm91bmRYT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWE9y
aWdpbiwgRWRnZTo6UmlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWToKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVy
ID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHks
ICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExh
eWVyOjpiYWNrZ3JvdW5kWU9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmlnaW4s
IEVkZ2U6OkJvdHRvbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRTaXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICAg
ICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXplTGVu
Z3RoLCAmRmlsbExheWVyOjpzZXRTaXplTGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgICAgICAgICAgbV9maWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6c2V0
SW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIGZy
b21MYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVy
ID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGZyb21MYXllciAm
JiB0b0xheWVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVy
LT5lcXVhbHMoZnJvbUxheWVyLCB0b0xheWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwotICAgICAg
ICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAg
ICAgICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1
dG8qIGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgICAgIHdo
aWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2ZpbGxM
YXllclByb3BlcnR5V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxheWVy
LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAgICAg
ICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0TGF5ZXIgPSBk
c3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlciko
KTsKLSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwotCi0gICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAg
ICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIsIGFM
YXllciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5l
eHQoKTsKLSAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAg
ZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyOwotCi0gICAgTGF5ZXJzR2V0
dGVyIG1fbGF5ZXJzR2V0dGVyOwotICAgIExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNzb3I7
Ci19OwotCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVycykK
LSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAgICAg
ICAsIG1fcHJvcGVydHlXcmFwcGVycyhXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQotICAgIHsK
LSAgICB9Ci0KLSAgICBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChh
ID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6
IG1fcHJvcGVydHlXcmFwcGVycykgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMo
YSwgYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMp
Ci0gICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsK
LSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBkc3Qs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYg
d3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29uc3QgVmVj
dG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQotCi1wcml2YXRlOgotICAgIFZlY3Rv
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwotfTsK
LQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJGbGV4KCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKENTU1Byb3BlcnR5RmxleCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
cmV0dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkg
PT0gYi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygpOwot
ICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBkc3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGItPmZs
ZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5kRnVu
YyhhbmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAgICAg
ICBkc3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwgYi0+
ZmxleFNocmluaygpLCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0cmVh
bTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQotI2Vu
ZGlmCi19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3AsIFNW
R1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENvbG9y
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZShwcm9wKQotICAgICAgICAsIG1fcGFpbnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikKLSAg
ICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBi
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRl
cikoKSAhPSAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZH
UGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgotICAgICAgICAvLyBGb3IgZXZlcnl0
aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UK
LSAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVy
LgotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6
OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVy
KSgpOwotICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAg
ICAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJvbUNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAg
ICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICB0b0NvbG9y
ID0gQ29sb3IoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdl
dHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCi0gICAgICAgICAgICB8fCAoYi0+Km1f
cGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsK
LSAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0g
ICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcg
U1ZHUGFpbnQgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMocHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTVkdQYWludFR5
cGUgKFJlbmRlclN0eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29sb3Ig
KFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckZv
bnRTdHlsZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZh
bHVlPj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3Bl
cnR5V3JhcHBlckZvbnRTdHlsZSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFs
PEZvbnRTZWxlY3Rpb25WYWx1ZT4+KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5bGU6
OmZvbnRJdGFsaWMsICZSZW5kZXJTdHlsZTo6c2V0Rm9udEl0YWxpYykKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZy
b20tPmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNjcmlw
dGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5mb250
RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAg
ICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGF1dG8gZGlzY3JldGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCi0gICAgICAg
IGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAgIGlm
IChkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3MgPCAw
LjUgPyBmcm9tIDogdG8pLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7Ci0KLSAg
ICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKLSAgICAgICAg
YXV0byB0b0ZvbnRJdGFsaWMgPSB0by0+Zm9udEl0YWxpYygpOwotICAgICAgICBhdXRvIGJsZW5k
ZWRGb250SXRhbGljID0gcHJvZ3Jlc3MgPCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0
YWxpYzsKLSAgICAgICAgaWYgKCFkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRGb250SXRh
bGljID0gYmxlbmRGdW5jKGFuaW0sIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHByb2dy
ZXNzKTsKLQotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkc3Qt
PmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRpb24g
PSBkc3QtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMo
YmxlbmRlZEZvbnRJdGFsaWMpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlz
KGJsZW5kZWRTdHlsZUF4aXMpOwotICAgICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihXVEZN
b3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUoY3Vy
cmVudEZvbnRTZWxlY3Rvcik7Ci0gICAgfQotfTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRp
b25XcmFwcGVyTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJl
IHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NBbmlt
YXRpb25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD4gbWFwOwotICAgICAgICByZXR1cm4g
bWFwOwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJG
b3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi0gICAgewotICAgICAgICBpZiAo
cHJvcGVydHlJRCA8IGZpcnN0Q1NTUHJvcGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQcm9w
ZXJ0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVuc2lnbmVkIHdy
YXBwZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCk7Ci0gICAgICAgIGlm
ICh3cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnNb
d3JhcHBlckluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJu
IG1fcHJvcGVydHlXcmFwcGVyc1tpbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
c2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCk7
Ci0gICAgfkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOwotCi0gICAg
dW5zaWduZWQgY2hhciYgaW5kZXhGcm9tUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJRCAt
IGZpcnN0Q1NTUHJvcGVydHldOwotICAgIH0KLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKLSAgICB1
bnNpZ25lZCBjaGFyIG1fcHJvcGVydHlUb0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOwotCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9
IFVDSEFSX01BWDsKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD47Ci19OwotCi1DU1NQcm9wZXJ0eUFuaW1hdGlvbldy
YXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCi17Ci0gICAgLy8gYnVp
bGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25zIGFu
ZCBibGVuZHMKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxlTG9u
Z2hhbmRQcm9wZXJ0eVdyYXBwZXJzW10gPSB7Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6
c2V0TGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlS
aWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCi0gICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHls
ZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVy
U3R5bGU6OnNldEJvdHRvbSksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdp
ZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbldp
ZHRoLCAmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRoKSwK
LSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCAm
UmVuZGVyU3R5bGU6Om1heFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKLQotICAg
ICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1p
bkhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNaW5IZWlnaHQpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1heEhl
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJGbGV4KCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpi
b3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRo
LCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRv
cFdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQs
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5SaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9w
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2luQm90
dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRk
aW5nTGVmdCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCksCi0gICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6
cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5
bGU6OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVy
U3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSksCi0K
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3Bl
cnR5Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dENhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHls
ZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExp
bmtDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKLQotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRl
ZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3Jv
dW5kQ29sb3IpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5QmFja2dyb3VuZEltYWdlLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBTdHlsZUlt
YWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHls
ZTo6bGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAotICAg
ICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJ
bWFnZSwgJlJlbmRlclN0eWxlOjptYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdl
KSwKLQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJv
cmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckltYWdlU291cmNlKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQ
cm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1h
Z2VTbGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5n
dGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJJ
bWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgpLAotICAgICAgICBu
ZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VT
b3VyY2UpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUltYWdl
Jj4oQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveElt
YWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZSksCi0KLSAgICAgICAgbmV3IEZpbGxM
YXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAmUmVu
ZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3Vu
ZExheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVyU3R5
bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVy
cyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Vi
a2l0QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRl
clN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLQotICAgICAgICBuZXcgRmlsbExheWVy
c1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5kZXJT
dHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAgICAg
ICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9z
aXRpb25ZLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFz
a0xheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5V2Via2l0TWFza1NpemUsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxl
OjplbnN1cmVNYXNrTGF5ZXJzKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUsICZS
ZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVu
c2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpj
b2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKLSAgICAg
ICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9wZXJ0
eUNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29s
dW1uR2FwKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVu
Z3RoPihDU1NQcm9wZXJ0eVJvd0dhcCwgJlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJTdHls
ZTo6c2V0Um93R2FwKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9y
dD4oQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJl
bmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6
b250YWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVy
dGljYWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2lu
ZyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRleCwg
JlJlbmRlclN0eWxlOjpzcGVjaWZpZWRaSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lmaWVk
WkluZGV4KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlP
cnBoYW5zLCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFucyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dzLCAm
UmVuZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MpLAotICAgICAgICBu
ZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0
eWxlOjpzcGVjaWZpZWRMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
T2Zmc2V0KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlP
dXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldExldHRlclNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50LCAm
UmVuZGVyU3R5bGU6OnNldFRleHRJbmRlbnQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5UGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3BlY3Rp
dmUsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmUpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6
OnBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblgp
LAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3Rp
dmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxl
OjpzZXRQZXJzcGVjdGl2ZU9yaWdpblkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1P
cmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRl
clN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdp
blkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRyYW5z
Zm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxl
OjpzZXRUcmFuc2Zvcm1PcmlnaW5aKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0
eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
TGVmdFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRp
dXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXpl
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
Qm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVz
KSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4o
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJC
b3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1
cyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlW
aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aWJpbGl0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
Wm9vbSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0UmV0
dXJuVmFsdWUpLAotCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3Bh
Y2l0eSgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0o
KSwKLSAgICAgICAgCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVy
dHlGaWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlciks
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
ckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmJh
Y2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKLSNlbmRpZgot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xvckZp
bHRlciwgJlJlbmRlclN0eWxlOjphcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEFw
cGxlQ29sb3JGaWx0ZXIpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChD
U1NQcm9wZXJ0eUNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6
OnNldENsaXBQYXRoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJv
cGVydHlTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5
bGU6OnNldFNoYXBlT3V0c2lkZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRl
clN0eWxlOjpzZXRTaGFwZU1hcmdpbiksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5U2hhcGVJbWFnZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFwZUlt
YWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAotCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUNvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1u
UnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxl
Ojp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlu
a0NvbHVtblJ1bGVDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZm
ZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZhbGlk
Q29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRl
eHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRGaWxsQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RmlsbENv
bG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENT
U1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxl
Ojpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZp
c2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZp
c2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJbnZh
bGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9w
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRl
clRvcENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENv
bG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRv
bUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciksCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xv
ciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxpbmVD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciksCi0KLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJlbmRl
clN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgJlJl
bmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5k
ZXJTdHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKLQotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVuZGVy
U3R5bGU6OmZpbGxQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0RmlsbFBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFjaXR5
LCAmUmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFp
bnRUeXBlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
U3Ryb2tlUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAmUmVu
ZGVyU3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4+KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAmUmVu
ZGVyU3R5bGU6OnN0cm9rZURhc2hBcnJheSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNoQXJy
YXkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0cm9r
ZU1pdGVybGltaXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0eWxl
OjpzZXRTdHJva2VNaXRlckxpbWl0KSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5Q3gsICZSZW5kZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0Q3gp
LAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZSZW5k
ZXJTdHlsZTo6Y3ksICZSZW5kZXJTdHlsZTo6c2V0Q3kpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5bGU6
OnNldFIpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Ungs
ICZSZW5kZXJTdHlsZTo6cngsICZSZW5kZXJTdHlsZTo6c2V0UngpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZSZW5k
ZXJTdHlsZTo6c2V0UnkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5U3Ryb2tlRGFzaG9mZnNldCwgJlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0LCAm
UmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hPZmZzZXQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ryb2tl
V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVyU3R5
bGU6OnNldFgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
WSwgJlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5bGU6OnNldFkpLAotCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5
bGU6OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9vZENv
bG9yLCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RDb2xv
ciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdG9w
T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRTdG9w
T3BhY2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihD
U1NQcm9wZXJ0eVN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0U3RvcENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3IoQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0aW5n
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0TGlnaHRpbmdDb2xvciksCi0KLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0LCAm
UmVuZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNlbGlu
ZVNoaWZ0VmFsdWUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVl
PihDU1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0eWxl
OjpzZXRLZXJuaW5nKSwKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZhcmlh
dGlvblNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJlbmRl
clN0eWxlOjpzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MpLAotI2VuZGlmCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQs
ICZSZW5kZXJTdHlsZTo6Zm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0KSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3Bl
cnR5Rm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6
c2V0Rm9udFN0cmV0Y2gpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERlY29y
YXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25lc3Mp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENTU1By
b3BlcnR5VGV4dFVuZGVybGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5lT2Zm
c2V0LCAmUmVuZGVyU3R5bGU6OnNldFRleHRVbmRlcmxpbmVPZmZzZXQpLAotICAgIH07Ci0gICAg
Y29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FS
UkFZX0xFTkdUSChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKLQotICAgIHN0
YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzW10g
PSB7Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQtY29s
b3IsIGJhY2tncm91bmQtcG9zaXRpb24sIGJhY2tncm91bmQtaW1hZ2UKLSAgICAgICAgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8gZm9y
IGZvbnQtc2l6ZSwgZm9udC13ZWlnaHQKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrLCAv
LyBmb3IgbWFzay1wb3NpdGlvbgotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
biwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQs
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCi0gICAgICAg
IENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVz
LAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0eUJv
cmRlciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwKLSAgICAgICAgQ1NTUHJvcGVy
dHlCb3JkZXJTcGFjaW5nLAotICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9yIGxp
c3Qtc3R5bGUtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCi0gICAgICAgIENTU1By
b3BlcnR5T3V0bGluZSwKLSAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAotICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRTdHJva2UsCi0gICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVsZSwK
LSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxl
U2hvcnRoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUT0RPOgotICAgIC8vCi0gICAgLy8gIENTU1By
b3BlcnR5VmVydGljYWxBbGlnbgotICAgIC8vCi0gICAgLy8gQ29tcG91bmQgcHJvcGVydGllcyB0
aGF0IGhhdmUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBhbmltYXRhYmxlOgotICAgIC8vCi0g
ICAgLy8gIENTU1Byb3BlcnR5Q29sdW1ucwotICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJveFJl
ZmxlY3QKLQotICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1fcHJv
cGVydHlUb0lkTWFwW2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKLQotICAgIENP
TVBJTEVfQVNTRVJUKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0YWJs
ZVByb3BlcnRpZXNNdXN0QmVMZXNzVGhhblVDaGFyTWF4KTsKLSAgICBtX3Byb3BlcnR5V3JhcHBl
cnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291
bnQgKyBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50KTsKLQotICAgIC8vIEZpcnN0
IHdlIHB1dCB0aGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBtYXAs
IHNvIHRoZSBzaG9ydGhhbmQtYnVpbGRpbmcKLSAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0uCi0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGll
c0NvdW50OyArK2kpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3Jh
cHBlciA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbaV07Ci0gICAgICAgIG1f
cHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2U+KHdyYXBwZXIpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJvcGVy
dHlJRCh3cmFwcGVyLT5wcm9wZXJ0eSgpKSA9IGk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsKLSAg
ICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFByb3Bl
cnRpZXNbaV07Ci0gICAgICAgIGF1dG8gc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHko
cHJvcGVydHlJRCk7Ci0gICAgICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UqPiBsb25naGFuZFdyYXBwZXJzOwotICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoc2hvcnRoYW5kLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChhdXRvIGxv
bmdoYW5kIDogc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5kZXgg
PSBpbmRleEZyb21Qcm9wZXJ0eUlEKGxvbmdoYW5kKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVy
SW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlcklu
ZGV4XSk7Ci0gICAgICAgICAgICBsb25naGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtX3By
b3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX3Byb3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5k
UHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7
Ci0gICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9u
Z2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZ2F0aGVy
RW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiBwcm9wZXJ0eVNldCkKLXsKLSAgICBpZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIq
IHNob3J0aGFuZFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIq
Pih3cmFwcGVyKTsKLSAgICBib29sIGNvbnRhaW5lZCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYg
Y3VycldyYXBwZXIgOiBzaG9ydGhhbmRXcmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsKLSAg
ICAgICAgaWYgKGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHksIGN1
cnJXcmFwcGVyLCBwcm9wZXJ0eVNldCkgfHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0gcHJv
cGVydHkpCi0gICAgICAgICAgICBjb250YWluZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChj
b250YWluZWQpCi0gICAgICAgIHByb3BlcnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgpKTsK
LQotICAgIHJldHVybiBjb250YWluZWQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVk
IHRvIHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJs
ZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDU1NQ
cm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChwcm9w
ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24o
KS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAgICAg
d3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0jaWYgIUxPR19ESVNB
QkxFRAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsKLSNl
bmRpZgotICAgIH0KLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0eUFu
aW1hdGFibGUoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsK
LX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNj
ZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gd3JhcHBlciA/IHdy
YXBwZXItPmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwotfQotCi0vLyBOb3RlOiB0
aGlzIGlzIGluZWZmaWNpZW50LiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0aW9u
QXRUaW1lKCkuCi1IYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9uOjph
bmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkpCi17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiBmb3VuZFByb3BlcnRpZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1hcC5zaXplKCk7ICsraSkKLSAgICAgICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVy
dGllcyhwcm9wZXJ0eSwgbWFwLndyYXBwZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVzKTsK
LQotICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmlt
YXRpb246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5n
bGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0gICAg
ICAgIHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NT
UHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5
KHByb3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2FuSW50
ZXJwb2xhdGUoYSwgYik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DU1NQcm9wZXJ0eUlEIENT
U1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFsPGJv
b2w+JiBpc1Nob3J0aGFuZCkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAm
IG1hcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0KLSAg
ICBpZiAoaSA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gbWFwLndyYXBwZXJGb3JJbmRleChpKTsKLSAgICBpc1No
b3J0aGFuZCA9IHdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpOwotICAgIHJldHVybiB3cmFw
cGVyLT5wcm9wZXJ0eSgpOwotfQotCi1pbnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVBy
b3BlcnRpZXMoKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpLnNpemUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0x
LDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENTU1By
b3BlcnR5QW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5QW5p
bWF0YWJsZShDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0
aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENT
U1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7
Ci0gICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0aW9u
YWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKLSAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMo
KTsKLQotICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9ydGhh
bmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKLSAgICBzdGF0
aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M0OWJj
ZjZkOTFmNGRjZGY1NDY3MTRhNTQzNjgzZTEyZDQ3OTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5p
bWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkltcGxp
Y2l0QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbihDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICA6IG1f
YW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotewotICAgIG1fc3VzcGVu
ZGVkID0gbV9hbmltYXRpb25Db250cm9sbGVyLmlzU3VzcGVuZGVkKCkgJiYgIW1fYW5pbWF0aW9u
Q29udHJvbGxlci5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQotQ29t
cG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUb3NzIHRo
ZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZy
b20KLSAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KLQotICAgIGNsZWFyRWxlbWVudCgp
OwotICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
bGVhcigpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkKLXsK
LSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENsZWFyIHRo
ZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBp
biB0aGUgbWlkZGxlIG9mCi0gICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5zaXRp
b24pOwotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24p
OwotICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlKQotewotICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJl
IGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNraXAgaXQKLSAgICBpZiAoIWN1
cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0aW9u
cy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGFsbCBleGlzdGlu
ZyB0cmFuc2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0aWxs
IGFjdGl2ZSBvbmVzCi0gICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRoZSBv
bmVzIHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0aXZlKGZh
bHNlKTsKLSAgICAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmll
ZEN1cnJlbnRTdHlsZTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1
cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwotICAgIGlmICh0YXJnZXRTdHlsZS50cmFuc2l0
aW9ucygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUudHJh
bnNpdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9
IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAgICAgIGJv
b2wgaXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9u
LmRlbGF5KCkgPiAwOwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVy
dHkoKS5tb2RlOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9u
TW9kZTo6Tm9uZSB8fCBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlVua25vd25Q
cm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NTUHJv
cGVydHlJRCBwcm9wID0gYW5pbWF0aW9uLnByb3BlcnR5KCkuaWQ7Ci0KLSAgICAgICAgICAgIGJv
b2wgYWxsID0gbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGw7Ci0KLSAgICAg
ICAgICAgIC8vIEhhbmRsZSBib3RoIHRoZSAnYWxsJyBhbmQgc2luZ2xlIHByb3BlcnR5IGNhc2Vz
LiBGb3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UsIHdlIG1ha2Ugb25seSBvbmUgcGFzcwotICAgICAg
ICAgICAgLy8gdGhyb3VnaCB0aGUgbG9vcC4KLSAgICAgICAgICAgIGZvciAoaW50IHByb3BlcnR5
SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVBy
b3BlcnRpZXMoKTsgKytwcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbCkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2ggaXMg
bm90IGEgc2hvcnRoYW5kLgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBpc1No
b3J0aGFuZDsKLSAgICAgICAgICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9u
OjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKHByb3AgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNoZWQg
YnkgYWN0dWFsIHByb3BlcnRpZXMsIG5ldmVyIGFuaW1hdGVBbGwuCi0gICAgICAgICAgICAgICAg
QVNTRVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9wIDwgKGZpcnN0Q1NTUHJvcGVy
dHkgKyBudW1DU1NQcm9wZXJ0aWVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBp
cyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlvbiBp
cyBvdmVycmlkZGVuCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1
bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0aGUgdGVzdAotICAgICAg
ICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJv
dmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCi0gICAgICAgICAgICAgICAgYXV0byoga2V5
ZnJhbWVBbmltYXRpb24gPSBhbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAg
ICAgICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW1hdGlvbiA/ICZrZXlmcmFtZUFuaW1h
dGlvbi0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJvcAot
ICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlv
bnMuZ2V0KHByb3ApOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWwgPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGltcGxBbmltKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGFyZSBwb3N0IGFjdGl2ZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUgYWN0aXZlIGZsYWcuIFRo
aXMgd2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFuaW1hdGlvbiB0byBn
ZXQgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghaW1wbEFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGltcGxBbmltLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiB0aGF0IGlzIGp1c3Qg
ZmluaXNoaW5nLiBUaGF0IHdvdWxkIGJlIHRoZSBjYXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGlmIGl0IHdlcmUgcG9zdEFjdGl2ZS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIGVx
dWFsaXR5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUganVzdCBm
aW5pc2hpbmcgQU5EIGNoYW5naW5nIHRvIGEgbmV3IGdvYWwgc3RhdGUuCi0gICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbEFuaW0gbWlnaHQgYWxz
byBub3QgYmUgYW4gYWxyZWFkeSBydW5uaW5nIHRyYW5zaXRpb24uIEl0IG1pZ2h0IGJlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIG5ld2x5IGFkZGVkIHRvIHRoZSBsaXN0IGluIGEgcHJldmlvdXMg
aXRlcmF0aW9uLiBUaGlzIHdvdWxkIGhhcHBlbiBpZgotICAgICAgICAgICAgICAgICAgICAvLyB5
b3UgaGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkgYW5kICdhbGwnIGlu
IHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwgdGhl
IGxhdHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRpb24g
YmVpbmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1wbEFuaW0tPmlzVGFy
Z2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVkIHRvIHJldHVybiBh
IG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNpdGlv
bnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVy
YXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllZEN1cnJlbnRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmVQdHIoKmN1cnJlbnRTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBs
QW5pbS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRTdHls
ZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0aW9u
ICVwIGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoKmltcGxBbmltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNp
dGlvbnMucmVtb3ZlKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2l0aW9uIGlmIGl0IGlz
IGFjdGl2ZSBhbmQgdGhlIHByb3BlcnRpZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAg
ICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpw
cm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpIHx8ICFDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wLCBmcm9tU3R5bGUs
ICZ0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
V2UgY2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFpc0Fj
dGl2ZVRyYW5zaXRpb24pLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gdGhhdCB0
byBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGNhbmNlbGluZyBhIHRyYW5zaXRpb24uIEJ1dCB3ZSBk
b24ndCB3YW50IHRvCi0gICAgICAgICAgICAgICAgLy8gc3RhcnQgb25lIG9mIHRoZSBpbmFjdGl2
ZSB0cmFuc2l0aW9ucy4gU28gc2hvcnQgY2lyY3VpdCB0aGF0IGhlcmUuIChTZWUKLSAgICAgICAg
ICAgICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0Nzg3
PgotICAgICAgICAgICAgICAgIGlmICghZXF1YWwgJiYgaXNBY3RpdmVUcmFuc2l0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxpY2l0QW5pbWF0aW9uOjpjcmVh
dGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9kaWZpZWRDdXJyZW50U3R5bGUg
PyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9uLT5oYXNTdHlsZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShB
bmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICJDcmVhdGVkIEltcGxpY2l0QW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgZm9y
IHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxpY2l0QW5pbWF0aW9u
LnB0cigpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmltYXRpb24uZHVyYXRp
b24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRp
b25zLnNldChwcm9wLCBXVEZNb3ZlKGltcGxpY2l0QW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBwYXNzIGZvciB0aGUg
c2luZ2xlIHByb3AgY2FzZQotICAgICAgICAgICAgICAgIGlmICghYWxsKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IE1ha2UgYSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHJlbW92ZWQKLSAgICBWZWN0b3I8aW50
PiB0b0JlUmVtb3ZlZDsKLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25z
LnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAg
ICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFu
c2l0aW9uKTsKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3Zpbmcg
SW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyIsIHRy
YW5zaXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+YW5p
bWF0aW5nUHJvcGVydHkoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHJlbW92
ZSB0aGUgdHJhbnNpdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoYXV0byBwcm9wZXJ0eVRv
UmVtb3ZlIDogdG9CZVJlbW92ZWQpCi0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3Bl
cnR5VG9SZW1vdmUpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJh
bWVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBOb3RoaW5n
IHRvIGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2ZSBh
bnkgYmVmb3JlCi0gICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFy
Z2V0U3R5bGUuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZy
YW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgCi0gICAgaWYgKGN1cnJlbnRT
dHlsZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5oYXNB
bmltYXRpb25zKCkgJiYgKihjdXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJnZXRT
dHlsZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBbmltYXRpb25OYW1l
TWFwIG5ld0FuaW1hdGlvbnM7Ci0KLSAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFw
LgotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwotCi0gICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBub25lKCJub25lIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAotICAgIC8vIE5vdyBtYXJr
IGFueSBzdGlsbCBhY3RpdmUgYW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFu
aW1hdGlvbnMuCi0gICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgewotICAgICAgICBp
bnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBh
bmltYXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAg
ICAgICAgIEF0b21TdHJpbmcgYW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKLQotICAg
ICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUg
aXMgYSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhpcyBuYW1lLgotICAgICAgICAgICAgUmVmUHRy
PEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5n
ZXQoYW5pbWF0aW9uTmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkg
ewotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKGtleWZyYW1lQW5pbS0+bmFtZSgp
LmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLQotICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUFu
aW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRpZmZl
ci4gVXBkYXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVwZGF0
ZVBsYXlTdGF0ZShhbmltYXRpb24ucGxheVN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2V0IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2UgdGhl
IHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT5z
ZXRBbmltYXRpb24oYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW1hdGlv
bi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpKSAmJiBhbmltYXRpb24uaXRlcmF0aW9u
Q291bnQoKSAmJiBhbmltYXRpb25OYW1lICE9IG5vbmUpIHsKLSAgICAgICAgICAgICAgICBrZXlm
cmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVudCwg
KnRoaXMsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNy
ZWF0aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFtZXMg
JXMsIGR1cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1l
QW5pbS5nZXQoKSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5p
bWF0aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9u
Q291bnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0
YXRlOjpQYXVzZWQpOwotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAgKGNy
ZWF0ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgICAgICB9Ci0j
aWYgIUxPR19ESVNBQkxFRAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDog
a2V5ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5wcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3BlcnR5TmFtZShwcm9w
ZXJ0eUlEKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuc2V0KGtl
eWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gdGhlIGFuaW1hdGlvbiBv
cmRlciBtYXAuCi0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAgICAgICAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCku
aW1wbCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgbGlzdCBvZiBh
bmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tl
eWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMu
Y29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0
aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0gICAg
ICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1hdGlv
bi5nZXQoKSwgJmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c3dh
cChuZXdBbmltYXRpb25zLCBtX2tleWZyYW1lQW5pbWF0aW9ucyk7Ci19Ci0KLUFuaW1hdGlvblVw
ZGF0ZSBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
KQotewotICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZl
IGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucyhlbGVt
ZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFtZUFuaW1h
dGlvbnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGlv
bkltcGFjdD4gaW1hcGN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmlt
YXRlZFN0eWxlOwotCi0gICAgaWYgKGN1cnJlbnRTdHlsZSkgewotICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0
aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAgICAgLy8gdG8gZmlsbCBpbiBh
IFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgICAgIGJvb2wgY2hlY2tGb3JTdGFj
a2luZ0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90
cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0gdHJhbnNp
dGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAgICAg
ICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSkK
LSAgICAgICAgICAgICAgICBjaGVja0ZvclN0YWNraW5nQ29udGV4dCB8PSBXaWxsQ2hhbmdlRGF0
YTo6cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRyYW5zaXRpb24tPmFuaW1hdGluZ1By
b3BlcnR5KCkpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hh
bmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIHRyYW5zaXRpb24tPmFmZmVjdHNBY2NlbGVyYXRl
ZFByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6
OlJlcXVpcmVzUmVjb21wb3NpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFuaW1hdGVk
U3R5bGUgJiYgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGlzIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdCgp
IGJ1dCBvbmx5IG5lZWRzIHRvIGNvbnN1bHQKLSAgICAgICAgICAgIC8vIGFuaW1hdGFibGUgcHJv
cGVydGllcyB0aGF0IGNhbiB0cmlnZ2VyIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICBp
ZiAoYW5pbWF0ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICAgICAgICAgIHx8IGFu
aW1hdGVkU3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAgICAg
ICAgfHwgYW5pbWF0ZWRTdHlsZS0+aGFzTWFzaygpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0
ZWRTdHlsZS0+Y2xpcFBhdGgoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmJv
eFJlZmxlY3QoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0ZpbHRlcigp
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRl
ZFN0eWxlLT5oYXNCYWNrZHJvcEZpbHRlcigpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICApCi0g
ICAgICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdDb250
ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0
aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRl
LiAgV2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBp
ZiBuZWVkZWQuCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVy
TWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoa2V5ZnJhbWVBbmlt
KSB7Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSBrZXlmcmFtZUFuaW0tPmFuaW1hdGUoKnRo
aXMsIHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGFuZ2Vz
LmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYga2V5ZnJhbWVB
bmltLT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGltYXBj
dC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1aXJlc1JlY29tcG9zaXRlKTsKLQotICAgICAgICAg
ICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSAmJiBr
ZXlmcmFtZUFuaW0tPnRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAg
aW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7Ci0KLSAg
ICAgICAgICAgIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCB8PSBrZXlmcmFtZUFu
aW0tPmRlcGVuZHNPbkxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
V1RGTW92ZShhbmltYXRlZFN0eWxlKSwgaW1hcGN0IH07Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29uc3QK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwotICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRy
YW5zaXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotCi0gICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgZm9yIChhdXRvJiBuYW1lIDog
bV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFu
aW1hdGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFt
ZSk7Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKLSAgICAgICAgICAgIGtleWZyYW1l
QW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdFN0eWxlOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDb21wb3NpdGVB
bmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm5zIHRo
ZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1l
YW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJl
cXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBz
ZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgT3B0aW9uYWw8U2Vjb25kcz4gbWluVDsKLSAgICAK
LSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlv
bmFsPFNlY29uZHM+IHQgPSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAg
ICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KCFtaW5UIHx8IHQudmFsdWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtaW5U
ID0gdC52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1fa2V5
ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHQgPSBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAo
IXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQgfHwg
dC52YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQgPSB0LnZhbHVl
KCk7Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pblQ7Ci19Ci0K
LUtleWZyYW1lQW5pbWF0aW9uKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGlvbkZvclByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgS2V5ZnJhbWVBbmltYXRp
b24qIHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNlbmQgYmFjayB0aGUg
bGFzdCBhbmltYXRpb24gd2l0aCB0aGUgcHJvcGVydHkgaWYgdGhlcmUgYXJlIG11bHRpcGxlcy4K
LSAgICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9ucwotICAg
IGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmlt
YXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYg
KGFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGFuaW1hdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRlRXh0
ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAg
IC8vIElmIG1vcmUgdGhhbiBvbmUgdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0cmFu
c2Zvcm0sIGdpdmUgdXAuCi0gICAgYm9vbCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52
YWx1ZXMoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVy
dHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgaWYg
KCFhbmltYXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJhbnNp
dGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24t
PmFuaW1hdGluZ1Byb3BlcnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5zaXRp
b24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc2Vl
blRyYW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBpZiAoIXRyYW5zaXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3Vu
ZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkK
LXsKLSAgICBpZiAobV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VzcGVu
ZGVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkK
LSAgICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0
ZTo6UGF1c2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkp
IHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQotICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNl
ZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1
bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc3VzcGVuZGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0
aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5wbGF5U3RhdGVQ
bGF5aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5p
bWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
bV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9u
IDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24t
Pmhhc1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0YXRl
KEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkg
ewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJv
cGVydHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbih0cnVlKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92
ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAgICAg
IHRyYW5zaXRpb24tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
a2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
bV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltYXRp
b24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1f
dHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6
IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5p
c0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0
IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5
ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICBp
ZiAoIWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGtleWZyYW1lQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIGlmICgocHJv
cGVydHkgPCBmaXJzdENTU1Byb3BlcnR5KSB8fCAocHJvcGVydHkgPj0gZmlyc3RDU1NQcm9wZXJ0
eSArIG51bUNTU1Byb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbXBs
aWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wZXJ0eSk7Ci0g
ICAgaWYgKCFpbXBsQW5pbSkgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBwcm9w
ZXJ0eSBpcyBiZWluZyBhbmltYXRlZCB2aWEgYSBzaG9ydGhhbmQuCi0gICAgICAgIC8vIFRoaXMg
Y29kZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcsIHNvIHBlcmZvcm1hbmNlIGlzIG5vdCBjcml0
aWNhbCBoZXJlLgotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IHNob3J0aGFuZFByb3Bl
cnRpZXMgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3Rp
bmdQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgYW55UGF1c2VkID0gZmFsc2U7Ci0g
ICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgewotICAg
ICAgICAgICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKLSAgICAg
ICAgICAgICAgICBhbnlQYXVzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBh
bnlQYXVzZWQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbXBsQW5pbS0+cnVubmluZygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKHQgPj0gMC4wKSAmJiAodCA8PSBpbXBsQW5pbS0+
ZHVyYXRpb24oKSkpIHsKLSAgICAgICAgaW1wbEFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25l
ZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17
Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPnJ1bm5pbmco
KSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlvbi0+
cnVubmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGNvdW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5NDIyNjkyMzk2ZDJmYmE2ODgwZDFjZDlmOWM4ZDY5YjgyZTdiMGM1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
QXRvbVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNsYXNz
IFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBDb21wb3NpdGVBbmlt
YXRpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0IGFyZSBydW5u
aW5nCi0vLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEgbnVtYmVyIG9mIHBy
b3BlcnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgotY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9u
IDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmltYXRp
b24+IGNyZWF0ZShDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJv
bGxlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFuaW1h
dGlvbihhbmltYXRpb25Db250cm9sbGVyKSk7Ci0gICAgfTsKLQotICAgIH5Db21wb3NpdGVBbmlt
YXRpb24oKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwotCi0gICAgQW5pbWF0aW9u
VXBkYXRlIGFuaW1hdGUoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlRXh0
ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgT3B0aW9u
YWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKLSAgICAKLSAgICBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIGJvb2wgaXNTdXNwZW5kZWQo
KSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotICAgIAotICAgIGJvb2wgaGFzQW5pbWF0
aW9ucygpIGNvbnN0ICB7IHJldHVybiAhbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkgfHwgIW1fa2V5
ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdDsKLQotICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25z
dDsKLQotICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCk7
Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5
SUQpOwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9tU3RyaW5nJiBu
YW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJvcGVy
dHlJRCwgZG91YmxlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdDsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dDsgfQotCi1wcml2YXRl
OgotICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYp
OwotCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICB2
b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICAKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCos
IFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7Ci0KLSAgICBib29s
IG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQW5pbWF0aW9uVGhhdERlcGVu
ZHNPbkxheW91dCB7IGZhbHNlIH07Ci0KLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSYgbV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXAg
bV90cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRpb25z
OwotICAgIFZlY3RvcjxBdG9tU3RyaW5nSW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1h
cDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDUzOWY2YTUzZWM1MTUwYzkwNzM3ZDIwZTFiYjJhNWJiNDBhMDlhOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24u
aCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24u
aCIKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkNvbnRlbnRDaGFuZ2VPYnNl
cnZlci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3Bl
cnR5LCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2Uo
dHJhbnNpdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9mcm9tU3R5
bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKGZyb21TdHlsZSkpCi0gICAgLCBtX3RyYW5zaXRpb25Q
cm9wZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkuaWQpCi0gICAgLCBtX2FuaW1hdGluZ1Byb3Bl
cnR5KGFuaW1hdGluZ1Byb3BlcnR5KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEFkZFRyYW5zaXRp
b24oZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYW5pbWF0aW5nUHJv
cGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLX0KLQotSW1wbGljaXRBbmltYXRpb246On5J
bXBsaWNpdEFuaW1hdGlvbigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAo
YXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1l
bnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVtZW50
LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIC8vIC8vIE1ha2Ugc3VyZSB0byB0
ZWxsIHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1cmUg
YW55IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0QWN0
aXZlKCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0
aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGlu
TGlzdGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCku
aGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1hdGVD
aGFuZ2U+IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UgZ2V0
IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVh
bmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIFNvIGp1c3QgcmV0dXJu
LiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxsIGNsZWFuZWQgdXAuCi0gICAgaWYgKHBvc3RBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0YXRl
ID0gc3RhdGUoKTsKLQotICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdl
IGFyZSBuZXcKLSAgICBpZiAoaXNOZXcoKSkKLSAgICAgICAgcmVzZXQodGFyZ2V0U3R5bGUsIGNv
bXBvc2l0ZUFuaW1hdGlvbik7Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCi0g
ICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9u
ZSBpZiBuZWVkZWQKLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgQ1NTUHJvcGVy
dHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBh
bmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBw
cm9ncmVzcygpKTsKLSAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNlcyB3
aGVyZSB3ZSBoYXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCi0gICAg
Ly8gc3VjaCBhcyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0KLSAgICAvLyBGaXJlIHRo
ZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRl
ZCgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hhbmdl
OjpTdHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAgICBj
aGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQYXVz
ZWRTdGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQYXVz
ZWRTdGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAgIGNo
YW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJldHVy
biBjaGFuZ2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBpZiAo
IWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmVQdHIoKm1fdG9TdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9w
ZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIG1f
ZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotfQotCi1ib29s
IEltcGxpY2l0QW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5
b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChoYXNTdHlsZSgpKTsKLQotICAg
IGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8v
IE5vbi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBBU1NFUlQobV9hbmltYXRp
bmdQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0KLSAgICBSZW5kZXJCb3gmIGJv
eCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UmVjdCByZW5k
ZXJlckJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHN0YXJ0
Qm91bmRzID0gYm91bmRzOwotICAgIExheW91dFJlY3QgZW5kQm91bmRzID0gYm91bmRzOwotCi0g
ICAgaWYgKHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKSB7Ci0gICAgICAgIGlmICghY29t
cHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKm1fZnJv
bVN0eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVy
Qm94LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0
cml4KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZp
YU1hdHJpeChyZW5kZXJlckJveCwgKm1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSB1bmlvblJlY3Qoc3RhcnRCb3Vu
ZHMsIGVuZEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmlt
YXRpb246OmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1f
YW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFu
aW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0VHJhbnNpdGlv
bih0aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90
b1N0eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFuc2l0
aW9uUGF1c2VkKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotICAgIC8vIFJlc3Rv
cmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBJbXBsaWNp
dEFuaW1hdGlvbjo6Y2xlYXIoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYg
KGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxlbWVu
dCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICBBbmltYXRpb25CYXNlOjpjbGVh
cigpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkKLXsK
LSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5k
ZXJlci0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi12b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCi17
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMt
PmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2Jz
ZXJ2ZXIoKS5kaWRGaW5pc2hUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5
KTsKLSNlbmRpZgotICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24gdGhp
cyBwcm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBrZXlm
cmFtZQotICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNhc2Ug
YSB0cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCi0gICAg
Ly8gcnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQsIHdl
IG5lZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3Ci0gICAgLy8gZGVzdGluYXRp
b24uIElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5rIGEg
dHJhbnNpdGlvbiBoYWQgc3RhcnRlZAotICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFuaW1h
dGVkIHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbikuCi0g
ICAgaWYgKGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25G
b3JQcm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KSkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRV
bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCptX3RvU3R5bGUpKTsKLQotICAg
IHNlbmRUcmFuc2l0aW9uRXZlbnQoZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCwgZWxh
cHNlZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0
aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgZG91
YmxlIGVsYXBzZWRUaW1lKQotewotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRy
YW5zaXRpb25lbmRFdmVudCkgewotICAgICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3Rl
bmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwotCi0gICAgICAgIGlm
IChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKG1fYW5pbWF0aW5n
UHJvcGVydHkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhl
IGV2ZW50Ci0gICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVsZW1l
bnQoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVu
dCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJk
Q2FjaGUpOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAgICAg
ICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRXZl
bnRUb0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRp
bWUpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkg
c3R5bGUKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRp
b25lbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVl
OyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgSW1wbGljaXRB
bmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKLQotICAg
IG1fdG9TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0byk7Ci0KLSAgICBpZiAoZWxlbWVu
dCgpKQotICAgICAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKm1fdG9TdHlsZSwgZWxl
bWVudCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkpOwotCi0gICAgLy8gUmVzdGFydCB0aGUgdHJh
bnNpdGlvbi4KLSAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlICYmICFjb21wb3NpdGVB
bmltYXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24sIC0xKTsKLQotICAgIC8vIFNldCB0aGUg
dHJhbnNmb3JtIGFuaW1hdGlvbiBsaXN0LgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25M
aXN0KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBF
TkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRl
ckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRl
ckZ1bmN0aW9uTGlzdHMoKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJp
ZGRlbihib29sIGIpCi17Ci0gICAgaWYgKGIgPT0gbV9vdmVycmlkZGVuKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX292ZXJyaWRkZW4gPSBiOwotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShtX292
ZXJyaWRkZW4gPyBBbmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlIDogQW5pbWF0aW9u
U3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUsIC0xKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1h
dGlvbjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IHByb3BlcnR5KTsKLX0KLQotYm9vbCBJ
bXBsaWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQgcHJv
cCwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIC8vIFdlIGNhbiBnZXQg
aGVyZSBmb3IgYSB0cmFuc2l0aW9uIHRoYXQgaGFzIG5vdCBzdGFydGVkIHlldC4gVGhpcyB3b3Vs
ZCBtYWtlIG1fdG9TdHlsZSB1bnNldCBhbmQgbnVsbC4gCi0gICAgLy8gU28gd2UgY2hlY2sgdGhh
dCBoZXJlIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjcw
Nj4pCi0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5bGUu
Z2V0KCksIHRhcmdldFN0eWxlKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFkZCBhIHRyYW5zaXRpb24gd2l0
aCBhIDAgZHVyYXRpb24gYW5kIGRlbGF5LiBCdXQgaWYgd2UgZXZlciBkaWQKLSAgICAvLyBpdCB3
b3VsZCBoYXZlIGEgbnVsbCB0b1N0eWxlLiBTbyBqdXN0IGluIGNhc2UsIGxldCdzIGNoZWNrIHRo
YXQgaGVyZS4gKFNlZQotICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjQ3ODc+Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9w
LCBjdXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dy
ZXNzKCkpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1
bmN0aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxz
ZTsKLSAgICAKLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJm1f
ZnJvbVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0
b1ZhbCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0aW9u
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgdmFsID0gdG9WYWw7Ci0KLSAgICBpZiAodmFsLT5vcGVy
YXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEFu
IGVtcHR5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55dGhpbmcuCi0gICAgaWYgKHZhbCAhPSB0
b1ZhbCAmJiAhdG9WYWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIXZhbC0+b3BlcmF0aW9u
c01hdGNoKCp0b1ZhbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyYW5zZm9ybSBsaXN0
cyBtYXRjaC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIGZpbHRlck9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRpb25z
KiBmcm9tT3BlcmF0aW9ucywgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG9PcGVyYXRpb25zKQot
ewotICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAg
ICAgZnJvbU9wZXJhdGlvbnMgPSAmdG9PcGVyYXRpb25zOwotCi0gICAgaWYgKGZyb21PcGVyYXRp
b25zLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoZnJvbU9wZXJhdGlvbnMgIT0gJnRvT3BlcmF0aW9ucyAmJiAhdG9PcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIWZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zTWF0Y2go
dG9PcGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5j
dGlvbkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwot
Ci0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRjaCgm
bV9mcm9tU3R5bGUtPmZpbHRlcigpLCBtX3RvU3R5bGUtPmZpbHRlcigpKTsKLX0KLQotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1h
dGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9wRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8
ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5j
dGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJvbVN0eWxlLT5iYWNr
ZHJvcEZpbHRlcigpLCBtX3RvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpOwotfQotI2VuZGlmCi0K
LXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0
aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0
Y2goJm1fZnJvbVN0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCksIG1fdG9TdHlsZS0+YXBwbGVDb2xv
ckZpbHRlcigpKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gSW1wbGljaXRBbmltYXRpb246OnRp
bWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0ID0gQW5pbWF0aW9u
QmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAoIXQgfHwgdC52YWx1ZSgpICE9IDBf
cyB8fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBfTVNDX1ZFUiA+PSAxOTIw
Ci0gICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHQ7Ci0j
ZW5kaWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2aWNl
LiBCdXQgaWYgdGhpcyBpcyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gd2UgCi0gICAgLy8gb25s
eSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi4KLSAgICBpZiAoQ1NT
UHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1fYW5p
bWF0aW5nUHJvcGVydHkpICYmIGlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICBib29sIGlzTG9v
cGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI4NGFkY2VjZjkyOGQ4NGUxNWE0MGM1Yzg4NTc2
MDVmM2U2NDYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJh
c2UuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotCi0vLyBB
biBJbXBsaWNpdEFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGEgdHJhbnNpdGlvbiBvZiBh
IHNwZWNpZmljIENTUyBwcm9wZXJ0eQotLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCi1j
bGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9u
JiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVs
ZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSYgZnJvbVN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVudCwg
Y29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKLSAgICB9OwotICAgIAotICAgIENTU1By
b3BlcnR5SUQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9u
UHJvcGVydHk7IH0KLSAgICBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbmltYXRpbmdQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBvbkFuaW1hdGlvbkVu
ZChkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24o
ZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91
YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmls
bGluZ0ZvcndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVD
aGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsK
LSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHls
ZSYgdG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZU
cmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9v
bCBhZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRPdmVy
cmlkZGVuKGJvb2wpOwotICAgIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fb3ZlcnJpZGRlbjsgfQotCi0gICAgYm9vbCBhZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Ci0KLSAgICBib29sIGlzVGFyZ2V0UHJvcGVy
dHlFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9pZCBi
bGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKik7Ci0K
LSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwotICAg
IAotICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KLSAgICB2b2lk
IHNldEFjdGl2ZShib29sIGIpIHsgbV9hY3RpdmUgPSBiOyB9Ci0KLSAgICBjb25zdCBSZW5kZXJT
dHlsZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fZnJvbVN0
eWxlOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBi
b29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUpIGNv
bnN0OyAgICAKLSAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYs
IGRvdWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rp
b25MaXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygp
OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5n
QmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNrRm9y
TWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBFbGVtZW50Jiwg
Q29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2aXJ0dWFsIH5J
bXBsaWNpdEFuaW1hdGlvbigpOwotCi0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUg
YmxlbmRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHlsZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKLQotICAgIENTU1By
b3BlcnR5SUQgbV90cmFuc2l0aW9uUHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkgYXMg
c3BlY2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5pbWF0
aW5nUHJvcGVydHk7IC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5pbWF0
aW9uCi0KLSAgICBib29sIG1fYWN0aXZlIHsgdHJ1ZSB9OyAvLyBVc2VkIGZvciBjdWxsaW5nIHRo
ZSBsaXN0IG9mIHRyYW5zaXRpb25zLgotICAgIGJvb2wgbV9vdmVycmlkZGVuIHsgZmFsc2UgfTsg
Ly8gVHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJpZGVz
IHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjU3MTUwNzcyMzg3N2I1ZWJm
MzMyYmIwOGM4NTA5Nzc3OTg4YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1h
dGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
Ci0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0
aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5
bGUpCi0gICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5p
bWF0aW9uKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUoKSkKLSAgICAsIG1fdW5h
bmltYXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cih1bmFuaW1hdGVkU3R5bGUpKQotewot
ICAgIHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBtX3RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdFZhbGlkIGZsYWcgYmFzZWQgb24gd2hldGhlciB0aGUgZnVuY3Rpb24g
bGlzdHMgaW4gdGhlIGtleWZyYW1lcyBtYXRjaC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0
aW9uTGlzdCgpOwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29sb3JG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5
ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoV2lsbENoYW5nZURhdGE6OnByb3Bl
cnR5Q3JlYXRlc1N0YWNraW5nQ29udGV4dChwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIG1fdHJp
Z2dlcnNTdGFja2luZ0NvbnRleHQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1By
b3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0
eUlEKSkKLSAgICAgICAgICAgIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSA9IHRydWU7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCAmJiBtX2hhc0FjY2Vs
ZXJhdGVkUHJvcGVydHkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb21wdXRl
TGF5b3V0RGVwZW5kZW5jeSgpOwotfQotCi1LZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1lQW5p
bWF0aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0aGUgcmVuZGVyZXIgdGhhdCB3
ZSBhcmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBhY2NlbGVyYXRlZCBhbmltYXRp
b25zIGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgpKQotICAgICAgICBlbmRBbmlt
YXRpb24oKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUxheW91dERlcGVu
ZGVuY3koKQotewotICAgIGlmICghbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1LZXlmcmFt
ZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1L
ZXlmcmFtZXM7IGkrKykgewotICAgICAgICBhdXRvKiBrZXlmcmFtZVN0eWxlID0gbV9rZXlmcmFt
ZXNbaV0uc3R5bGUoKTsKLSAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKSB7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChrZXlmcmFtZVN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAgICAg
ICAgYXV0byYgdHJhbnNmb3JtT3BlcmF0aW9ucyA9IGtleWZyYW1lU3R5bGUtPnRyYW5zZm9ybSgp
OwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiB0cmFuc2Zvcm1PcGVy
YXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24tPmlz
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gdHJhbnNsYXRpb24gPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
KG9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbi0+
eCgpLmlzUGVyY2VudCgpIHx8IHRyYW5zbGF0aW9uLT55KCkuaXNQZXJjZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGVwZW5kc09uTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKLXsKLSAgICBzaXplX3QgbnVtS2V5
ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKLSAgICBkb3VibGUgZWxh
cHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwotICAgIGlmIChtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSAmJiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJh
dGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gc3RkOjptaW4oZWxhcHNl
ZFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCkpOwotCi0gICAgY29uc3QgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJhY3Rp
b25hbFRpbWUoMSwgZWxhcHNlZFRpbWUsIDApOwotICAgIEFTU0VSVCghbV9rZXlmcmFtZXNbMF0u
a2V5KCkpOwotICAgIEFTU0VSVChtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkgLSAxXS5r
ZXkoKSA9PSAxKTsKLQotICAgIGludCBwcmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dEluZGV4
ID0gLTE7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIgc2Vh
cmNoIHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1l
VmFsdWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotCi0gICAgICAgIGlmICghY3Vy
cktleUZyYW1lLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleUZyYW1lLmtleSgpKSB7
Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAocHJldkluZGV4ID09
IC0xKQotICAgICAgICBwcmV2SW5kZXggPSAwOwotICAgIGlmIChuZXh0SW5kZXggPT0gLTEpCi0g
ICAgICAgIG5leHRJbmRleCA9IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7Ci0KLSAgICBjb25zdCBL
ZXlmcmFtZVZhbHVlJiBwcmV2S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1twcmV2SW5kZXhdOwotICAg
IGNvbnN0IEtleWZyYW1lVmFsdWUmIG5leHRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW25leHRJbmRl
eF07Ci0KLSAgICBmcm9tU3R5bGUgPSBwcmV2S2V5ZnJhbWUuc3R5bGUoKTsKLSAgICB0b1N0eWxl
ID0gbmV4dEtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICBkb3VibGUgb2Zmc2V0ID0gcHJldktleWZy
YW1lLmtleSgpOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMCAvIChuZXh0SW5kZXggPT0gcHJldklu
ZGV4ID8gIDEgOiAobmV4dEtleWZyYW1lLmtleSgpIC0gcHJldktleWZyYW1lLmtleSgpKSk7Ci0K
LSAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWluZ0Z1
bmN0aW9uKCkpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gS2V5ZnJhbWVBbmltYXRp
b246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0YXRlKCk7
Ci0KLSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVl
ZGVkIChGSVhNRTogdGhpcyBmdW5jdGlvbiBuZWVkcyBhIGJldHRlciBuYW1lKS4KLSAgICBmaXJl
QW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBz
dGFydGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBzdGFy
dCB0aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KLSAgICBpZiAoaXNOZXcoKSkgewotICAgICAgICBp
ZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWlu
ZyAmJiAhY29tcG9zaXRlQW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0xKTsK
LSAgICAgICAgZWxzZSBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBs
YXlTdGF0ZTo6UGF1c2VkKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCwgLTEpOwotICAgIH0KLQotICAgIC8vIElmIHdl
IGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUg
Y2xlYW5pbmcgdXAgYSBqdXN0LWZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBzbywgd2Ug
bmVlZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZlKCkp
IHsKLSAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICAgICAgYW5pbWF0ZWRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1l
ciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldC4KLSAgICAvLyBTcGVjaWFs
IGNhc2UgMSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBzZXQg
dGhlIGZpcnN0IGZyYW1lIG9mIHRoZQotICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBUaGlz
IGF2b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCi0gICAgLy8gU3BlY2lh
bCBjYXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUsIHRoZW4gd2Ugd2Fu
dCB0byBjb250aW51ZQotICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJsZW5kIHNvIHRoYXQg
d2UgZ2V0IHRoZSBmcm9tU3R5bGUuCi0gICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9hbmlt
YXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1lcywg
ZG9uJ3QgYW5pbWF0ZS4KLSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewotICAgICAgICB1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uLCAtMSk7
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5p
bWF0aW9uLgotICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwg
c28gbWFrZSBvbmUgaWYgbmVlZGVkLgotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAg
YW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0KLSAg
ICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmlu
ZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgotICAgIC8vIFdlIHNo
b3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGF1dG8gcHJv
cGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBHZXQgdGhl
IGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCi0gICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSog
dG9TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAg
IGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBmcm9tU3R5bGUs
IHRvU3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21T
dHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIE9wdGlvblNldDxBbmltYXRl
Q2hhbmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKTsKLSAgICBpZiAoc3Rh
dGUoKSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpTdGF0
ZUNoYW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3RhdGUob2xkU3RhdGUpIHx8IGlzUnVubmlu
Z1N0YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3RhdGUoc3RhdGUoKSkgfHwgaXNSdW5uaW5n
U3RhdGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlJ1bm5p
bmdTdGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hhbmdlOwotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UncmUgZG9uZSwgb3IgaW4gdGhlIGRlbGF5
IHBoYXNlIGFuZCB3ZSdyZSBub3QgYmFja3dhcmRzIGZpbGxpbmcsIHRlbGwgdGhlIGNhbGxlciB0
byB1c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8fCAod2FpdGlu
Z1RvU3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9uLT5m
aWxsc0JhY2t3YXJkcygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2tleWZyYW1l
cy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAg
ICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlcigpLT5z
dHlsZSgpKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVy
dGllcygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNz
IGJldHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxwdHI7
Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAgICAg
ZG91YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclBy
b3BlcnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0gICAg
ICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVydHlJ
RCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0g
ICAgfQotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zv
cm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChtX2tl
eWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSk7Ci0KLSAgICBp
ZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBO
b24tYm94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgYXV0byYgYm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZW5kZXJlckJveCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGN1bXVsYXRpdmVCb3VuZHM7Ci0K
LSAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKLSAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBrZXlmcmFtZS5zdHlsZSgp
OwotCi0gICAgICAgIGlmICgha2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRy
YW5zZm9ybSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBrZXlmcmFtZSBpcyBtaXNz
aW5nIHRyYW5zZm9ybSBzdHlsZSwgdXNlIHRoZSBjdXJyZW50IHN0eWxlLgotICAgICAgICAgICAg
aWYgKCFrZXlmcmFtZS5rZXkoKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVN0eWxlID0gJmJv
eC5zdHlsZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgY2FuQ29tcHV0ZTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUZ1bmN0
aW9uTGlzdHNNYXRjaCgpKQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFuc2Zv
cm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxlLCBr
ZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBj
b21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0
eWxlLCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNhbkNvbXB1dGUp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBjdW11bGF0aXZl
Qm91bmRzLnVuaXRlKGtleWZyYW1lQm91bmRzKTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBjdW11
bGF0aXZlQm91bmRzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0
aW9uOjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25z
dAotewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KTsK
LX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1h
dGlvbiwgbV9rZXlmcmFtZXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYg
KCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25QYXVzZWQodGlt
ZU9mZnNldCwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUg
dGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRzKQotewotICAgIGlmICgh
ZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uRmluaXNoZWQobV9r
ZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFs
ICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghZmlsbGluZ0ZvcndhcmRzICYmICFwYXVzZWQo
KSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi1ib29sIEtl
eWZyYW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlz
dGVuZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5k
b2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShsaXN0ZW5lclR5cGUpOwotfQotCi12b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAg
ICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQsIGVs
YXBzZWRUaW1lKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25JdGVy
YXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVu
dE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKLX0KLQotdm9p
ZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQot
ewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQs
IGVsYXBzZWRUaW1lKTsKLSAgICBlbmRBbmltYXRpb24obV9hbmltYXRpb24tPmZpbGxzRm9yd2Fy
ZHMoKSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVudChj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBE
b2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCB8fCBldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50KQotICAgICAgICBsaXN0ZW5l
clR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9OX0xJU1RFTkVSOwotICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKLSAgICAgICAgbGlz
dGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9u
U3RhcnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZl
bnQpOwotICAgICAgICBpZiAobV9zdGFydEV2ZW50RGlzcGF0Y2hlZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0gICAg
ICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFSVF9MSVNURU5FUjsKLSAg
ICB9Ci0KLSAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkg
ewotICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgYXV0byBlbGVtZW50ID0g
bWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwotCi0gICAgICAgIEFTU0VSVCghZWxlbWVudCB8
fCBlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50
OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcK
LSAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRF
dmVudFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0aW9u
TmFtZSgpLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwg
KHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgICAgIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS53ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFu
aW1hdGlvbmVuZEV2ZW50KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBE
aWQgbm90IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om92
ZXJyaWRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGltcGxpY2l0
IGFuaW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUgYW5p
bWF0aW9uCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVz
KCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5pbWF0
aW9ucyhwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1lT3Zl
cnJpZGRlbkFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgb3ZlcnJpZGRl
biBpbXBsaWNpdCBhbmltYXRpb25zCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZy
YW1lcy5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1bWVP
dmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSk7
Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc29sdmVLZXlmcmFtZVN0eWxlcygpCi17
Ci0gICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiBz
dHlsZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKCplbGVtZW50KCksIG1fYW5pbWF0
aW9uLT5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHN0eWxlU2NvcGUtPnJlc29s
dmVyKCkua2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oKmVsZW1lbnQoKSwgbV91bmFuaW1hdGVk
U3R5bGUuZ2V0KCksIG1fa2V5ZnJhbWVzKTsKLQotICAgIC8vIEVuc3VyZSByZXNvdXJjZSBsb2Fk
cyBmb3IgYWxsIHRoZSBmcmFtZXMuCi0gICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5ZnJh
bWVzLmtleWZyYW1lcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGNvbnN0X2Nhc3Q8
UmVuZGVyU3R5bGUqPihrZXlmcmFtZS5zdHlsZSgpKSkKLSAgICAgICAgICAgIFN0eWxlOjpsb2Fk
UGVuZGluZ1Jlc291cmNlcygqc3R5bGUsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgZWxlbWVudCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3Jt
RnVuY3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZh
bHNlOwotICAgIAotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1l
cy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUg
Zmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5
ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5VHJh
bnNmb3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1
ZSYgY3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50
S2V5ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSkgewotICAg
ICAgICAgICAgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9uRW1w
dHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZt
X2tleWZyYW1lc1tmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleF0uc3R5bGUoKS0+
dHJhbnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlk
Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4
ICsgMTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFs
dWUmIGN1cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmY3VycmVudEtleWZyYW1lLnN0eWxlKCktPnRyYW5zZm9y
bSgpOwotICAgICAgICAKLSAgICAgICAgLy8gQW4gZW10cHkgdHJhbnNmb3JtIGxpc3QgbWF0Y2hl
cyBhbnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmaXJzdFZhbC0+b3Bl
cmF0aW9uc01hdGNoKCp2YWwpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFtZUFu
aW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IChjb25zdCBSZW5kZXJTdHlsZSYpPiYgZmlsdGVyc0dldHRlcikgY29uc3QKLXsKLSAgICBpZiAo
bV9rZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShw
cm9wZXJ0eUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW1wdHkgZmlsdGVy
cyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRo
ZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgp
OwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAg
ICAgaWYgKGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ldLnN0eWxlKCkpLm9wZXJhdGlvbnMo
KS5zaXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0gaTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJz
dE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8mIGZpcnN0VmFsID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNb
Zmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXhdLnN0eWxlKCkpOwotICAgIAotICAgIGZvciAoc2l6
ZV90IGkgPSBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7
ICsraSkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVz
W2ldLnN0eWxlKCkpOwotCi0gICAgICAgIC8vIEFuIGVtdHB5IGZpbHRlciBsaXN0IG1hdGNoZXMg
YW55dGhpbmcuCi0gICAgICAgIGlmICh2YWx1ZS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFmaXJzdFZhbC5vcGVyYXRpb25zTWF0
Y2godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmls
dGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBj
aGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUZpbHRlciwgW10g
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewot
ICAgICAgICByZXR1cm4gc3R5bGUuZmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGlu
Z0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENT
U1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlLmJh
Y2tkcm9wRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAg
bV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJG
dW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgW10gKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICByZXR1
cm4gc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpOwotICAgIH0pOwotfQotCi1PcHRpb25hbDxTZWNv
bmRzPiBLZXlmcmFtZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9wdGlv
bmFsPFNlY29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwotICAg
IGlmICghdCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJTEVS
KE1TVkMpICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7Ci0j
ZWxzZQotICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFsdWUg
b2YgMCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgYWNjZWxlcmF0
ZWQgYW5pbWF0aW9ucyB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9m
IHRoZSB0cmFuc2l0aW9uLgotICAgIGJvb2wgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IHRy
dWU7Ci0gICAgCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0
aWVzKCkpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQ
cm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkgewot
ICAgICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRQcm9wZXJ0
aWVzT25seSkgewotICAgICAgICBib29sIGlzTG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4
dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ5MmUzOTE1NWM0YTliNzhjMWM2ZDZmZWUxYzJlZTNlMGJiNmJmMzguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIEtleWZy
YW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0aW9uIGZv
ciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gZmluYWwg
OiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxLZXlmcmFt
ZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBl
bGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5p
bWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKLSAgICB9Ci0gICAgCi0gICAgT3B0aW9uU2V0PEFu
aW1hdGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5
bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1Bbmlt
YXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgS2V5ZnJhbWVM
aXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotCi0gICAgY29u
c3QgQXRvbVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1hdGlv
bk5hbWUoKTsgfQotCi0gICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEKSBjb25zdDsKLQotICAgIGJvb2wgdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0OyB9Ci0gICAgYm9vbCBkZXBlbmRzT25M
YXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2RlcGVuZHNPbkxheW91dDsgfQotICAgIGJvb2wgYWZm
ZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJhdGVk
UHJvcGVydHk7IH0KLQotICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBXVEZNb3ZlKHN0eWxl
KTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiAqbV91bmFuaW1hdGVkU3R5bGU7IH0KLQotICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgS2V5ZnJh
bWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1hdGlv
biYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1YWwgfktl
eWZyYW1lQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVs
YXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJs
ZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUg
ZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0Zvcndh
cmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5l
clR5cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0OwotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2ZW50
KGNvbnN0IEF0b21TdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotCi0gICAgYm9vbCBhZmZl
Y3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNv
bXB1dGVFeHRlbnRPZkFuaW1hdGlvbkZvck1hdHJpeEFuaW1hdGlvbihjb25zdCBGbG9hdFJlY3Qm
IHJlbmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIGNvbXB1dGVFeHRl
bnRPZkFuaW1hdGlvbkZvck1hdGNoaW5nVHJhbnNmb3JtTGlzdHMoY29uc3QgRmxvYXRSZWN0JiBy
ZW5kZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgdm9pZCBjb21wdXRlTGF5b3V0
RGVwZW5kZW5jeSgpOwotICAgIHZvaWQgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0gICAgdm9p
ZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAgIHZvaWQgY2hlY2tGb3JNYXRj
aGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQot
ICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
I2VuZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3Rz
KCk7Ci0gICAgYm9vbCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9w
ZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChjb25z
dCBSZW5kZXJTdHlsZSYpPiYpIGNvbnN0OwotICAgIAotICAgIC8vIEdldCB0aGUgc3R5bGVzIGZv
ciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRp
bWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCi0gICAgdm9pZCBmZXRjaEludGVydmFs
RW5kcG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqJiBm
cm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVzcykg
Y29uc3Q7Ci0KLSAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsgLy8gVGhlIHN0eWxlIGp1c3QgYmVm
b3JlIHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0KLSAgICBib29sIG1fc3RhcnRFdmVudERpc3BhdGNo
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9kZXBlbmRzT25MYXlvdXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCmluZGV4IDdlNGZlM2ZkMDBjYTU5ZDliNzgyYThhMDQwZjRkNWI3OTE4MDlmZTYuLmVlMzQ3
YmE4NTMyNjFjOTYyZWE5OTQyYjY4M2YyYTJkYTkxMmFkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTQ3NCw5ICs0NzQsNyBA
QCBwdWJsaWM6CiAgICAgLy8gVHJhbnNpdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBzcGVjaWFs
IGFuaW1hdGlvbiBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXlmcmFtZSBpZGVudGlm
aWVyLgogICAgIHN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0
ZWRQcm9wZXJ0eUlEKTsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMg
aGFuZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLiBJZiB0aGlzIHJldHVybnMKLSAgICAv
LyBmYWxzZSwgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHJ1biBieSBDU1NBbmltYXRpb25Db250cm9s
bGVyLgotICAgIC8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIGJvdGggdHJhbnNpdGlvbnMgYW5kIGtl
eWZyYW1lIGFuaW1hdGlvbnMuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBp
cyBoYW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBib29sIGFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYgLypi
b3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1l
Ki8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRv
dWJsZSAvKnRpbWVPZmZzZXQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4
IDQ3MjBlMTI5OWVhNjRiNGNiYmRmOWZlMGVjMmI0M2RmY2U1YjRiMWUuLjVlOTY0N2ZmYWM4MDEz
ZjkyNDM3ZjVkYWViMTBhODdiNTVhZTQzNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMzA0MCw5ICsz
MDQwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5
KCkKIAogc3RhdGljIGJvb2wgaXNLZXlmcmFtZShjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgbGlz
dCkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBsaXN0
LnNpemUoKSA+IDE7Ci0gICAgcmV0dXJuIGxpc3Quc2l6ZSgpID4gMjsKKyAgICByZXR1cm4gbGlz
dC5zaXplKCkgPiAxOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlQW5pbWF0aW9u
RnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBTZWNvbmRz
IHRpbWVPZmZzZXQpCkBAIC0zMjkzLDM5ICszMjkxLDI5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW0sIGNvbnN0
IEFuCiAgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2ZShhZGRpdGl2ZSk7CiAgICAgcHJvcGVy
dHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBpcyB0aGUgb25s
eSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZlCi0gICAgICAg
IC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24n
dCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCi0gICAgICAgIC8vIHRpbWluZyBmdW5jdGlvbiB0byB3
b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24uCi0gICAgICAgIGlmIChhbmlt
LT5wcm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJv
cGVydHkpCi0gICAgICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKGFuaW0t
PnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgIH0KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAorICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24g
aXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2
ZQorICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3
ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCisgICAgLy8gdGltaW5nIGZ1bmN0aW9uIHRv
IHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRhdGlvbi4KKyAgICBpZiAoYW5pbS0+
cHJvcGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3Bl
cnR5KQorICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWlu
Z0Z1bmN0aW9uKCkpOwogfQogCiBjb25zdCBUaW1pbmdGdW5jdGlvbiYgR3JhcGhpY3NMYXllckNB
Ojp0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlJiBh
bmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbSkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGFuaW0ucHJvcGVydHkoKS5tb2RlID09IEFuaW1hdGlv
bjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5ICYmIGFuaW0udGltaW5nRnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhl
IG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQotICAg
ICAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmdsZVByb3BlcnR5LiBJbiB0aGlzIGNhc2Us
IHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQotICAgICAgICAgICAgLy8gYW5pbWF0aW9uLXdp
ZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQgb24gdGhlIHNpbmdsZSBrZXlmcmFtZSBp
bnRlcnZhbAotICAgICAgICAgICAgLy8gdG8gd29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBs
aW1pdGF0aW9uLgotICAgICAgICAgICAgcmV0dXJuICphbmltLnRpbWluZ0Z1bmN0aW9uKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKTsKLSAgICAgICAgaWYgKGFu
aW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkpCi0gICAgICAgICAgICByZXR1
cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCk7Ci0gICAgICAgIHJl
dHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVkTGluZWFyVGltaW5nRnVuY3Rpb24oKTsK
KyAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9k
ZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTE4Cisg
ICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5p
bWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgICAgICAvLyBpdHMgbW9kZSBzZXQgdG8g
U2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgY2hvc2Ugbm90IHRvIHNldCBzZXQgdGhl
CisgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRpbWluZyBmdW5jdGlvbiwgc28gd2Ugc2V0IGl0
IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2YWwKKyAgICAgICAgLy8gdG8gd29yayBhcm91
bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgorICAgICAgICByZXR1cm4gKmFuaW0udGlt
aW5nRnVuY3Rpb24oKTsKICAgICB9Ci0KICAgICBpZiAoYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9u
KCkpCiAgICAgICAgIHJldHVybiAqYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYg
KGFuaW0uaXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAgICAgICByZXR1cm4gKmFuaW0udGltaW5n
RnVuY3Rpb24oKTsKLSAgICByZXR1cm4gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6ZGVmYXVs
dFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9y
S2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiAqYW5pbS5kZWZhdWx0VGltaW5nRnVuY3Rpb25G
b3JLZXlmcmFtZXMoKTsKKyAgICByZXR1cm4gTGluZWFyVGltaW5nRnVuY3Rpb246OnNoYXJlZExp
bmVhclRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRBbmlt
YXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3Qg
QW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FBbmltYXRpb24qIGJhc2ljQW5pbSkKQEAg
LTMzNDYsMTEgKzMzMzQsNiBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uRW5k
cG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBh
bmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8g
Zm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNh
c2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAg
IGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5n
RnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDAp
LCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0z
NDQwLDExICszNDIzLDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1h
dGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmEKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRp
b25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEg
dGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRo
ZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICgh
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rp
b24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5p
bWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIGF1dG8gdmFsdWVGdW5jdGlvbiA9IGdldFZhbHVl
RnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5zZm9ybU9wVHlwZSk7CiAgICAg
aWYgKHZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9u
KQogICAgICAgICBiYXNpY0FuaW0tPnNldFZhbHVlRnVuY3Rpb24odmFsdWVGdW5jdGlvbik7CkBA
IC0zNTUxLDExICszNTI5LDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEZpbHRlckFuaW1h
dGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWUKICAgICBiYXNpY0Fu
aW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0aW9uLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5k
ZXgpOwogICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b09wZXJhdGlvbiwgaW50ZXJuYWxGaWx0
ZXJQcm9wZXJ0eUluZGV4KTsKIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1r
ZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0
Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5p
bWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0
aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5pbS0+
c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVM
aXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZDYz
NTgxMTliNGNjNzE0ZTFkZTU4MTY0NjM4NWNiZWUzMmRjODUwMy4uZGZkMGJkOTkxMDNkMGM5ZDNh
ZDdmNzE2ZDc4YjFjZjBjN2Q0ODAyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiQ29udGVu
dERhdGEuaCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUaW1l
bGluZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCkBAIC02Niw2ICs2Nyw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2VuZGlmCiAjaW5jbHVkZSAiUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkBAIC0yMjkwLDQgKzIyOTIsMTcgQEAgdm9pZCBS
ZW5kZXJFbGVtZW50OjpyZXNldFRleHRBdXRvc2l6aW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUo
VEVYVF9BVVRPU0laSU5HKQogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVs
ZW1lbnQ6OmFuaW1hdGVkU3R5bGUoKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gcmVzdWx0OworCisgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnRUaW1lbGluZSgp
KQorICAgICAgICByZXN1bHQgPSB0aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCp0
aGlzKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXN1bHQgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIoc3R5bGUoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCBlMGE2MmQwZWUyNjBjNzQ4NDNk
MGU5ZTE0ZjJmMmYzN2IzMmQ0ODJjLi5iYTM0OGI3YTUzOTA4ZjkxMDlkNzVhNDRmZTBlYmFhMTc1
ZDU1NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTMw
LDYgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udHJvbFN0YXRlczsKIGNs
YXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyU3R5bGU7
CiBjbGFzcyBSZW5kZXJUcmVlQnVpbGRlcjsKIAogY2xhc3MgUmVuZGVyRWxlbWVudCA6IHB1Ymxp
YyBSZW5kZXJPYmplY3QgewpAQCAtMjI2LDE1ICsyMjcsMTIgQEAgcHVibGljOgogICAgIFJlbmRl
ck9iamVjdCogYXR0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gZGV0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5kZXJPYmplY3QmKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlIC8qIHRpbWVPZmZzZXQgKi8sIENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiAvKiBmcm9tU3R5bGUgKi8sIGNvbnN0IFJlbmRlclN0
eWxlKiAvKiB0b1N0eWxlICovKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCB0
cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQcm9wZXJ0eUlEKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpIHsg
fQotCiAgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0
ICovLCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25QYXVzZWQoZG91YmxlIC8qIHRpbWVPZmZz
ZXQgKi8sIGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1vbm90b25pY1RpbWUo
KSkgeyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlKCk7
CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxhZyB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA3ZDA3Y2RiZDg0OTcwMjg1M2UxYjkyNWEwYmJj
OThkN2RkYWZhNzY2Li5hMGUwZTIzZThjZjhkNmUyNjg5ZjFjYmI2MjZjOWFhYWQ1ZTVkNGEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTQ2LDcgKzQ2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKLSNp
bmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAt
MTMyNywyMSArMTMyNiwxMCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3Vy
cmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6QXBwbHlUcmFuc2Zvcm1PcgogCiAgICAgYXV0byYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKIAotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5k
ZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgewotICAgICAgICAgICAgaWYgKHRpbWVsaW5lLT5p
c1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJv
cGVydHlUcmFuc2Zvcm0pKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y3VyclRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigp
KTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hU
b0NTU0JveFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgICAgIHN0eWxlLT5hcHBseVRyYW5z
Zm9ybShjdXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBhcHBseU9yaWdpbik7
Ci0gICAgICAgICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2Fu
UmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyVHJhbnNm
b3JtOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRp
b25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKSkgeworICAgIGlm
IChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKSB7CisgICAg
ICAgIGlmICh0aW1lbGluZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVy
KHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKSkgewogICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1h
dGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGVkU3R5bGUoKTsKICAg
ICAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlw
ZShzdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0oY3VyclRyYW5z
Zm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmlnaW4pOwogICAgICAgICAgICAg
bWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1z
KCkpOwpAQCAtMTM0OSwxMSArMTMzNywxMCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6QXBwbHlUcmFuc2Zvcm1PcgogICAg
ICAgICB9CiAgICAgfQogCi0KICAgICAvLyBtX3RyYW5zZm9ybSBpbmNsdWRlcyB0cmFuc2Zvcm0t
b3JpZ2luLCBzbyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgdHJhbnNmb3JtIGhlcmUuCiAgICAg
aWYgKGFwcGx5T3JpZ2luID09IFJlbmRlclN0eWxlOjpFeGNsdWRlVHJhbnNmb3JtT3JpZ2luKSB7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1h
dGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCkuYW5pbWF0ZWRTdHls
ZSgpOwogICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0Jv
eFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICByZW5kZXJCb3guc3R5bGUoKS5hcHBseVRyYW5zZm9y
bShjdXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBSZW5kZXJTdHlsZTo6RXhj
bHVkZVRyYW5zZm9ybU9yaWdpbik7CiAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJU
cmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKQEAgLTYxNjUsMjAgKzYxNTIsMTMg
QEAgYm9vbCBSZW5kZXJMYXllcjo6Z2V0T3ZlcmxhcEJvdW5kc0luY2x1ZGluZ0NoaWxkcmVuQWNj
b3VudGluZ0ZvclRyYW5zZm9ybUFuaW1hdGkKICAgICBib3VuZHMgPSBjYWxjdWxhdGVMYXllckJv
dW5kcyh0aGlzLCBMYXlvdXRTaXplKCksIGJvdW5kc0ZsYWdzKTsKICAgICAKICAgICBMYXlvdXRS
ZWN0IGFuaW1hdGVkQm91bmRzID0gYm91bmRzOwotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGlt
ZWxpbmUoKSkgewotICAgICAgICAgICAgaWYgKHRpbWVsaW5lLT5jb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3VuZHMpKSB7Ci0gICAgICAgICAgICAgICAgYm91
bmRzID0gYW5pbWF0ZWRCb3VuZHM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVuZGVyZXIo
KS5sZWdhY3lBbmltYXRpb24oKS5jb21wdXRlRXh0ZW50T2ZBbmltYXRpb24ocmVuZGVyZXIoKSwg
YW5pbWF0ZWRCb3VuZHMpKSB7CisgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5k
b2N1bWVudFRpbWVsaW5lKCkpIHsKKyAgICAgICAgaWYgKHRpbWVsaW5lLT5jb21wdXRlRXh0ZW50
T2ZBbmltYXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3VuZHMpKSB7CiAgICAgICAgICAgICBi
b3VuZHMgPSBhbmltYXRlZEJvdW5kczsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDRkNTQ3YzRiN2Zk
ZDFhZTQwOWE2Y2U2ZjgyOTJmNmE2Y2QzMDMyNmYuLjJmN2I1ODkyMzJmYTcyMjM0NmY3MDJhOGQ0
MmRlMTMzYmRlN2VlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCkBA
IC0xMjUxLDExICsxMjUwLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21l
dHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgY29uc3QgYXV0
byBkZXZpY2VTY2FsZUZhY3RvciA9IHRoaXMtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAKICAgICBi
b29sIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7Ci0gICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZSA9
IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQotICAgICAgICAgICAgaXNSdW5uaW5nQWNj
ZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSB0aW1lbGluZS0+aXNSdW5uaW5nQWNjZWxlcmF0
ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRp
b24gPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5p
bWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CisgICAg
aWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpCisgICAg
ICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSk7CiAKICAgICB1cGRhdGVUcmFuc2Zvcm0oc3R5bGUpOwogICAgIHVwZGF0
ZU9wYWNpdHkoc3R5bGUpOwpAQCAtMzY0OCw5NyArMzY0NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjphbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiAg
ICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9m
ZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpCi17Ci0gICAgYm9vbCBkaWRBbmltYXRlID0g
ZmFsc2U7Ci0KLSAgICBBU1NFUlQocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLQot
ICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkpIHsKLSAgICAgICAgY29uc3Qg
QW5pbWF0aW9uKiBvcGFjaXR5QW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShD
U1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAgICBpZiAob3BhY2l0eUFuaW0gJiYgIW9wYWNpdHlB
bmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1
ZUxpc3Qgb3BhY2l0eVZlY3RvcihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAgICAgICAg
ICBvcGFjaXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAs
IGNvbXBvc2l0aW5nT3BhY2l0eShmcm9tU3R5bGUtPm9wYWNpdHkoKSkpKTsKLSAgICAgICAgICAg
IG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMSwg
Y29tcG9zaXRpbmdPcGFjaXR5KHRvU3R5bGUtPm9wYWNpdHkoKSkpKTsKLSAgICAgICAgICAgIC8v
IFRoZSBib3hTaXplIHBhcmFtIGlzIG9ubHkgdXNlZCBmb3IgdHJhbnNmb3JtIGFuaW1hdGlvbnMg
KHdoaWNoIGNhbiBvbmx5IHJ1biBvbiBSZW5kZXJCb3hlcyksIHNvIHdlIHBhc3MgYW4gZW1wdHkg
c2l6ZSBoZXJlLgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9u
KG9wYWNpdHlWZWN0b3IsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5QW5pbSwgR3JhcGhpY3NMYXllcjo6
YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpLCB0aW1l
T2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0
IG9wYWNpdHkgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhl
IGZpbmFsIG9wYWNpdHkuCi0gICAgICAgICAgICAgICAgdXBkYXRlT3BhY2l0eSgqdG9TdHlsZSk7
Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0g
JiYgbV9vd25pbmdMYXllci5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAgICBjb25zdCBBbmltYXRp
b24qIHRyYW5zZm9ybUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2Zvcm0pOwotICAgICAgICBpZiAodHJhbnNmb3JtQW5pbSAmJiAhdHJhbnNmb3Jt
QW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFs
dWVMaXN0IHRyYW5zZm9ybVZlY3RvcihBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtKTsKLSAgICAg
ICAgICAgIHRyYW5zZm9ybVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZT4oMCwgZnJvbVN0eWxlLT50cmFuc2Zvcm0oKSkpOwotICAgICAgICAgICAgdHJhbnNm
b3JtVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlPigxLCB0
b1N0eWxlLT50cmFuc2Zvcm0oKSkpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+
YWRkQW5pbWF0aW9uKHRyYW5zZm9ybVZlY3Rvciwgc25hcHBlZEludFJlY3QocmVuZGVyQm94KCkt
PmJvcmRlckJveFJlY3QoKSkuc2l6ZSgpLCB0cmFuc2Zvcm1BbmltLCBHcmFwaGljc0xheWVyOjph
bmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtKSwgdGlt
ZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVj
dCB0cmFuc2Zvcm0gaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQg
dGhlIGZpbmFsIHRyYW5zZm9ybS4KLSAgICAgICAgICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKnRv
U3R5bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5Rmls
dGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzRmlsdGVyKCkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0
aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3Bl
cnR5RmlsdGVyKTsKLSAgICAgICAgaWYgKGZpbHRlckFuaW0gJiYgIWZpbHRlckFuaW0tPmlzRW1w
dHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBmaWx0
ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcik7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0
b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+
ZmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxG
aWx0ZXJBbmltYXRpb25WYWx1ZT4oMSwgdG9TdHlsZS0+ZmlsdGVyKCkpKTsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihmaWx0ZXJWZWN0b3IsIEZsb2F0U2l6
ZSgpLCBmaWx0ZXJBbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlv
bihBbmltYXRlZFByb3BlcnR5RmlsdGVyKSwgdGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmaWx0ZXIgaXMgdmlzaWJsZSB3aGVuIHRo
ZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIGZpbHRlci4KLSAgICAgICAgICAg
ICAgICB1cGRhdGVGaWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2lmIEVOQUJMRShG
SUxURVJTX0xFVkVMXzIpCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0QmFj
a2Ryb3BGaWx0ZXIgJiYgbV9vd25pbmdMYXllci5oYXNCYWNrZHJvcEZpbHRlcigpKSB7Ci0gICAg
ICAgIGNvbnN0IEFuaW1hdGlvbiogYmFja2Ryb3BGaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNp
dGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIpOwotICAgICAg
ICBpZiAoYmFja2Ryb3BGaWx0ZXJBbmltICYmICFiYWNrZHJvcEZpbHRlckFuaW0tPmlzRW1wdHlP
clplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBiYWNrZHJv
cEZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIpOwotICAg
ICAgICAgICAgYmFja2Ryb3BGaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5p
bWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+YmFja2Ryb3BGaWx0ZXIoKSkpOwotICAgICAgICAg
ICAgYmFja2Ryb3BGaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0aW9u
VmFsdWU+KDEsIHRvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGlmICht
X2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihiYWNrZHJvcEZpbHRlclZlY3RvciwgRmxvYXRT
aXplKCksIGJhY2tkcm9wRmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZv
clRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKSwgdGltZU9m
ZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBi
YWNrZHJvcCBmaWx0ZXIgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBz
ZXQgdGhlIGZpbmFsIGJhY2tkcm9wIGZpbHRlci4KLSAgICAgICAgICAgICAgICB1cGRhdGVCYWNr
ZHJvcEZpbHRlcnMoKnRvU3R5bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoZGlk
QW5pbWF0ZSkKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc1Bvc3RMYXlvdXRDb21wb3Np
dGluZ1VwZGF0ZSgpOwotCi0gICAgcmV0dXJuIGRpZEFuaW1hdGU7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5KQotewotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBhbmltYXRlZFByb3Bl
cnR5ID0gY3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkocHJvcGVydHkpOwotICAgIGlmIChhbmlt
YXRlZFByb3BlcnR5ICE9IEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQotICAgICAgICBtX2dyYXBo
aWNzTGF5ZXItPnBhdXNlQW5pbWF0aW9uKEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JU
cmFuc2l0aW9uKGFuaW1hdGVkUHJvcGVydHkpLCB0aW1lT2Zmc2V0KTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
KQotewotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBhbmltYXRlZFByb3BlcnR5ID0gY3NzVG9HcmFw
aGljc0xheWVyUHJvcGVydHkocHJvcGVydHkpOwotICAgIGlmIChhbmltYXRlZFByb3BlcnR5ICE9
IEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgIG1fZ3JhcGhpY3NMYXllci0+cmVt
b3ZlQW5pbWF0aW9uKEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKGFu
aW1hdGVkUHJvcGVydHkpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc1Bvc3RMYXlv
dXRDb21wb3NpdGluZ1VwZGF0ZSgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGNvbnN0IFN0
cmluZyYsIE1vbm90b25pY1RpbWUgdGltZSkKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmLCBN
b25vdG9uaWNUaW1lKQogewotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAg
IHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkubm90aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5k
ZXJlcigpLCB0aW1lKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKaW5kZXggOWM3NjQ3YmIyNjc2YjNmYzFmOTI2ZmFkOTI4
NDdkOGY4ZWE3YzBmMC4uNWMxMTI1Mjg3MzE5MjAyY2EwNGQyODI5NWRhMjJhN2MxZjJkYmNhMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaApAQCAt
MTg0LDExICsxODQsNyBAQCBwdWJsaWM6CiAgICAgLy8gTm90aWZpY2F0aW9uIGZyb20gdGhlIHJl
bmRlcmVyIHRoYXQgaXRzIGNvbnRlbnQgY2hhbmdlZC4KICAgICB2b2lkIGNvbnRlbnRDaGFuZ2Vk
KENvbnRlbnRDaGFuZ2VUeXBlKTsKIAotICAgIC8vIEludGVyZmFjZSB0byBzdGFydCwgZmluaXNo
LCBzdXNwZW5kIGFuZCByZXN1bWUgYW5pbWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMKLSAgICBib29s
IHN0YXJ0VHJhbnNpdGlvbihkb3VibGUsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKTsKLSAgICB2b2lkIHRyYW5z
aXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQpOwotICAgIHZvaWQg
dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpOwotCisgICAgLy8gSW50ZXJmYWNlIHRv
IHN0YXJ0LCBmaW5pc2gsIHN1c3BlbmQgYW5kIHJlc3VtZSBhbmltYXRpb25zCiAgICAgYm9vbCBz
dGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uJiwgY29uc3Qg
S2V5ZnJhbWVMaXN0Jik7CiAgICAgdm9pZCBhbmltYXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZz
ZXQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25z
dCBTdHJpbmcmIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxODQxZjk2ZjBiNjI5OGNhNTIzZWQ3ZjFlNjk4OWYy
YzI3NmRkZDc1Li5mMjM5YzRhNDQ4MGFlZTcyYTM5MmIzNmM1MjQ1YjdjZDQxZDYyZDM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
CiAjaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgIkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAt
NTYwLDkgKzU1OSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8mIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKLSAgICBBbmlt
YXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmZnJhbWVWaWV3LmZyYW1lKCku
bGVnYWN5QW5pbWF0aW9uKCkpOwotCiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJzKTsKICAg
ICB7CiAgICAgICAgIFNldEZvclNjb3BlPGJvb2w+IGZsdXNoaW5nTGF5ZXJzU2NvcGUobV9mbHVz
aGluZ0xheWVycywgdHJ1ZSk7CkBAIC04MTksOCArODE1LDYgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1
cGRhdGUKIAogICAgICsrbV9jb21wb3NpdGluZ1VwZGF0ZUNvdW50OwogCi0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKLQogICAgIFNldEZvclNjb3BlPGJvb2w+IHBv
c3RMYXlvdXRDaGFuZ2UobV9pblBvc3RMYXlvdXRVcGRhdGUsIHRydWUpOwogCiAjaWYgIUxPR19E
SVNBQkxFRApAQCAtMjk3NywxNyArMjk3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGFuaW1Db250cm9sbGVyID0gcmVuZGVyZXIubGVn
YWN5QW5pbWF0aW9uKCk7Ci0gICAgcmV0dXJuIChhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgICYm
ICh1c2VzQ29tcG9zaXRpbmcoKSB8fCAobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xp
ZW50OjpBbmltYXRlZE9wYWNpdHlUcmlnZ2VyKSkpCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVy
LmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5RmlsdGVy
KQotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVy
LmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5V2Via2l0
QmFja2Ryb3BGaWx0ZXIpCi0jZW5kaWYKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIuaXNSdW5u
aW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVy
ZXIpIGNvbnN0CkBAIC0zNTE1LDEwICszNDk5LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmlzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jgog
ICAgICAgICAgICAgcmV0dXJuIGVmZmVjdHNTdGFjay0+aXNDdXJyZW50bHlBZmZlY3RpbmdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CiAgICAgfQogCi0gICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIu
bGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwg
Q1NTUHJvcGVydHlUcmFuc2Zvcm0pOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gSWYgYW4g
ZWxlbWVudCBoYXMgY29tcG9zaXRlZCBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLCB0aG9zZSBj
aGlsZHJlbiByZW5kZXIgaW4gZnJvbnQgb2YgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggY2ZlY2FlNDRkM2RkODg2
YWQ2NDc0OTdiOWExMWI4NDBlNGQxNWQ2Yi4uY2FlOGY3MmYzNmNkODUzMmEyNTk4YjQ4YjZiZWJm
ODM1MzhmNDQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjUwLDI3ICsyNTAsNiBAQCB2b2lkIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OmNvbXB1dGVSZXBhaW50TGF5b3V0UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iagogICAgICAgICBzZXRSZXBhaW50TGF5b3V0UmVjdHMoUmVwYWludExheW91dFJlY3Rz
KCp0aGlzLCByZXBhaW50Q29udGFpbmVyLCBnZW9tZXRyeU1hcCkpOwogfQogCi1ib29sIFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdG9TdHlsZSkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCkt
PmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBsYXllcigpLT5i
YWNraW5nKCktPnN0YXJ0VHJhbnNpdGlvbih0aW1lT2Zmc2V0LCBwcm9wZXJ0eUlkLCBmcm9tU3R5
bGUsIHRvU3R5bGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRp
b25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsK
LSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGxheWVyKCktPmJhY2tpbmcoKS0+dHJhbnNpdGlvblBhdXNlZCh0aW1lT2Zmc2V0LCBw
cm9wZXJ0eUlkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
RmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQotewotICAgIGlmICghbGF5ZXIoKSB8
fCAhbGF5ZXIoKS0+YmFja2luZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIoKS0+YmFj
a2luZygpLT50cmFuc2l0aW9uRmluaXNoZWQocHJvcGVydHlJZCk7Ci19Ci0KIGJvb2wgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdDo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0
IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBLZXlmcmFtZUxpc3QmIGtleWZyYW1lcykKIHsK
ICAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2Fk
Y2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLmQ5NzgxY2VjYzg5N2MzNTg2OWE3NzI5
YmExY2QwZTc2ZTE5NDFmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVwYWludExheW91dFJlY3RzKGNvbnN0IFJlcGFpbnRMYXlvdXRSZWN0cyYpOwogICAg
IHZvaWQgY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIAotICAgIGJvb2wgc3RhcnRUcmFuc2l0
aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKSBvdmVycmlk
ZTsKLQogICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFu
aW1hdGlvbiYsIGNvbnN0IEtleWZyYW1lTGlzdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0
aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRl
OwogICAgIHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAxOTEyNWZlZjc5
ZmZlMjYwMDRmZmU5OTg3ZTFmZjBiMzQwZGRmOWFkLi41MDA5YWQxN2JhOWNiN2I2MjMwZmMxYzNk
ZmU0YzZkZjBhZjc3Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC00Niw3ICs0Niw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7
CiBjbGFzcyBDb2xvcjsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIERvY3VtZW50OwpAQCAtNzA2LDcg
KzcwNSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNv
bnN0IEludFJlY3QqID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGltYWdl
Q2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9CiAK
LSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSBjb25zdDsKICAg
ICBEb2N1bWVudFRpbWVsaW5lKiBkb2N1bWVudFRpbWVsaW5lKCkgY29uc3Q7CiAKICAgICAvLyBN
YXAgcG9pbnRzIGFuZCBxdWFkcyB0aHJvdWdoIGVsZW1lbnRzLCBwb3RlbnRpYWxseSB2aWEgM2Qg
dHJhbnNmb3Jtcy4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGNhbGwgdGhlc2UgZGlyZWN0bHk7
IHVzZQpAQCAtOTczLDExICs5NzEsNiBAQCBpbmxpbmUgUGFnZSYgUmVuZGVyT2JqZWN0OjpwYWdl
KCkgY29uc3QKICAgICByZXR1cm4gKmZyYW1lKCkucGFnZSgpOwogfQogCi1pbmxpbmUgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciYgUmVuZGVyT2JqZWN0OjpsZWdhY3lBbmltYXRpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBmcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpOwotfQotCiBpbmxpbmUgRG9j
dW1lbnRUaW1lbGluZSogUmVuZGVyT2JqZWN0Ojpkb2N1bWVudFRpbWVsaW5lKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcApp
bmRleCA4YTdmZDY1OGIyZGQ5OTA3MDk3MDUyZDExM2JkY2Y4N2RkODE4ZDg2Li5iMTMyOGFhOTk5
OTk2M2ZjMjRmYzU5ZWVlYjhmY2Q1YWRlMmRmZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKQEAgLTI3LDcg
KzI3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgogCiAjaW5jbHVkZSAiQVhP
YmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRU
cmVlSXRlcmF0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNTU2LDcgKzU1NSw2IEBA
IHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3Qs
IFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAKICAgICBhdXRvJiBkb2N1bWVudCA9IHJvb3QuZG9j
dW1lbnQoKTsKICAgICBhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50LmV4aXN0aW5nVGltZWxpbmUo
KTsKLSAgICBhdXRvJiBhbmltYXRpb25Db250cm9sbGVyID0gZG9jdW1lbnQuZnJhbWUoKS0+bGVn
YWN5QW5pbWF0aW9uKCk7ICAgIAogCiAgICAgYXV0byBwb3AgPSBbJl0gKHVuc2lnbmVkIGRlcHRo
KSB7CiAgICAgICAgIHdoaWxlICh0ZWFyZG93blN0YWNrLnNpemUoKSA+IGRlcHRoKSB7CkBAIC01
NzUsNyArNTczLDYgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMo
RWxlbWVudCYgcm9vdCwgVGVhcmRvd25UeXBlIHRlYXJkb3duVHkKICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGVhcmRvd25UeXBlID09IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGVD
YW5jZWxpbmdBbmltYXRpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUtPmNh
bmNlbERlY2xhcmF0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgV2ViQW5pbWF0aW9u
OjpTaWxlbnRseTo6Tm8pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyLmNhbmNlbEFuaW1hdGlvbnMoZWxlbWVudCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGU6
CiAgICAgICAgICAgICAgICAgaWYgKHRpbWVsaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFk
anVzdGVyLmNwcAppbmRleCA4Y2UwNzUyYTYzNjZkODMzMDAyNjJiMDJlZTA4M2VlNTlmYzEwNzM4
Li5hM2ViZjZmYjY3ZjFmYTYxMmJmMDY0NjdhN2Q1OGQ4OWEzZWI5OWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKIAotI2luY2x1ZGUgIkFuaW1hdGlv
bkJhc2UuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5jbHVkZSAi
U1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIFN0eWxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmNwcAppbmRleCBiODVjZjQ2NmMxNzNiODgwM2Y3NWUzNzYyNWJmMDI1ODZlZjkwYWU1Li5m
N2ZmZDQ0ZjlhYTRiOTcxZGQ5ZjFiNjZhYzUyZTAzM2VmNjdmZjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIuaCIKIAotI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29t
cG9zZWRUcmVlSXRlcmF0b3IuaCIKQEAgLTU0LDYgKzUzLDcgQEAKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNp
bmNsdWRlICJXZWJBbmltYXRpb25UeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTMxMiwyNiArMzEyLDIzIEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmlt
YXRlZEVsZW1lbnRVcGRhdGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAKICAgICBPcHRpb25T
ZXQ8QW5pbWF0aW9uSW1wYWN0PiBhbmltYXRpb25JbXBhY3Q7CiAKLSAgICAvLyBOZXcgY29kZSBw
YXRoIGZvciBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zLgotICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCBhbnkgbmV3IENTUyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50IGhh
cyBhIG1hdGNoaW5nIFdlYkFuaW1hdGlvbgotICAgICAgICAvLyBvbiB0aGUgZG9jdW1lbnQgdGlt
ZWxpbmUuIE5vdGUgdGhhdCB3ZSBnZXQgdGltZWxpbmUoKSBvbiB0aGUgRG9jdW1lbnQgaGVyZSBi
ZWNhdXNlIHdlIG5lZWQgYSB0aW1lbGluZSBjcmVhdGVkCi0gICAgICAgIC8vIGluIGNhc2Ugbm8g
V2ViIEFuaW1hdGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSlMgQVBJLgotICAg
ICAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERv
Y3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5k
ZXJWaWV3KCktPnByaW50aW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChvbGRTdHlsZSAmJiAob2xk
U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkgfHwgbmV3U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkpKQot
ICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NUcmFuc2l0aW9u
c0ZvckVsZW1lbnQoZWxlbWVudCwgKm9sZFN0eWxlLCAqbmV3U3R5bGUpOwotCi0gICAgICAgICAg
ICAvLyBUaGUgb3JkZXIgaW4gd2hpY2ggQ1NTIFRyYW5zaXRpb25zIGFuZCBDU1MgQW5pbWF0aW9u
cyBhcmUgdXBkYXRlZCBtYXR0ZXJzIHNpbmNlIENTUyBUcmFuc2l0aW9ucyBkZWZpbmUgdGhlIGFm
dGVyLWNoYW5nZSBzdHlsZQotICAgICAgICAgICAgLy8gdG8gdXNlIENTUyBBbmltYXRpb25zIGFz
IGRlZmluZWQgaW4gdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4gQXMgc3VjaCwgd2Ug
dXBkYXRlIENTUyBBbmltYXRpb25zIGFmdGVyIENTUyBUcmFuc2l0aW9ucwotICAgICAgICAgICAg
Ly8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRyYW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5p
bWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1lIGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hh
bmdlIGV2ZW50LgotICAgICAgICAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5p
bWF0aW9ucygpKSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgYW5kIHBhc3MgdGhlIHBhcmVudCBzdHlsZSB2
aWEgdXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQuCi0gICAgICAgICAgICAgICAgc2NvcGUo
KS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMoJnBhcmVudCgpLnN0
eWxlKTsKLQotICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NB
bmltYXRpb25zRm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0eWxlKTsKLQotICAg
ICAgICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5
ZnJhbWVzKG51bGxwdHIpOwotICAgICAgICAgICAgfQorICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0IGFueSBuZXcgQ1NTIGFuaW1hdGlvbiBvY2N1cmluZyBvbiB0aGlzIGVs
ZW1lbnQgaGFzIGEgbWF0Y2hpbmcgV2ViQW5pbWF0aW9uCisgICAgLy8gb24gdGhlIGRvY3VtZW50
IHRpbWVsaW5lLiBOb3RlIHRoYXQgd2UgZ2V0IHRpbWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhl
cmUgYmVjYXVzZSB3ZSBuZWVkIGEgdGltZWxpbmUgY3JlYXRlZAorICAgIC8vIGluIGNhc2Ugbm8g
V2ViIEFuaW1hdGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSlMgQVBJLgorICAg
IGlmIChlbGVtZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1l
bnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSAmJiAhZWxlbWVudC5kb2N1bWVudCgpLnJlbmRlclZp
ZXcoKS0+cHJpbnRpbmcoKSkgeworICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5o
YXNUcmFuc2l0aW9ucygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKKyAgICAgICAg
ICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnQo
ZWxlbWVudCwgKm9sZFN0eWxlLCAqbmV3U3R5bGUpOworCisgICAgICAgIC8vIFRoZSBvcmRlciBp
biB3aGljaCBDU1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25zIGFyZSB1cGRhdGVkIG1h
dHRlcnMgc2luY2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxl
CisgICAgICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2
aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9u
cyBhZnRlciBDU1MgVHJhbnNpdGlvbnMKKyAgICAgICAgLy8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRy
YW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5pbWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1l
IGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LgorICAgICAgICBpZiAo
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zKCkpIHx8IG5ld1N0eWxlLT5oYXNB
bmltYXRpb25zKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIGFu
ZCBwYXNzIHRoZSBwYXJlbnQgc3R5bGUgdmlhIHVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50
LgorICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JL
ZXlmcmFtZXMoJnBhcmVudCgpLnN0eWxlKTsKKworICAgICAgICAgICAgbV9kb2N1bWVudC50aW1l
bGluZSgpLnVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsIG9sZFN0eWxlLCAq
bmV3U3R5bGUpOworCisgICAgICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1l
bnRTdHlsZUZvcktleWZyYW1lcyhudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzQ3
LDE3ICszNDQsNiBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRF
bGVtZW50VXBkYXRlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdAogICAgIH0gZWxzZQogICAgICAg
ICBlbGVtZW50LnNldExhc3RTdHlsZUNoYW5nZUV2ZW50U3R5bGUobnVsbHB0cik7CiAKLSAgICAv
LyBPbGQgY29kZSBwYXRoIGZvciBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zLgot
ICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byYgYW5pbWF0aW9u
Q29udHJvbGxlciA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCk7Ci0KLSAg
ICAgICAgYXV0byBhbmltYXRpb25VcGRhdGUgPSBhbmltYXRpb25Db250cm9sbGVyLnVwZGF0ZUFu
aW1hdGlvbnMoZWxlbWVudCwgKm5ld1N0eWxlLCBvbGRTdHlsZSk7Ci0gICAgICAgIGFuaW1hdGlv
bkltcGFjdC5hZGQoYW5pbWF0aW9uVXBkYXRlLmltcGFjdCk7Ci0KLSAgICAgICAgaWYgKGFuaW1h
dGlvblVwZGF0ZS5zdHlsZSkKLSAgICAgICAgICAgIG5ld1N0eWxlID0gV1RGTW92ZShhbmltYXRp
b25VcGRhdGUuc3R5bGUpOwotICAgIH0KLQogICAgIGlmIChhbmltYXRpb25JbXBhY3QpCiAgICAg
ICAgIEFkanVzdGVyOjphZGp1c3RBbmltYXRlZFN0eWxlKCpuZXdTdHlsZSwgcGFyZW50Qm94U3R5
bGUoKSwgYW5pbWF0aW9uSW1wYWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxTZXR0aW5ncy5jcHAKaW5kZXggYjM3NmJmNmMxNzVkNTQ1OWE0ZTBiNDYzY2E0OGI5YmYwY2E2
Njc5OS4uNmE1YjZmNGFlNDIwMjljZTY2MDhjMDRiYzkyNjRmZDAzNmZlZDhkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCkBAIC0xMDI5LDExICsxMDI5
LDYgQEAgdm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRGb3JjZWRTdXBwb3J0c0hpZ2hEeW5hbWlj
UmFuZ2VWYWx1ZShJbnRlcm5hbFNldHRpbmdzOjoKICAgICBzZXR0aW5ncygpLnNldEZvcmNlZFN1
cHBvcnRzSGlnaER5bmFtaWNSYW5nZVZhbHVlKGludGVybmFsU2V0dGluZ3NUb1NldHRpbmdzVmFs
dWUodmFsdWUpKTsKIH0KIAotYm9vbCBJbnRlcm5hbFNldHRpbmdzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkKLXsKLSAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7
Ci19Ci0KIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vz
c2lvbihib29sIHNob3VsZCkKIHsKICNpZiBFTkFCTEUoVklERU8pIHx8IEVOQUJMRShXRUJfQVVE
SU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3Mu
aCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCmluZGV4IGI1Mjdl
MTU1YzkwZDQ2NjhlMzEyNGM1ZTliNDhiZmUwZDBlMzk1NzIuLmY2NWE3NDEzNDlmZmNhMjliMTk1
NWM2NzRhYTQ4MzNkNzIzNjU3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oCkBAIC0xMzUsOCArMTM1LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIHNldEZl
dGNoQVBJS2VlcEFsaXZlRW5hYmxlZChib29sKTsKIAotICAgIHN0YXRpYyBib29sIHdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkRGVhY3Rp
dmF0ZUF1ZGlvU2Vzc2lvbihib29sKTsKICAgICAKICAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NB
UElQZXJQYWdlU2NvcGVFbmFibGVkKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxTZXR0aW5ncy5pZGwKaW5kZXggNDFhMjdkNjJlMjc2NDY0YWFlNWUxMjhiOGU5YmUxZWNm
OTFmZWRmZi4uNWNjNjJmMzI1YTJmNjg5NjAwZTNiZjg4Y2VhMDVjNjU2ZmFlNGVmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCkBAIC0xMTcsOCArMTE3
LDYgQEAgZW51bSBGb250TG9hZFRpbWluZ092ZXJyaWRlIHsgIkJsb2NrIiwgIlN3YXAiLCAiRmFp
bHVyZSIgfTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBzZXRTaG91bGRNYW5h
Z2VBdWRpb1Nlc3Npb25DYXRlZ29yeShib29sZWFuIHNob3VsZCk7CiAgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bmRlZmluZWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2xlYW4g
ZW5hYmxlZCk7CiAKLSAgICBbRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zXSBib29sZWFu
IHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLQogICAgIHVuZGVmaW5lZCBz
ZXRTaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9uKGJvb2xlYW4gc2hvdWxkRGVhY3RpdmF0ZSk7
CiAgICAgCiAgICAgdW5kZWZpbmVkIHNldFN0b3JhZ2VBY2Nlc3NBUElQZXJQYWdlU2NvcGVFbmFi
bGVkKGJvb2xlYW4gZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5k
ZXggMWQxNGQ3MGVkOGYxMmExZTZkM2QwZjI1NWNiMWJhMGY1MDc4M2U4Yy4uN2M0ZGYwM2U1ZTE4
NGI1YjU5YzkwZDQ2ZjY2ZWNlMTA2OGQ2ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NL
ZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlQYXJzZXIuaCIKQEAgLTEwNjksOSArMTA2OCw3IEBAIGJvb2wgSW50ZXJuYWxzOjph
bmltYXRpb25XaXRoSWRFeGlzdHMoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKIAogdW5zaWduZWQg
SW50ZXJuYWxzOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCkt
PnRpbWVsaW5lKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRm9yVGVzdGluZygpOwotICAgIHJl
dHVybiBmcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRp
bWVsaW5lKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRm9yVGVzdGluZygpOwogfQogCiBFeGNl
cHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBjb25zdApA
QCAtMTA4MCw5ICsxMDc3LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjphbmltYXRp
b25zQXJlU3VzcGVuZGVkKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+
ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZG9jdW1l
bnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7
Ci0gICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRp
b25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIHJldHVybiBkb2N1bWVu
dC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsK
IH0KIAogZG91YmxlIEludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QKQEAgLTEw
OTEsMTUgKzEwODYsOSBAQCBkb3VibGUgSW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwoKSBj
b25zdAogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJTkZJTklUWTsKIAotICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byB0aW1lbGluZSA9
IGRvY3VtZW50LT5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAgICByZXR1cm4gdGltZWxp
bmUtPmFuaW1hdGlvbkludGVydmFsKCkuc2Vjb25kcygpOwotICAgICAgICByZXR1cm4gSU5GSU5J
VFk7Ci0gICAgfQotCi0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJu
IElORklOSVRZOwotICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9u
KCkuYW5pbWF0aW9uSW50ZXJ2YWwoKS52YWx1ZSgpOworICAgIGlmIChhdXRvIHRpbWVsaW5lID0g
ZG9jdW1lbnQtPmV4aXN0aW5nVGltZWxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5h
bmltYXRpb25JbnRlcnZhbCgpLnNlY29uZHMoKTsKKyAgICByZXR1cm4gSU5GSU5JVFk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdApA
QCAtMTEwOCwxOSArMTA5NywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1c3Bl
bmRBbmltYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJh
bWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50LT5lbnN1
cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1
cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLQotICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmxlZ2FjeUFu
aW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotICAgICAg
ICB9CisgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5p
bWF0aW9ucygpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYg
KERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9j
dW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwog
ICAgIH0KIAogICAgIHJldHVybiB7IH07CkBAIC0xMTMyLDczICsxMTEyLDE3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkg
ewotICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFu
aW1hdGlvbnMoKTsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAg
ICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5p
bWF0aW9ucygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG9jdW1lbnQtPmZy
YW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1
bWVudCk7Ci0KLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAg
ICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1l
bnQoZG9jdW1lbnQpOwotICAgICAgICB9CisgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0Nv
bnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJl
c3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRp
b25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVu
dCkKLXsKLSAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwotICAgIHJldHVybiBmcmFtZSgpLT5sZWdhY3lBbmltYXRp
b24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBBdG9tU3RyaW5nKGFuaW1hdGlvbk5h
bWUpLCBwYXVzZVRpbWUpOwotfQotCi1FeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1
ZG9JZCkKLXsKLSAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotCi0gICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUi
ICYmIHBzZXVkb0lkICE9ICJhZnRlciIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBw
c2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxl
bWVudC5hZnRlclBzZXVkb0VsZW1lbnQoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIHJldHVy
biBmcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZSgqcHNldWRv
RWxlbWVudCwgQXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKLX0KLQotRXhj
ZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVs
ZW1lbnQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5p
bWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgcGF1
c2VUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHBh
dXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCkKLXsKLSAg
ICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwotCi0gICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUiICYmIHBzZXVkb0lk
ICE9ICJhZnRlciIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKLQotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9PSAi
YmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC5hZnRlclBz
ZXVkb0VsZW1lbnQoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIHJldHVybiBmcmFtZSgpLT5s
ZWdhY3lBbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoKnBzZXVkb0VsZW1lbnQsIHBy
b3BlcnR5LCBwYXVzZVRpbWUpOwotfQotCiBWZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFu
aW1hdGlvbj4gSW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLQogICAgIFZlY3RvcjxJbnRlcm5hbHM6OkFjY2VsZXJhdGVkQW5pbWF0aW9u
PiBhbmltYXRpb25zOwogICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uQXNQYWlyIDogZWxl
bWVudC5kb2N1bWVudCgpLnRpbWVsaW5lKCkuYWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQoeyBhbmltYXRpb25Bc1BhaXIu
Zmlyc3QsIGFuaW1hdGlvbkFzUGFpci5zZWNvbmQgfSk7CkBAIC0xMjA3LDkgKzExMzEsNyBAQCBW
ZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gSW50ZXJuYWxzOjphY2NlbGVy
YXRlZEFuaW1hdGlvbnNGb3JFbGVtZQogCiB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9mQW5p
bWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGlu
ZSgpLm51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zRm9yVGVzdGluZygpOwot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgp
Lm51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zRm9yVGVzdGluZygpOwogfQog
CiBkb3VibGUgSW50ZXJuYWxzOjp0aW1lVG9OZXh0QW5pbWF0aW9uVGljayhXZWJBbmltYXRpb24m
IGFuaW1hdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDM3MTE3
NmY2YzJhM2M3ODdlMDM2ZjUyMjY2MjU4MzVmZGMxM2VlOGEuLmQxN2NkZWQxZDIxOWU2NTM4Y2Mx
NDgxMzNjNTZlZmIxMmFhYzVhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAt
MjMzLDE0ICsyMzMsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8Ym9vbD4gYW5pbWF0aW9u
c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1c3BlbmRBbmlt
YXRpb25zKCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVzdW1lQW5pbWF0aW9ucygp
IGNvbnN0OwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVu
dCYpOwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpOwogICAgIGRvdWJsZSBhbmltYXRpb25zSW50
ZXJ2YWwoKSBjb25zdDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgRXhj
ZXB0aW9uT3I8Ym9vbD4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50Jik7Ci0gICAgRXhjZXB0
aW9uT3I8Ym9vbD4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0
cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcm
IHBzZXVkb0lkKTsKLQogICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAgc3RydWN0
IEFjY2VsZXJhdGVkQW5pbWF0aW9uIHsKICAgICAgICAgU3RyaW5nIHByb3BlcnR5OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDhkMWFkNDJmZDVhN2I1MDA0Y2IwOGZhNjZl
ZWY3NGFiYzQ2NDhkNDMuLmZkNjdlNzEyMmFjZDQxNmJjZGQ3MDRlYTVkMDAzNTVmOWM2OGIwNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTMxNSwxNCArMzE1LDggQEAg
ZW51bSBDb250ZW50U2l6ZUNhdGVnb3J5IHsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVm
aW5lZCBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZp
bmVkIHJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4g
YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVh
biBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChET01TdHJpbmcgYW5pbWF0aW9uTmFtZSwg
dW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW01h
eVRocm93RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVt
ZW50KERPTVN0cmluZyBhbmltYXRpb25OYW1lLCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGlt
ZSwgRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgcHNldWRvSWQpOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBkb3VibGUgYW5pbWF0aW9uc0ludGVydmFsOwogCi0gICAgLy8gQ1NTIFRyYW5zaXRp
b24gdGVzdGluZy4KLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25FbGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eU5hbWUsIHVucmVzdHJpY3RlZCBk
b3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoRE9NU3RyaW5n
IHByb3BlcnR5LCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50
LCBET01TdHJpbmcgcHNldWRvSWQpOwotCiAgICAgLy8gV2ViIEFuaW1hdGlvbnMgdGVzdGluZy4K
ICAgICBzZXF1ZW5jZTxBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYWNjZWxlcmF0ZWRBbmltYXRpb25z
Rm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwogICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZB
bmltYXRpb25UaW1lbGluZUludmFsaWRhdGlvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
cmVmZXJlbmNlcy55YW1sCmluZGV4IGE4MTQyMmM5YjFkNzBlMDBjZjVhZjIyN2IzYmQ3YTJiZjZj
YjNjZDkuLmJkMTFmYTYxYmU0YWNmYzFlYjcyYjg0ZTE5YTcxZjA3YmFhNmQyYzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAtMTQwNSwyMiArMTQwNSw2IEBA
IENTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQ6CiAgIGh1bWFuUmVhZGFibGVEZXNjcmlw
dGlvbjogIkVuYWJsZSBET00gQVBJIGFuZCBDU1MgcHJvcGVydHkgZm9yICdzbW9vdGgnIHNjcm9s
bCBiZWhhdmlvciIKICAgY2F0ZWdvcnk6IGV4cGVyaW1lbnRhbAogCi1XZWJBbmltYXRpb25zRW5h
YmxlZDoKLSAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJs
ZU5hbWU6ICJXZWIgQW5pbWF0aW9ucyIKLSAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiV2Vi
IEFuaW1hdGlvbnMgcHJvdG90eXBlIgotICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCi0gIHdlYmNv
cmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KLVdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ6Ci0gIHR5cGU6IGJvb2wKLSAgZGVmYXVsdFZhbHVlOiB0cnVlCi0gIGh1
bWFuUmVhZGFibGVOYW1lOiAiQ1NTIEFuaW1hdGlvbnMgdmlhIFdlYiBBbmltYXRpb25zIgotICBo
dW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJFeHBvc2UgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBU
cmFuc2l0aW9ucyB0aHJvdWdoIGdldEFuaW1hdGlvbnMoKSIKLSAgY2F0ZWdvcnk6IGV4cGVyaW1l
bnRhbAotICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwotCiBXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgZGVmYXVs
dFZhbHVlOiBERUZBVUxUX0VYUEVSSU1FTlRBTF9GRUFUVVJFU19FTkFCTEVECmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IGViYzJkMjdh
Zjc3NGU4MzI1ZDVhZGIzYTk0NDYwMzE2NjMxMDAwM2UuLjE3ZGNmMzgzZTU1MDdlMWI3MGQwZGU4
MzEzMTdkZGQxYzdmOWNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXMuY3BwCkBAIC00ODYsMjYgKzQ4Niw2IEBAIGJvb2wgV0tQcmVmZXJlbmNl
c0dldEFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCiAgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFjY2VsZXJhdGVkMmRD
YW52YXNFbmFibGVkKCk7CiB9CiAKLXZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKLXsKLSAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChmbGFnKTsK
LX0KLQotYm9vbCBXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+d2ViQW5pbWF0aW9uc0VuYWJsZWQoKTsKLX0KLQotdm9pZCBXS1ByZWZlcmVuY2VzU2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChmbGFnKTsKLX0KLQotYm9vbCBXS1By
ZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKICAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhmbGFnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCmluZGV4IDdlMTRh
MmFjNDVjYjFiZjVmYWUwMzkxNGVjOTI4YjkxMzJmYmM1NjEuLjIxZGYzNzQ4NjZjZDI1ODI5Nzk3
YzcyOWIzODI2MWQ1OGYwZmI2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaApAQCAtOTcsMTQgKzk3LDYgQEAg
V0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkdMRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZDJEQ2FudmFz
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIAot
Ly8gRGVmYXVsdHMgdG8gZmFsc2UKLVdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJB
bmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwotV0tfRVhQT1JU
IGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYpOwotCi0vLyBEZWZhdWx0cyB0byBmYWxzZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNl
c1NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwg
Ym9vbCBmbGFnKTsKLVdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwotCiAvLyBEZWZhdWx0cyB0
byBmYWxzZS4KIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KaW5k
ZXggMTNhODgxMGMzYWY0YjczZmUyZTBiMmJiZGQ3ZThiNTc2ODYxMmRhNi4uZGFkYTkxMzNmY2Q5
NzNiZjVmYjY2MDAyYjUzOTE5OTZlMjA5ZWNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KQEAgLTE0MzAsMTYgKzE0MzAsNiBA
QCAtIChCT09MKV92aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQK
ICAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT52aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlDb21w
b3NpdGluZ0VuYWJsZWQoKTsKIH0KIAotLSAodm9pZClfc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZDooQk9PTCllbmFibGVkCi17Ci0gICAgX3ByZWZlcmVuY2VzLT5zZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCi0tIChCT09MKV93
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIF9wcmVmZXJl
bmNlcy0+d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQotCiAtICh2b2lk
KV9zZXREZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZDooQk9PTCllbmFibGVkCiB7CiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggYTM0OTg5NTY5
MjY5NDQ3ODUzNmM0YTQ0NDVlNWE4MGU0NDNmMTg3Mi4uNTg0MDRhNjg0NWQ3YTQ5YzhhNzZhYWVh
Zjg4NGRmMmEwZTMzY2RkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTE1MSw3ICsxNTEsNiBAQCB0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tFZGl0YWJsZUxpbmtCZWhhdmlvcikgewogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6
ZUVuYWJsZWQ6KSBCT09MIF9sb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25h
dG9taWMsIHNldHRlcj1fc2V0U2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0OikgQk9PTCBfc2hvdWxk
SWdub3JlTWV0YVZpZXdwb3J0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRWaWRlb1F1YWxpdHlJbmNs
dWRlc0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQ6KSBCT09MIF92aWRlb1F1YWxpdHlJbmNsdWRl
c0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KSBCT09MIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMikpOwog
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0RGV2aWNlT3JpZW50YXRpb25FdmVudEVu
YWJsZWQ6KSBCT09MIF9kZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6KSBCT09MIF9uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTMuMCkpOwogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SXRwRGVidWdNb2RlRW5hYmxlZDopIEJPT0wg
X2l0cERlYnVnTW9kZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygx
My4wKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA0MTljMTVmOTcwMTdkZGJkMmRiOGIzODcw
NjgzNzUwYWEwMzRlZjExLi5iZTVkZWQ1NzgzNzIyMDU0MGUwMTMyYzcyZTgyYzY0MWZhYzNmZjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTE4NywxMiArMTg3LDYgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6b3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoV2ViUGFnZUdyb3Vw
UHJveHkqIHBhZ2UKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChwcmVmZXJlbmNlID09ICJXZWJL
aXRXZWJBbmltYXRpb25zRW5hYmxlZCIpCi0gICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZW5hYmxlZCk7Ci0KLSAg
ICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCIpCi0gICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsKLQogICAgIGlm
IChwcmVmZXJlbmNlID09ICJXZWJLaXRDYWNoZUFQSUVuYWJsZWQiKQogICAgICAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldENhY2hlQVBJRW5hYmxlZChlbmFi
bGVkKTsKIApAQCAtNTg5LDE2ICs1ODMsNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRUYWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGVkKQogICAg
IHBhZ2UtPmNvcmVQYWdlKCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhlbmFibGVk
KTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsKLX0KLQogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCmluZGV4IDA5YTEyNWNhNGM5NmNjM2EwMzJhZTU4YTRlYmJjMmJjNDNjNzVmYmYuLmMw
MWRlODBmY2NiY2UzZDM1YmUzMmFmN2EwZGE0YjNjM2MxZGY2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
CkBAIC0xNDIsOCArMTQyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMoV2ViUGFnZSosIGJvb2wgZW5hYmxlZCk7CiAgICAgdm9pZCBzZXRTZXJp
YWxMb2FkaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNFbmFibGVk
KGJvb2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChi
b29sKTsKICAgICB2b2lkIHNldEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKGJvb2wp
OwogICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJp
dmF0ZS5oCmluZGV4IGUyM2I4NDA2OGYyNDBjZTIxYmJhZDE3MDRiOWUzNmM3ZGFlNDFkZWIuLjFi
Y2E3YmZhODdiY2YzOTA5YTQ3NzZlZjk0OTk1ZjBlMTliYTAwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZh
dGUuaApAQCAtNTIsNyArNTIsNiBAQAogI2RlZmluZSBXZWJLaXRKYXZhRW5hYmxlZFByZWZlcmVu
Y2VLZXkgQCJXZWJLaXRKYXZhRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SmF2YVNjcmlwdEVuYWJs
ZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiCiAjZGVmaW5lIFdlYktp
dEphdmFTY3JpcHRNYXJrdXBFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEphdmFTY3JpcHRN
YXJrdXBFbmFibGVkIgotI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVu
Y2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0V2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0V2Vi
QW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0Q1NTQ3Vz
dG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q1NTQ3Vz
dG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQiCkBAIC0yMDUsNyArMjA0LDYgQEAKICNkZWZp
bmUgV2ViS2l0Q29sb3JGaWx0ZXJFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdENvbG9yRmls
dGVyRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZVByZWZlcmVuY2VLZXkgQCJXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlIgogI2RlZmluZSBXZWJLaXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWRQcmVmZXJlbmNlS2V5
IEAiV2ViS2l0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkIgotI2RlZmluZSBXZWJLaXRXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdENTU1NoYWRvd1BhcnRz
RW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NTaGFkb3dQYXJ0c0VuYWJsZWQiCiAjZGVm
aW5lIFdlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkUHJlZmVy
ZW5jZUtleSBAIldlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVk
IgogI2RlZmluZSBXZWJLaXRXZWJTUUxFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdlYlNR
TEVuYWJsZWQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlcy5tbQppbmRleCA1N2I2NDg2ZTk5MzdmYzFiZGFiZWFiZTMwYWNhMWIyN2E5NjA5YjVj
Li5hZGFkZTk3MDA0MTY3YTg0ZmM1ZWYxZTQ4ODgwNjBkMmUxOTMyY2UwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTYzNiw3
ICs2MzYsNiBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgQE5PLCBXZWJLaXREaWFsb2dF
bGVtZW50RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBOTywgV2ViS2l0SGlnaGxpZ2h0
QVBJRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMsIFdlYktpdE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkUHJlZmVyZW5jZUtleSwKLSAgICAgICAgQFlFUywgV2ViS2l0V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMs
IFdlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5j
ZUtleSwKIAogI2lmIEVOQUJMRShXRUJHTDIpCkBAIC02NTgsNyArNjU3LDYgQEAgKyAodm9pZClp
bml0aWFsaXplCiAgICAgICAgIEBOTywgV2ViS2l0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkUHJl
ZmVyZW5jZUtleSwKICNlbmRpZgogICAgICAgICBATk8sIFdlYktpdERpcmVjdG9yeVVwbG9hZEVu
YWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVTLCBXZWJLaXRXZWJBbmltYXRpb25zRW5h
YmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMsIFdlYktpdFN5bnRoZXRpY0VkaXRpbmdD
b21tYW5kc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTMxNzYsMTYgKzMxNzQsNiBAQCAtICh2b2lkKXNldENTU09NVmlld1Ntb290aFNjcm9sbGlu
Z0VuYWJsZWQ6KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6
V2ViS2l0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQog
Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNFbmFibGVkCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9ib29s
VmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0K
LQotLSAodm9pZClzZXRXZWJBbmltYXRpb25zRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW3Nl
bGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFBy
ZWZlcmVuY2VLZXldOwotfQotCiAtIChCT09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRp
b25zRW5hYmxlZAogewogICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXldOwpAQCAt
MzI0NiwxNiArMzIzNCw2IEBAIC0gKHZvaWQpc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ6
KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0TW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAotLSAoQk9PTCl3ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9ib29s
VmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZl
cmVuY2VLZXldOwotfQotCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6
V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXldOwot
fQotCiAtIChCT09MKWludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZAogewogICAgIHJldHVybiBb
c2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZFBy
ZWZlcmVuY2VLZXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggNzMwZWI2YmYxZjJkNjdiZjQ3MTI3MGM5
NTk1Y2JkMmQzYzk4NGQwNS4uYjk4N2M5YzI4OGQ3YjUzMDczNDUzNjNhOWM4MjQ4OWRhY2UyMTM0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC01NjQsOSArNTY0LDYgQEAgZXh0ZXJuIE5TU3RyaW5nICpX
ZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gV0VCS0lU
X0RFUFIKIC0gKHZvaWQpc2V0RGlyZWN0b3J5VXBsb2FkRW5hYmxlZDooQk9PTClmbGFnOwogLSAo
Qk9PTClkaXJlY3RvcnlVcGxvYWRFbmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNF
bmFibGVkOihCT09MKWZsYWc7Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNFbmFibGVkOwotCiAtICh2
b2lkKXNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDooQk9PTClmbGFn
OwogLSAoQk9PTCl3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7CiAKQEAg
LTU4NSw5ICs1ODIsNiBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVNb2Rl
bENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBXRUJLSVRfREVQUgogLSAodm9pZClzZXRNb2Rl
cm5NZWRpYUNvbnRyb2xzRW5hYmxlZDooQk9PTClmbGFnOwogLSAoQk9PTCltb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZDsKIAotLSAodm9pZClzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkOihCT09MKWZsYWc7Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ7Ci0KIC0gKHZvaWQpc2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOihCT09MKWZs
YWc7CiAtIChCT09MKWludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDRlYzAyMzdhNzRjN2M0OWRkZTgy
ODU5Y2U1ODllMTc0Y2Q1ZTk0MDUuLmNlNGNiM2Q0YzA2ODExODk2MjYyY2E4OTUyMDYzN2QxM2U1
MWVhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAg
LTEzMiw3ICsxMzIsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZENhY2hlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0JhY2tGb3J3YXJkQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9DU1NBbmltYXRp
b25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlU3RvcmFnZVByb3ZpZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5o
PgpAQCAtMzMzNCw3ICszMzMzLDYgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQ
cmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAKICAgICBzZXR0aW5ncy5zZXRJbnRlcmFjdGl2ZUZv
cm1WYWxpZGF0aW9uRW5hYmxlZChbc2VsZiBpbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxl
ZF0pOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0TW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW3ByZWZlcmVuY2VzIG1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkXSk7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5z
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk7CiAKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldENhY2hlQVBJRW5hYmxlZChbcHJlZmVyZW5jZXMgY2Fj
aGVBUElFbmFibGVkXSk7CiAKQEAgLTMzNTgsNyArMzM1Niw2IEBAIC0gKHZvaWQpX3ByZWZlcmVu
Y2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogICAgIHNldHRpbmdzLnNl
dERvd25sb2FkQXR0cmlidXRlRW5hYmxlZChbcHJlZmVyZW5jZXMgZG93bmxvYWRBdHRyaWJ1dGVF
bmFibGVkXSk7CiAjZW5kaWYKIAotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlv
bnNFbmFibGVkXSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2Vz
IHdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZF0pOwogICAgIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc011dGFibGVU
aW1lbGluZXNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5l
c0VuYWJsZWRdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJm
YWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwKaW5kZXggOWE4NzVkNDc5ZTdi
ZmFkNzM2MWE2ZjJmOGE0ZDMxOTMzN2VlNTdmMi4uYjBiZDA1ZjI1MDU4MmUxNDdhNmE3ZmJkYTNi
NmRiZjRiNmFiNjA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJm
YWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCkBAIC0xODMsMTYgKzE4
MywxMiBAQCBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTMgOiBJV2ViUHJlZmVyZW5j
ZXNQcml2YXRlMgogICAgIEhSRVNVTFQgc2V0Q3VzdG9tRWxlbWVudHNFbmFibGVkKFtpbl0gQk9P
TCBlbmFibGVkKTsKICAgICBIUkVTVUxUIG1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKFtvdXQs
IHJldHZhbF0gQk9PTCogZW5hYmxlZCk7CiAgICAgSFJFU1VMVCBzZXRNb2Rlcm5NZWRpYUNvbnRy
b2xzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7Ci0gICAgSFJFU1VMVCB3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7Ci0gICAg
SFJFU1VMVCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtpbl0gQk9PTCBl
bmFibGVkKTsKIH0KIAogW3V1aWQoRjk1ODJENzItNjM0OC00NUIxLUFCMDktMzlFMzM0NTlCNUI5
KV0KIGludGVyZmFjZSBJV2ViUHJlZmVyZW5jZXNQcml2YXRlNCA6IElXZWJQcmVmZXJlbmNlc1By
aXZhdGUzCiB7CiAgICAgSFJFU1VMVCBzZXRBcHBsaWNhdGlvbklkKFtpbl0gQlNUUiBhcHBsaWNh
dGlvbklkKTsKLSAgICBIUkVTVUxUIHdlYkFuaW1hdGlvbnNFbmFibGVkKFtvdXQsIHJldHZhbF0g
Qk9PTCopOwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoW2luXSBCT09MIGVu
YWJsZWQpOwogICAgIEhSRVNVTFQgdXNlclRpbWluZ0VuYWJsZWQoW291dCwgcmV0dmFsXSBCT09M
Kik7CiAgICAgSFJFU1VMVCBzZXRVc2VyVGltaW5nRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7
CiAgICAgSFJFU1VMVCByZXNvdXJjZVRpbWluZ0VuYWJsZWQoW291dCwgcmV0dmFsXSBCT09MKik7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5c1By
aXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oCmluZGV4IDJhMjEyMWFkYjk2ODY5ODQxMjFjMGU0YmE4ZGFmZmNhN2JjYzZjYWIuLjkyMTdi
ODVlNDk3ZGExM2RhNzY4MjI5NWIyZGU3NjJhMmRlNzE2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC0xODgsMTQgKzE4
OCwxMCBAQAogCiAjZGVmaW5lIFdlYktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkUHJlZmVy
ZW5jZUtleSAiV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQiCiAKLSNkZWZpbmUgV2Vi
S2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25z
RW5hYmxlZCIKLQogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9u
c0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0
aW9uc0VuYWJsZWQiCiAKICNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGlu
ZXNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGlu
ZXNFbmFibGVkIgogCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkIgotCiAjZGVmaW5lIFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVk
UHJlZmVyZW5jZUtleSAiV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQi
CiAKICNkZWZpbmUgV2ViS2l0VXNlclRpbWluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRV
c2VyVGltaW5nRW5hYmxlZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlByZWZlcmVuY2VzLmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2Vz
LmNwcAppbmRleCA5ZDliMGRmZTExOWJjZjE4YmU0MDM1NjEyNDU2ZWI2YTgzZWJhZWM4Li5mNzQy
NmE5NTYzZDlmZGJiYmE1NzY0YjE2N2M1YzAxYmFkMWIzODY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCkBAIC0zMTEsMTQgKzMxMSwxMCBAQCB2b2lkIFdl
YlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVmYXVsdFNldHRpbmdzKCkKIAogICAgIENGRGljdGlv
bmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRDdXN0b21FbGVtZW50c0VuYWJsZWRQ
cmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAotICAgIENGRGljdGlvbmFyeUFkZFZh
bHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VL
ZXkpLCBrQ0ZCb29sZWFuVHJ1ZSk7Ci0KICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0
cywgQ0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJl
ZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1
ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFi
bGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKLSAgICBDRkRpY3Rpb25hcnlB
ZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwotCiAgICAgQ0ZEaWN0aW9u
YXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRW
YWx1ZXNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKICAgICBDRkRp
Y3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0VXNlclRpbWluZ0VuYWJsZWRQ
cmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKQEAgLTIxMzgsMjAgKzIxMzQsNiBAQCBI
UkVTVUxUIFdlYlByZWZlcmVuY2VzOjptb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChfT3V0XyBC
T09MKiBlbmFibGVkKQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlByZWZlcmVu
Y2VzOjp3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKF9PdXRfIEJPT0wqIGVuYWJs
ZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAg
ICplbmFibGVkID0gYm9vbFZhbHVlRm9yS2V5KFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VM
VCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChC
T09MIGVuYWJsZWQpCi17Ci0gICAgc2V0Qm9vbFZhbHVlKFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKLSAgICByZXR1cm4gU19P
SzsKLX0KLQogSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6ZmV0Y2hBUElLZWVwQWxpdmVFbmFibGVk
KF9PdXRfIEJPT0wqIGVuYWJsZWQpCiB7CiAgICAgaWYgKCFlbmFibGVkKQpAQCAtMjM0MCwyMCAr
MjMyMiw2IEBAIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldEFwcGxpY2F0aW9uSWQoQlNUUiBh
cHBsaWNhdGlvbklkKQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlByZWZlcmVu
Y2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZChCT09MIGVuYWJsZWQpCi17Ci0gICAgc2V0Qm9v
bFZhbHVlKFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwgZW5hYmxlZCk7
Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OndlYkFuaW1h
dGlvbnNFbmFibGVkKF9PdXRfIEJPT0wqIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKQot
ICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICplbmFibGVkID0gYm9vbFZhbHVlRm9yS2V5
KFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSk7Ci0gICAgcmV0dXJuIFNf
T0s7Ci19Ci0KIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldFdlYkFuaW1hdGlvbnNDb21wb3Np
dGVPcGVyYXRpb25zRW5hYmxlZChCT09MIGVuYWJsZWQpCiB7CiAgICAgc2V0Qm9vbFZhbHVlKFdl
YktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXks
IGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVy
ZW5jZXMuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmgKaW5kZXgg
MjQzN2IwZTc2Mjg5NTA2YzI2NDA0ODg2YmQyYzAzZjU4MzI1M2M1MS4uMjEyOTA1Y2IxYmE2MDA5
NDAzODY5NTM5MTc4YTNmZWE3MDNhMzhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViUHJlZmVyZW5jZXMuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQ
cmVmZXJlbmNlcy5oCkBAIC0yMzYsMTMgKzIzNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0Q3VzdG9tRWxlbWVudHNFbmFibGVkKEJPT0wpOwog
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBtb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZChfT3V0XyBCT09MKik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKEJPT0wpOwotICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KF9PdXRfIEJPT0wqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChCT09MKTsKICAgICAKICAgICAvLyBJ
V2ViUHJlZmVyZW5jZXNQcml2YXRlNAogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSBzZXRBcHBsaWNhdGlvbklkKEJTVFIpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSB3ZWJBbmltYXRpb25zRW5hYmxlZChfT3V0XyBCT09MKik7Ci0gICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKEJPT0wp
OwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB1c2VyVGltaW5nRW5hYmxl
ZChfT3V0XyBCT09MKik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNl
dFVzZXJUaW1pbmdFbmFibGVkKEJPT0wpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RD
QUxMVFlQRSByZXNvdXJjZVRpbWluZ0VuYWJsZWQoX091dF8gQk9PTCopOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJWaWV3LmNwcAppbmRleCBiNmEyODNjOTNlODgyYTNlMjFkNDE2OGM0YjMxY2I4NDlk
MTVkMWFjLi4yZTI1YmU5NmIyYWQ0NWI1ZjRlNWUzMTg4ZDYyYzE0ZTAyZTk5ZDkxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcApAQCAtNTI0NCwxMSArNTI0NCw2IEBAIEhSRVNVTFQg
V2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKElXZWJOb3RpZmljYXRpb24qIG5vdGlm
aWNhdGlvbikKICAgICAgICAgcmV0dXJuIGhyOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoISFlbmFibGVk
KTsKIAotICAgIGhyID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zRW5hYmxlZCgmZW5hYmxl
ZCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLSAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNFbmFibGVk
KCEhZW5hYmxlZCk7Ci0KICAgICBociA9IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0NvbXBv
c2l0ZU9wZXJhdGlvbnNFbmFibGVkKCZlbmFibGVkKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAg
ICAgICAgcmV0dXJuIGhyOwpAQCAtNTI1OSwxMSArNTI1NCw2IEBAIEhSRVNVTFQgV2ViVmlldzo6
bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikK
ICAgICAgICAgcmV0dXJuIGhyOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkKCEhZW5hYmxl
ZCk7CiAKLSAgICBociA9IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgmZW5hYmxlZCk7Ci0gICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBo
cjsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoISFlbmFibGVkKTsKLQogICAgIGhyID0gcHJl
ZnNQcml2YXRlLT5DU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCgmZW5hYmxlZCk7
CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZmE3MDk0N2MzODM4MmZjMDMw
YzIxYWU3ZTZiZTI1ZTFiMjZlZTNlLi44MzMwNzUyMWM4ODQyYjIwOGUyOGRmY2UzM2MyNDM1YWY2
Y2JlZmM2IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMjQgQEAKKzIwMjAtMDktMTYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjYwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdlIG5v
dyBoYXZlIGEgc2luZ2xlIGFuaW1hdGlvbiBlbmdpbmUsIHRoZSBydW50aW1lIGZsYWdzIHRvIG9w
dGlvbmFsbHkgZW5hYmxlIHRoZSBXZWIgQW5pbWF0aW9ucyBlbmdpbmUgYXJlCisgICAgICAgIG5v
dCBuZWVkZWQgYW55bW9yZSBhbmQgYXJlIG5vdyByZW1vdmVkLgorCisgICAgICAgICogRHVtcFJl
bmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwOgorICAgICAgICAoVGVzdE9wdGlvbnM6OlRlc3RPcHRp
b25zKToKKyAgICAgICAgKFRlc3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlv
bnMgY29uc3QpOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6CisgICAg
ICAgICogRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZW5h
YmxlRXhwZXJpbWVudGFsRmVhdHVyZXMpOgorICAgICAgICAoc2V0V2ViUHJlZmVyZW5jZXNGb3JU
ZXN0T3B0aW9ucyk6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVl
LmNwcDoKKyAgICAgICAgKGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKToKKyAgICAgICAgKHNl
dFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMpOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBO
b3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbRmxhdHBhayBTREtdIENo
ZXJyeS1waWNrIE1lc2EgdXNlLWFmdGVyLWZyZWUgZml4ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1
bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RP
cHRpb25zLmNwcAppbmRleCAwNjQ1N2RmZGZkZWVhNTAzMDRlMzMyZDBhMzE4MmY1YWJhNGFmODA1
Li4wZGJmYWM5ZjNjODc0OTQyY2Q3YjFkZWYxNDA4ODQ4NDMyZTQyNjRmIDEwMDY0NAotLS0gYS9U
b29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRl
clRyZWUvVGVzdE9wdGlvbnMuY3BwCkBAIC0xMjYsOCArMTI2LDYgQEAgVGVzdE9wdGlvbnM6OlRl
c3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5n
JiBhYnNvbHUKICAgICAgICAgICAgIGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9v
bGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxs
b3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiKQogICAgICAgICAg
ICAgYWxsb3dDcm9zc09yaWdpblN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJz
ZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0g
ImV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIikKLSAgICAg
ICAgICAgIGVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJuYWw6
c2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllc0VuYWJsZWQiKQogICAgICAgICAgICAgZW5h
YmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFk
ZXJWYWx1ZSh2YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ29sb3JGaWx0
ZXIiKQpAQCAtMTY3LDYgKzE2NSw1IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBz
dGQ6OnN0cmluZyYgcGF0aE9yVVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiBib29sIFRl
c3RPcHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlv
bnMmIG90aGVyKSBjb25zdAogewogICAgIHJldHVybiBvdGhlci5sYXllckJhY2tlZFdlYlZpZXcg
PT0gbGF5ZXJCYWNrZWRXZWJWaWV3Ci0gICAgICAgICYmIG90aGVyLmpzY09wdGlvbnMgPT0ganNj
T3B0aW9ucwotICAgICAgICAmJiBvdGhlci5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b24gPT0gZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uOworICAgICAgICAmJiBvdGhl
ci5qc2NPcHRpb25zID09IGpzY09wdGlvbnM7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVu
ZGVyVHJlZS9UZXN0T3B0aW9ucy5oIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMu
aAppbmRleCBjNWM4Yzg1OTkyZTFjZmYzNzUwODIxYzgxZmYyODQzZGQwOWViOTk3Li5kNzY2ODE3
YjcwNWI0NjI1MGQyZWZmNTUzMzQ2YTdkZDkzN2ViMzY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RP
cHRpb25zLmgKQEAgLTI5LDcgKzI5LDYgQEAKIAogc3RydWN0IFRlc3RPcHRpb25zIHsKICAgICBi
b29sIGVuYWJsZUF0dGFjaG1lbnRFbGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiB7IHRydWUgfTsKICAgICBib29sIHVzZUFjY2VsZXJh
dGVkRHJhd2luZyB7IGZhbHNlIH07CiAgICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZl
ciB7IGZhbHNlIH07CiAgICAgYm9vbCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKZGlm
ZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rv
b2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA0NjNjOWI5MmVl
YjVlZWU5N2ExYTcyMGRlZjg1ZmM2MGQ0ODc4NTNjLi42OTE1N2M0MzAwMWM1NDQxNDMwYjExMTdj
ZGEzYWNjNDcwMjc0ZTg5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVt
cFJlbmRlclRyZWUubW0KKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJU
cmVlLm1tCkBAIC04MTQsNyArODE0LDYgQEAgc3RhdGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFs
RmVhdHVyZXMoV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKQogICAgIFtwcmVmZXJlbmNlcyBz
ZXRNZWRpYVByZWxvYWRpbmdFbmFibGVkOllFU107CiAgICAgLy8gRklYTUU6IElucHV0RXZlbnRz
CiAgICAgW3ByZWZlcmVuY2VzIHNldEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZDpZRVNdOwotICAg
IFtwcmVmZXJlbmNlcyBzZXRXZWJBbmltYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJl
bmNlcyBzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6WUVTXTsKICAg
ICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkOllF
U107CiAgICAgW3ByZWZlcmVuY2VzIHNldENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFi
bGVkOllFU107CkBAIC05NzksNyArOTc4LDYgQEAgc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5j
ZXNGb3JUZXN0T3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKICAgICBwcmVmZXJl
bmNlcy5pc1NlY3VyZUNvbnRleHRBdHRyaWJ1dGVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVJc1Nl
Y3VyZUNvbnRleHRBdHRyaWJ1dGU7CiAgICAgcHJlZmVyZW5jZXMuaW5zcGVjdG9yQWRkaXRpb25z
RW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zOwogICAgIHByZWZlcmVu
Y2VzLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gb3B0
aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFsczsKLSAg
ICBwcmVmZXJlbmNlcy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkID0gb3B0aW9u
cy5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb247CiAgICAgcHJlZmVyZW5jZXMuY29s
b3JGaWx0ZXJFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKICAgICBwcmVmZXJl
bmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMuZW5h
YmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllczsKICAgICBwcmVmZXJlbmNlcy53ZWJH
UFVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJHUFU7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUv
d2luL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCBhNzI3MzRmNmY0ZmFmNmFkZTk1N2NjM2NiMzQz
ZDU2N2U0ODdkMzNlLi5kNzQ3MTMxZjkyYmRmZGZiYzM3YTkxYTNmN2U4ZmJiMmY0NmIxNjU5IDEw
MDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCisr
KyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTc5Niw3
ICs3OTYsNiBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyhJV2ViUHJl
ZmVyZW5jZXMqIHByZWZlcmVuY2VzKQogICAgIHByZWZzUHJpdmF0ZS0+c2V0VmlzdWFsVmlld3Bv
cnRBUElFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U2Nyb2xs
aW5nQVBJRW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldFJlc2l6ZU9ic2VydmVy
RW5hYmxlZChUUlVFKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNFbmFibGVk
KFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJh
dGlvbnNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc011
dGFibGVUaW1lbGluZXNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTQ3Vz
dG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQoVFJVRSk7CkBAIC05MDksNyArOTA4LDYgQEAg
c3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhJV2ViUHJlZmVyZW5j
ZXMqIHByZWZlcmVuY2VzLCBjb25zdAogewogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2
YXRlOD4gcHJlZnNQcml2YXRlIHsgUXVlcnksIHByZWZlcmVuY2VzIH07CiAKLSAgICBwcmVmc1By
aXZhdGUtPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQob3B0aW9ucy5lbmFi
bGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24pOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVu
dUl0ZW1FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7CiAgICAg
cHJlZnNQcml2YXRlLT5zZXRLZXlnZW5FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtleWdl
bkVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJs
ZWQob3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhOWFlZDc2NDli
NDhkODk0YWZmYTk0YTA1YjI0ZGJkODg4NDIxYzFhLi42MjMyZWUyNTYyZjFmOWJmOGUyOWY3ZWY1
MDlmZDIzOWQ1Nzc3YTU4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsOTEgQEAKKzIwMjAtMDktMTYgIEFudG9p
bmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBsZWdh
Y3kgYW5pbWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIFJlbW92ZSBhbnkgdXNlIG9mIG5vdy1yZW1vdmVkIHRlc3RpbmcgbWV0aG9kcyBh
bmQgc29tZSBydW50aW1lIGZsYWdzIGZyb20gbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogYW5p
bWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICog
YW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qczoKKyAgICAgICAg
KHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2Nv
bnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbDoKKyAgICAgICAg
KiBpbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0t
dHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5odG1sOiBSZW1vdmVkLgorICAgICAgICAq
IHRyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlw
LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9u
LWFsbC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVs
dGlwbGllZC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91
bmRpbmcuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQt
aW1hZ2UuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFn
ZS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xv
ci5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5n
dGguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hh
ZG93Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2
Zy1sZW5ndGguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZs
b3ctdHJhbnNmb3JtLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmct
ZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9kZWxheS5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvbWFzay10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pbi1tYXgt
d2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWlz
bWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWlzbWF0
Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXhl
ZC10eXBlLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9u
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXplLXRy
YW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3Vu
ZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLW1hc2st
dHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ct
dHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBl
cnMuanM6CisgICAgICAgICogdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3Rl
eHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zv
cm0tb3AtbGlzdC1tYXRjaC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW5vLW1hdGNoLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1l
bmQtZXZlbnQtcmVuZGVyaW5nLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0
aW9uLWhpdC10ZXN0Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1k
ZWxheS1waGFzZS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxl
bWVudC13aXRoLWNvbnRlbnQuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9u
LXNob3J0aGFuZC1kZWxheS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24t
dGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10
by1mcm9tLWF1dG8uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZy
b20tdW5kZWZpbmVkLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNv
bG9yLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRl
bGF5LXN0YXJ0Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmlt
YXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sOgorICAgICAgICAqIHdlYmFuaW1h
dGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBs
ZXRpb24uaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlv
bi1zdXNwZW5zaW9uLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10
cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0
aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24t
ZWZmZWN0Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10
aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbDoKKyAg
ICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2Ut
YW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9u
cy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNy
YXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sOgor
ICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2Fs
LWFjY2VsZXJhdGVkLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFt
ZXMtY3Jhc2guaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRl
ZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWw6CisgICAgICAgICogd2ViYW5p
bWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3Qu
aHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1p
bmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sOgorCiAyMDIw
LTA5LTE1ICBSb2IgQnVpcyAgPHJidWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IGxhenkg
aW1hZ2UgbG9hZCBwYWludGluZwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9s
ZWdhY3ktZW5jb2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9hbmltYXRp
b25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA0MDJmOThlYTMx
MTVhYTFkNzc2ZmFmODhlZWRiOTFhMjg3NTFmOTczLi4wOGViYzQ0YzRkMTZkYTY5MjVkNjVlZGMx
MzE5NGQ4YWQzMjU2NDc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2Fj
eS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hbmltYXRp
b25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91
dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKaW5k
ZXggMThhNWEwMTI5ZmY3ZjJhZTI0YmQzM2UzMTllNjA2ZjU3OWFhNDE5ZS4uNmRlMDhkMzg1NTE4
NDQzNjcxMTdmMDA3MjI1NzA5MDNlYWY1YmNmZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYW5p
bWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcworKysgYi9MYXlvdXRU
ZXN0cy9hbmltYXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC01
MTQsMTEgKzUxNCw2IEBAIGZ1bmN0aW9uIGNoZWNrRXhwZWN0ZWRWYWx1ZUNhbGxiYWNrKGV4cGVj
dGVkLCBpbmRleCkKIAogZnVuY3Rpb24gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoYW5p
bWF0aW9uTmFtZSwgdGltZSwgZWxlbWVudCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlbid0IG9wdGVk
IGludG8gQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucyBhcyBXZWIgQW5pbWF0aW9u
cywgdXNlIHRoZSBpbnRlcm5hbCBBUEkuCi0gICAgaWYgKCdpbnRlcm5hbHMnIGluIHdpbmRvdyAm
JiAhaW50ZXJuYWxzLnNldHRpbmdzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkKLSAgICAgICAgcmV0dXJuIGludGVybmFscy5wYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVu
dChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50KTsKLQotICAgIC8vIE90aGVyd2lzZSwgdXNl
IHRoZSBXZWIgQW5pbWF0aW9ucyBBUEkuCiAgICAgY29uc3QgYW5pbWF0aW9ucyA9IGVsZW1lbnQu
Z2V0QW5pbWF0aW9ucygpOwogICAgIGZvciAobGV0IGFuaW1hdGlvbiBvZiBhbmltYXRpb25zKSB7
CiAgICAgICAgIGlmIChhbmltYXRpb24gaW5zdGFuY2VvZiBDU1NBbmltYXRpb24gJiYgYW5pbWF0
aW9uLmFuaW1hdGlvbk5hbWUgPT0gYW5pbWF0aW9uTmFtZSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZy
YW1lLmh0bWwgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1k
aXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbAppbmRleCBjMWM2ZmQ2NzJjNGQwZWY3OWY4YmU3YmE4
ODE5NDlmYjI2ZDk0Yzk5Li5hNWNlMzQyZDUyZWJmYjAwNWZkMDQxYjc4OGZiYjExNmIxNjdmNmRm
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nz
cy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBIVE1MPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9ZmFsc2UgXSAtLT4KKzwh
RE9DVFlQRSBIVE1MPgogPHNjcmlwdD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAgIHRl
c3RSdW5uZXIuZHVtcEFzVGV4dCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQv
YmxpbmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25z
LWluc2lkZS1pZnJhbWUtaW5uZXIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3Ry
YW5zaXRpb25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUt
aWZyYW1lLWlubmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDFjYmM4
YmZjNzg0M2MzYmI5ODkzMmZjOWVjOTk3M2JjNTA3MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNp
dGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJh
bWUtaW5uZXIuaHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwhRE9DVFlQRT4K
LTxodG1sPgotPGhlYWQ+Ci08c3R5bGU+Ci0gICAgI2JhY2tncm91bmQgewotICAgICAgICB3aWR0
aDogMjAwcHg7Ci0gICAgICAgIGhlaWdodDogMjAwcHg7Ci0gICAgICAgIGRpc3BsYXk6IGJsb2Nr
OwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKLSAgICB9Ci0gICAgLm92ZXJsYXkg
ewotICAgICAgICB3aWR0aDogNTBweDsKLSAgICAgICAgaGVpZ2h0OiA1MHB4OwotICAgICAgICBi
YWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpOwotICAgICAgICAtd2Via2l0
LXRyYW5zaXRpb246IG9wYWNpdHkgMXM7Ci0gICAgfQotCi0gICAgI3BvcHVwIHsKLSAgICAgICAg
d2lkdGg6IDIwcHg7Ci0gICAgICAgIGhlaWdodDogMjBweDsKLSAgICAgICAgYmFja2dyb3VuZC1j
b2xvcjogcmVkOwotICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgICAgIC13ZWJraXQt
dHJhbnNpdGlvbjogLXdlYmtpdC10cmFuc2Zvcm0gMXM7Ci0gICAgfQotCi0gICAgLnRyYW5zcGFy
ZW50IHsKLSAgICAgICAgb3BhY2l0eTogMDsKLSAgICB9Ci0KLSAgICBbaGlkZGVuXSB7Ci0gICAg
ICAgIGRpc3BsYXk6IG5vbmU7Ci0gICAgfQotCi0gICAgLm92ZXJsYXkudHJhbnNwYXJlbnQgLnBh
Z2UgewotICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMHB4KTsKLSAgICB9
Ci0KLTwvc3R5bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRm
LTgiPgotICAgIGZ1bmN0aW9uIHJ1blRlc3QoKQotICAgIHsKLSAgICAgICAgdmFyIHNvbGlkX2Nv
bG9yX292ZXJsYXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29saWRfY29sb3Jfb3Zlcmxh
eSIpOwotICAgICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVu
Jyk7Ci0KLSAgICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVw
Iik7Ci0gICAgICAgIHBvcHVwLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7Ci0KLSAgICAgICAg
Ly8gTk9URTogVGhpcyBpcyBhIGhhY2t5IHdheSB0byBmb3JjZSB0aGUgY29udGFpbmVyIHRvIGxh
eW91dCB3aGljaAotICAgICAgICAvLyB3aWxsIGFsbG93IHVzIHRvIHRyaWdnZXIgdGhlIHdlYmtp
dCB0cmFuc2l0aW9uLgotICAgICAgICAvLyBTZWUgY3JidWcuY29tLzMyNDY4NQotICAgICAgICBz
b2xpZF9jb2xvcl9vdmVybGF5LnNjcm9sbFRvcDsKLSAgICAgICAgc29saWRfY29sb3Jfb3Zlcmxh
eS5jbGFzc0xpc3QucmVtb3ZlKCd0cmFuc3BhcmVudCcpOwotCi0gICAgICAgIC8vIGR1bXAgdGhl
IHBpeGVsIGluIHRoZSBtaWRkbGUgb2YgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgaWYgKHdpbmRv
dy5pbnRlcm5hbHMpIHsKLSAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZm9yY2VDb21wb3Np
dGluZ1VwZGF0ZShkb2N1bWVudCk7Ci0gICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnBhdXNl
QW5pbWF0aW9ucygwLjUpOwotICAgICAgICB9Ci0gICAgICAgIHRyaWdnZXJQaXhlbFJlc3VsdHMo
KTsKLSAgICB9Ci0KLSAgICBmdW5jdGlvbiB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCkKLSAgICB7Ci0g
ICAgICAgIHBhcmVudC5wb3N0TWVzc2FnZSgiVHJpZ2dlclBpeGVsUmVzdWx0cyIsICcqJyk7Ci0g
ICAgfQotCi0gICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBydW5UZXN0LCBmYWxz
ZSk7Ci08L3NjcmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBpZD0iYmFja2dyb3VuZCI+Ci0g
ICAgPGRpdiBpZD0ic29saWRfY29sb3Jfb3ZlcmxheSIgY2xhc3M9Im92ZXJsYXkgdHJhbnNwYXJl
bnQiIGhpZGRlbj10cnVlPgotICAgICAgICA8ZGl2IGlkPSJwb3B1cCIgY2xhc3M9InBhZ2UiIGhp
ZGRlbj10cnVlPjwvZGl2PgotICAgIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRy
YW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0
aW9uLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggNjAxY2Q1YTg3ZjIwNDEwNjJmMWE5ZDA5ODAwOWM1
NDdmNTJmMzQ1ZS4uZDkxNGZjYmJlODFkNDdjZGJiMWFlZWJhY2I3OTVhMzc5MzFhNGExYiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFu
c2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9z
aXRpb24tdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbApp
bmRleCBhODM3ZTA1N2RiYzExOGM3NGFiYmI2MDNlZWM1NTZlN2M4ODdlNWE4Li5iYTQwMGNhYzll
YmZlMWNhMTBlMjkwYTc5OGU5OWQ3MmIzNDg4MGJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxlbmRtb2Rl
LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJh
bnNpdGlvbnMuaHRtbAppbmRleCA4OTdjYjQ3ODkwZWNmNDhlMWZkMDA1ODhkNGI4OGM5MTcyYjI2
MTAzLi5hNWJmYTI3ZDNhZDMyMTk5MjA4OTIxNjE1MzBiNWQ3M2UxOWQ1Njk2IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCmluZGV4IGI4YTNmYjUz
ZTdiZDZiYjA2ZDE5OWQ5NTVlNDAzYzkxMzcwN2Q1ODkuLjU2M2JhOWM4ZmY0ZjhhYzJkYjNkNTE0
YWIxYjM2MTYyNGNjZTMzMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Jv
cmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRy
YW5zaXRpb25zLmh0bWwKaW5kZXggZmYyM2ZhMDQ1MTIzZWQzMTA1N2U4MjdkNzFhYWRjOTg4ZDIx
MmQ3OC4uYzFmYWE1Y2Y0MjEyMTgwMzViNDEwZTJhZWMyYmQ2MjNiNzQwYTc2ZCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9u
cy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYjU1
ZWRmYjdlYTg0NTU1ZDhhYzQ0YmNhZmZjYTg0MGM3NTc4ZWY1Ni4uNWU2NjQ0YTg4NGZjY2Q2MDdi
Yjc2MGIxOThkOTkwZjcxZTI5YWZkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFu
c2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRt
bAppbmRleCAzYzdlMjlmMTk3MDEyZGZkZWE0MzA0M2NjMDQyYTcyMWRlMDgxM2UxLi5mZGUxZjE3
M2FiYzk2YjkxYWE0NmJlZjk3YThmOTA5ZWNmN2QwMWI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBo
dG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLWFsbC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlv
bi1hbGwuaHRtbAppbmRleCAzM2M1OTgwZTY4N2FiM2UwMmU3ZTNmMjU3NzZjODczZmQ1ZGU4YWI5
Li5hNDkyZTcxMzM5NDQwMGMyNmQzNDdlODhhZTFkMTNjMzE3ZTNkYzdmIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+
CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
b2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCmluZGV4IGM3M2ZkNGFhODNj
ZmFkOTViNTBiNmU2MzU5MWU5YWU2Nzk4OTU2ZGQuLjU3YzYzZWM5YThjMWFlMDdkYWQ4YzM3ODVk
ZjNiODE0NGI5MjhmMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9y
LXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbAppbmRleCA2ZTc1NmJmMzM3ODNmZDcyMWYz
M2E2N2M4ZmJkNmYyOGYxNTVlNWIwLi5jYWFhMTE1NzlmOWIwZGY4NmUwODE5NGMwZDkwZjFkZGY4
YjUwMzE3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0
aW9uLXJvdW5kaW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJh
bnNpdGlvbi1yb3VuZGluZy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdl
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1h
Z2UuaHRtbAppbmRleCA3NmU5ZGIyNmEzYjE0ZDRhMzhhM2NkYWYwMGVmNjZiZmY4ZWRkYjY0Li5i
OGQ3MGEyNzkzNTE1NWJlYWIyOGU3ODVjYWVmOGYyNTM4ZGM5NTZiIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sCmluZGV4IDRkYmRmN2E2YjEzZjhh
ZWUwM2E3Nzg5YjM2OGMxMDhlM2QxYTRkZGYuLjg3ZGMwMDdlZGY1ZmI3NmZmMTQ1MWNhOWFmZjhj
YjljYWFhNDE4OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZh
ZGUtYm9yZGVyLWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3Mt
ZmFkZS1ib3JkZXItaW1hZ2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xv
ci5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNv
bG9yLmh0bWwKaW5kZXggYjc2ZWI2NWFlZDMzYzg0NmM0ZGNlYzQ1Yjk3ZDU0MWEwMzhjZTdiYS4u
NzQ3NGY2NmQxMTZjNmYyYTIzYTJhZjYzM2E1MDQ0ZTI4YzJiNzY3MyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJp
Yy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IENvbG9yczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwK
aW5kZXggNjZmZWJhY2ZmOTdlNDJhNjczYjFkYTU5YWFjMGY2MzcxZjllYzVhZC4uMWI1ZGRhZmRm
NjQ4ZDlmMTBmMGVjOGYyMGQ5NDliYTM2MTZmZTg0ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemll
ciB2YWx1ZSBvdmVyZmxvdzogTGVuZ3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKaW5kZXgg
YTk5YTRkYmE3MzZhZmIyZjk1ODA1YWU4ODg1ZTAyYmUwYzBhNzNmOC4uMGJjY2E4OGU4NzE3ZGFk
ZjU5ZTNjZWJkMDY5MTljZWFjNGEyYTc2ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0
eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1
ZSBvdmVyZmxvdzogU2hhZG93czwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbAppbmRl
eCA3MjAyNDY4MWIzYzNhN2NkZDE5YTI4ZjRjMjgzOGU2MDRhZDViN2NiLi4zNTU1MzAzOWZjOWRh
OGRiNmVlYTMyOTU2ZDkxYWMxZTY0MmNhMWQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1i
ZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFNWRyBMZW5ndGhzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zv
cm0uaHRtbAppbmRleCA2NjA5NzI1MzRkYzY2MmJjM2I4MGZmNzY0OTM2ZmZiNGFkYTVmMjY4Li42
NTI5MTEyYjExZDY0ZjFlYzQwYWJhYzU3NWE2ODY4MTU0MDVkNTc1IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5z
Zm9ybS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0
bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBUcmFuc2Zvcm1zPC90aXRsZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1s
CmluZGV4IDc5ODNmZGNlZDIyNjM3MGUxYTM0NDkwMTNlMGM5ODVlMGQ2ZTI4NmMuLjM1MDg3YzM2
NGEzZjFjOThlNDQwZDlhNzk5ZTBiZGQwY2JmMDAwYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
IGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9kZWxheS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbAppbmRl
eCA5OWMzMWVhODdkYTA5MWQ1ZDY3ZGE1OWYxMWIzZjI2OTNhMGZmNGMwLi4zYTAyYjYyNzk4MTA1
YTM2ZDYwZWVhMTgyMWFmNzAzODBlY2NlYTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9kZWxheS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+
CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
ZmxleC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFu
c2l0aW9ucy5odG1sCmluZGV4IDlmYzQ2NjAzN2E1Mzk1MmZkYjkwMGRjMGU5NjNmNDM1MmU5MTY5
NDUuLjYxZjQ1NmFjZTkxNzMwZTdiMjRjZmY2YzU0MThmNzIwNWQ3NTNjZDcgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRt
bD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Zm9udC1mYW1pbHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ZvbnQtZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2RjZDIwZjE1NzQ5
MzdkOWFiY2I3NjZmMmU5MjA3ZGM3OGZkY2M3OC4uMDNmOTUyZGExYjczM2U4NDk2OTE0YzVhMTc2
OWE4MDE3YmM2YzhmZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1m
YW1pbHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Zy
YW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1l
cy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCAzMGZlY2M2ZDUxZDRjMDZlNjRlYzdhZWYwMDA5
ODUwNDZiYjVmMDhhLi5lOGIxNjIxMGVhNzY1N2U0NzBiMGRhMjgxNDAzOWY4NTUyMmE0MzA5IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9u
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlv
bi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1s
CmluZGV4IDdkNDczZTkxMjE0NjU4M2Y4MTEwOTNkZTI5N2JlM2FhZjUzOGJiNDguLjllNjZjZDRm
OTI2MTRlMWU1MDdmMmNmYTY0MjNmN2QyZTYxMDA5ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbAppbmRleCA2
MDk5MzNmNjA0YTcxNTI4Y2VmNDMxYTdiYTQ5NThiYTcyZTQ3OTVmLi4yMDJlNjRkNjQ0ZGY1Yzhk
NWY1ZTRmOTkxODdiNDc3YTNhOGZiZDFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+
CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9t
YXNrLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5z
aXRpb25zLmh0bWwKaW5kZXggYmM3YzcxODNlYWYzZjlkOWI0YzA2ODdkYmI5NzY0ZDNhOTcyZjUw
OC4uMGMzZDM5YWI5ZjIxYWQxZmIwOTc4NjJmMDNlZDEyZWU1ZmNhMTZiMyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgt
d2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9t
aW4tbWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1sCmluZGV4IDEyMDQxMTdiY2MzMjBj
MTJhODFlZTJiZWVlMjI4ZTQxMWY5OWI5YzcuLjlkZGYzOTM4YTI5YmYzZTEwYzhjOGI2Yjc0NmUz
MWIwM2Q3NDI2MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgt
d2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1s
PgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L21pc21hdGNoZWQtc2hhZG93LXN0eWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWwKaW5kZXggZTJlNWNiMDcyOWQ4MTNkOTg0NjBi
ODk4NGE0MTIwYjRmYjllZGUyNy4uODcyM2MyNzQxNjg4YmVkNDkwM2M3OGM4Mjk2ODRiNDVkNGNj
NzYwMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFk
b3ctc3R5bGVzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1z
aGFkb3ctc3R5bGVzLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93
LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggY2I2ZDM0ZDg0NzViZmE2MTEzNmIzNjMzOGJiYzc4N2Uw
ZThlYzUwOC4uNjg3ZDEwZjEyMDhhODM1Y2QyNWZlOTAwOWQ0NTM3ZDRhMDhjNjcwNCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlv
bnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10
cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sCmluZGV4IDI0ZmIxMWZlZjRlMTg3MmYxNDJiMGY1NzJk
ZjU1MWMwNzM5M2IxYmQuLjMzMzIzNjhkNmU0NDg1MjBmYjgxNjgzN2Q0OWY3Yzk3OGU0NDg5ZmEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogPHN0eWxlPgogI2JveCB7CiAgICAgd2lkdGg6IDEwJTsKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2VkMmQ1YTIy
MjI4MDcwMTdlNTM2OWFkMDFlMTNkYjYxNWYzZTcyZi4uZGM0NDU4ZjJkNTI3Njc2YzhjZDczMmUw
ZTJiZWM5NjBlZDhiM2I2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92
ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92
ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dy
b3VuZC1zaXplLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0
aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCAyMTNlMjFhZGNlZDY2
YTdhYWQ2N2VjOGI1Zjk1NjhjN2Y3YmVmZjI0Li4xNGQ3NTFjNjQ5NzMzYzFjMzBhMDdiZGM0ZmZi
OGVlMzYxYzUyMDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBs
ZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiMjllZTcz
ZDM1MGQ5NWIzN2I3MjE3MTg2ZWFhOWJjMjkzMTgwNmM1Li41MDMwNjdjMTY0Y2E2MDc5NTdhZDU4
ZjM2NmRmZmRhMjc0ZTc1ODU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9t
dWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVs
dGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVs
dGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sCmluZGV4IDM5MjNkOTNjNmQ4NDUzNGU1ZjdkNzhl
YjlmM2UzNmFkYTRmZDMwMmMuLjVjYmU2OWZjMDQ3NTcyZWFiZTYwYTA0ODdmMTUzNjVhNGNhOWE5
MTkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJh
bnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNr
LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IDM0YTBhZDI2M2NhOWYxNThkNzQ5OTA1YTRjNWRmYzY1NTFlOTNlYjYuLjRhOWQ0
ZWM1NjRmMzNjNTU0NzMzMTdlMTE4ZjRmOTA3ZWNlNzUwODggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0
aXZlLWRlbGF5Lmh0bWwKaW5kZXggYzc1YmU3ZjNjYzZkNTkzY2ZkMTA2MmE3NzU2NTc2YjViYWE2
YTZiNi4uZDMzZTRiNTc2MGY1NTNjN2NjZDcwYjdkNGM3ZDgzNjY1NTNkMWY0ZCAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sCkBAIC0xLDQgKzEsNCBAQAot
PCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRt
bD4KIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbAppbmRleCBkODYzNzA1OWVm
NzBmZTdhMjJlYjBjZDIwOTU2ZTdhYmRkODc3MThlLi44NjJiYTAyYjE1ZjYyZWIzNDI4N2ZhNThm
NDRjYjVlYjQ3ZjljOWI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFj
aXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
b3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNl
cy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jl
c291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCA3ZTc5ZDBjOWUxYjQ5YThl
NzgxNjkzZTg0YmZmNDA5MTgzMjViZmM2Li5mMzU3MzFiNjVmYTRjNzUyZmQxMjYwMmQ3MDFmYzA5
Yjg2MGQwN2VhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMv
dHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
cmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC0zODEsMTQgKzM4MSw5IEBA
IGNvbnN0IHByb3BlcnRpZXNSZXF1aXJpbmdQcmVmaXggPSBbIi13ZWJraXQtdGV4dC1zdHJva2Ut
Y29sb3IiLCAiLXdlYmtpdC10ZXh0LWZpCiAKIGZ1bmN0aW9uIHBhdXNlVHJhbnNpdGlvbkF0VGlt
ZU9uRWxlbWVudCh0cmFuc2l0aW9uUHJvcGVydHksIHRpbWUsIGVsZW1lbnQpCiB7Ci0gICAgLy8g
SWYgd2UgaGF2ZW4ndCBvcHRlZCBpbnRvIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlv
bnMgYXMgV2ViIEFuaW1hdGlvbnMsIHVzZSB0aGUgaW50ZXJuYWwgQVBJLgotICAgIGlmICgnaW50
ZXJuYWxzJyBpbiB3aW5kb3cgJiYgIWludGVybmFscy5zZXR0aW5ncy53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbHMucGF1c2VUcmFu
c2l0aW9uQXRUaW1lT25FbGVtZW50KHRyYW5zaXRpb25Qcm9wZXJ0eSwgdGltZSwgZWxlbWVudCk7
Ci0KICAgICBpZiAodHJhbnNpdGlvblByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4KSAmJiAhcHJv
cGVydGllc1JlcXVpcmluZ1ByZWZpeC5pbmNsdWRlcyh0cmFuc2l0aW9uUHJvcGVydHkpKQogICAg
ICAgICB0cmFuc2l0aW9uUHJvcGVydHkgPSB0cmFuc2l0aW9uUHJvcGVydHkuc3Vic3RyKHByZWZp
eC5sZW5ndGgpOwogCi0gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIFdlYiBBbmltYXRpb25zIEFQ
SS4KICAgICBjb25zdCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zKCk7CiAgICAg
Zm9yIChsZXQgYW5pbWF0aW9uIG9mIGFuaW1hdGlvbnMpIHsKICAgICAgICAgaWYgKGFuaW1hdGlv
biBpbnN0YW5jZW9mIENTU1RyYW5zaXRpb24gJiYgYW5pbWF0aW9uLnRyYW5zaXRpb25Qcm9wZXJ0
eSA9PSB0cmFuc2l0aW9uUHJvcGVydHkpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCA3MDg4MWZlOTAyMWM4
OTUwMTEwNTNmNDJmMWNiYmFhYzQzMjg2MjRkLi5hZWZjOWEwNTM4ZmViMDRmODNhZTE1ZTQ4YjI1
MjM5OWRkODE2NWYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1v
dXRzaWRlLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hh
cGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1i
b3JkZXItdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFu
ZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbAppbmRleCAzNWM5ZTMyOTFmYWExMjYyMjJkNDQxMGUy
YTJmZTNlNzQ0OWU3ZjljLi5mYWE3NDVjMWIxZTdlMWEzOTFkNjI0Y2ViMWY1MTU0YzNkMDA4NzI4
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRy
YW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJv
cmRlci10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFuc2l0
aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25z
Lmh0bWwKaW5kZXggZDMyMmI0ZTFmNDFjNTVlMDRkMzA5OTM3ZmRkY2JiMTE2NWY5OTdjYy4uYjU1
MWEyY2JjNzY0YmNlMmVjZmRiNTcxNjJiNGExN2EyNGQzMTZkMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCAzZWU1NWUwMGE0Y2NjMjdkYTQ3Nzk1
NTdjYTNmOTZmZTcwZWNiZmVmLi5iYjk2MmJjYjk3MDQzMjI5NjI5Yjg0YTkyZTRhMGNlMDU4MDE1
NDFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVu
Y3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVu
Y3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbCBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCmluZGV4
IDE0NWQ4M2EwMmIwMjJjNjFlNmZhODhkOTQ2NzAzZmJhYTRhYTE5NTEuLjAwNThhYjVkMTQxNmRh
NGI3Y2RlYmJkMmQxNGVhZDI4NjBmN2JjYmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93
LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRv
dy10cmFuc2l0aW9uLmh0bWwKaW5kZXggM2ZjYWQzODgwNmNhNjAwN2JhNzhmNWYwYjQyMDI4MDE1
NDIzYTY1Zi4uNTc5N2U1ZWRlM2RlYWRkNzJkM2MzYWEzNTE1NmExMmExMDRjN2FhYiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24u
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNp
dGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgICAgPHN0eWxl
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbAppbmRleCA4
ZjNkODJmNGU3NWQzNGQ1YWI2ZmIzODdiNDNlZDhiMzViOGVjNGMxLi5hYTM5ODgwNzhmYzllZGNh
NmUyMGUyMjU4ZjEzZWM5ZTE5ZTlkZTc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9z
dmctdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwKaW5kZXggNDc0NGI1ODVj
ZWVmYjgxNDVlYjJlNDljNzk2MDFhNjE5MzFkZDFlMS4uMTZmOGFmMTg4MmE1YTc2Y2FkM2NmNzM1
NDRhZjU5M2E5ZjIwMDcxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4
dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Rl
eHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiAgIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1s
aXN0LW1hdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlz
dC1tYXRjaC5odG1sCmluZGV4IDBmOWM0ODczNGRkZmVkY2Y2ZmNmZmI3ZTM5Nzg5MDU4YWViODE1
NDIuLjBkM2YzM2VkMTUyNzkzNDAzMTU5YzMyMjYwZDJiMmZkODAyZDYzNWYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAppbmRleCA4
NmRlYTdlMGZhNWViZDM1NjdiYzIxNDA4YzA3N2YyYTQ3MjgyYTI3Li5iZjZkMzBkZDNkYTZhMjhj
NzgxNTgwZDY0MWY3YmQyYzJlYzBhOTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbAppbmRleCAwMDdjZThk
ZDA1ODUzNTY3MjdkZTkxNjUxNWZiYjNjYzQyN2IxN2JkLi45NTlhZmQ2MGQwOWIwMTFiY2UzYWUx
MDZkNjc5Y2E5YjZkMGMzYTlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
IGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbAppbmRleCAzZDMyOWY0
NjAyMTk2YWExZjQ5MzQwMDg4MmM4ODgwY2Y0NTgyMzdjLi5lZjgwNmM3MTFhMWUxNWFiZGQzNzk2
YzVhNTg3MWI2OTEyZGM3ZDM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi1oaXQtdGVzdC5odG1sCmluZGV4IGQ5ZGY4NWMxNDQ3ZjA5YWRlNTJhYWE0MmIwMWYy
MjM4Y2JjYmUzYzcuLjgzYTYwYTZlMmU1NTNmMzdhN2Y1OWU2NzIxYjk4NWJlZDczYTAxNjUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sCmluZGV4IDkz
ZTA0ZjJhMzI4ZmYyY2RhMTY1NmE0MzQ5MTA0ZjIxNDIxMDNhYjAuLmZjMmNlOTk1MTBhZGU3MmQ2
Y2U4MTU2OTE3NDViOTkwMDgwYTY4MmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50
LXdpdGgtY29udGVudC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1v
bi1lbGVtZW50LXdpdGgtY29udGVudC5odG1sCmluZGV4IDFmMDNlZWE3NzQ5NmY3YjczZmFlYTdm
MmMwY2M3ZDY3ZDg0YTJiYWIuLjNjNDcyOTQ5MTY3ZDY4MzIyYTI3MzcxZWEwNzFmMjc2MTFmNjUz
NjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxl
bWVudC13aXRoLWNvbnRlbnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgog
PGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNo
b3J0aGFuZC1kZWxheS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1z
aG9ydGhhbmQtZGVsYXkuaHRtbAppbmRleCA2ODczMjI5ZDE0ZDc5NDYzY2UwZjQ0ZGY0NDkwYWI0
OTg3ZGNiYzNjLi5kZjA5ODlkOWY2NGZhN2RlNGU0ZWIzNTA4M2FlOGQ0NDliZWY0NmY2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxh
eS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5k
LWRlbGF5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24u
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9u
Lmh0bWwKaW5kZXggOTExNzQ5MmIwYmIzYTEyYjgxMDM3ZWQyMjlmYzU5ZTBiNmVjZmQ5OS4uMDUw
YzUyZDMxNzFjODYyOTZmYzI3NjU1Y2IxMzQzYTU0NGYxOWJmNCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhl
YWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5z
aXRpb24tdG8tZnJvbS1hdXRvLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0
aW9uLXRvLWZyb20tYXV0by5odG1sCmluZGV4IDRlMzdlMTY3ZjQxZjEyM2JlZGVkYjAyODBlMjFi
MDBjOTE2YjA4ZWYuLmQ4NDU5YjcxZDRjODNhOWMzZDdlMzY5MTUzNmY1OGJhNjkwOTRiYTQgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRv
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1
dG8uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVk
Lmh0bWwKaW5kZXggMTRlNzhjNTAxNjFkZTgyNDI2ZGFjMmY3OWY0NjQ2OGYwNDI0ZWNlMC4uNjI4
Y2YyNjg1MmVhYThmOTM1NjYyNGQ5MTE5YzZlODc4ZWJhZjc4OCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbCBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sCmluZGV4IDJlYTQ0NmM2YjJmOTVh
YTJjZjNkZWQzNjY3NjFlNDA2NTgzNjJjMmUuLmIxODc4ZDMxOTA1MjE3NjhlNjNiYTVlNWFkN2M2
ZDUzMmRlZTczZTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQt
bGluay1jb2xvci5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGlu
ay1jb2xvci5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
CisKIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sCmluZGV4IGU2NmFkZjNiMTkwYzllMGQ4NWVh
NzgwMmMxZDk3MWQzOGExY2ZlMmQuLmIyYmNiZjUyNTk3ZGRiM2Q2ZWRmZTg5MGNkZDYwNTZmNTBl
MmQ3ZGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24t
aW4tbGlzdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24t
aW4tbGlzdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVy
by1kZWxheS1zdGFydC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlv
bi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKaW5kZXggNjY2MWY5MWE0MDlhOTFhYmQz
YjljMDVlMTRiYTQ3NDQxMDUzMjQ1MC4uNjA4ZTAwM2Y1YzBkZTdmNjMwMzU4YTZiMDQ3M2E0MzU5
NTQ1YzIyNiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlv
bi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXkt
bm9uZS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRp
b24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sCmluZGV4IDljN2ExM2I0NWI2NDUzYTg0
NWQ1OGUyMDVjOWI0ZTNlYzg1NDY1NGMuLmQxMTVjOTUxMTg0N2NjNWIxYThmNjg4NDk5MzU3ZTZl
YjBhMjAwYmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0
ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlz
cGxheS1ub25lLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHls
ZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5p
bWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFu
c2l0aW9uLWNvbXBsZXRpb24uaHRtbAppbmRleCBiMzc2NjgxN2NmNDBlM2Q5ZGFlNjVlNDM5Y2Ey
ZGZmM2M2OWU1YmI2Li5hMWM4NDhhM2ExNTZhMGEwNGMwMGRiM2Q5Mjc2NGI0ZDA3OWI2MTIzIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlv
bi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5z
aXRpb24tY29tcGxldGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+
CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJh
dGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwKaW5kZXggMDY1NGE2OTVmNWIy
NGJjNDJmY2E3ZjFkMjM4MWRhMGY3MmFiNjg4Yy4uZWZhYTU0MzlkNGZiNzQwYWI1Yzc0MzEwZDE0
NzY4ODgzYzM2OGZlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
bGVyYXRlZC1hbmltYXRpb24tc3VzcGVuc2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3Bl
cnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRp
b24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAppbmRleCBiZWYwODA4ZTk0N2M5NmEwNTRjMzE4
YjkxZDU5YTUyNDAyMWUzYjI3Li5mMzQwMWI2Y2U2NjBmYjYyMDdkOGI5MWYzYzUyNmViZjZjNmMw
N2Q2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRy
YW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KICAgICBkaXYgewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFm
dGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1h
dGlvbi1lZmZlY3QuaHRtbAppbmRleCBiNjA1YzA4OTExYmE2OTMxYjBjZjM4MzViNzljY2IwYzRm
ZjUzNjc0Li45ZGQ1NjE4YmI2NzUwMWVmOTA5ZjYzNzJkMWYxMTkxZjVhZWM5MjY3IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0
ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFu
aW1hdGlvbi1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0
Zi04PgogPHRpdGxlPkNyYXNoIGFjY2Vzc2luZyBhIENTU0FuaW1hdGlvbidzIGN1cnJlbnQgdGlt
ZSBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUt
YWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sIGIvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVk
LWNzcy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbAppbmRleCA1OGY2YzQ5YjljOGMwODJk
ZjhjZTkxNmQ4YzYxNjhhMGQ4OThjZTNmLi40MzA2YTE5ZWJiZDNjY2Y4ZGU5OTFiNWM1ODMyYjRi
MTNmN2QwYTFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2lu
Zy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3Zh
bC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQt
dGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBhY2Nl
c3NpbmcgYSBDU1NBbmltYXRpb24ncyBjdXJyZW50IHRpbWUgYWZ0ZXIgcmVtb3ZhbCBvZiBpdHMg
dGFyZ2V0PC90aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJl
bW92YWwtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlv
bi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbApp
bmRleCBkOTgwZDM1NjI4ZTRhYTM5YTE4MzQwMzVkNTdlNDdhZjBjZDFjYmI3Li42NmZiYTU1MmY4
NWRkM2MyODE3ZDcyMTE5ODM3NTYzMmI4ZDY5OTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1h
dGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9j
c3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1j
cmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdl
dC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZy
YW1lcy1jcmFzaC5odG1sCmluZGV4IDU2MDg3MjEzYTQ1ZWRkNDc2YTA4ZWQ5MzljYzE2YjA4ZjUx
NGNjN2IuLjllNTUzYmRmYmE0YmY2ZTVmMTExM2U4MTg5ZmMyYTAxMzc3NDE4NzYgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0
LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtl
eWZyYW1lcy1jcmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgog
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0
bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwKaW5kZXgg
ODNmZTk1Y2E3ZGYxNjYzYWQ1OTA4YWJlMDRhMzZiZjU3MWE1NTFhZS4uZTVmOTUyMDAwYzZhNGVl
ZTVlZmRiMjFhYTZlN2U0NzdkNTliYmEwYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvY3NzLWFuaW1hdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0
PXV0Zi04PgogPHRpdGxlPkNTUyBBbmltYXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0
L2NzcyIgbWVkaWE9InNjcmVlbiI+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sIGIv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJz
YWwtYWNjZWxlcmF0ZWQuaHRtbAppbmRleCAzMDc4M2E4YmZmMGJiMDFhNGVmYjQwNThiYWRjNzA5
MThhMmU5NzBmLi4wNGRiYWE1M2NhMWQyMzZmZDk4MGJjY2Q3MWNhOGI5YTNhZjkyODc3IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdo
dC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD0idXRmLTgiPgogPHRpdGxlPlJldmVyc2Fs
IG9mIGFjY2VsZXJhdGVkIGluLWZsaWdodCBDU1MgVHJhbnNpdGlvbnM8L3RpdGxlPgogPHN0eWxl
IHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sCmluZGV4IDYwYWMzNjVmMzA1
NjU0M2EzZjE4NjU0YjlmN2MyZjNlMTI0N2M1NjIuLjBmNWZmYjNmMjcwODY3YjNhNjNlZTAzMWEz
MjViYmFiYWE0MTc3ZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1w
dHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9l
bXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxo
ZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0
bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1y
ZW1vdmluZy1wcm9wZXJ0eS5odG1sCmluZGV4IDRkYmY3MDZlNDE3NGYyOWFiMTk1YjhlMmZmNTYy
YTlkMDkzN2FmN2EuLmZhM2M4NTVkYmNiMjZlOGQ5OTdjMTI1MjQyODgzMmM5MTExODdjOGYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRy
YW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3Bl
cnR5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGJvZHk+CiA8cHJlIGlkPSJyZXN1bHRzIj48
L3ByZT4KIDxkaXYgaWQ9InRhcmdldCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAw
OyBsZWZ0OiAwOyB3aWR0aDogMTAwcHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29sb3I6
IGJsYWNrOyI+PC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3Nl
dHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1j
bGVhcmluZy1lZmZlY3QuaHRtbAppbmRleCBiZDI0MDY4YmNjNDVkYzM4MjkwODg5ZmQ3YzNhMzQ2
NGNmMjAxN2ViLi5mODBiMDQ3ZjI2NTZmZTU5MTg4MTViMDMyYzg3NTU0ODZlMDdiZmJhIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi1u
b25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFz
aCBzZXR0aW5nIGEgQ1NTIEFuaW1hdGlvbiB0byAibm9uZSIgYWZ0ZXIgc2V0dGluZyBpdHMgZWZm
ZWN0IHRvIG51bGw8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHls
ZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
c2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xl
YXJpbmctZWZmZWN0Lmh0bWwKaW5kZXggNGIxNTA0YWJjYWQzZTdkYjA0MTNjZGRiZjMzMzYxZWE0
OTQ1NGFmMS4uOTMyYmM5MWE3NmVhMTU1ZjlhYjg2ZDhjOTA0ZDhmZWI1MzVjNzc2YiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGlt
aW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJv
cGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENTU0Fu
aW1hdGlvbidzIHByb3BlcnR5IHZpYSBzdHlsZSBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8g
bnVsbDwvdGl0bGU+CiA8c3R5bGU+Cg==
</data>
<flag name="commit-queue"
          id="424497"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408945</attachid>
            <date>2020-09-16 12:56:56 -0700</date>
            <delta_ts>2020-09-16 14:00:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916215654.patch</filename>
            <type>text/plain</type>
            <size>533863</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGE2ZjY0MjBjNDcyMzJiNWE4MTBiOGY4YjAzYWUz
NjczNjU1ZWY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzIGFuZCBzb21lIFJl
bmRlckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRp
b25zIHdoaWNoCisgICAgICAgIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkb2VzIG5vdCB1c2Uu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0YWJsZS5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbDoKKyAgICAgICAg
KiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3I6OlByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKToKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmguCisgICAgICAgICogYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbDoKKyAgICAgICAgKiBhbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZXN1bWUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAgICAqIGRv
bS9Qc2V1ZG9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmlkbDoKKyAgICAgICAg
KiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1l
OjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dN
b2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1
c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2Vi
QW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVu
YWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZy
YW1lcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6YW5pbWF0ZWRTdHlsZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0
YXJ0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50
Ojp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50
VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFy
dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omlz
UnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6c3RhcnRUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlzaGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6bGVnYWN5QW5pbWF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpjcmVhdGVBbmlt
YXRlZEVsZW1lbnRVcGRhdGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbFNldHRpbmdzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsOgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnN1c3BlbmRBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9ucyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VB
bmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVk
b0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXVsxLjE4XSBS
ZWdyZXNzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZDg4ZDA5YzYwZDI2OWViOGViOTFmODEyYzIxMmU3Nzk4
Y2MxMzU4Li43NGFkZDdjZTMyMjYxMGU2NjliNzNhYzY5MDdiNzhhZDdhNzQyZWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB3ZSBu
b3cgaGF2ZSBhIHNpbmdsZSBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVudGltZSBmbGFncyB0byBv
cHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5lIGFyZQorICAgICAgICBu
b3QgbmVlZGVkIGFueW1vcmUgYW5kIGFyZSBub3cgcmVtb3ZlZC4KKworICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zRW5hYmxl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJs
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dldFdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tQcmVmZXJlbmNl
cyBfc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tQcmVmZXJlbmNlcyBfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZF0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGU6OnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGU6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaDoKKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlMRUQg
aW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3NDYx
M2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ug
d2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3Mg
dG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAg
ICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToK
KyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorCiAy
MDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcyZGQ0
NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJiYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wOS0x
NiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUg
dGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVu
Z2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmlt
YXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93
IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdl
YlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVm
YXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpz
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBzZXR0
aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAppbmRleCAyMGY4YzQxMmFhMjMzNzU1NWIzN2Q1OTQxZTE4YjJlYWRmZDM3YmVmLi41OWY3OTJh
OTQ4N2ZhOThiODE2NTliYTEyMWEyMjBjYzJjMTA0OTMyIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApA
QCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklF
UwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0v
bWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVfRElSfS9w
YWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAgIiR7V0VC
Q09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybSIK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2UvV2ViQ29y
ZS9IZWFkZXJzLmNtYWtlCmluZGV4IGE1NWExOGQzMjA0OGU3NmU2NTFlMDA2MDVmODBiMDVhMzI3
YTExZWUuLmNiNGE5ZGU5Mjc3YWZlOWI3NDRlY2ZlNTQzZDA1Y2RhYTU5YWE1MzQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvSGVh
ZGVycy5jbWFrZQpAQCAtODg5LDkgKzg4OSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfRlJBTUVX
T1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAgcGFnZS9X
aW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmgKLSAg
ICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBhZ2UvY3Nw
L0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3VyaXR5UG9s
aWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNoLmgKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291
cmNlcy50eHQKaW5kZXggMWRmNTQ4NTViMGRjZDRjMjZhNGY3NmIzNTQyZmEyMTQ2Y2ZiYTlkOC4u
Mzg4MjdjNDNjMWM1MWVlMjhlODY5N2Y5Y2RkN2IxZmJhNjhmYmVmMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQK
QEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNwcAogYW5p
bWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0aW9uVGlt
ZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NTU1Byb3Bl
cnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmltYXRpb24v
RGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5jcHAK
QEAgLTE2NzUsMTIgKzE2NzYsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5jcHAKIHBh
Z2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGljYXRvci5j
cHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFz
ZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0
ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAotcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJp
dHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQuY3BwCiBw
YWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
V2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNjY1NTk4ZjYz
NTA0ZDgzNWQ0ZGRhNzNlMjY3ZTYyMjlkMDcxMzNkMi4uMjhlOWYyOTFiZjMwOTlkNmMyNTNiZmVm
ZWJmMGVkMmRmMTliM2RhZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4MjJFM0M0
N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBGcmFtZUlk
ZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1NEUwRjM5
MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAzNUNDMDQg
LyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVy
cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTBG
MTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNURBODkw
RjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi87IH07
CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdFQzdDNTAw
RURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNjcm9sbEFu
aW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAqLzsgfTsK
IAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgxODAwRDM3
QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC05MTYsMTEgKzkxNSw2IEBACiAJCTMxNkRFNzAyMUU4M0FFMUQwMDg0
QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRDRGF0YUNo
YW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NL
ZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5oICovOyB9
OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3MDBFNkND
QkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZFMTEyMEU2
RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0
aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwQTBF
NkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFEQTcwMEJG
NjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVB
bmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0
QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLzsgfTsK
LQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBFNkUxREE3
MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQxNjYzNjYw
OTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8qIFNp
bXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxN0QzRkYy
MjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JGODkgLyog
SW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIxNTIsNyBA
QAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhhc2UuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJDNDI0MjFD
OTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIwMDY1QTQ1
RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIwMkIzOEE5
MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5pbWF0aW9u
RWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
KwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3RTI1MTI0
NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBGMTJGRjcg
LyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0MjIzRUM5
MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyogU1ZHUHJv
cGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0aW9ucy5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJDMThBM0Yy
MzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2IEBACiAJ
CTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAxQjFFRDcy
MkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3N0Q1MTAy
NTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1NTAwREE0
Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQxMkY5REI3
NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAwQzc3QkQy
IC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJDNjE1NEEx
OERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAyMTI2NkUg
LyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3NpdGlvbkV2
ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2
ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3OUYy
RjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9OwogCQk3QTA5
Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JEQiAvKiBG
aWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4ODQgLyog
UmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBS
ZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTMx
NjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1DQUZpbHRl
cnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFBsYXRm
b3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGMTVE
QTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VDN0M1MDBF
RERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2VkQ2FudmFz
UmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNzIxNSwx
NiArNzIwOCw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1l
c1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlmcmFtZXNS
dWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NEN0YwMEJG
NjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IENTU0tl
eWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkyMEU2
Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBh
dGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJ
MzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25C
YXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJhc2UuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4IC8q
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNvbnRy
b2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZFMURBNzAw
QkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9u
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYwODgg
LyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1l
QW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEtleWZy
YW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMTAw
RTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlja09wdGlv
bnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2ludGVyRXZl
bnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0g
dGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTk4ODMsNiArOTg2Niw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmlt
YXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9u
RWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAyQjM4OEYw
MEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0Q3VzdG9t
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0aW9uRWZm
ZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVGN0UyNTEy
NDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkzNkY3MURE
NEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
amF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JNYXhUb3Vj
aFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91Y2hQb2lu
dHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBDOEJBMDBG
MTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR0Fu
aW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtOTk5
MSw4ICs5OTc2LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2aWdhdG9y
Q3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNOYXZpZ2F0
b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VGNjJGMTEy
RjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9F
Uy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURCNzQwMEM3
N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAy
QkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3Np
dGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQ29t
cG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5MjE3
MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2ZW50
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0aW9uRXZl
bnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTIsMjYgKzE4Njk1LDYg
QEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsKIAkJfTsK
LQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJCWlzYSA9
IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4
IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAv
KiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4IC8qIENv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4IC8q
IENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJGNjA4OCAv
KiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUxREE3MDBC
RjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5MEYzQUFF
RTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAotCQkJCTc4
RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCi0J
CQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8s
Ci0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9uLmNwcCAq
LywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAq
LywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uY3Bw
ICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5o
ICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0gIjxncm91
cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0aW9ucyAq
LyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQzMSw3ICsy
MTM5NCw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0gewogCQkJ
aXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUxRDg0MDBC
RjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3OCAvKiBj
b2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAogCQkJCTE4
QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3NCw2ICsyMTgzNiw4IEBA
CiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAgKi8sCiAJ
CQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAogCQkJCTcx
QzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJCTcxRjA1
RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8sCisJCQkJ
NzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8sCiAJ
CQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQu
aCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5jcHAg
Ki8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24uaCAqLywK
QEAgLTMwMzE1LDcgKzMwMjc5LDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJGOTAgLyog
QU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3MTIxOUMw
NDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDlF
OTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZl
Y3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEzMzE4IC8q
IEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNjk4LDcgKzMwNjYxLDYgQEAK
IAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9sbGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29tcG9zZWRU
cmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUxQkNBNkI1
QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
MTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRpdENvbW1h
bmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAvKiBDb21w
b3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3MTEwMEVC
N0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApAQCAtMzA4
MzgsOCArMzA4MDAsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBDcnlwdG9S
c2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0MUYzQ0NF
NjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFkZXJzICov
LAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVy
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyogQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlGOTEwMTQ2
NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFkZXJzICov
LAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5oIGluIEhl
YWRlcnMgKi8sCkBAIC0zMDkwOCw3ICszMDg2OCw3IEBACiAJCQkJQTgwRTZDRTYwQTE5ODlDQTAw
N0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlFMUVEOEFD
MzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5LmggaW4g
SGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlB
bmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcxRTY5MyAv
KiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcxMzQxRkJF
NzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFkZXJzICov
LAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJvcGVydHlQ
YXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzIsNyArMzE2OTIsNiBAQAogCQkJCTU1QkJE
NDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5vZGVCdWls
ZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1w
bGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMzOEMwMEQw
N0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkwNzg2MzNF
OTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVudGlmaWVy
LmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzA5LDcgKzMyNjY4LDYgQEAKIAkJCQk1MTdBNjNDNjFC
NzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5oIGluIEhl
YWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0
aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0UgLyogS2V5
ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNCNDFGOUYw
OUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3
RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBIZWFkZXJz
ICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRs
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0NjQ3MTAw
MDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1NjIyZWNh
ZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJsZS5p
ZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcv
d2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1bCi0gICAg
RW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBBbmltYXRh
YmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dFeGNlcHRp
b24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2JqZWN0PyBr
ZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1lQW5pbWF0
aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmlt
YXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRsIGIvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJkZjFmZTJj
NjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlhM2M1MTIz
Mjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlv
bkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxlZEF0UnVu
dGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3RvbVRvSlNP
YmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2OTFiNDg1
MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVlMWUwZTgz
MmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9B
bmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAg
ICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3csCiBd
IGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNvbnN0cnVj
dG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCBl
dmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Bbmlt
YXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5p
bWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBlODIxZGI0
N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFiYjI2MDdj
Y2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFj
a0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblBs
YXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAq
LwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rpb25hcnkg
QW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFyeSBBbmlt
YXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBjdXJyZW50
VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4IDA0ZmE5
NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIxNDNlZmM4
NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBFbmFi
bGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09SRV9FWFBP
UlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGltZWxpbmUg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbi5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAxZTViODg0
YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5NmY5YmU5
NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0
aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7
CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwK
ICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2ViQW5pbWF0
aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9uTmFtZTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZmYTUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmlt
YXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0aGVyIHRo
ZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAqICAgICBp
dHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0
cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJp
b3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQg
U0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQorICogRElS
RUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBE
QVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmlt
YXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgorI2lu
Y2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1
ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NJ
bWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNsdWRlICJD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5o
IgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5o
IgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JCbGVuZGlu
Zy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRDYXNjYWRl
LmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUgIkZvbnRU
YWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUgIklkZW50
aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUg
Ik1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5
bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVHZW5l
cmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKKyNpbmNs
dWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1ZGUgPG1l
bW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9OZXZlckRl
c3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9Q
b2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
aW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChm
cm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1bmMo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUgdG8s
IGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNz
KTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7
CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICog
cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jl
c3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3Mp
OworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVuZ3Ro
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgpIHx8
IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwg
cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZyb20s
IGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIHsg
YmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5kRnVu
YyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKworc3RhdGlj
IGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAg
ZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKKyAg
ICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7CisgICAg
ZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3Mp
OworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRvd1N0
eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0
YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0
IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Cit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgpICE9IHRv
LT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8pOwor
CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24o
KSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+cmFkaXVz
KCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5zcHJlYWQo
KSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9t
LT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5pc1dlYmtp
dEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwg
cHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0IFRy
YW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rpb25M
aXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25z
KGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJw
b2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRlcmVy
KCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3JkZXJC
b3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQ
dHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJldHVy
biB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNTaGFw
ZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQYXRo
T3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpTaGFw
ZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBl
ID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUoKTsK
KyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9w
ZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5jYW5CbGVu
ZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBlQ2xpcFBh
dGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsK
K30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAgIHJl
dHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hh
cGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAgICAgcmV0
dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZyb20t
PnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUoKTsK
KworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICByZXR1cm4g
dG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJvbVNo
YXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRy
PEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBkb3Vi
bGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7CisgICAgQVNT
RVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVu
ZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxl
bmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
ICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OworICAg
IHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qg
dG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6
bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsg
aSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJv
bVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ld
LmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0g
dG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dyZXNz
KSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVzcywg
dHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJlc3VsdC5v
cGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgp
OworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAgIHJlc3Vs
dC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5h
cHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAgICAgIH0K
KyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0ZXJPcGVy
YXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywg
ZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUZp
bHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElmIHdlIGhh
dmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rpb24g
YW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAgIHN3aXRj
aCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAgICAgIGxp
c3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJl
YWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJvcEZp
bHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgorICAgIGNh
c2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNoID0gYW5p
bS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7CisgICAg
ZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0c01hdGNo
KQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwgdG8s
IHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5jdGlv
biBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBkb24n
dCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAgIC8vIEZv
ciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9IHRvOwor
ICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFN0
eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29u
c3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NFUlQo
aW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0ZXJP
cGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGltYWdlVmFs
dWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRlclZhbHVl
ID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVudFN0
eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAgICBhdXRv
IHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFsdWUp
LCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9wZXJh
dGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3Jl
YXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0eSBm
cm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55IG5vbi16
ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUuIE9u
bHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52aXNpYmxl
LiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBWaXNp
YmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFsdWVz
LgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8gMS4g
OiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8gMS4g
OiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRvOworICAg
IGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNz
KTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRvICE9
IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5saW5lIFRl
eHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRVbmRl
cmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNMZW5n
dGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNl
dDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0
by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zm
c2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNvcmF0aW9u
VGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29yYXRp
b25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uaXNMZW5n
dGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlj
a25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUo
KSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERlY29yYXRp
b25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVuZ3Ro
Qm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25z
dCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
K3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0by50
b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZy
b20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAg
YmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyksCisg
ICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxlZnQo
KSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFNW
R0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
Y29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZG91
YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbSwg
dG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGlu
ZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3QgVmVj
dG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBzaXplX3Qg
ZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNpemUo
KTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBmcm9t
IDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNzID09IDEg
PyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7CisgICAg
aWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5kZXIoc3Rk
OjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xlbmd0
aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9M
ZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9tTGVu
Z3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVzdWx0
KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5ndGg7
ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21baSAl
IGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHBy
b2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8
U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdlKiB0
b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVzcyBpcyBh
dCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hvdyB0
aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhhbmQg
YmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNzKQorICAg
ICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEpCisgICAg
ICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2FjaGVk
SW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICByZXR1cm4g
dG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6
OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8gdG9JbWFn
ZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZEltYWdl
KCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBjcm9zc2Zh
ZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VWYWx1
ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsKKyAg
ICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRlVmFs
dWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20sIFN0
eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0bykK
KyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsK
KyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwgIXRvKQor
ICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdl
bmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAgICBpZiAo
aXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9
IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7CisgICAg
ICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlzPENTU0Zp
bHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFsdWU+
KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRlZCBp
bWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAgICAgICAg
ICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KKyAgICAg
ICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0
ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdl
VmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRl
cikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBi
bGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmls
dGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdlbmVy
YXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAg
ICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2Zh
ZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYg
dG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpOwor
ICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3NzZmFk
ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jvc3Nm
YWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZv
ciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2CisgICAgfSBl
bHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJ
bWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJh
dGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsK
KyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7Cisg
ICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NT
RmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAoZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykuY2Fj
aGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZp
bHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwor
ICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGNy
b3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2FjaGVk
SW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7CisgICAgICAg
IENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5l
cmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NGaWx0ZXJJ
bWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFs
dWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQp
OworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8U3R5
bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVkSW1h
Z2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0ZXIu
Y2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRp
b25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRkIGludGVy
cG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAgfQorCisg
ICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5kIGdl
bmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxT
dHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQoYW5p
bSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2FjaGVk
SW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0aWMgaW5s
aW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNlSW1h
Z2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkgfHwg
IXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1FICg3NDEx
Mik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0IGRp
ZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmltYWdlU2xp
Y2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRvLmJv
cmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5maWxs
KCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9udGFs
UnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCisgICAg
ICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRlcmVy
KCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAxLjAp
ICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAgICAgIHJl
dHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5jKGFu
aW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLmlt
YWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNl
dCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOworfQorCisj
aWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9u
U2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlvblNl
dHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUoKSAhPSB0
by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAgICBG
b250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBmcm9tLnNp
emUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CisgICAgICAg
IGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVtID0gdG8u
YXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCisgICAg
ICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZsb2F0IGlu
dGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0udmFs
dWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFnKCks
IGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlm
CisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9u
dFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIEZvbnRT
ZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBz
dGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5lIE9w
dGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwgT3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJl
dHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0
Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dyZXNz
KSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJvcChwcm9w
KQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBj
b25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAgdmlydHVh
bCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91
YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBj
b25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25Jc0Fj
Y2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAgICBDU1NQ
cm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgUHJv
cGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgp
IGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAg
ICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAgIH0KKwor
ICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
dm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwK
KyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAg
YmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwg
dmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpG
b3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1
ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJlbmRlclN0
eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2Ns
YXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAg
eworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBl
ckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+Ojpt
X2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChS
ZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
Y2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBS
ZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRy
PFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0dGVy
KQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIp
KCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNz
KSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRl
cikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDogcHVi
bGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAgIDogUHJv
cGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAgICAgICAg
LCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50ZXJwb2xh
dGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAgICB9CisK
KyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRzdC0+
Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29u
c3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6
CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsKKwordGVt
cGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyIDog
cHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVy
KHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4q
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAg
fQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYmKTsK
K307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50ZWRQ
cm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0
eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+
JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRp
b24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1l
LCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBu
dWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAg
ICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8
fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0aE9wZXJh
dGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBhdGhPcGVy
YXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChjbGlwUGF0
aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
Y2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKworI2lmIEVO
QUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9u
U2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5ncz4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJpYXRp
b25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUg
c3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3Qu
CisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJl
IG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNldHRp
bmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0
aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgcmV0
dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAgfQorfTsK
KyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3As
IFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBSZWZDb3Vu
dGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAg
IHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUg
c3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3Qu
CisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJl
IG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICBpZiAo
c2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICBy
ZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxlSW1hZ2VQ
cm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUlt
YWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgU3R5bGVJ
bWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJl
ZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVy
PFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBi
b29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICByZXR1
cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQorfTsKKwor
Y2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3Im
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3By
b3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYp
OworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVibGlj
IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisgICAgICAg
IDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJTdHls
ZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9wYWNp
dHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJBY2Nl
bGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDogUHJvcGVy
dHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5zZm9y
bSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtKQor
ICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0sIGEt
PnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitj
bGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0
IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwg
Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQorICAg
ICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVydHlJ
RCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9uSXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gcHJvcGVy
dHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCisg
ICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0
ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhh
bmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj46
Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVy
YXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAgIH0KK307
CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93RGF0
YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0gMDsgc2hh
ZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAgICByZXR1
cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93Rm9y
QmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBv
dGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVm
YXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwg
ZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAw
LCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Cisg
ICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hTaGFk
b3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENv
bG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93
RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAw
LCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKwor
ICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAgICBpZiAo
b3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAgICByZXR1
cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2ViS2l0
Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOworCisg
ICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRXZWJL
aXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOworfQorCitj
bGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0YSog
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQor
ICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcXVh
bHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVl
OworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisgICAg
ICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cworICAg
ICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAgIHJldHVy
biB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3RzCisg
ICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93
QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dB
ID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9
IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dMaXN0
TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3Ro
KHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChmcm9t
TGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywgc2hh
ZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMoYW5p
bSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwgZmFs
c2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0
IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRv
dWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0
ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8
PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6
CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hh
ZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHBy
b2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFk
b3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5l
d1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOworCisgICAg
ICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0IpOwor
ICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRp
bmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFk
b3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hh
ZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93UHRy
ID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93KQor
ICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwor
ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQoV1RG
TW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVuZGVk
U2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0EtPm5l
eHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5leHQo
KSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKKyAgICB9
CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hhZG93
TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHByb2dy
ZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dC
LCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAgICAgLy8g
VGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIHNv
IHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVyc2UgdGhl
bSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93RGF0
YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gZnJv
bUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93c1tpXSA9
IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOworICAgICAg
ICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3ModG9M
ZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0taSkg
eworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAgIHNoYWRv
d0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVuZ3RoID0g
c3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9t
U2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAgICAgICAg
ICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93c1tp
XSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRv
d0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9tU2hh
ZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kZWRT
aGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsK
KyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2Vy
dmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3Zl
KG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJs
ZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7
CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIp
KCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlxdWVf
cHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJT
dHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0
IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQor
ICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09
IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVl
KGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJl
dHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICByZXR1cm4g
ZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOworICAg
ICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9tQ29sb3Iu
aXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9tQ29sb3Ig
PSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRG
dW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyAgICBD
b2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAor
ICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lU
SF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVy
dHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2
YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2Vu
ZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVy
KSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9y
Jik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRDb2xv
ciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJsaWMg
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3QgQ29s
b3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8
UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAgICAgLCBt
X3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIHZp
c2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJvcGVydHlX
cmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUludmFs
aWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwg
dm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENvbG9yJiAo
UmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3Bl
cnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCisgICAg
ICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJlSW52
YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAgICB7Cisg
ICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dyYXBwZXIt
PmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7CisgICAgfQor
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBtX3dyYXBw
ZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zpc2l0ZWRX
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisKKyNpZiAh
TE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQoYSwg
YiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0JsZW5k
KGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAg
IHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBwZXI7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fdmlz
aXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1hdGFi
bGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAgICB9Cisg
ICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0gZGVm
YXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciosIGNv
bnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29u
c3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7CisjZW5k
aWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwordGVtcGxh
dGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIgOiBw
dWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVyKSgp
IGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uo
cHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAg
ICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwor
ICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29u
c3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBz
dHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwg
IiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBU
ZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIg
LT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAg
IFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUgPHR5cGVu
YW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVy
KHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBh
LCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dy
ZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29u
c3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVy
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0df
V0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJv
cGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnByb3Bl
cnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisgICAgICAg
ICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBGaWxsTGF5
ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlcikoKSBj
b25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChGaWxs
TGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdpblNl
dHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKKyAgICAg
ICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5HZXR0
ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRlcikK
KyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBl
cXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRvTGVuZ3Ro
ID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1f
Z2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9vcmln
aW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRlciko
KTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYmIGZy
b21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIq
IGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAgIExlbmd0
aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExl
bmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAo
YS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmln
aW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdlKSB7
CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMgZXhw
cmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisgICAgICAg
ICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChmcm9t
TGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsKKyAg
ICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aCh0
b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9tRWRn
ZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8gdGhl
IGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAoZHN0
LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCwg
cHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVu
ZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBn
ZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0
byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNw
ZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAg
ICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVuZ3Ro
U2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVyKSgp
IGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsKKyAg
ICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xhc3MgRmls
bExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXll
cjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwgY29u
c3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgewor
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVz
dWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1h
dGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAgICAgPDwg
IiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUoYSkK
KyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1h
dE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNlbmRp
ZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0cjxU
PiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIgOiBw
dWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyU3R5bGVJ
bWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdlKiAo
RmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFJl
ZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVy
dHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5
ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVy
KSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAg
ICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAg
fQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVy
KiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHBy
b3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8
PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHBy
b2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCit9Owor
CitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0ZXIp
KCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVyc0Fj
Y2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3NvcikK
KyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQorICAgICAg
ICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29yKGFj
Y2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3Jh
cHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHByb3Bl
cnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwgJkZp
bGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRYT3Jp
Z2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIg
PSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eSwg
JkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxsTGF5
ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdpbiwg
RWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3Jv
dW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgorICAgICAg
ICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVMZW5n
dGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBtX2ZpbGxM
YXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVByb3Bl
cnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJ
bWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAg
ICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAo
IWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0byogZnJv
bUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRvTGF5ZXIg
PSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxheWVyICYm
IHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIt
PmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7CisgICAgICAg
ICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOworICAg
ICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0
byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAgICAgd2hp
bGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1fZmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5ZXIs
IHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOworICAgICAg
ICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXllciA9IGRz
dExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dl
dHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgp
OworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7
CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAg
ICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgYUxh
eWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4
dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBk
c3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXllcnNHZXR0
ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3NvcjsK
K307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJzKQor
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAgICAg
ICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisgICAgewor
ICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEg
PT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDog
bV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhh
LCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
KyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykK
KyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwor
ICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRzdCwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiB3
cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+bG9nQmxl
bmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25zdCBWZWN0
b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9y
PEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Cit9Owor
CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFBy
b3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAg
ICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBy
ZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3coKSA9
PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7Cisg
ICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAg
IGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+Zmxl
eEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRGdW5j
KGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7CisgICAgICAg
IGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBiLT5m
bGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAg
IHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAg
ICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9CisjZW5k
aWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwgU1ZH
UGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29sb3Ig
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQorICAg
ICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVy
KSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBTVkdQ
YWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBldmVyeXRo
aW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lzZQor
ICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2ZXIu
CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlwZTo6
UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIp
KCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAg
ICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkK
KyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAg
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRvQ29sb3Ig
PSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7Cisg
ICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChiLT4qbV9w
YWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwor
ICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAgICBpZiAo
IWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAg
IGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisg
ICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0KKwor
I2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KKyAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBT
VkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1BhaW50VHlw
ZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBDb2xvciAo
UmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6
Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9u
dFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9uVmFs
dWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVy
dHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHlsZTo6
Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gZnJv
bS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2NyaXB0
aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZvbnRE
ZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50OworICAg
IH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAgICAgICAg
YXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAgICAgaWYg
KGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8IDAu
NSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKKworICAg
ICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAgICAgICBh
dXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8gYmxlbmRl
ZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250SXRh
bGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZvbnRJdGFs
aWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJvZ3Jl
c3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRzdC0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9
IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhi
bGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMo
YmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJy
ZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlv
bldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCisgICAg
eworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5YmUg
d2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJldHVybiBt
YXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlckZv
clByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAgIGlmIChw
cm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1Byb3Bl
cnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWduZWQgd3Jh
cHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYg
KHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyc1t3
cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBz
aXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpOwor
ICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKTsK
KyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisKKyAgICB1
bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlEIC0g
Zmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOworICAgIHVu
c2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisKKyAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4ID0g
VUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0aW9uV3Jh
cHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAvLyBidWls
ZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5k
IGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVMb25n
aGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpz
ZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0eWxl
Ojp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5kZXJT
dHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lk
dGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluV2lk
dGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgpLAor
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgsICZS
ZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAorCisgICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5kZXJT
dHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6bWlu
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4SGVp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
V2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVmdCwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5Ub3As
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5Cb3R0
b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBhZGRp
bmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJTdHls
ZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5kZXJT
dHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwKKwor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0eWxl
Ojpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tncm91
bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxl
OjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCisgICAg
ICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0lt
YWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1hZ2Up
LAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgJlJl
bmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFn
ZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlcklt
YWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJT
dHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZVNv
dXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1hZ2Um
PihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94SW1h
Z2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5k
TGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHls
ZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJz
KSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxsTGF5ZXJz
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRlclN0
eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorICAgICAg
ICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNr
TGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwgJlJl
bmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5z
aWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAorICAgICAg
ICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3BlcnR5
Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5n
dGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0eWxl
OjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0
PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2ZXJ0
aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFjaW5n
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4LCAm
UmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZpZWRa
SW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eU9y
cGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5zKSwK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3MsICZS
ZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9mZnNl
dCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVP
ZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91
dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5kZXJT
dHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJl
bmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQsICZS
ZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2
ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6
cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWCks
CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2
ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6
OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9y
aWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVy
U3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2lu
WSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5bGU6
OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5
V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BM
ZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpi
b3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1
cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJC
b3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMp
LAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0eVZp
c2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNp
YmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHla
b29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRSZXR1
cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0eWxl
OjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFj
aXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgp
LAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0
eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVyKSwK
KyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
RmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6YmFj
a2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2VuZGlmCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmls
dGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QXBw
bGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENT
U1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6
c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9w
ZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJTdHls
ZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVuZGVy
U3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBlSW1h
Z2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCisKKyAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Q29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZl
Y3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFsaWRD
b2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4
dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4
dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxsQ29s
b3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlz
aXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdodENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVy
VG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9t
Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRl
clN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9y
LCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKworICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVuZGVy
U3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJlbmRl
clN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAorCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5kZXJT
dHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQYWlu
dFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRT
dHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZSZW5k
ZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hBcnJh
eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ryb2tl
TWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5bGU6
OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRDeCks
CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJlbmRl
clN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHlsZTo6
c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeCwg
JlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJlbmRl
clN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQsICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJva2VX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJTdHls
ZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlZ
LCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJTdHls
ZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29kQ29s
b3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENvbG9y
KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0b3BP
cGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0b3BP
cGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENT
U1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFs
aWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRpbmdD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQsICZS
ZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2VsaW5l
U2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFsdWU+
KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5bGU6
OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFyaWF0
aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVuZGVy
U3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
JlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJvcGVy
dHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpz
ZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUoKSwK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4oQ1NT
UHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NTUHJv
cGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsKKyAgICBj
b25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJS
QVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisgICAgc3Rh
dGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNbXSA9
IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1jb2xv
ciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBmb3Ig
Zm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ssIC8v
IGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
LAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodCwg
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAgICAgICAg
Q1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXMs
CisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3IgbGlz
dC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAgQ1NTUHJv
cGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAgIENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxlLAor
ICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVTaG9y
dGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAgQ1NTUHJv
cGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVzIHRo
YXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAgLy8KKyAg
ICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94UmVm
bGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKKyAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAgbV9wcm9w
ZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisgICAgQ09N
UElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0YWJs
ZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRhYmxl
UHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlXcmFwcGVy
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3Vu
dCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8gRmlyc3Qg
d2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1hcCwg
c28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4KKwor
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVz
Q291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAgICAgbV9w
cm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Qcm9wZXJ0
eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgeworICAg
ICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVy
dGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShw
cm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1dG8gbG9u
Z2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRleCA9
IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdyYXBwZXJJ
bmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5k
ZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1fcHJv
cGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisgICAgICAg
IG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpKTsK
KyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVMb25n
aGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBnYXRoZXJF
bmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
IHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciog
c2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcio+
KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChhdXRvJiBj
dXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgeworICAg
ICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwgY3Vy
cldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBwcm9w
ZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAgaWYgKGNv
bnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkpOwor
CisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQg
dG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENTU1By
b3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJUKHByb3Ag
IT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigp
LndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAgICAgICB3
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOworI2Vu
ZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5QW5p
bWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwor
fQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2Nl
bGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xl
dG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVyID8gd3Jh
cHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5vdGU6IHRo
aXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRpb25B
dFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFu
aW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0PENTU1By
b3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0
aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMpOwor
CisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAgICAg
ICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
Ym9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQ
cm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHko
cHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5JbnRl
cnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5SUQgQ1NT
UHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8Ym9v
bD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYg
bWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKworICAg
IGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkKKyAg
ICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAgIGlzU2hv
cnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJuIHdyYXBw
ZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVtUHJv
cGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6
c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgwYzUzZjUw
YTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFw
cGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVz
ZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRo
aXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbiB7Citw
dWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJvcGVydHlJ
RCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQoQ1NT
UHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5
SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAgc3Rh
dGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBDU1NQcm9w
ZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1Nob3J0aGFu
ZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0aWMgSGFz
aFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5
KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0byBzdGFy
dCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQcm9wZXJ0
aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlELCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9Tb3VyY2Uv
V2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFiNWFkZmQw
NmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEzOWIwNTlm
MWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9uLmlk
bApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7CiAKIFsK
LSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwKICAgICBF
eHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1hdGlvbiB7
CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9wZXJ0eTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKaW5k
ZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRlNDllMjAy
ZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwogCiAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9ucy10
by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmlt
YXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50ZXJmYWNl
IERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGluZSB0aW1l
bGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRP
clNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4YTUzNGMx
ZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0YTc4ZWRl
NTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9yU2hh
ZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1
bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAgKi8KIAog
Ly8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVuc2lvbnMt
dG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAgIEVuYWJs
ZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1
bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVudE9yU2hh
ZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25zKCk7CiB9
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUu
aWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCmluZGV4
IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEyNTQ0MjU1
ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAg
RW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogXSBp
bnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAgICBbQ2Fs
bFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxpbmVPcHRp
b25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZy
YW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5p
ZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4uZjBmMzJi
MGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVmIFVT
VlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0
aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVPYmplY3Qs
CiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNlYzNmYTg0
MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0ZThkYTAw
ZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCkBA
IC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwogICAgIEFj
dGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAg
SW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAgICBFeHBv
cnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5p
bWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZjOWE2ZDRh
NTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiArNTAsMTEg
QEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAgfQogfTsK
IAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21wb3NpdGUg
ICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAxCit9Owor
CiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0aW9uc01h
cmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9IExpc3RI
YXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvY3Nz
L0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBhYzBkODA1
YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uMzY5YjFiZDZjMDZkMGM2NGVjNjIwOTZkZmZjYTM4YmEz
OGEyYTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVE
ZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0
eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMuaCIKLSNp
bmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNwZWN0UmF0
aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAiQ1NTQm9y
ZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94Q29udGFp
blZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRlICJDU1NQ
cmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24u
aCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlQ
YXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEgKzIyNDYs
OCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVyU3R5bGVG
b3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVyID0gZWxl
bWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0NvbXBv
c2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJhdGVkQW5p
bWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICBpZiAoYXV0byB0aW1lbGlu
ZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAgICBv
d25lZFN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIp
OwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvd25lZFN0eWxlID0gcmVuZGVyZXItPmxlZ2Fj
eUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIpOworICAgIGlm
IChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVydHlBbmlt
YXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpKSB7Cisg
ICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0ZWRTdHlsZSgpOwogICAgICAgICBp
ZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBQc2V1ZG9JZDo6Tm9uZSAmJiAhZWxlbWVudC5p
c1BzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2FjaGVkIHBz
ZXVkbyBzdHlsZSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIGFuaW1hdGlvbiBoYXMgYmVlbiBydW4g
YXQgbGVhc3Qgb25jZS4KICAgICAgICAgICAgIHJldHVybiBvd25lZFN0eWxlLT5nZXRDYWNoZWRQ
c2V1ZG9TdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CmluZGV4IDkwOTZmMjY0Njc5MTMwYTc4NGE1MWE5YWRjOGJhZGViZWM3YzdhYzQuLjI5NDBjNThi
ZjE3OGM1MjBhNjA5ZWIxYjczNzczOGViNjY5ZmRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNw
cApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJCZWZvcmVV
bmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUgIkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNs
dWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgpA
QCAtMTk2Miw3ICsxOTYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJlc29sdmVT
dHlsZVR5cGUgdHlwZSkKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShTdHlsZVJlY2FsY1N0
YXJ0LCBTdHlsZVJlY2FsY0VuZCk7CiAKICAgICBSZW5kZXJWaWV3OjpSZXBhaW50UmVnaW9uQWNj
dW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXcoKSk7Ci0gICAgQW5p
bWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fZnJhbWUtPmxlZ2FjeUFu
aW1hdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHVwZGF0ZSBwZXIgdHJlZSBzY29w
ZS4KICAgICB7CkBAIC0yNDIyLDE5ICsyNDIwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmRpZEJlY29t
ZUN1cnJlbnREb2N1bWVudEluRnJhbWUoKQogICAgIC8vIGJlIG91dCBvZiBzeW5jIGlmIHRoZSBE
T00gc3VzcGVuc2lvbiBzdGF0ZSBjaGFuZ2VkIHdoaWxlIHRoZSBkb2N1bWVudCB3YXMgbm90IGlu
IHRoZSBmcmFtZSAocG9zc2libHkgaW4gdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNhY2hlLCBv
ciBzaW1wbHkgbmV3bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURPTU9iamVj
dHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQotICAgICAg
ICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5zdXNw
ZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1lbGluZXND
b250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5kQW5p
bWF0aW9ucygpOwogICAgICAgICBzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVu
c2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAgcmVzdW1l
U2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7
Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYgKG1f
dGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xs
ZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2Zy
YW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7
CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBtX3RpbWVs
aW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CiAKQEAgLTI1Mjgs
OSArMjUyMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUoKQogICAg
IGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsKIAotICAg
IGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5kZXRhY2hG
cm9tRG9jdW1lbnQodGhpcyk7Ci0KICNpZiBVU0UoTElCV0VCUlRDKQogICAgIC8vIEZJWE1FOiBU
aGlzIHNob3VsZCBiZSBtb3ZlZCB0byBNb2R1bGVzL21lZGlhc3RyZWFtLgogICAgIGlmIChMaWJX
ZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkpIHsKQEAgLTMwNjYsOCArMzA1NSw2IEBA
IHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICBpZiAoYXV0byogZG9jdW1l
bnRMb2FkZXIgPSBsb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5zdGFydElj
b25Mb2FkaW5nKCk7CiAKLSAgICAgICAgZi0+bGVnYWN5QW5pbWF0aW9uKCkuc3RhcnRBbmltYXRp
b25zSWZOb3RTdXNwZW5kZWQodGhpcyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZG4n
dCBiZSBkaXNwYXRjaGluZyBwZW5kaW5nIGV2ZW50cyBnbG9iYWxseSBvbiBhbGwgRG9jdW1lbnRz
IGhlcmUuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgZG8gdGhpcyB3aGVuIHRoZXJlIGlzIGEg
RnJhbWUsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIEpTIHJlZW50cmFuY3kKICAgICAgICAg
Ly8gYmVsb3cgU1ZHIGZvbnQgcGFyc2luZywgZm9yIGV4YW1wbGUuIDxodHRwczovL3dlYmtpdC5v
cmcvYi8xMzYyNjk+CkBAIC01NDU0LDExICs1NDQxLDggQEAgdm9pZCBEb2N1bWVudDo6cmVzdW1l
KFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgQVNTRVJUKG1fZnJhbWUpOwogCi0g
ICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX3RpbWVsaW5lc0Nv
bnRyb2xsZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1h
dGlvbnMoKTsgIAotICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgaWYgKG1fdGltZWxpbmVz
Q29udHJvbGxlcikKKyAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVBbmltYXRp
b25zKCk7CiAKICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhyZWFzb24pOwogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRWxl
bWVudC5jcHAKaW5kZXggOGY4NmZmNDFhNjY0NjgyYzJmYzY4N2UzZWJhNjgzYzUzZmM2Mzg2YS4u
YzViMzMxNmNjZjY0MjE2ZjI5MWU2YmE1NmFiODcwODEzMGY3MTQ2OCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNp
bmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0aW9uLmgi
Ci0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1BhcnNl
ci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5oIgpAQCAt
MTE5LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRlICJWb2lk
Q2FsbGJhY2suaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJXZWJBbmlt
YXRpb25UeXBlcy5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJYTGlua05h
bWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjI4OCw5ICsyMjg4LDYgQEAgdm9p
ZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxUeXBlLCBD
b250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVudCgp
LmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNSZW1vdmVk
KCp0aGlzKTsKIAotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1hdGlv
bigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOwotCiAjaWYgRU5BQkxFKFdIRUVMX0VWRU5UX0xB
VENISU5HKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAgIGlmIChh
dXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFtZS0+cGFnZSgpLT5zY3JvbGxMYXRj
aGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L1BzZXVkb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1lbnQuY3Bw
CmluZGV4IDE1ZDgxYzEwNmQ4MDkzNTNmMjFiZTdlYzg0ODNkZDg4Yjc2MjhiMzcuLmRhZDE1NjZj
YzA2YTNkMTRkNmJjYjdjNTA3NmVjYzE4YjZjN2E3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRv
RWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNs
dWRlICJQc2V1ZG9FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
LmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudFRpbWVsaW5l
LmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05Myw5ICs5Miw2
IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgaWYgKGF1dG8q
IHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAgICAgICAgIHRpbWVs
aW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAgICAgCi0gICAgaWYgKGF1dG8qIGZyYW1l
ID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCku
Y2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICAgICBtX2hvc3RFbGVtZW50ID0gbnVsbHB0cjsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsIGIvU291
cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCmluZGV4IGNhZGZiOTY5YjJhNGE0Y2Y5YjU4
MThkNzM0NDY2YmEzNGJlYjYyODMuLjA2ZmUxY2IyMGVhZmRlZGJiOGUxYzY3ZDZjYmNiYzY4YmZm
ZmUwMDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmlkbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKQEAgLTM0LDMgKzM0LDQgQEAKIAog
U2hhZG93Um9vdCBpbmNsdWRlcyBEb2N1bWVudE9yU2hhZG93Um9vdDsKIFNoYWRvd1Jvb3QgaW5j
bHVkZXMgSW5uZXJIVE1MOworCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0Nh
Y2hlZEZyYW1lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCmlu
ZGV4IDQ2OTg1NzRkMzI1MDVlNmY5YzVjM2ExY2JhY2FiZmViMmQwZDQxZGMuLjhkZTI2ZTFiYzE1
MzNmZDBiM2YwNzRmMDZiMWYzNGQzZTgwYjg5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2hpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkRnJhbWUuY3BwCkBAIC0yNyw3ICsyNyw2IEBACiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWUuaCIK
IAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkRnJhbWVQbGF0Zm9ybURhdGEuaCIKICNpbmNs
dWRlICJDYWNoZWRQYWdlLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93LmgiCkBAIC0yNzMsOCArMjcy
LDYgQEAgdm9pZCBDYWNoZWRGcmFtZTo6ZGVzdHJveSgpCiAKICAgICBGcmFtZTo6Y2xlYXJUaW1l
cnMobV92aWV3LmdldCgpLCBtX2RvY3VtZW50LmdldCgpKTsKIAotICAgIG1fdmlldy0+ZnJhbWUo
KS5sZWdhY3lBbmltYXRpb24oKS5kZXRhY2hGcm9tRG9jdW1lbnQobV9kb2N1bWVudC5nZXQoKSk7
Ci0KICAgICAvLyBGSVhNRTogV2h5IGRvIHdlIG5lZWQgdG8gY2FsbCByZW1vdmVBbGxFdmVudExp
c3RlbmVycyBoZXJlPyBXaGVuIHRoZSBkb2N1bWVudCBpcyBpbiBiYWNrL2ZvcndhcmQgY2FjaGUs
IHRoaXMgbWV0aG9kIHdvbid0IHdvcmsKICAgICAvLyBmdWxseSBhbnl3YXksIGJlY2F1c2UgdGhl
IGRvY3VtZW50IHdvbid0IGJlIGFibGUgdG8gYWNjZXNzIGl0cyBET01XaW5kb3cgb2JqZWN0IChk
dWUgdG8gYmVpbmcgZnJhbWVsZXNzKS4KICAgICBtX2RvY3VtZW50LT5yZW1vdmVBbGxFdmVudExp
c3RlbmVycygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAppbmRleCAzYzVhZTQ1ODU0YzcyYmRmNmZiNzM2
NWVmNWYyN2ZhYTZmZGJlNWVjLi5iZDM0OTdjMWEyMjAwMTU2NTZlMDAyMDQ1ZTRlNjE3N2MzOTM5
OGI1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcApAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkFw
cGx5U3R5bGVDb21tYW5kLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1
ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRy
b2xsZXIuaCIKICNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNs
dWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkQ1NTU3R5bGVTaGVldC5o
IgpAQCAtMTU2LDcgKzE1NSw2IEBAIEZyYW1lOjpGcmFtZShQYWdlJiBwYWdlLCBIVE1MRnJhbWVP
d25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgVW5pcXVlUmVmPEZyYW1lTG9hCiAgICAgLCBtX25h
dmlnYXRpb25TY2hlZHVsZXIobWFrZVVuaXF1ZVJlZjxOYXZpZ2F0aW9uU2NoZWR1bGVyPigqdGhp
cykpCiAgICAgLCBtX293bmVyRWxlbWVudChvd25lckVsZW1lbnQpCiAgICAgLCBtX3NjcmlwdCht
YWtlVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+KCp0aGlzKSkKLSAgICAsIG1fYW5pbWF0aW9u
Q29udHJvbGxlcihtYWtlVW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+KCp0aGlzKSkK
ICAgICAsIG1fcGFnZVpvb21GYWN0b3IocGFyZW50UGFnZVpvb21GYWN0b3IodGhpcykpCiAgICAg
LCBtX3RleHRab29tRmFjdG9yKHBhcmVudFRleHRab29tRmFjdG9yKHRoaXMpKQogICAgICwgbV9l
dmVudEhhbmRsZXIobWFrZVVuaXF1ZVJlZjxFdmVudEhhbmRsZXI+KCp0aGlzKSkKQEAgLTczNywx
MSArNzM1LDggQEAgdm9pZCBGcmFtZTo6Y2xlYXJUaW1lcnMoRnJhbWVWaWV3ICp2aWV3LCBEb2N1
bWVudCAqZG9jdW1lbnQpCiB7CiAgICAgaWYgKHZpZXcpIHsKICAgICAgICAgdmlldy0+bGF5b3V0
Q29udGV4dCgpLnVuc2NoZWR1bGVMYXlvdXQoKTsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQtPnRp
bWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRB
bmltYXRpb25zKCk7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgdmlldy0+ZnJhbWUoKS5s
ZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsK
KyAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LT50aW1lbGluZXNDb250cm9s
bGVyKCkpCisgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAg
ICAgIHZpZXctPmZyYW1lKCkuZXZlbnRIYW5kbGVyKCkuc3RvcEF1dG9zY3JvbGxUaW1lcigpOwog
ICAgIH0KIH0KQEAgLTEwMjksMTEgKzEwMjQsOCBAQCB2b2lkIEZyYW1lOjpyZXN1bWVBY3RpdmVE
T01PYmplY3RzQW5kQW5pbWF0aW9ucygpCiAKICAgICAvLyBGcmFtZTo6Y2xlYXJUaW1lcnMoKSBz
dXNwZW5kZWQgYW5pbWF0aW9ucyBhbmQgcGVuZGluZyByZWxheW91dHMuCiAKLSAgICBpZiAoUnVu
dGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IG1fZG9j
LT50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFu
aW1hdGlvbnMoKTsKLSAgICB9IGVsc2UKLSAgICAgICAgbGVnYWN5QW5pbWF0aW9uKCkucmVzdW1l
QW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZG9jLmdldCgpKTsKKyAgICBpZiAoYXV0byogdGltZWxp
bmVzID0gbV9kb2MtPnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgdGltZWxpbmVzLT5y
ZXN1bWVBbmltYXRpb25zKCk7CiAgICAgaWYgKG1fdmlldykKICAgICAgICAgbV92aWV3LT5sYXlv
dXRDb250ZXh0KCkuc2NoZWR1bGVMYXlvdXQoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaAppbmRleCA2OGZk
YzExNTVkOTEzZWVjZjI1NzA2YWQ5ODg5YjUwMjFmYWJmMmM0Li41MGM2NWY1ZTViMDc1M2MxZTZk
MzA3YjIxM2I1MjAwYzQ1MGFhMzBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCkBAIC02Niw3ICs2Niw2IEBA
IGNsYXNzIFRleHRTdHJlYW07CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotY2xhc3MgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlcjsKIGNsYXNzIENvbG9yOwogY2xhc3MgRE9NV2luZG93OwogY2xhc3Mg
RG9jdW1lbnQ7CkBAIC0xNzQsOCArMTczLDYgQEAgcHVibGljOgogICAgIEZyYW1lU2VsZWN0aW9u
JiBzZWxlY3Rpb24oKSB7IHJldHVybiBkb2N1bWVudCgpLT5zZWxlY3Rpb24oKTsgfQogICAgIGNv
bnN0IEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24oKSBjb25zdCB7IHJldHVybiBkb2N1bWVudCgp
LT5zZWxlY3Rpb24oKTsgfQogICAgIEZyYW1lVHJlZSYgdHJlZSgpIGNvbnN0OwotICAgIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIHsgcmV0dXJuIG1fYW5pbWF0aW9u
Q29udHJvbGxlcjsgfQotICAgIGNvbnN0IENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFu
aW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQogICAgIFNj
cmlwdENvbnRyb2xsZXImIHNjcmlwdCgpIHsgcmV0dXJuIG1fc2NyaXB0OyB9CiAgICAgY29uc3Qg
U2NyaXB0Q29udHJvbGxlciYgc2NyaXB0KCkgY29uc3QgeyByZXR1cm4gbV9zY3JpcHQ7IH0KIApA
QCAtMzQ1LDcgKzM0Miw2IEBAIHByaXZhdGU6CiAgICAgUmVmUHRyPERvY3VtZW50PiBtX2RvYzsK
IAogICAgIFVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPiBtX3NjcmlwdDsKLSAgICBVbmlxdWVS
ZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4gbV9hbmltYXRpb25Db250cm9sbGVyOwogCiAjaWYg
RU5BQkxFKERBVEFfREVURUNUSU9OKQogICAgIFJldGFpblB0cjxOU0FycmF5PiBtX2RhdGFEZXRl
Y3Rpb25SZXN1bHRzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCmluZGV4IDc1YjllMmJmYzll
YWUzZTM1YmVlMThmZWJkNDkxZjQwZjM2N2M2MTYuLmQ0OTI0MWVmMDg4YjgzNzYyNTYwOWQyYzY1
YWJmMjgzNGRhNDE4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKQEAgLTMwLDcgKzMw
LDYgQEAKICNpbmNsdWRlICJBWE9iamVjdENhY2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRD
YWNoZS5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgotI2luY2x1ZGUgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1
ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVyLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01ODYs
OCArNTg1LDYgQEAgdm9pZCBGcmFtZVZpZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKCkKIAogICAg
IEFTU0VSVCghbV92aWV3cG9ydENvbnN0cmFpbmVkT2JqZWN0cyB8fCBtX3ZpZXdwb3J0Q29uc3Ry
YWluZWRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkpOwogICAgIEFTU0VSVCghbV9zbG93UmVwYWlu
dE9iamVjdHMgfHwgbV9zbG93UmVwYWludE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7Ci0KLSAg
ICBBU1NFUlQoIWZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuaGFzQW5pbWF0aW9ucygpKTsKIH0K
IAogdm9pZCBGcmFtZVZpZXc6OnNldENvbnRlbnRzU2l6ZShjb25zdCBJbnRTaXplJiBzaXplKQpA
QCAtNDQxNyw4ICs0NDE0LDYgQEAgdm9pZCBGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxl
SWZOZWVkZWRSZWN1cnNpdmUoKQogICAgIC8vIFN0eWxlIHVwZGF0ZXMgY2FuIHRyaWdnZXIgc2Ny
aXB0LCB3aGljaCBjYW4gY2F1c2UgdGhpcyBGcmFtZVZpZXcgdG8gYmUgZGVzdHJveWVkLgogICAg
IFJlZjxGcmFtZVZpZXc+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwogCi0gICAgQW5pbWF0aW9uVXBk
YXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkp
OwotCiAgICAgdXNpbmcgRGVzY2VuZGFudHNEZXF1ZSA9IERlcXVlPFJlZjxGcmFtZVZpZXc+LCAx
Nj47CiAgICAgYXV0byBuZXh0UmVuZGVyZWREZXNjZW5kYW50ID0gW3RoaXNdIChEZXNjZW5kYW50
c0RlcXVlJiBkZXNjZW5kYW50c0RlcXVlKSAtPiBSZWZQdHI8RnJhbWVWaWV3PiB7CiAgICAgICAg
IGlmIChkZXNjZW5kYW50c0RlcXVlLmlzRW1wdHkoKSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwCmluZGV4IDBjOGJlNzk0OTUxYjc4ZTE5Yjc1OTI4
ODViYmY4MzVlYjFjOTUzYjEuLjlmYTUxNzBmYTE1MTVmM2FmYjY3Y2YzMTA3ZDk4Y2ZiOTVlYjJk
NTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNw
cApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkZyYW1l
Vmlld0xheW91dENvbnRleHQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJEZWJ1Z1BhZ2VPdmVybGF5cy5oIgogI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CiAjaW5jbHVkZSAiRnJhbWVWaWV3LmgiCkBAIC0yMDQsNyArMjAzLDYgQEAgdm9pZCBGcmFtZVZp
ZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQoKQogICAgIExheW91dFNjb3BlIGxheW91dFNjb3BlKCp0
aGlzKTsKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShMYXlvdXRTdGFydCwgTGF5b3V0RW5k
KTsKICAgICBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb246OndpbGxMYXlvdXQodmlldygpLmZyYW1l
KCkpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZ2aWV3
KCkuZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7CiAgICAgV2Vha1B0cjxSZW5kZXJFbGVtZW50
PiBsYXlvdXRSb290OwogICAgIAogICAgIG1fbGF5b3V0VGltZXIuc3RvcCgpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFn
ZS5jcHAKaW5kZXggYTBhNzdkMjg4MzY0ODIxYzUxMGIyZDUxMmJhNzBlNzI5YzIxYjZkNS4uZjky
M2JhODkyOTljMDA4ZTEwZjBkMjhlZTgwYTNmM2Y5N2JhYTk4NiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9QYWdlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3Bw
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgogI2luY2x1
ZGUgIkJhY2tGb3J3YXJkQ2xpZW50LmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hl
U3RvcmFnZVByb3ZpZGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNp
bmNsdWRlICJDaHJvbWUuaCIKQEAgLTE2NDgsOSArMTY0Nyw2IEBAIHZvaWQgUGFnZTo6aGFuZGxl
TG93TW9kZVBvd2VyQ2hhbmdlKGJvb2wgaXNMb3dQb3dlck1vZGVFbmFibGVkKQogICAgIG1fdGhy
b3R0bGluZ1JlYXNvbnMgPSBtX3Rocm90dGxpbmdSZWFzb25zIF4gVGhyb3R0bGluZ1JlYXNvbjo6
TG93UG93ZXJNb2RlOwogICAgIHJlbmRlcmluZ1VwZGF0ZVNjaGVkdWxlcigpLmFkanVzdFJlbmRl
cmluZ1VwZGF0ZUZyZXF1ZW5jeSgpOwogCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkK
LSAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0
YXRlKCk7Ci0KICAgICB1cGRhdGVET01UaW1lckFsaWdubWVudEludGVydmFsKCk7CiB9CiAKQEAg
LTIxODUsMTMgKzIxODEsMTAgQEAgdm9pZCBQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29s
IGlzVmlzaWJsZSkKICAgICAgICAgICAgIHZpZXctPnNob3coKTsKIAogICAgICAgICBpZiAobV9z
ZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpIHsKLSAg
ICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgICAgIGZv
ckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsK
LSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAg
IG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICAg
ICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAg
ICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xs
ZXIoKSkKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRpb25zKCk7
CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvckVhY2hEb2N1bWVudChb
XSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0yMjA5LDEzICsyMjAyLDEwIEBAIHZvaWQgUGFn
ZTo6c2V0SXNWaXNpYmxlSW50ZXJuYWwoYm9vbCBpc1Zpc2libGUpCiAKICAgICBpZiAoIWlzVmlz
aWJsZSkgewogICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1
c3BlbnNpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkgewotICAgICAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3Vt
ZW50KSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVu
dC50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGlu
ZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAg
ICB9IGVsc2UKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5z
dXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1
bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0g
ZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICAgICAgICAgICAgICB0aW1l
bGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICB9KTsKICAgICAgICAgfQog
CiAgICAgICAgIGZvckVhY2hEb2N1bWVudChbXSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CkBAIC0y
NTYwLDIxICsyNTUwLDE0IEBAIHZvaWQgUGFnZTo6cmVzZXRTZWVuTWVkaWFFbmdpbmVzKCkKIHZv
aWQgUGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25TdGF0ZUNoYW5nZWQoKQog
ewogICAgIGlmICghaXNWaXNpYmxlKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGlt
ZWxpbmVzQ29udHJvbGxlcigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChtX3NldHRpbmdz
LT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVB
bmltYXRpb25zKCk7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1h
dGlvblN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVn
YWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgIGVsc2UKLSAg
ICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgICAgIH0KKyAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7CisgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQu
dGltZWxpbmVzQ29udHJvbGxlcigpKSB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3Mt
PmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQorICAgICAgICAgICAg
ICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSk7CiAgICAgfQogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oCmluZGV4IDA4NDNlZDc2MGNkZWM3M2E5Y2Ix
YWZmN2RhMjljY2E0MDI0YTZhNDMuLmU2NGIyZTYxOWIxYWQ0MDFlY2U5OGM3ZWE4NDA5ZWY1YTk5
NmFhZmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5o
CkBAIC03MCwxMiArNzAsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRJc1NlY3VyZUNvbnRleHRB
dHRyaWJ1dGVFbmFibGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNTZWN1cmVDb250ZXh0QXR0cmli
dXRlRW5hYmxlZCA9IGlzRW5hYmxlZDsgfQogICAgIGJvb2wgaXNTZWN1cmVDb250ZXh0QXR0cmli
dXRlRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNTZWN1cmVDb250ZXh0QXR0cmlidXRlRW5h
YmxlZDsgfQogCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGFyZUVuYWJs
ZWQpIHsgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KLSAgICBib29s
IHdlYkFuaW1hdGlvbnNFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25z
RW5hYmxlZDsgfQotCi0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKGJvb2wgaXNFbmFibGVkKSB7IG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkID0gaXNFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCAmJiBtX2lz
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDsgfQotCiAgICAgdm9pZCBzZXRXZWJB
bmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7IG1f
YXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkID0gYXJlRW5hYmxlZDsg
fQogICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKCkgY29u
c3QgeyByZXR1cm4gbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7
IH0KIApAQCAtMzAwLDggKzI5NCw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2lzTWVudUl0ZW1F
bGVtZW50RW5hYmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzRGlyZWN0b3J5VXBsb2FkRW5h
YmxlZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzQ3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVk
IHsgZmFsc2UgfTsKLSAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgeyB0cnVlIH07
Ci0gICAgYm9vbCBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCB7IHRydWUg
fTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVk
IHsgZmFsc2UgfTsKICAgICBib29sIG1fYXJlV2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNF
bmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNJbWFnZUJpdG1hcEVuYWJsZWQgeyB0cnVl
IH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25C
YXNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlZGFlNzQzNTk3N2ZhOTI1MGVjMTBjMTcz
OTQxNWRlNGNkNGY1NTNhLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwCisr
KyAvZGV2L251bGwKQEAgLTEsNzg4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcs
IDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBu
b3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBl
bmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0
d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgot
I2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5o
IgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCi0j
aW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5j
bHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlICJS
ZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPHd0Zi9SZWYuaD4K
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1BbmltYXRpb25CYXNlOjpBbmltYXRpb25CYXNlKGNv
bnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmlt
YXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICA6IG1fZWxlbWVudCgmZWxlbWVudCkKLSAg
ICAsIG1fY29tcG9zaXRlQW5pbWF0aW9uKCZjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2Fu
aW1hdGlvbihjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbikpCi17Ci0gICAgLy8gQ29t
cHV0ZSB0aGUgdG90YWwgZHVyYXRpb24KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCkgPiAwKQotICAgICAgICBtX3RvdGFsRHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotfQotCi1BbmltYXRpb25CYXNl
Ojp+QW5pbWF0aW9uQmFzZSgpID0gZGVmYXVsdDsKLQotY29uc3QgUmVuZGVyU3R5bGUmIEFuaW1h
dGlvbkJhc2U6OmN1cnJlbnRTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVy
ID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdHlsZSgpOwot
ICAgIHJldHVybiB1bmFuaW1hdGVkU3R5bGUoKTsKLX0KLQotUmVuZGVyRWxlbWVudCogQW5pbWF0
aW9uQmFzZTo6cmVuZGVyZXIoKSBjb25zdAotewotICAgIHJldHVybiBtX2VsZW1lbnQgPyBtX2Vs
ZW1lbnQtPnJlbmRlcmVyKCkgOiBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmNs
ZWFyKCkKLXsKLSAgICBlbmRBbmltYXRpb24oKTsKLSAgICBtX2VsZW1lbnQgPSBudWxscHRyOwot
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uID0gbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRpb25C
YXNlOjpzZXROZWVkc1N0eWxlUmVjYWxjKEVsZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFl
bGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkp
Ci0gICAgICAgIHJldHVybjsKLQotICAgIEFTU0VSVChlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tG
b3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwot
ICAgIGVsZW1lbnQtPmludmFsaWRhdGVTdHlsZSgpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFz
ZTo6ZHVyYXRpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+ZHVyYXRpb24o
KTsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpwbGF5U3RhdGVQbGF5aW5nKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0
ZTo6UGxheWluZzsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjphbmltYXRpb25zTWF0Y2goY29u
c3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9u
LT5hbmltYXRpb25zTWF0Y2goYW5pbWF0aW9uKTsKLX0KLQotI2lmICFMT0dfRElTQUJMRUQKLXN0
YXRpYyBjb25zdCBjaGFyKiBuYW1lRm9yU3RhdGUoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3Rh
dGUgc3RhdGUpCi17Ci0gICAgc3dpdGNoIChzdGF0ZSkgewotICAgIGNhc2UgQW5pbWF0aW9uQmFz
ZTo6QW5pbWF0aW9uU3RhdGU6Ok5ldzogcmV0dXJuICJOZXciOwotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyOiByZXR1cm4gIlN0YXJ0V2FpdFRp
bWVyIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRT
dHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U6IHJldHVy
biAiU3RhcnRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGU6Okxvb3Bpbmc6IHJldHVybiAiTG9vcGluZyI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNl
OjpBbmltYXRpb25TdGF0ZTo6RW5kaW5nOiByZXR1cm4gIkVuZGluZyI7Ci0gICAgY2FzZSBBbmlt
YXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OiByZXR1cm4gIlBhdXNlZE5ldyI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVy
OiByZXR1cm4gIlBhdXNlZFdhaXRUaW1lciI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlBhdXNlZFdhaXRT
dHlsZUF2YWlsYWJsZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6
UGF1c2VkV2FpdFJlc3BvbnNlOiByZXR1cm4gIlBhdXNlZFdhaXRSZXNwb25zZSI7Ci0gICAgY2Fz
ZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOiByZXR1cm4gIlBhdXNl
ZFJ1biI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RG9uZTogcmV0
dXJuICJEb25lIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpGaWxs
aW5nRm9yd2FyZHM6IHJldHVybiAiRmlsbGluZ0ZvcndhcmRzIjsKLSAgICB9Ci0gICAgcmV0dXJu
ICIiOwotfQotI2VuZGlmCi0KLSNpZiAhRVJST1JfRElTQUJMRUQKLXN0YXRpYyBjb25zdCBjaGFy
KiBuYW1lRm9yU3RhdGVJbnB1dChBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0IGlu
cHV0KQotewotICAgIHN3aXRjaCAoaW5wdXQpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXc6IHJldHVybiAiTWFrZU5ldyI7Ci0gICAgY2FzZSBB
bmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbjogcmV0dXJu
ICJTdGFydEFuaW1hdGlvbiI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uOiByZXR1cm4gIlJlc3RhcnRBbmltYXRpb24iOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lckZpcmVk
OiByZXR1cm4gIlN0YXJ0VGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJTdHlsZUF2YWlsYWJsZSI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVT
ZXQ6IHJldHVybiAiU3RhcnRUaW1lU2V0IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkOiByZXR1cm4gIkxvb3BUaW1lckZpcmVkIjsK
LSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmly
ZWQ6IHJldHVybiAiRW5kVGltZXJGaXJlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlOiByZXR1cm4gIlBhdXNlT3ZlcnJpZGUiOwot
ICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJp
ZGU6IHJldHVybiAiUmVzdW1lT3ZlcnJpZGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5p
bWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZzogcmV0dXJuICJQbGF5U3RhdGVSdW5u
aW5nIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlT
dGF0ZVBhdXNlZDogcmV0dXJuICJQbGF5U3RhdGVQYXVzZWQiOwotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uOiByZXR1cm4gIkVuZEFuaW1h
dGlvbiI7Ci0gICAgfQotICAgIHJldHVybiAiIjsKLX0KLSNlbmRpZgotCi12b2lkIEFuaW1hdGlv
bkJhc2U6OnVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0IGlucHV0LCBkb3Vi
bGUgcGFyYW0pCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0
dXJuOwotCi0gICAgLy8gSWYgd2UgZ2V0IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmlt
YXRpb24gdGhlbiB3ZSBmb3JjZSBhIG5ldyBhbmltYXRpb24sIHJlZ2FyZGxlc3Mgb2Ygc3RhdGUu
Ci0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Ok1ha2VOZXcpIHsKLSAgICAg
ICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0g
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3IiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRUaW1lID0gV1RGOjpu
dWxsb3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgbV9y
ZXF1ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9
IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFu
aW1hdGlvbikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0
ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1h
dGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlKCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBOZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgbV9z
dGFydFRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxs
b3B0OwotICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4dEl0
ZXJhdGlvbkR1cmF0aW9uID0gV1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24oKTsK
LQotICAgICAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5p
bWF0aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IERvbmUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAgIGVu
ZEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ID09
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fYW5p
bWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlKSB7Ci0gICAg
ICAgICAgICAvLyBJZiB3ZSBhcmUgaW4gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNl
LCB0aGUgYW5pbWF0aW9uIHdpbGwgZ2V0IGNhbmNlbGVkIGJlZm9yZSAKLSAgICAgICAgICAgIC8v
IHdlIGdldCBhIHJlc3BvbnNlLCBzbyBtb3ZlIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAg
ICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0
aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7
Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBB
bmltYXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSkgewotICAgICAgICBpZiAobV9hbmlt
YXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyB8fCBtX2FuaW1hdGlvblN0YXRl
ID09IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpIHsKLSAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBh
bmltYXRpb24KLSAgICAgICAgICAgIHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRl
VGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0
dXJuOwotICAgIH0KLQotICAgIC8vIEV4ZWN1dGUgc3RhdGUgbWFjaGluZQotICAgIHN3aXRjaCAo
bV9hbmltYXRpb25TdGF0ZSkgewotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpOZXc6Ci0g
ICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmlt
YXRpb24gfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8
fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0gICAg
ICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24g
fHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZykgewotICAg
ICAgICAgICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBTdGFydFdhaXRUaW1lciIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0
YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
Ly8gV2UgYXJlIHBhdXNpbmcgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZC4KLSAgICAgICAgICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWROZXciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAg
ICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3
OwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6
OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFy
YW0gPj0gMCk7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGltZXIgaGFzIGZpcmVkLCB0ZWxs
IHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0IHRvIHJlc3BvbmQgd2l0aCBz
dGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25T
dGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAodGltZSBpcyAlZikiLCB0aGlzLCBu
YW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBt
X2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxl
OwotICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLQotICAgICAgICAg
ICAgICAgIC8vIFRyaWdnZXIgYSByZW5kZXIgc28gd2UgY2FuIHN0YXJ0IHRoZSBhbmltYXRpb24K
LSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAgICAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEVsZW1lbnRDaGFuZ2VU
b0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
ICAgICBBU1NFUlQoIXBhdXNlZCgpKTsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5n
IGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSBhbmQgd2UgZ290IGEgcGF1c2UuIENhbmNlbCB0
aGUgdGltZXIsIHBhdXNlIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRUaW1lciIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25T
dGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3R5bGVBdmFpbGFibGUgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgLy8gU3RhcnQgdGlt
ZXIgaGFzIGZpcmVkLCB0ZWxsIHRoZSBhbmltYXRpb24gdG8gc3RhcnQgYW5kIHdhaXQgZm9yIGl0
IHRvIHJlc3BvbmQgd2l0aCBzdGFydCB0aW1lCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSAodGltZSBpcyAl
ZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAg
ICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJl
c3BvbnNlOwotCi0gICAgICAgICAgICAgICAgb3ZlcnJpZGVBbmltYXRpb25zKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG92
ZXJyaWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3b24ndCB0cnkgdG8gc3Rh
cnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJpZGRlbiBhbmQKLSAgICAg
ICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRvIHRoZSBuZXh0IHN0YXRlLgotICAgICAg
ICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0
YXJ0V2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsK
LSAgICAgICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0g
ZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAg
ICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICBkb3VibGUgdGltZU9m
ZnNldCA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoZSB2YWx1ZSBmb3IgJ2FuaW1h
dGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0aW9uIGFwcGVhcnMgdG8gaGF2
ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRp
b24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZU9mZnNldCA9IC1t
X2FuaW1hdGlvbi0+ZGVsYXkoKTsKLSAgICAgICAgICAgICAgICAgICAgYm9vbCBzdGFydGVkID0g
c3RhcnRBbmltYXRpb24odGltZU9mZnNldCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgbV9jb21w
b3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0
aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAgICAg
ICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3IgdGhl
IHN0eWxlIHRvIGJlIGF2YWlsYWJsZSBhbmQgd2UgZ290IGEgcGF1c2UuIFBhdXNlIGFuZCB3YWl0
Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVz
IC0+IFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1h
dGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9u
c2U6Ci0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3Rh
cnRUaW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNl
ZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFy
dFRpbWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPiAtMC4wMDEpOyAvLyBT
b21ldGltZXMgQ29yZSBBbmltYXRpb24gZ2l2ZXMgdXMgYSBiZWdpblRpbWUgc2xpZ2h0bHkgaW50
byB0aGUgZnV0dXJlLgotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0
aW9uU3RhdGUgJXMgLT4gU3RhcnRUaW1lU2V0ICh0aW1lIGlzICVmKSIsIHRoaXMsIG5hbWVGb3JT
dGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8gV2Ug
aGF2ZSBhIHN0YXJ0IHRpbWUsIHNldCBpdCwgdW5sZXNzIHRoZSBzdGFydFRpbWUgaXMgYWxyZWFk
eSBzZXQKLSAgICAgICAgICAgICAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRo
ZSB2YWx1ZSBmb3IgJ2FuaW1hdGlvbi1kZWxheScgaXMgbmVnYXRpdmUgdGhlbiB0aGUgYW5pbWF0
aW9uIGFwcGVhcnMgdG8gaGF2ZSBzdGFydGVkIGluIHRoZSBwYXN0LgotICAgICAgICAgICAgICAg
ICAgICBpZiAobV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKQotICAgICAgICAgICAgICAgICAgICAg
ICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZSgpICsgbV9hbmltYXRpb24tPmRlbGF5
KCk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gTm93IHRoYXQgd2Ug
a25vdyB0aGUgc3RhcnQgdGltZSwgZmlyZSB0aGUgc3RhcnQgZXZlbnQuCi0gICAgICAgICAgICAg
ICAgb25BbmltYXRpb25TdGFydCgwKTsgLy8gVGhlIGVsYXBzZWRUaW1lIGlzIDAuCi0KLSAgICAg
ICAgICAgICAgICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5n
IHN0YXRlCi0gICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLQot
ICAgICAgICAgICAgICAgIC8vIERpc3BhdGNoIHVwZGF0ZVN0eWxlSWZOZWVkZWQgc28gd2UgY2Fu
IHN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAg
ICAgICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxl
cigpLmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSB3YWl0aW5n
IGZvciBhIHN0YXJ0IHJlc3BvbnNlLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdC4gV2hl
biAKLSAgICAgICAgICAgICAgICAvLyB3ZSB1bnBhdXNlLCB3ZSB3aWxsIGFjdCBhcyB0aG91Z2gg
dGhlIHN0YXJ0IHRpbWVyIGp1c3QgZmlyZWQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9
IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNlQW5pbWF0
aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7
Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAt
PiBQYXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0
ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6
UGF1c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmc6Ci0gICAgICAgICAgICBBU1NFUlQo
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQgfHwgaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYg
KGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkKSB7Ci0gICAgICAg
ICAgICAgICAgQVNTRVJUKHBhcmFtID49IDApOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRp
b25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTG9vcFRpbWVyRmlyZWQgKHRpbWUgaXMgJWYp
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBMb29wIHRpbWVyIGZpcmVkLCBsb29wIGFnYWluIG9yIGVuZC4KLSAgICAg
ICAgICAgICAgICBvbkFuaW1hdGlvbkl0ZXJhdGlvbihwYXJhbSk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBEZWNpZGUgd2hldGhlciB0byBnbyBpbnRvIGxvb3Bpbmcgb3IgZW5kaW5nIHN0YXRlCi0g
ICAgICAgICAgICAgICAgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUoKTsKLSAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgcnVubmlu
Zy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3BhdXNl
VGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIHBhdXNl
QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFydFRpbWUudmFsdWVP
cigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0
ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QW5pbWF0aW9uU3RhdGU6OkVuZGluZzoKLSNpZiAhRVJST1JfRElTQUJMRUQKLSAgICAgICAgICAg
IGlmIChpbnB1dCAhPSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkICYmIGlucHV0
ICE9IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAgICAg
ICBMT0dfRVJST1IoIlN0YXRlIGlzIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcsIGJ1dCBpbnB1dCBp
cyBub3QgQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCBvciBBbmltYXRpb25TdGF0
ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQuIEl0IGlzICVzLiIsIG5hbWVGb3JTdGF0ZUlucHV0KGlu
cHV0KSk7Ci0jZW5kaWYKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpFbmRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49IDAp
OwotICAgICAgICAgICAgICAgIC8vIEVuZCB0aW1lciBmaXJlZCwgZmluaXNoIHVwCi0gICAgICAg
ICAgICAgICAgb25BbmltYXRpb25FbmQocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBEb25lICh0aW1lIGlzICVmKSIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJkcygpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEZpbGxpbmdG
b3J3YXJkcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkZpbGxp
bmdGb3J3YXJkczsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
ICAgICAgICByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAgICAgICAg
ICAgIC8vIEZpcmUgb2ZmIGFub3RoZXIgc3R5bGUgY2hhbmdlIHNvIHdlIGNhbiBzZXQgdGhlIGZp
bmFsIHZhbHVlCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKCptX2VsZW1lbnQpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNp
bmcgd2hpbGUgcnVubmluZy4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQKLSAgICAgICAg
ICAgICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAg
ICAgICAgICAgIHBhdXNlQW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9z
dGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIl
cCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4iLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9h
bmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkUnVuOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgLy8gfHRo
aXN8IG1heSBiZSBkZWxldGVkIGhlcmUKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6Ci0gICAgICAgICAgICBBU1NFUlQoaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyk7Ci0gICAgICAgICAg
ICBBU1NFUlQocGF1c2VkKCkpOwotICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwotICAg
ICAgICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApICsgYmVnaW5Bbmlt
YXRpb25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1ZU9yKDApOwotICAgICAgICAgICAg
bV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0KLSAgICAgICAgICAgIC8vIHdlIHdlcmUgd2Fp
dGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUsIGdvIGJhY2sgYW5kIHdhaXQgYWdhaW4K
LSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gTmV3
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAwKTsKLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc6
Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZToKLSAgICAg
ICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOgotICAgICAg
ICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46Ci0gICAgICAgICAgICAvLyBXZSB0cmVh
dCB0aGVzZSB0d28gY2FzZXMgdGhlIHNhbWUuIFRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhhdCwg
d2hlbiB3ZSBhcmUgaW4KLSAgICAgICAgICAgIC8vIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0
UmVzcG9uc2UsIHdlIGRvbid0IHlldCBoYXZlIGEgdmFsaWQgc3RhcnRUaW1lLCBzbyB3ZSBzZW5k
IDAgdG8gc3RhcnRBbmltYXRpb24uCi0gICAgICAgICAgICAvLyBXaGVuIHRoZSBBbmltYXRpb25T
dGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgY29tZXMgaW4gYW5kIHdlIHdlcmUgaW4gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFJ1biwgd2Ugd2lsbCBub3RpY2UKLSAgICAgICAgICAgIC8vIHRoYXQgd2Ug
aGF2ZSBhbHJlYWR5IHNldCB0aGUgc3RhcnRUaW1lIGFuZCB3aWxsIGlnbm9yZSBpdC4KLSAgICAg
ICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVz
ZWQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUnVubmluZyB8fCBp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQgfHwgaW5wdXQgPT0gQW5p
bWF0aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpOwotICAgICAgICAgICAgQVNTRVJUKHBh
dXNlZCgpKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6
OlBsYXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0
ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3KSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdlcmUgcGF1c2VkIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQsIGFuZCBub3cgd2UncmUgc3Vw
cG9zZWQKLSAgICAgICAgICAgICAgICAgICAgLy8gdG8gc3RhcnQsIHNvIGp1bXAgYmFjayB0byB0
aGUgTmV3IHN0YXRlIGFuZCByZXNldC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6TmV3IiwgdGhpcywg
bmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAgICAgbV9h
bmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICAgICAgICAg
IG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoaW5wdXQsIHBhcmFtKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gVXBkYXRlIHRoZSB0aW1lcwot
ICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRSdW4pCi0gICAgICAgICAgICAgICAgICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWUu
dmFsdWVPcigwKSArIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUudmFs
dWVPcigwKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgIG1fc3Rh
cnRUaW1lID0gMDsKLQotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0
OwotCi0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxh
YmxlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZTsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAg
ICAvLyBXZSB3ZXJlIGVpdGhlciBydW5uaW5nIG9yIHdhaXRpbmcgZm9yIGEgYmVnaW4gdGltZSBy
ZXNwb25zZSBmcm9tIHRoZSBhbmltYXRpb24uCi0gICAgICAgICAgICAgICAgICAgIC8vIEVpdGhl
ciB3YXkgd2UgbmVlZCB0byByZXN0YXJ0IHRoZSBhbmltYXRpb24gKHBvc3NpYmx5IHdpdGggYW4g
b2Zmc2V0IGlmIHdlCi0gICAgICAgICAgICAgICAgICAgIC8vIGhhZCBhbHJlYWR5IGJlZW4gcnVu
bmluZykgYW5kIHdhaXQgZm9yIGl0IHRvIHN0YXJ0LgotICAgICAgICAgICAgICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICAg
ICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsK
LQotICAgICAgICAgICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChvdmVycmlkZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8v
IFdlIHdvbid0IHRyeSB0byBzdGFydCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFyZSBv
dmVycmlkZGVuIGFuZAotICAgICAgICAgICAgICAgICAgICAgICAgLy8ganVzdCBtb3ZlIG9uIHRv
IHRoZSBuZXh0IHN0YXRlLgotICAgICAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNo
aW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lKCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9pc0FjY2VsZXJhdGVkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IGJvb2wgc3RhcnRlZCA9IHN0YXJ0QW5pbWF0aW9uKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
IC0gbV9zdGFydFRpbWUudmFsdWVPcigwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dh
aXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBzdGFydGVkOwotICAgICAgICAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lU2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fYW5pbWF0
aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZSk7Ci0gICAgICAg
ICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2UgZ290IHRo
ZSBjYWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9u
IHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgLy8gV2UgaWdub3JlIHRoZSBzdGFydCB0aW1lIGFu
ZCBqdXN0IG1vdmUgaW50byB0aGUgcGF1c2VkLXJ1biBzdGF0ZS4KLSAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biAodGltZSBp
cyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1
bjsKLSAgICAgICAgICAgICAgICBBU1NFUlQoIW1fc3RhcnRUaW1lKTsKLSAgICAgICAgICAgICAg
ICBtX3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gbV9w
YXVzZVRpbWUudmFsdWVPcigwKSArIHBhcmFtOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBBU1NFUlQobV9hbmltYXRpb25TdGF0ZSA9PSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkTmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9
PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAgICAg
YnJlYWs7Ci0KLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0
OjpTdHlsZUF2YWlsYWJsZSk7Ci0KLSAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0IHdl
IGdvdCB0aGUgY2FsbGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IHN0eWxlIGhhcyBiZWVuIHVw
ZGF0ZWQuCi0gICAgICAgICAgICAvLyBXZSBtb3ZlIHRvIHRoZSBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkV2FpdFJlc3BvbnNlIHN0YXRlCi0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFu
aW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0
ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5p
bWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIG92ZXJyaWRlQW5p
bWF0aW9ucygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3Rh
dGU6OkZpbGxpbmdGb3J3YXJkczoKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6RG9uZToK
LSAgICAgICAgICAgIC8vIFdlJ3JlIGRvbmUuIFN0YXkgaW4gdGhpcyBzdGF0ZSB1bnRpbCB3ZSBh
cmUgZGVsZXRlZAotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlv
bkJhc2U6OmZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpCi17Ci0gICAgaWYgKCFtX2NvbXBv
c2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRp
bmcgZm9yIHRoZSBkZWxheSB0aW1lIHRvIGV4cGlyZSBhbmQgaXQgaGFzLCBnbyB0byB0aGUgbmV4
dCBzdGF0ZQotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRUaW1lciAmJiBtX2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpMb29waW5n
ICYmIG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gV2UgaGF2ZSB0byBtYWtlIHN1cmUgdG8ga2VlcCBhIHJlZiB0byB0
aGUgdGhpcyBwb2ludGVyLCBiZWNhdXNlIGl0IGNvdWxkIGdldCBkZXN0cm95ZWQKLSAgICAvLyBk
dXJpbmcgYW4gYW5pbWF0aW9uIGNhbGxiYWNrIHRoYXQgbWlnaHQgZ2V0IGNhbGxlZC4gU2luY2Ug
dGhlIG93bmVyIGlzIGEgQ29tcG9zaXRlQW5pbWF0aW9uCi0gICAgLy8gYW5kIGl0IHJlZiBjb3Vu
dHMgdGhpcyBvYmplY3QsIHdlIHdpbGwga2VlcCBhIHJlZiB0byB0aGF0IGluc3RlYWQuIFRoYXQg
d2F5IHRoZSBBbmltYXRpb25CYXNlCi0gICAgLy8gY2FuIHN0aWxsIGFjY2VzcyB0aGUgcmVzb3Vy
Y2VzIG9mIGl0cyBDb21wb3NpdGVBbmltYXRpb24gYXMgbmVlZGVkLgotICAgIFJlZjxBbmltYXRp
b25CYXNlPiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKLSAgICBSZWY8Q29tcG9zaXRlQW5pbWF0aW9u
PiBwcm90ZWN0Q29tcG9zaXRlQW5pbWF0aW9uKCptX2NvbXBvc2l0ZUFuaW1hdGlvbik7Ci0gICAg
Ci0gICAgLy8gQ2hlY2sgZm9yIHN0YXJ0IHRpbWVvdXQKLSAgICBpZiAobV9hbmltYXRpb25TdGF0
ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIpIHsKLSAgICAgICAgaWYgKGJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPj0gbV9hbmltYXRp
b24tPmRlbGF5KCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3RhcnRUaW1lckZpcmVkLCAwKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQot
ICAgIGRvdWJsZSBlbGFwc2VkRHVyYXRpb24gPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAt
IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCk7Ci0KLSAgICAvLyBGSVhNRTogd2UgbmVlZCB0byBlbnN1
cmUgdGhhdCBlbGFwc2VkRHVyYXRpb24gaXMgbmV2ZXIgPCAwLiBJZiBpdCBpcywgdGhpcyBzdWdn
ZXN0cyB0aGF0Ci0gICAgLy8gd2UgaGFkIGEgcmVjYWxjU3R5bGUoKSBvdXRzaWRlIG9mIGJlZ2lu
QW5pbWF0aW9uVXBkYXRlKCkvZW5kQW5pbWF0aW9uVXBkYXRlKCkuCi0gICAgLy8gQWxzbyBjaGVj
ayBpbiBnZXRUaW1lVG9OZXh0RXZlbnQoKS4KLSAgICBlbGFwc2VkRHVyYXRpb24gPSBzdGQ6Om1h
eChlbGFwc2VkRHVyYXRpb24sIDAuMCk7Ci0gICAgCi0gICAgLy8gQ2hlY2sgZm9yIGVuZCB0aW1l
b3V0Ci0gICAgaWYgKG1fdG90YWxEdXJhdGlvbiAmJiBlbGFwc2VkRHVyYXRpb24gPj0gbV90b3Rh
bER1cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgbWF5IHN0aWxsIGJlIGluIEFuaW1h
dGlvblN0YXRlOjpMb29waW5nIGlmIHdlJ3ZlIG1hbmFnZWQgdG8gc2tpcCBhCi0gICAgICAgIC8v
IHdob2xlIGl0ZXJhdGlvbiwgaW4gd2hpY2ggY2FzZSB3ZSBzaG91bGQganVtcCB0byB0aGUgZW5k
IHN0YXRlLgotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IEVuZGluZyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAg
IG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nOwotCi0gICAgICAgIC8v
IEZpcmUgYW4gZW5kIGV2ZW50Ci0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkLCBtX3RvdGFsRHVyYXRpb24udmFsdWUoKSk7Ci0gICAg
fSBlbHNlIHsKLSAgICAgICAgLy8gQ2hlY2sgZm9yIGl0ZXJhdGlvbiB0aW1lb3V0Ci0gICAgICAg
IGlmICghbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAgICAgICAgIC8vIEhhc24ndCBi
ZWVuIHNldCB5ZXQsIHNldCBpdAotICAgICAgICAgICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1f
YW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVyYXRpb24sIG1fYW5pbWF0aW9u
LT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxh
cHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAg
ICBpZiAoZWxhcHNlZER1cmF0aW9uID49IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0gICAg
ICAgICAgICAvLyBTZXQgdG8gdGhlIG5leHQgaXRlcmF0aW9uCi0gICAgICAgICAgICBkb3VibGUg
cHJldmlvdXMgPSBtX25leHRJdGVyYXRpb25EdXJhdGlvbi52YWx1ZSgpOwotICAgICAgICAgICAg
ZG91YmxlIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFw
c2VkRHVyYXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKTsKLSAgICAgICAgICAgIG1fbmV4
dEl0ZXJhdGlvbkR1cmF0aW9uID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAg
ICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZW5kIHRoZSBldmVudAotICAgICAgICAgICAgdXBk
YXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkLCBwcmV2
aW91cyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6dXBkYXRl
UGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSBwbGF5U3RhdGUpCi17Ci0gICAgaWYgKCFtX2Nv
bXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gV2hlbiB3ZSBnZXQg
aGVyZSwgd2UgY2FuIGhhdmUgb25lIG9mIDQgZGVzaXJlZCBzdGF0ZXM6IHJ1bm5pbmcsIHBhdXNl
ZCwgc3VzcGVuZGVkLCBwYXVzZWQgJiBzdXNwZW5kZWQuCi0gICAgLy8gVGhlIHN0YXRlIG1hY2hp
bmUgY2FuIGJlIGluIG9uZSBvZiB0d28gc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQuCi0gICAgLy8g
U2V0IHRoZSBzdGF0ZSBtYWNoaW5lIHRvIHRoZSBkZXNpcmVkIHN0YXRlLgotICAgIGJvb2wgcGF1
c2UgPSBwbGF5U3RhdGUgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQgfHwgbV9jb21wb3Np
dGVBbmltYXRpb24tPmlzU3VzcGVuZGVkKCk7Ci0KLSAgICBpZiAocGF1c2UgPT0gcGF1c2VkKCkg
JiYgIWlzTmV3KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShw
YXVzZSA/ICBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQgOiBBbmltYXRpb25T
dGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nLCAtMSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+
IEFuaW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICAvLyBSZXR1cm5zIHRo
ZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1l
YW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJl
cXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBz
ZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgaWYgKHBhdXNlZCgpIHx8IGlzTmV3KCkgfHwgcG9z
dEFjdGl2ZSgpIHx8IGZpbGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gV1RGOjpudWxs
b3B0OwotICAgIAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lcikgewotICAgICAgICBkb3VibGUgdGltZUZyb21Ob3cgPSBtX2FuaW1hdGlv
bi0+ZGVsYXkoKSAtIChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVkU3Rh
cnRUaW1lKTsKLSAgICAgICAgcmV0dXJuIHN0ZDo6bWF4KFNlY29uZHMgeyB0aW1lRnJvbU5vdyB9
LCAwX3MpOwotICAgIH0KLSAgICAKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsK
LSAgICAgICAgCi0gICAgLy8gSW4gYWxsIG90aGVyIGNhc2VzLCB3ZSBuZWVkIHNlcnZpY2Ugcmln
aHQgYXdheS4KLSAgICByZXR1cm4gMF9zOwotfQotCi0vLyBDb21wdXRlIHRoZSBmcmFjdGlvbmFs
IHRpbWUsIHRha2luZyBpbnRvIGFjY291bnQgZGlyZWN0aW9uLgotLy8gVGhlcmUgaXMgbm8gbmVl
ZCB0byB3b3JyeSBhYm91dCBpdGVyYXRpb25zLCB3ZSBhc3N1bWUgdGhhdCB3ZSB3b3VsZCBoYXZl
Ci0vLyBzaG9ydCBjaXJjdWl0ZWQgYWJvdmUgaWYgd2Ugd2VyZSBkb25lLgotCi1kb3VibGUgQW5p
bWF0aW9uQmFzZTo6ZnJhY3Rpb25hbFRpbWUoZG91YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNlZFRp
bWUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0Ci17Ci0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0g
bV9hbmltYXRpb24tPmR1cmF0aW9uKCkgPyAoZWxhcHNlZFRpbWUgLyBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSkgOiAxOwotICAgIC8vIEZJWE1FOiBzdGFydFRpbWUgY2FuIGJlIGJlZm9yZSB0aGUg
Y3VycmVudCBhbmltYXRpb24gImZyYW1lIiB0aW1lLiBUaGlzIGlzIHRvIHN5bmMgd2l0aCB0aGUg
ZnJhbWUgdGltZQotICAgIC8vIGNvbmNlcHQgaW4gQW5pbWF0aW9uVGltZUNvbnRyb2xsZXIuIFNv
IHdlIG5lZWQgdG8gc29tZWhvdyBzeW5jIHRoZSB0d28uIFVudGlsIHRoZW4sIHRoZSBwb3NzaWJs
ZQotICAgIC8vIGVycm9yIGlzIHNtYWxsIGFuZCB3aWxsIHByb2JhYmx5IG5vdCBiZSBub3RpY2Vh
YmxlLiBVbnRpbCB3ZSBmaXggdGhpcywgcmVtb3ZlIHRoZSBhc3NlcnQuCi0gICAgLy8gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUyMDM3Ci0gICAgLy8gQVNTRVJUKGZy
YWN0aW9uYWxUaW1lID49IDApOwotICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IDApCi0gICAgICAg
IGZyYWN0aW9uYWxUaW1lID0gMDsKLQotICAgIGludCBpbnRlZ3JhbFRpbWUgPSBzdGF0aWNfY2Fz
dDxpbnQ+KGZyYWN0aW9uYWxUaW1lKTsKLSAgICBjb25zdCBpbnQgaW50ZWdyYWxJdGVyYXRpb25D
b3VudCA9IHN0YXRpY19jYXN0PGludD4obV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkpOwot
ICAgIGNvbnN0IGJvb2wgaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsID0gbV9hbmltYXRpb24t
Pml0ZXJhdGlvbkNvdW50KCkgLSBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50OwotICAgIGlmIChtX2Fu
aW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJhdGlvbkNvdW50SW5m
aW5pdGUgJiYgIWl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCkKLSAgICAgICAgaW50ZWdyYWxU
aW1lID0gc3RkOjptaW4oaW50ZWdyYWxUaW1lLCBpbnRlZ3JhbEl0ZXJhdGlvbkNvdW50IC0gMSk7
Ci0KLSAgICBmcmFjdGlvbmFsVGltZSAtPSBpbnRlZ3JhbFRpbWU7Ci0KLSAgICBpZiAoKChtX2Fu
aW1hdGlvbi0+ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRl
cm5hdGUpICYmIChpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgKChtX2FuaW1hdGlvbi0+
ZGlyZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25BbHRlcm5hdGVSZXZl
cnNlKSAmJiAhKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCBtX2FuaW1hdGlvbi0+ZGly
ZWN0aW9uKCkgPT0gQW5pbWF0aW9uOjpBbmltYXRpb25EaXJlY3Rpb25SZXZlcnNlKQotICAgICAg
ICBmcmFjdGlvbmFsVGltZSA9IDEgLSBmcmFjdGlvbmFsVGltZTsKLQotICAgIGlmIChzY2FsZSAh
PSAxIHx8IG9mZnNldCkKLSAgICAgICAgZnJhY3Rpb25hbFRpbWUgPSAoZnJhY3Rpb25hbFRpbWUg
LSBvZmZzZXQpICogc2NhbGU7Ci0KLSAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci19Ci0KLWRv
dWJsZSBBbmltYXRpb25CYXNlOjpwcm9ncmVzcyhkb3VibGUgc2NhbGUsIGRvdWJsZSBvZmZzZXQs
IGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiB0aW1pbmdGdW5jdGlvbikgY29uc3QKLXsKLSAgICBpZiAo
cHJlQWN0aXZlKCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUoKSkK
LSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBkb3VibGUgZWxhcHNlZFRpbWUgPSBnZXRFbGFwc2Vk
VGltZSgpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7
Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCkKLSAgICAgICAgZHVy
YXRpb24gKj0gbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci0KLSAgICBpZiAoZmlsbGlu
Z0ZvcndhcmRzKCkpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gZHVyYXRpb247Ci0KLSAgICBkb3Vi
bGUgZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlvbmFsVGltZShzY2FsZSwgZWxhcHNlZFRp
bWUsIG9mZnNldCk7Ci0KLSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAw
ICYmIGVsYXBzZWRUaW1lID49IGR1cmF0aW9uKSB7Ci0gICAgICAgIGlmIChXVEY6OmlzSW50ZWdy
YWwoZnJhY3Rpb25hbFRpbWUpKQotICAgICAgICAgICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOwot
ICAgIH0KLQotICAgIGlmICghdGltaW5nRnVuY3Rpb24pCi0gICAgICAgIHRpbWluZ0Z1bmN0aW9u
ID0gbV9hbmltYXRpb24tPnRpbWluZ0Z1bmN0aW9uKCk7Ci0KLSAgICByZXR1cm4gdGltaW5nRnVu
Y3Rpb24tPnRyYW5zZm9ybVRpbWUoZnJhY3Rpb25hbFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnZXRUaW1lVG9OZXh0RXZlbnQoU2Vjb25k
cyYgdGltZSwgYm9vbCYgaXNMb29waW5nKSBjb25zdAotewotICAgIC8vIERlY2lkZSB3aGVuIHRo
ZSBlbmQgb3IgbG9vcCBldmVudCBuZWVkcyB0byBmaXJlCi0gICAgY29uc3QgZG91YmxlIGVsYXBz
ZWREdXJhdGlvbiA9IHN0ZDo6bWF4KGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFy
dFRpbWUudmFsdWVPcigwKSwgMC4wKTsKLSAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gMDsKLSAg
ICBkb3VibGUgbmV4dEl0ZXJhdGlvblRpbWUgPSBtX3RvdGFsRHVyYXRpb24udmFsdWVPcigwKTsK
LQotICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IGVsYXBzZWREdXJhdGlvbiA8IG1fdG90YWxE
dXJhdGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIGR1cmF0aW9uTGVmdCA9IG1fYW5pbWF0aW9uLT5k
dXJhdGlvbigpID4gMCA/IChtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1
cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSkpIDogMDsKLSAgICAgICAgbmV4dEl0ZXJh
dGlvblRpbWUgPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgfQotICAgIAot
ICAgIGlmICghbV90b3RhbER1cmF0aW9uIHx8IG5leHRJdGVyYXRpb25UaW1lIDwgbV90b3RhbER1
cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgLy8gV2UgYXJlIG5vdCBhdCB0aGUgZW5kIHlldAot
ICAgICAgICBBU1NFUlQobmV4dEl0ZXJhdGlvblRpbWUgPiAwKTsKLSAgICAgICAgaXNMb29waW5n
ID0gdHJ1ZTsKLSAgICB9IGVsc2UgewotICAgICAgICAvLyBXZSBhcmUgYXQgdGhlIGVuZAotICAg
ICAgICBpc0xvb3BpbmcgPSBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgdGltZSA9IFNlY29uZHMg
eyBkdXJhdGlvbkxlZnQgfTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpnb0ludG9FbmRpbmdP
ckxvb3BpbmdTdGF0ZSgpCi17Ci0gICAgU2Vjb25kcyB0OwotICAgIGJvb2wgaXNMb29waW5nOwot
ICAgIGdldFRpbWVUb05leHRFdmVudCh0LCBpc0xvb3BpbmcpOwotICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gJXMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmlt
YXRpb25TdGF0ZSksIGlzTG9vcGluZyA/ICJMb29waW5nIiA6ICJFbmRpbmciKTsKLSAgICBtX2Fu
aW1hdGlvblN0YXRlID0gaXNMb29waW5nID8gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgOiBBbmlt
YXRpb25TdGF0ZTo6RW5kaW5nOwotfQotICAKLXZvaWQgQW5pbWF0aW9uQmFzZTo6ZnJlZXplQXRU
aW1lKGRvdWJsZSB0KQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAg
IHJldHVybjsKLQotICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgLy8gSWYgd2UgaGF2
ZW4ndCBzdGFydGVkIHlldCwgbWFrZSBpdCBhcyBpZiB3ZSBzdGFydGVkLgotICAgICAgICBMT0co
QW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgbV9hbmltYXRp
b25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTsKLSAgICAgICAgb25B
bmltYXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWU6Om5vdygpKTsKLSAgICB9Ci0KLSAg
ICBBU1NFUlQobV9zdGFydFRpbWUpOyAvLyBJZiBtX3N0YXJ0VGltZSBpcyB6ZXJvLCB3ZSBoYXZl
bid0IHN0YXJ0ZWQgeWV0LCBzbyB3ZSdsbCBnZXQgYSBiYWQgcGF1c2UgdGltZS4KLSAgICBpZiAo
dCA8PSBtX2FuaW1hdGlvbi0+ZGVsYXkoKSkKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0
VGltZS52YWx1ZU9yKDApOwotICAgIGVsc2UKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3N0YXJ0
VGltZS52YWx1ZU9yKDApICsgdCAtIG1fYW5pbWF0aW9uLT5kZWxheSgpOwotCi0gICAgaWYgKGF1
dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnN1c3Bl
bmRBbmltYXRpb25zKE1vbm90b25pY1RpbWU6OmZyb21SYXdTZWNvbmRzKG1fcGF1c2VUaW1lLnZh
bHVlKCkpKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmJlZ2luQW5pbWF0aW9uVXBkYXRl
VGltZSgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAg
cmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKS5zZWNvbmRzU2luY2VFcG9jaCgp
LnNlY29uZHMoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmdldEVsYXBzZWRUaW1lKCkg
Y29uc3QKLXsKLSAgICBpZiAocGF1c2VkKCkpIHsKLSAgICAgICAgZG91YmxlIGRlbGF5T2Zmc2V0
ID0gKCFtX3N0YXJ0VGltZSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApID8gbV9hbmltYXRp
b24tPmRlbGF5KCkgOiAwOwotICAgICAgICByZXR1cm4gbV9wYXVzZVRpbWUudmFsdWVPcigwKSAt
IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkgLSBkZWxheU9mZnNldDsKLSAgICB9Ci0KLSAgICBpZiAo
IW1fc3RhcnRUaW1lKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZlKCkg
fHwgZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBtX3RvdGFsRHVyYXRpb24udmFs
dWVPcigwKTsKLQotICAgIHJldHVybiBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3Rh
cnRUaW1lLnZhbHVlT3IoMCk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6c2V0RWxhcHNlZFRp
bWUoZG91YmxlIHRpbWUpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAot
ICAgIFVOVVNFRF9QQVJBTSh0aW1lKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpwbGF5KCkK
LXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0KLXZvaWQgQW5pbWF0
aW9uQmFzZTo6cGF1c2UoKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QK
LX0KLQotc3RhdGljIGJvb2wgY29udGFpbnNSb3RhdGlvbihjb25zdCBWZWN0b3I8UmVmUHRyPFRy
YW5zZm9ybU9wZXJhdGlvbj4+JiBvcGVyYXRpb25zKQotewotICAgIGZvciAoY29uc3QgYXV0byYg
b3BlcmF0aW9uIDogb3BlcmF0aW9ucykgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkg
PT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpST1RBVEUpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1
dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3QgRmxvYXRSZWN0JiByZW5k
ZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBMYXlvdXRSZWN0JiBib3VuZHMpIGNv
bnN0Ci17Ci0gICAgRmxvYXRSZWN0IGZsb2F0Qm91bmRzID0gYm91bmRzOwotICAgIEZsb2F0UG9p
bnQgdHJhbnNmb3JtT3JpZ2luOwotICAgIAotICAgIGJvb2wgYXBwbHlUcmFuc2Zvcm1PcmlnaW4g
PSBjb250YWluc1JvdGF0aW9uKHN0eWxlLnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKSkgfHwgc3R5
bGUudHJhbnNmb3JtKCkuYWZmZWN0ZWRCeVRyYW5zZm9ybU9yaWdpbigpOwotICAgIGlmIChhcHBs
eVRyYW5zZm9ybU9yaWdpbikgewotICAgICAgICB0cmFuc2Zvcm1PcmlnaW4gPSByZW5kZXJlckJv
eC5sb2NhdGlvbigpICsgZmxvYXRQb2ludEZvckxlbmd0aFBvaW50KHN0eWxlLnRyYW5zZm9ybU9y
aWdpblhZKCksIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgIC8vIElnbm9yZSB0cmFuc2Zv
cm1PcmlnaW5aIGJlY2F1c2Ugd2UnbGwgYmFpbCBpZiB3ZSBlbmNvdW50ZXIgYW55IDNEIHRyYW5z
Zm9ybXMuCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSgtdHJhbnNmb3JtT3JpZ2luKTsKLSAg
ICB9Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHN0eWxlLnRyYW5zZm9ybSgp
Lm9wZXJhdGlvbnMoKSkgewotICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJhbnNm
b3JtT3BlcmF0aW9uOjpST1RBVEUpIHsKLSAgICAgICAgICAgIC8vIEZvciBub3csIGp1c3QgdHJl
YXQgdGhpcyBhcyBhIGZ1bGwgcm90YXRpb24uIFRoaXMgY291bGQgdGFrZSBhbmdsZSBpbnRvIGFj
Y291bnQgdG8gcmVkdWNlIGluZmxhdGlvbi4KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gYm91
bmRzT2ZSb3RhdGluZ1JlY3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9IGVsc2UgewotICAgICAg
ICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJhbnNmb3JtOwotICAgICAgICAgICAgb3BlcmF0
aW9uLT5hcHBseSh0cmFuc2Zvcm0sIHJlbmRlcmVyQm94LnNpemUoKSk7Ci0gICAgICAgICAgICBp
ZiAoIXRyYW5zZm9ybS5pc0FmZmluZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlv
bjo6TUFUUklYIHx8IG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9wZXJhdGlvbjo6TUFU
UklYXzNEKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXg6OkRlY29tcG9z
ZWQyVHlwZSB0b0RlY29tcDsKLSAgICAgICAgICAgICAgICB0cmFuc2Zvcm0uZGVjb21wb3NlMih0
b0RlY29tcCk7Ci0gICAgICAgICAgICAgICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVzIGZy
b20gdXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgICAgICAgICAgICAg
aWYgKHRvRGVjb21wLmFuZ2xlKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGZsb2F0Qm91bmRzID0gdHJhbnNmb3JtLm1hcFJl
Y3QoZmxvYXRCb3VuZHMpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFwcGx5VHJhbnNm
b3JtT3JpZ2luKQotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkodHJhbnNmb3JtT3JpZ2luKTsK
LQotICAgIGJvdW5kcyA9IExheW91dFJlY3QoZmxvYXRCb3VuZHMpOwotICAgIHJldHVybiB0cnVl
OwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1h
dHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJp
eCB0cmFuc2Zvcm07Ci0gICAgc3R5bGUuYXBwbHlUcmFuc2Zvcm0odHJhbnNmb3JtLCByZW5kZXJl
ckJveCwgUmVuZGVyU3R5bGU6OkluY2x1ZGVUcmFuc2Zvcm1PcmlnaW4pOwotICAgIGlmICghdHJh
bnNmb3JtLmlzQWZmaW5lKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFRyYW5zZm9y
bWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5cGUgZnJvbURlY29tcDsKLSAgICB0cmFuc2Zvcm0u
ZGVjb21wb3NlMihmcm9tRGVjb21wKTsKLSAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMgdXMg
ZnJvbSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICBpZiAoZnJvbURl
Y29tcC5hbmdsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgYm91bmRzID0gTGF5b3V0
UmVjdCh0cmFuc2Zvcm0ubWFwUmVjdChib3VuZHMpKTsKLSAgICByZXR1cm4gdHJ1ZTsKLQotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9BbmltYXRpb25CYXNlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdiYzQyMDRl
ZDc5NmFlNTIxYWE4YjFjOGU0NzI4OTI0MDI0NTRhODEuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5oCisrKyAvZGV2L251bGwKQEAgLTEsMjY5ICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNp
bmNsdWRlICJBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxl
Q29uc3RhbnRzLmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlQW5p
bWF0aW9uOwotY2xhc3MgRWxlbWVudDsKLWNsYXNzIEZsb2F0UmVjdDsKLWNsYXNzIExheW91dFJl
Y3Q7Ci1jbGFzcyBSZW5kZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci1jbGFzcyBUaW1p
bmdGdW5jdGlvbjsKLQotZW51bSBjbGFzcyBBbmltYXRlQ2hhbmdlIHsKLSAgICBTdHlsZUJsZW5k
ZWQgICAgICAgICAgICA9IDEgPDwgMCwgLy8gU3R5bGUgd2FzIGNoYW5nZWQuCi0gICAgU3RhdGVD
aGFuZ2UgICAgICAgICAgICAgPSAxIDw8IDEsIC8vIEFuaW1hdGlvbiBzdGF0ZSgpIGNoYW5nZWQu
Ci0gICAgUnVubmluZ1N0YXRlQ2hhbmdlICAgICAgPSAxIDw8IDIsIC8vIEFuaW1hdGlvbiAicnVu
bmluZyBvciBwYXVzZWQiIGNoYW5nZWQuCi19OwotCi1lbnVtIGNsYXNzIEFuaW1hdGlvbkltcGFj
dCB7Ci0gICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAgICAgPSAxIDw8IDAsCi0gICAgRm9yY2VzU3Rh
Y2tpbmdDb250ZXh0ICAgPSAxIDw8IDEKLX07Ci0KLWNsYXNzIEFuaW1hdGlvbkJhc2UgOiBwdWJs
aWMgUmVmQ291bnRlZDxBbmltYXRpb25CYXNlPgotICAgICwgcHVibGljIENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQgewotICAgIGZyaWVuZCBjbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci0gICAg
ZnJpZW5kIGNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uOwotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIEFuaW1hdGlvbkJhc2UoY29uc3QgQW5pbWF0aW9uJiB0cmFu
c2l0aW9uLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0gICAgdmlydHVhbCB+QW5p
bWF0aW9uQmFzZSgpOwotCi0gICAgRWxlbWVudCogZWxlbWVudCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZWxlbWVudC5nZXQoKTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjdXJyZW50U3R5bGUoKSBj
b25zdCBvdmVycmlkZTsKLSAgICBSZW5kZXJFbGVtZW50KiByZW5kZXJlcigpIGNvbnN0IG92ZXJy
aWRlOwotICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwotCi0gICAgZG91YmxlIGR1cmF0aW9uKCkg
Y29uc3Q7Ci0KLSAgICAvLyBBbmltYXRpb25zIGFuZCBUcmFuc2l0aW9ucyBnbyB0aHJvdWdoIHRo
ZSBzdGF0ZXMgYmVsb3cuIFdoZW4gZW50ZXJpbmcgdGhlIFNUQVJURUQgc3RhdGUKLSAgICAvLyB0
aGUgYW5pbWF0aW9uIGlzIHN0YXJ0ZWQuIFRoaXMgbWF5IG9yIG1heSBub3QgcmVxdWlyZSBkZWZl
cnJlZCByZXNwb25zZSBmcm9tIHRoZSBhbmltYXRvci4KLSAgICAvLyBJZiBzbywgd2Ugc3RheSBp
biB0aGlzIHN0YXRlIHVudGlsIHRoYXQgcmVzcG9uc2UgaXMgcmVjZWl2ZWQgKGFuZCBpdCByZXR1
cm5zIHRoZSBzdGFydCB0aW1lKS4KLSAgICAvLyBPdGhlcndpc2UsIHdlIHVzZSB0aGUgY3VycmVu
dCB0aW1lIGFzIHRoZSBzdGFydCB0aW1lIGFuZCBnbyBpbW1lZGlhdGVseSB0byBBbmltYXRpb25T
dGF0ZTo6TG9vcGluZwotICAgIC8vIG9yIEFuaW1hdGlvblN0YXRlOjpFbmRpbmcuCi0gICAgZW51
bSBjbGFzcyBBbmltYXRpb25TdGF0ZSA6IHVpbnQ4X3QgewotICAgICAgICBOZXcsICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIGp1c3QgY3JlYXRlZCwgYW5pbWF0aW9uIG5vdCBy
dW5uaW5nIHlldAotICAgICAgICBTdGFydFdhaXRUaW1lciwgICAgICAgICAgICAgLy8gc3RhcnQg
dGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBTdGFydFdhaXRTdHlsZUF2
YWlsYWJsZSwgICAgLy8gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAgc28gd2UgY2FuIHN0YXJ0IGFu
aW1hdGlvbnMKLSAgICAgICAgU3RhcnRXYWl0UmVzcG9uc2UsICAgICAgICAgIC8vIGFuaW1hdGlv
biBzdGFydGVkLCB3YWl0aW5nIGZvciByZXNwb25zZQotICAgICAgICBMb29waW5nLCAgICAgICAg
ICAgICAgICAgICAgLy8gcmVzcG9uc2UgcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBsb29w
IHRpbWVyIHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgRW5kaW5nLCAgICAgICAg
ICAgICAgICAgICAgIC8vIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgZW5kIHRpbWVyIHJ1
bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgUGF1c2VkTmV3LCAgICAgICAgICAgICAg
ICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRpb24gd2FzIGNyZWF0ZWQKLSAgICAgICAg
UGF1c2VkV2FpdFRpbWVyLCAgICAgICAgICAgIC8vIGluIHBhdXNlIG1vZGUgd2hlbiBhbmltYXRp
b24gc3RhcnRlZAotICAgICAgICBQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGUsICAgLy8gaW4gcGF1
c2UgbW9kZSB3aGVuIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwCi0gICAgICAgIFBhdXNlZFdhaXRS
ZXNwb25zZSwgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdoZW4gaW4gU1RBUlRJTkcgc3Rh
dGUKLSAgICAgICAgUGF1c2VkUnVuLCAgICAgICAgICAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVz
ZWQgd2hlbiBpbiBMT09QSU5HIG9yIEVORElORyBzdGF0ZQotICAgICAgICBEb25lLCAgICAgICAg
ICAgICAgICAgICAgICAgLy8gZW5kIHRpbWVyIGZpcmVkLCBhbmltYXRpb24gZmluaXNoZWQgYW5k
IHJlbW92ZWQKLSAgICAgICAgRmlsbGluZ0ZvcndhcmRzICAgICAgICAgICAgIC8vIGFuaW1hdGlv
biBoYXMgZW5kZWQgYW5kIGlzIHJldGFpbmluZyBpdHMgZmluYWwgdmFsdWUKLSAgICB9OwotCi0g
ICAgZW51bSBjbGFzcyBBbmltYXRpb25TdGF0ZUlucHV0IDogdWludDhfdCB7Ci0gICAgICAgIE1h
a2VOZXcsICAgICAgICAgICAvLyByZXNldCBiYWNrIHRvIG5ldyBmcm9tIGFueSBzdGF0ZQotICAg
ICAgICBTdGFydEFuaW1hdGlvbiwgICAgLy8gYW5pbWF0aW9uIHJlcXVlc3RzIGEgc3RhcnQKLSAg
ICAgICAgUmVzdGFydEFuaW1hdGlvbiwgIC8vIGZvcmNlIGEgcmVzdGFydCBmcm9tIGFueSBzdGF0
ZQotICAgICAgICBTdGFydFRpbWVyRmlyZWQsICAgLy8gc3RhcnQgdGltZXIgZmlyZWQKLSAgICAg
ICAgU3R5bGVBdmFpbGFibGUsICAgIC8vIHN0eWxlIGlzIHNldHVwLCByZWFkeSB0byBzdGFydCBh
bmltYXRpbmcKLSAgICAgICAgU3RhcnRUaW1lU2V0LCAgICAgIC8vIG1fc3RhcnRUaW1lIHdhcyBz
ZXQKLSAgICAgICAgTG9vcFRpbWVyRmlyZWQsICAgIC8vIGxvb3AgdGltZXIgZmlyZWQKLSAgICAg
ICAgRW5kVGltZXJGaXJlZCwgICAgIC8vIGVuZCB0aW1lciBmaXJlZAotICAgICAgICBQYXVzZU92
ZXJyaWRlLCAgICAgLy8gcGF1c2UgYW4gYW5pbWF0aW9uIGR1ZSB0byBvdmVycmlkZQotICAgICAg
ICBSZXN1bWVPdmVycmlkZSwgICAgLy8gcmVzdW1lIGFuIG92ZXJyaWRkZW4gYW5pbWF0aW9uCi0g
ICAgICAgIFBsYXlTdGF0ZVJ1bm5pbmcsICAvLyBwbGF5IHN0YXRlIHBhdXNlZCAtPiBydW5uaW5n
Ci0gICAgICAgIFBsYXlTdGF0ZVBhdXNlZCwgICAvLyBwbGF5IHN0YXRlIHJ1bm5pbmcgLT4gcGF1
c2VkCi0gICAgICAgIEVuZEFuaW1hdGlvbiAgICAgICAvLyBmb3JjZSBhbiBlbmQgZnJvbSBhbnkg
c3RhdGUKLSAgICB9OwotCi0gICAgLy8gQ2FsbGVkIHdoZW4gYW5pbWF0aW9uIGlzIGluIEFuaW1h
dGlvblN0YXRlOjpOZXcgdG8gc3RhcnQgYW5pbWF0aW9uCi0gICAgdm9pZCB1cGRhdGVTdGF0ZU1h
Y2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCwgZG91YmxlIHBhcmFtKTsKLQotICAgIC8vIEFuaW1h
dGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCwgYXQgcGFzc2VkIHRpbWUKLSAgICB2b2lkIG9uQW5p
bWF0aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLSAgICB7Ci0gICAg
ICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQs
IHN0YXJ0VGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgfQotCi0gICAg
Ly8gQ2FsbGVkIHRvIGNoYW5nZSB0byBvciBmcm9tIHBhdXNlZCBzdGF0ZQotICAgIHZvaWQgdXBk
YXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZSk7Ci0gICAgYm9vbCBwbGF5U3RhdGVQbGF5
aW5nKCkgY29uc3Q7Ci0KLSAgICBib29sIHdhaXRpbmdUb1N0YXJ0KCkgY29uc3QgeyByZXR1cm4g
bV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3Rh
dGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyIHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgcHJlQWN0aXZlKCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0
YXRlOjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
VGltZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5
bGVBdmFpbGFibGUgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0UmVzcG9uc2U7Ci0gICAgfQotCi0gICAgYm9vbCBwb3N0QWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotICAgIGJvb2wg
ZmlsbGluZ0ZvcndhcmRzKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmlt
YXRpb25TdGF0ZTo6RmlsbGluZ0ZvcndhcmRzOyB9Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7
IHJldHVybiAhcG9zdEFjdGl2ZSgpICYmICFwcmVBY3RpdmUoKTsgfQotICAgIGJvb2wgcnVubmlu
ZygpIGNvbnN0IHsgcmV0dXJuICFpc05ldygpICYmICFwb3N0QWN0aXZlKCk7IH0KLSAgICBib29s
IHBhdXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF1c2VUaW1lIHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotCi0gICAgc3RhdGljIGJvb2wgaXNQYXVz
ZWRTdGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyByZXR1cm4gc3RhdGUgPj0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZE5ldyAmJiBzdGF0ZSA8PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOyB9
Ci0gICAgc3RhdGljIGJvb2wgaXNSdW5uaW5nU3RhdGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUpIHsg
cmV0dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSAm
JiBzdGF0ZSA8IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0KLSAgICBib29sIGluUGF1c2VkU3Rh
dGUoKSBjb25zdCB7IHJldHVybiBpc1BhdXNlZFN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpOyB9Ci0g
ICAgYm9vbCBpblJ1bm5pbmdTdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUnVubmluZ1N0YXRlKG1f
YW5pbWF0aW9uU3RhdGUpOyB9Ci0KLSAgICBib29sIGlzTmV3KCkgY29uc3QgeyByZXR1cm4gbV9h
bmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0YXJ0
VGltZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlN0YXJ0V2FpdFJlc3BvbnNlOyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUo
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRTdHlsZUF2YWlsYWJsZTsgfQotCi0gICAgYm9vbCBpc0FjY2VsZXJhdGVkKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0FjY2VsZXJhdGVkOyB9Ci0KLSAgICB2aXJ0dWFsIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBkb3VibGUgcHJvZ3Jlc3MoZG91YmxlIHNj
YWxlID0gMSwgZG91YmxlIG9mZnNldCA9IDAsIGNvbnN0IFRpbWluZ0Z1bmN0aW9uKiA9IG51bGxw
dHIpIGNvbnN0OwotCi0gICAgdmlydHVhbCB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgLyphbmltYXRlZFN0eWxlKi8pID0gMDsKLQotICAgIHZpcnR1
YWwgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNv
bnN0ID0gMDsKLQotICAgIHZpcnR1YWwgYm9vbCBzaG91bGRGaXJlRXZlbnRzKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIHZvaWQgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7
Ci0KLSAgICBib29sIGFuaW1hdGlvbnNNYXRjaChjb25zdCBBbmltYXRpb24mKSBjb25zdDsKLQot
ICAgIGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b247IH0KLSAgICB2b2lkIHNldEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbikg
eyBtX2FuaW1hdGlvbiA9IGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKTsgfQotCi0g
ICAgLy8gUmV0dXJuIHRydWUgaWYgdGhpcyBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbi4gVGhpcyB3
aWxsIG9ubHkgYmUgdGhlIGNhc2UgZm9yCi0gICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFuZCBp
cyB1c2VkIHRvIGRldGVybWluZSB3aGV0aGVyIG9yIG5vdCB3ZSBzaG91bGQgZm9yY2UKLSAgICAv
LyBzZXQgdGhlIHN0YXJ0IHRpbWUuIElmIGFuIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLCBpdCB3
aWxsIHByb2JhYmx5IG5vdCBnZXQKLSAgICAvLyBiYWNrIHRoZSBBbmltYXRpb25TdGF0ZUlucHV0
OjpTdGFydFRpbWVTZXQgaW5wdXQuCi0gICAgdmlydHVhbCBib29sIG92ZXJyaWRkZW4oKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotCi0gICAgLy8gRG9lcyB0aGlzIGFuaW1hdGlvbi90cmFuc2l0
aW9uIGludm9sdmUgdGhlIGdpdmVuIHByb3BlcnR5PwotICAgIHZpcnR1YWwgYm9vbCBhZmZlY3Rz
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCAvKnByb3BlcnR5Ki8pIGNvbnN0IHsgcmV0dXJuIGZhbHNl
OyB9Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoYWNjZWxl
cmF0ZWRPbmx5ICYmICFtX2lzQWNjZWxlcmF0ZWQpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgaWYgKCFhZmZlY3RzUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVybiBpblJ1bm5pbmdTdGF0ZSgpIHx8IGluUGF1
c2VkU3RhdGUoKTsKLSAgICB9Ci0KLSAgICBib29sIHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRj
aCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNo
OyB9Ci0gICAgYm9vbCBmaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBvdmVycmlkZSB7
IHJldHVybiBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotI2lmIEVOQUJMRShGSUxURVJT
X0xFVkVMXzIpCi0gICAgYm9vbCBiYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpIGNv
bnN0IG92ZXJyaWRlIHsgcmV0dXJuIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7
IH0KLSNlbmRpZgotICAgIGJvb2wgY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25z
dCBvdmVycmlkZSB7IHJldHVybiBtX2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0K
LSAgICAvLyBGcmVlemUgdGhlIGFuaW1hdGlvbjsgdXNlZCBieSBEdW1wUmVuZGVyVHJlZS4KLSAg
ICB2b2lkIGZyZWV6ZUF0VGltZShkb3VibGUgdCk7Ci0KLSAgICAvLyBQbGF5IGFuZCBwYXVzZSBB
UEkKLSAgICB2b2lkIHBsYXkoKTsKLSAgICB2b2lkIHBhdXNlKCk7Ci0gICAgCi0gICAgZG91Ymxl
IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIGNvbnN0OwotICAgIAotICAgIGRvdWJsZSBnZXRF
bGFwc2VkVGltZSgpIGNvbnN0OwotICAgIC8vIFNldHRpbmcgdGhlIGVsYXBzZWQgdGltZSB3aWxs
IGFkanVzdCB0aGUgc3RhcnQgdGltZSBhbmQgcG9zc2libHkgcGF1c2UgdGltZS4KLSAgICB2b2lk
IHNldEVsYXBzZWRUaW1lKGRvdWJsZSk7Ci0gICAgCi0gICAgdm9pZCBzdHlsZUF2YWlsYWJsZSgp
IAotICAgIHsKLSAgICAgICAgQVNTRVJUKHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgpKTsKLSAg
ICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxh
YmxlLCAtMSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdmlydHVhbCB2b2lkIG92ZXJyaWRl
QW5pbWF0aW9ucygpIHsgfQotICAgIHZpcnR1YWwgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0
aW9ucygpIHsgfQotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKiBjb21wb3NpdGVBbmltYXRpb24o
KSB7IHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgfQotCi0gICAgLy8gVGhlc2UgYXJlIGNh
bGxlZCB3aGVuIHRoZSBjb3JyZXNwb25kaW5nIHRpbWVyIGZpcmVzIHNvIHN1YmNsYXNzZXMgY2Fu
IGRvIGFueSBleHRyYSB3b3JrCi0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91
YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5pbWF0aW9uSXRl
cmF0aW9uKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkFu
aW1hdGlvbkVuZChkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICAKLSAgICAvLyB0aW1l
T2Zmc2V0IGlzIGFuIG9mZnNldCBmcm9tIHRoZSBjdXJyZW50IHRpbWUgd2hlbiB0aGUgYW5pbWF0
aW9uIHNob3VsZCBzdGFydC4gTmVnYXRpdmUgdmFsdWVzIGFyZSBPSy4KLSAgICAvLyBSZXR1cm4g
dmFsdWUgaW5kaWNhdGVzIHdoZXRoZXIgdG8gZXhwZWN0IGFuIGFzeW5jaHJvbm91cyBub3RpZnlB
bmltYXRpb25TdGFydGVkKCkgY2FsbGJhY2suCi0gICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0
aW9uKGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICAvLyB0aW1l
T2Zmc2V0IGlzIHRoZSB0aW1lIGF0IHdoaWNoIHRoZSBhbmltYXRpb24gaXMgYmVpbmcgcGF1c2Vk
LgotICAgIHZpcnR1YWwgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgLyp0aW1lT2Zmc2V0Ki8p
IHsgfQotICAgIHZpcnR1YWwgdm9pZCBlbmRBbmltYXRpb24oYm9vbCAvKmZpbGxpbmdGb3J3YXJk
cyovID0gZmFsc2UpIHsgfQotCi0gICAgdmlydHVhbCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmlt
YXRlZFN0eWxlKCkgY29uc3QgPSAwOwotCi0gICAgdm9pZCBnb0ludG9FbmRpbmdPckxvb3BpbmdT
dGF0ZSgpOwotCi0gICAgQW5pbWF0aW9uU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvblN0YXRlOyB9Ci0KLSAgICBzdGF0aWMgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKEVs
ZW1lbnQqKTsKLSAgICAKLSAgICB2b2lkIGdldFRpbWVUb05leHRFdmVudChTZWNvbmRzJiB0aW1l
LCBib29sJiBpc0xvb3BpbmcpIGNvbnN0OwotCi0gICAgZG91YmxlIGZyYWN0aW9uYWxUaW1lKGRv
dWJsZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBkb3VibGUgb2Zmc2V0KSBjb25zdDsKLQot
ICAgIC8vIFRoZXNlIHJldHVybiB0cnVlIGlmIHdlIGNhbiBlYXNpbHkgY29tcHV0ZSBhIGJvdW5k
aW5nIGJveCBieSBhcHBseWluZyB0aGUgc3R5bGUncyB0cmFuc2Zvcm0gdG8gdGhlIGJvdW5kcyBy
ZWN0LgotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChj
b25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExheW91dFJl
Y3QmIGJvdW5kcykgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFN
YXRyaXgoY29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBM
YXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0OwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBtX2lzQWNj
ZWxlcmF0ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0
Y2ggeyBmYWxzZSB9OwotICAgIGJvb2wgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxz
ZSB9OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgYm9vbCBtX2JhY2tkcm9wRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLSNlbmRpZgotCi1wcml2YXRlOgotICAg
IFJlZlB0cjxFbGVtZW50PiBtX2VsZW1lbnQ7Ci0KLXByb3RlY3RlZDoKLSAgICBDb21wb3NpdGVB
bmltYXRpb24qIG1fY29tcG9zaXRlQW5pbWF0aW9uOyAvLyBJZGVhbGx5IHRoaXMgd291bGQgYmUg
YSByZWZlcmVuY2UsIGJ1dCBpdCBoYXMgdG8gYmUgY2xlYXJlZCBpZiBhbiBhbmltYXRpb24gaXMg
ZGVzdHJveWVkIGluc2lkZSBhbiBldmVudCBjYWxsYmFjay4KLSAgICBSZWY8QW5pbWF0aW9uPiBt
X2FuaW1hdGlvbjsKLQotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV9zdGFydFRpbWU7Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBtX3BhdXNlVGltZTsKLSAgICBkb3VibGUgbV9yZXF1ZXN0ZWRTdGFydFRp
bWUgeyAwIH07Ci0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3RvdGFsRHVyYXRpb247Ci0gICAgT3B0
aW9uYWw8ZG91YmxlPiBtX25leHRJdGVyYXRpb25EdXJhdGlvbjsKLQotICAgIEFuaW1hdGlvblN0
YXRlIG1fYW5pbWF0aW9uU3RhdGUgeyBBbmltYXRpb25TdGF0ZTo6TmV3IH07Ci0gICAgYm9vbCBt
X2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRp
b24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMmFjOWRhNzhkMzI2YzU4NDE1MmYyMzlmMjdkZTgzNDEyZjYxNzQuLjAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9h
bmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw4
MDUgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
LSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQot
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0
aW9uQ29udHJvbGxlci5oIgotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUg
IkFuaW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNTU1By
b3BlcnR5UGFyc2VyLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0jaW5jbHVk
ZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkZyYW1lLmgiCi0jaW5jbHVkZSAiRnJhbWVWaWV3
LmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIlBzZXVkb0VsZW1lbnQuaCIKLSNp
bmNsdWRlICJSZW5kZXJWaWV3LmgiCi0jaW5jbHVkZSAiVHJhbnNpdGlvbkV2ZW50LmgiCi0jaW5j
bHVkZSAiV2ViS2l0QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJXZWJLaXRUcmFuc2l0aW9u
RXZlbnQuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi0vLyBBbGxvdyBhIGxpdHRsZSBtb3Jl
IHRoYW4gNjBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBhdCBsZWFzdCBoaXQgdGhhdCBmcmFtZSBy
YXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0aW9uVGltZXJEZWxheSB7IDE1X21zIH07
Ci0vLyBBbGxvdyBhIGxpdHRsZSBtb3JlIHRoYW4gMzBmcHMgdG8gbWFrZSBzdXJlIHdlIGNhbiBh
dCBsZWFzdCBoaXQgdGhhdCBmcmFtZSByYXRlLgotc3RhdGljIGNvbnN0IFNlY29uZHMgYW5pbWF0
aW9uVGltZXJUaHJvdHRsZWREZWxheSB7IDMwX21zIH07Ci0KLWNsYXNzIEFuaW1hdGlvblByaXZh
dGVVcGRhdGVCbG9jayB7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2Nr
KENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQotICAg
ICAgICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotICAgIHsK
LSAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0g
ICAgfQotICAgIAotICAgIH5BbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2soKQotICAgIHsKLSAg
ICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0K
LSAgICAKLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgbV9hbmltYXRpb25Db250
cm9sbGVyOwotfTsKLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fYW5pbWF0aW9uVGltZXIo
KnRoaXMsICZDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJl
ZCkKLSAgICAsIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKnRoaXMsICZDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJl
ZCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi0gICAgLCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291
bnQoMCkKLSAgICAsIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24oZmFsc2UpCi0g
ICAgLCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChmYWxzZSkKLXsKLX0KLQot
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6On5DU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSgpCi17Ci0gICAgLy8gV2UgbmVlZCB0byBleHBsaWNpdGx5IGNsZWFyIHRoZSBjb21wb3Np
dGUgYW5pbWF0aW9ucyBoZXJlIGJlY2F1c2UgdGhlCi0gICAgLy8gZGVzdHJ1Y3RvciBvZiBDb21w
b3NpdGVBbmltYXRpb24gd2lsbCBjYWxsIG1lbWJlcnMgb2YgdGhpcyBjbGFzcyBiYWNrLgotICAg
IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5jbGVhcigpOwotfQotCi1Db21wb3NpdGVBbmltYXRpb24m
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjplbnN1cmVDb21wb3NpdGVBbmltYXRpb24o
RWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBlbGVtZW50LnNldEhhc0NTU0FuaW1hdGlvbigpOwot
Ci0gICAgYXV0byByZXN1bHQgPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5zdXJlKCZlbGVtZW50
LCBbJl0gewotICAgICAgICByZXR1cm4gQ29tcG9zaXRlQW5pbWF0aW9uOjpjcmVhdGUoKnRoaXMp
OwotICAgIH0pOwotCi0gICAgaWYgKGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudCgm
ZWxlbWVudC5kb2N1bWVudCgpKSkKLSAgICAgICAgcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZS0+c3Vz
cGVuZEFuaW1hdGlvbnMoKTsKLQotICAgIHJldHVybiAqcmVzdWx0Lml0ZXJhdG9yLT52YWx1ZTsK
LX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y2xlYXIoRWxlbWVudCYg
ZWxlbWVudCkKLXsKLSAgICBBU1NFUlQoZWxlbWVudC5oYXNDU1NBbmltYXRpb24oKSA9PSBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuY29udGFpbnMoJmVsZW1lbnQpKTsKLQotICAgIGlmICghZWxlbWVu
dC5oYXNDU1NBbmltYXRpb24oKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGVsZW1lbnQu
Y2xlYXJIYXNDU1NBbmltYXRpb24oKTsKLQotICAgIGF1dG8gaXQgPSBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuZmluZCgmZWxlbWVudCk7Ci0gICAgaWYgKGl0ID09IG1fY29tcG9zaXRlQW5pbWF0aW9u
cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgTE9HKEFuaW1hdGlvbnMsICJD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCBjbGVhcjogJXAiLCB0aGlzLCAmZWxlbWVu
dCk7Ci0KLSAgICBtX2V2ZW50c1RvRGlzcGF0Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdIChjb25z
dCBFdmVudFRvRGlzcGF0Y2gmIGluZm8pIHsKLSAgICAgICAgcmV0dXJuIGluZm8uZWxlbWVudC5w
dHIoKSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLQotICAgIG1fZWxlbWVudENoYW5nZXNUb0Rpc3Bh
dGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXShhdXRvJiBjdXJyZW50RWxlbWVudCkgewotICAgICAg
ICByZXR1cm4gY3VycmVudEVsZW1lbnQucHRyKCkgPT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0gICAg
Ci0gICAgLy8gUmV0dXJuIGZhbHNlIGlmIHdlIGRpZG4ndCBkbyBhbnl0aGluZyBPUiB3ZSBhcmUg
c3VzcGVuZGVkIChzbyB3ZSBkb24ndCB0cnkgdG8KLSAgICAvLyBkbyBhIGludmFsaWRhdGVTdHls
ZUZvclN1YnRyZWUoKSB3aGVuIHN1c3BlbmRlZCkuCi0gICAgLy8gRklYTUU6IFRoZSBjb2RlIGJl
bG93IGRvZXMgdGhlIG9wcG9zaXRlIG9mIHdoYXQgdGhlIGNvbW1lbnQgYWJvdmUgc2F5cyByZWdh
cmRpbmcgc3VzcGVuZGVkIHN0YXRlLgotICAgIGF1dG8mIGFuaW1hdGlvbiA9ICppdC0+dmFsdWU7
Ci0gICAgYm9vbCByZXN1bHQgPSBhbmltYXRpb24uaXNTdXNwZW5kZWQoKTsKLSAgICBhbmltYXRp
b24uY2xlYXJFbGVtZW50KCk7Ci0KLSAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMucmVtb3ZlKGl0
KTsKLQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2FsbFNl
dENoYW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBBbmltYXRpb25Qcml2
YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotICAgIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlOwotICAgIGJvb2wgY2FsbGVkU2V0Q2hhbmdlZCA9IGZhbHNlOwot
Ci0gICAgZm9yIChhdXRvJiBjb21wb3NpdGVBbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlv
bnMpIHsKLSAgICAgICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBhbmltYXRpb24gPSAqY29tcG9zaXRl
QW5pbWF0aW9uLnZhbHVlOwotICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpICYm
IGFuaW1hdGlvbi5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHQgPSBhbmltYXRpb24udGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlmICh0
ICYmICghdGltZVRvTmV4dFNlcnZpY2UgfHwgdC52YWx1ZSgpIDwgdGltZVRvTmV4dFNlcnZpY2Uu
dmFsdWUoKSkpCi0gICAgICAgICAgICAgICAgdGltZVRvTmV4dFNlcnZpY2UgPSB0LnZhbHVlKCk7
Ci0gICAgICAgICAgICBpZiAodGltZVRvTmV4dFNlcnZpY2UgJiYgdGltZVRvTmV4dFNlcnZpY2Uu
dmFsdWUoKSA9PSAwX3MpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2FsbFNldENoYW5nZWQgIT0g
Q2FsbFNldENoYW5nZWQpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSAqY29tcG9zaXRlQW5pbWF0
aW9uLmtleTsKLSAgICAgICAgICAgICAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tG
b3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwot
ICAgICAgICAgICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgICAgICAg
ICAgY2FsbGVkU2V0Q2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAg
ICB9Ci0KLSAgICBpZiAoY2FsbGVkU2V0Q2hhbmdlZCkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVu
dCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci0KLSAgICByZXR1cm4gdGltZVRvTmV4dFNlcnZp
Y2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1h
dGlvblRpbWVyRm9yRWxlbWVudChFbGVtZW50JiBlbGVtZW50KQotewotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlOwotCi0gICAgY29uc3QgQ29tcG9zaXRlQW5pbWF0aW9u
KiBjb21wb3NpdGVBbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50
KTsKLSAgICBpZiAoIWNvbXBvc2l0ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKSAmJiBjb21wb3Np
dGVBbmltYXRpb24tPmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgdGltZVRvTmV4dFNlcnZpY2Ug
PSBjb21wb3NpdGVBbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0KLSAgICBpZiAoIXRp
bWVUb05leHRTZXJ2aWNlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAobV9hbmltYXRpb25U
aW1lci5pc0FjdGl2ZSgpICYmIChtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfHwg
bV9hbmltYXRpb25UaW1lci5uZXh0RmlyZUludGVydmFsKCkgPD0gdGltZVRvTmV4dFNlcnZpY2Uu
dmFsdWUoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRP
bmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25UaW1lcihTZXRDaGFuZ2VkIGNhbGxT
ZXRDaGFuZ2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgT3B0aW9uYWw8U2Vj
b25kcz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKGNhbGxTZXRDaGFuZ2Vk
KTsKLQotICAgIExPRyhBbmltYXRpb25zLCAidXBkYXRlQW5pbWF0aW9uVGltZXI6IHRpbWVUb05l
eHRTZXJ2aWNlIGlzICUuMmYiLCB0aW1lVG9OZXh0U2VydmljZS52YWx1ZU9yKFNlY29uZHMgeyAt
MSB9KS52YWx1ZSgpKTsKLQotICAgIC8vIElmIHdlIGRvbid0IG5lZWQgc2VydmljZSwgd2Ugd2Fu
dCB0byBtYWtlIHN1cmUgdGhlIHRpbWVyIGlzIG5vIGxvbmdlciBydW5uaW5nCi0gICAgaWYgKCF0
aW1lVG9OZXh0U2VydmljZSkgewotICAgICAgICBpZiAobV9hbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICAgICAgbV9hbmltYXRpb25UaW1lci5zdG9wKCk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSB3YW50IHNlcnZpY2UgaW1tZWRpYXRlbHksIHdlIHN0
YXJ0IGEgcmVwZWF0aW5nIHRpbWVyIHRvIHJlZHVjZSB0aGUgb3ZlcmhlYWQgb2Ygc3RhcnRpbmcK
LSAgICBpZiAoIXRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpIHsKLSAgICAgICAgYXV0byogcGFn
ZSA9IG1fZnJhbWUucGFnZSgpOwotICAgICAgICBib29sIHNob3VsZFRocm90dGxlID0gcGFnZSAm
JiBwYWdlLT5pc0xvd1Bvd2VyTW9kZUVuYWJsZWQoKTsKLSAgICAgICAgU2Vjb25kcyBkZWxheSA9
IHNob3VsZFRocm90dGxlID8gYW5pbWF0aW9uVGltZXJUaHJvdHRsZWREZWxheSA6IGFuaW1hdGlv
blRpbWVyRGVsYXk7Ci0KLSAgICAgICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkg
fHwgbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IGRlbGF5KQotICAgICAgICAg
ICAgbV9hbmltYXRpb25UaW1lci5zdGFydFJlcGVhdGluZyhkZWxheSk7Ci0gICAgICAgIHJldHVy
bjsKLSAgICB9Ci0KLSAgICAvLyBPdGhlcndpc2UsIHdlIHdhbnQgdG8gc3RhcnQgYSBvbmUtc2hv
dCB0aW1lciBzbyB3ZSBnZXQgaGVyZSBhZ2FpbgotICAgIG1fYW5pbWF0aW9uVGltZXIuc3RhcnRP
bmVTaG90KHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlKCkpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCkK
LXsKLSAgICBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZTo6ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCkKLXsKLSAgICAv
LyBQcm90ZWN0IHRoZSBmcmFtZSBmcm9tIGdldHRpbmcgZGVzdHJveWVkIGluIHRoZSBldmVudCBo
YW5kbGVyCi0gICAgUmVmPEZyYW1lPiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICBib29sIHVw
ZGF0ZVN0eWxlID0gIW1fZXZlbnRzVG9EaXNwYXRjaC5pc0VtcHR5KCkgfHwgIW1fZWxlbWVudENo
YW5nZXNUb0Rpc3BhdGNoLmlzRW1wdHkoKTsKLQotICAgIC8vIGZpcmUgYWxsIHRoZSBldmVudHMK
LSAgICBWZWN0b3I8RXZlbnRUb0Rpc3BhdGNoPiBldmVudHNUb0Rpc3BhdGNoID0gV1RGTW92ZSht
X2V2ZW50c1RvRGlzcGF0Y2gpOwotICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHNUb0Rpc3Bh
dGNoKSB7Ci0gICAgICAgIEVsZW1lbnQmIGVsZW1lbnQgPSBldmVudC5lbGVtZW50OwotICAgICAg
ICBpZiAoZXZlbnQuZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQp
Ci0gICAgICAgICAgICBlbGVtZW50LmRpc3BhdGNoRXZlbnQoVHJhbnNpdGlvbkV2ZW50OjpjcmVh
dGUoZXZlbnQuZXZlbnRUeXBlLCBldmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNldWRv
RWxlbWVudDo6cHNldWRvRWxlbWVudE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgpKSwg
V1RGOjpudWxsb3B0LCBudWxscHRyKSk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGVsZW1l
bnQuZGlzcGF0Y2hFdmVudChBbmltYXRpb25FdmVudDo6Y3JlYXRlKGV2ZW50LmV2ZW50VHlwZSwg
ZXZlbnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1lbnQ6OnBzZXVkb0VsZW1l
bnROYW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6bnVsbG9wdCwgbnVsbHB0
cikpOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgY2hhbmdlIDogbV9lbGVtZW50Q2hhbmdlc1Rv
RGlzcGF0Y2gpCi0gICAgICAgIGNoYW5nZS0+aW52YWxpZGF0ZVN0eWxlKCk7Ci0KLSAgICBtX2Vs
ZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5jbGVhcigpOwotCi0gICAgaWYgKHVwZGF0ZVN0eWxlKQot
ICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRVcGRhdGVTdHlsZUlmTmVl
ZGVkRGlzcGF0Y2hlcigpCi17Ci0gICAgaWYgKCFtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRj
aGVyLmlzQWN0aXZlKCkpCi0gICAgICAgIG1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIu
c3RhcnRPbmVTaG90KDBfcyk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5n
JiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotewot
ICAgIG1fZXZlbnRzVG9EaXNwYXRjaC5hcHBlbmQoeyBlbGVtZW50LCBldmVudFR5cGUsIG5hbWUs
IGVsYXBzZWRUaW1lIH0pOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIo
KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YWRkRWxlbWVudENo
YW5nZVRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBtX2VsZW1lbnRDaGFuZ2Vz
VG9EaXNwYXRjaC5hcHBlbmQoZWxlbWVudCk7Ci0gICAgQVNTRVJUKG1fZWxlbWVudENoYW5nZXNU
b0Rpc3BhdGNoLmxhc3QoKS0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBE
b2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBzdGFydFVwZGF0ZVN0eWxlSWZO
ZWVkZWREaXNwYXRjaGVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJlZCgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25k
cz4gdGltZVRvTmV4dFNlcnZpY2UgPSB1cGRhdGVBbmltYXRpb25zKENhbGxTZXRDaGFuZ2VkKTsK
LQotICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSkKLSAgICAgICAgbV9mcmFtZS5kb2N1bWVudCgp
LT52aWV3KCktPnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQoKQotewotICAgIC8vIFdlIG5lZWQg
dG8ga2VlcCB0aGUgZnJhbWUgYWxpdmUsIHNpbmNlIGl0IG93bnMgdXMuCi0gICAgUmVmPEZyYW1l
PiBwcm90ZWN0b3IobV9mcmFtZSk7Ci0KLSAgICAvLyBUaGUgYW5pbWF0aW9uIHRpbWVyIG1pZ2h0
IGZpcmUgYmVmb3JlIHRoZSBsYXlvdXQgdGltZXIsIGluCi0gICAgLy8gd2hpY2ggY2FzZSB3ZSBt
aWdodCBjcmVhdGUgc29tZSBhbmltYXRpb25zIHdpdGggaW5jb3JyZWN0Ci0gICAgLy8gdmFsdWVz
IGlmIHdlIGRvbid0IGxheW91dCBmaXJzdC4KLSAgICBpZiAobV9yZXF1aXJlc0xheW91dCkgewot
ICAgICAgICBpZiAoYXV0byogZnJhbWVWaWV3ID0gbV9mcmFtZS5kb2N1bWVudCgpLT52aWV3KCkp
IHsKLSAgICAgICAgICAgIGlmIChmcmFtZVZpZXctPm5lZWRzTGF5b3V0KCkpCi0gICAgICAgICAg
ICAgICAgZnJhbWVWaWV3LT5mb3JjZUxheW91dCgpOwotICAgICAgICB9Ci0gICAgICAgIG1fcmVx
dWlyZXNMYXlvdXQgPSBmYWxzZTsKLSAgICB9Ci0KLSAgICAvLyBNYWtlIHN1cmUgYW5pbWF0aW9u
VXBkYXRlVGltZSBpcyB1cGRhdGVkLCBzbyB0aGF0IGl0IGlzIGN1cnJlbnQgZXZlbiBpZiBubwot
ICAgIC8vIHN0eWxlQ2hhbmdlIGhhcyBoYXBwZW5lZCAoZS5nLiBhY2NlbGVyYXRlZCBhbmltYXRp
b25zKQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7
Ci0KLSAgICAvLyBXaGVuIHRoZSB0aW1lciBmaXJlcywgYWxsIHdlIGRvIGlzIGNhbGwgc2V0Q2hh
bmdlZCBvbiBhbGwgRE9NIG5vZGVzIHdpdGggcnVubmluZyBhbmltYXRpb25zIGFuZCB0aGVuIGRv
IGFuIGltbWVkaWF0ZQotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQuIEl0IHdpbGwgdGhlbiBj
YWxsIGJhY2sgdG8gdXMgd2l0aCBuZXcgaW5mb3JtYXRpb24uCi0gICAgdXBkYXRlQW5pbWF0aW9u
VGltZXIoQ2FsbFNldENoYW5nZWQpOwotCi0gICAgLy8gRmlyZSBldmVudHMgcmlnaHQgYXdheSwg
dG8gYXZvaWQgYSBmbGFzaCBvZiB1bmFuaW1hdGVkIHN0eWxlIGFmdGVyIGFuIGFuaW1hdGlvbiBj
b21wbGV0ZXMsIGFuZCBiZWZvcmUKLSAgICAvLyB0aGUgJ2VuZCcgZXZlbnQgZmlyZXMuCi0gICAg
ZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYg
cmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5k
ZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBhdXRvKiBhbmltYXRp
b24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0gICAg
aWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gYW5pbWF0
aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBmYWxzZSk7Ci19Ci0KLWJvb2wgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9u
T25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQo
cmVuZGVyZXIuZWxlbWVudCgpKTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJu
IGZhbHNlOwotICAgIHJldHVybiBhbmltYXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVy
dHksIHRydWUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRh
dGVUaHJvdHRsaW5nU3RhdGUoKQotewotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVyKCk7Ci0KLSAg
ICBmb3IgKGF1dG8qIGNoaWxkRnJhbWUgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNo
aWxkRnJhbWU7IGNoaWxkRnJhbWUgPSBjaGlsZEZyYW1lLT50cmVlKCkubmV4dFNpYmxpbmcoKSkK
LSAgICAgICAgY2hpbGRGcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkudXBkYXRlVGhyb3R0bGluZ1N0
YXRlKCk7Ci19Ci0KLVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1h
dGlvbkludGVydmFsKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIFNlY29uZHMgeyBJTkZJTklUWSB9OwotCi0gICAgcmV0dXJu
IFNlY29uZHMgeyBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgfTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVuZEFuaW1hdGlvbnMoKQotewot
ICAgIGlmIChpc1N1c3BlbmRlZCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzdXNwZW5kQW5p
bWF0aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUuZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2ZXJz
ZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZyYW1lKiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0
Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAg
ICAgICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLQotICAg
IG1faXNTdXNwZW5kZWQgPSB0cnVlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIWlzU3VzcGVuZGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2ZyYW1l
LmRvY3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3ViZnJhbWVzCi0gICAgZm9yIChGcmFt
ZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxkKCk7IGNoaWxkOyBjaGlsZCA9IGNo
aWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAgY2hpbGQtPmxlZ2FjeUFuaW1hdGlv
bigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLQotICAgIG1faXNTdXNwZW5kZWQgPSBmYWxzZTsKLX0K
LQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uc0FyZVN1c3Bl
bmRlZEZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gaXNTdXNw
ZW5kZWQoKSB8fCBtX3N1c3BlbmRlZERvY3VtZW50cy5jb250YWlucyhkb2N1bWVudCk7Ci19Ci0K
LXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmRldGFjaEZyb21Eb2N1bWVudChE
b2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMucmVtb3ZlKGRv
Y3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3VzcGVu
ZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKGFu
aW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLmFkZChkb2N1bWVudCk7Ci0KLSAgICBBbmlt
YXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9yIChh
dXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZh
bmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5pbWF0
aW9uLnZhbHVlLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1h
dGlvblRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
c3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYg
KCFhbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICBkZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgQW5pbWF0
aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAoYXV0
byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5p
bWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1hdGlv
bi52YWx1ZS0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIH0KLQotICAgIHVwZGF0ZUFuaW1hdGlv
blRpbWVyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0
QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAo
IWFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkgfHwgYWxsb3dzTmV3
QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkpCi0gICAgICAgIHJlc3VtZUFuaW1hdGlvbnNGb3JE
b2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sIGFsbG93ZWQpCi17
Ci0gICAgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQgPSBhbGxvd2VkOwotfQot
Ci1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZUFuaW1hdGlvbkF0VGlt
ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsK
LSAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBv
c2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNl
QW5pbWF0aW9uQXRUaW1lKG5hbWUsIHQpKSB7Ci0gICAgICAgIGVsZW1lbnQuaW52YWxpZGF0ZVN0
eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXIoKTsKLSAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1ib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAg
Q29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZVRyYW5z
aXRpb25BdFRpbWUoY3NzUHJvcGVydHlJRChwcm9wZXJ0eSksIHQpKSB7Ci0gICAgICAgIGVsZW1l
bnQuaW52YWxpZGF0ZVN0eWxlKCk7Ci0gICAgICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERp
c3BhdGNoZXIoKTsKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZh
bHNlOwotfQotCi1Nb25vdG9uaWNUaW1lIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0aW9u
VXBkYXRlQ291bnQpOwotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUpCi0gICAg
ICAgIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCk7Ci0K
LSAgICByZXR1cm4gbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUudmFsdWUoKTsKLX0KLQotdm9p
ZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5BbmltYXRpb25VcGRhdGUoKQot
ewotICAgIGlmICghbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KQotICAgICAgICBtX2JlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICArK21fYmVnaW5BbmltYXRp
b25VcGRhdGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
ZW5kQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVwZGF0
ZUNvdW50ID4gMCk7Ci0gICAgaWYgKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCA9PSAxKSB7
Ci0gICAgICAgIHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgICAgIGlmICghbV93YWl0aW5nRm9yQXN5
bmNTdGFydE5vdGlmaWNhdGlvbikKLSAgICAgICAgICAgIHN0YXJ0VGltZVJlc3BvbnNlKGJlZ2lu
QW5pbWF0aW9uVXBkYXRlVGltZSgpKTsKLSAgICB9Ci0gICAgLS1tX2JlZ2luQW5pbWF0aW9uVXBk
YXRlQ291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJlY2Vp
dmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSB0aW1lKQotewotICAgIExPRyhBbmlt
YXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgcmVjZWl2ZWRTdGFydFRp
bWVSZXNwb25zZSAlZiIsIHRoaXMsIHRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkp
OwotCi0gICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotICAg
IHN0YXJ0VGltZVJlc3BvbnNlKHRpbWUpOwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRlZFN0eWxlRm9yRWxlbWVu
dChFbGVtZW50JiBlbGVtZW50KQotewotICAgIGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRl
QW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayBhbmltYXRp
b25VcGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBhdXRvIGFuaW1hdGluZ1N0eWxlID0gYW5pbWF0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKCk7Ci0gICAgaWYgKCFhbmltYXRpbmdTdHlsZSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgcmV0dXJuIGFuaW1hdGluZ1N0eWxlOwotfQot
Ci1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24oRWxlbWVudCYgZWxlbWVudCwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAg
IGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQpOwot
ICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIGlmICghYW5p
bWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtLCBmYWxzZSkp
Ci0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGFuaW1hdGlvbi0+Y29tcHV0ZUV4
dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcyk7Ci19Ci0KLXVuc2lnbmVkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQq
IGRvY3VtZW50KSBjb25zdAotewotICAgIHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAgICBm
b3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBp
ZiAoJmFuaW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBj
b3VudCArPSBhbmltYXRpb24udmFsdWUtPm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpOwotICAg
IH0KLQotICAgIHJldHVybiBjb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZTo6YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFu
aW1hdGlvbikKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2Uu
cmVtb3ZlKCZhbmltYXRpb24pOwotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5hZGQo
JmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlv
blRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZS5yZW1vdmUoJmFu
aW1hdGlvblRvUmVtb3ZlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6c3R5bGVBdmFpbGFibGUoKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJz
IGFuZCBzZW5kIHRoZW0gb24gdGhlaXIgd2F5Ci0gICAgZm9yIChjb25zdCBhdXRvJiB3YWl0aW5n
QW5pbWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKQotICAgICAgICB3YWl0aW5n
QW5pbWF0aW9uLT5zdHlsZUF2YWlsYWJsZSgpOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlLmNsZWFyKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6
OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNl
JiBhbmltYXRpb24sIGJvb2wgd2lsbEdldFJlc3BvbnNlKQotewotICAgIC8vIElmIHdpbGxHZXRS
ZXNwb25zZSBpcyB0cnVlLCBpdCBtZWFucyB0aGlzIGFuaW1hdGlvbiBpcyBhY3R1YWxseSB3YWl0
aW5nIGZvciBhIHJlc3BvbnNlCi0gICAgLy8gKHdoaWNoIHdpbGwgY29tZSBpbiBhcyBhIGNhbGwg
dG8gbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCgpKS4KLSAgICAvLyBJbiB0aGF0IGNhc2Ugd2UgZG9u
J3QgbmVlZCB0byBhZGQgaXQgdG8gdGhpcyBsaXN0LiBXZSBqdXN0IHNldCBhIHdhaXRpbmdGb3JB
UmVzcG9uc2UgZmxhZyAKLSAgICAvLyB3aGljaCBzYXlzIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUg
cmVzcG9uc2UuIElmIHdpbGxHZXRSZXNwb25zZSBpcyBmYWxzZSwgdGhpcyBhbmltYXRpb24gCi0g
ICAgLy8gaXMgbm90IHdhaXRpbmcgZm9yIGEgcmVzcG9uc2UgZm9yIGl0c2VsZiwgYnV0IHJhdGhl
ciBmb3IgYSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCBmb3IgCi0gICAgLy8gYW5vdGhlciBhbmlt
YXRpb24gdG8gd2hpY2ggaXQgd2lsbCBzeW5jLgotICAgIC8vCi0gICAgLy8gV2hlbiBlbmRBbmlt
YXRpb25VcGRhdGUoKSBpcyBjYWxsZWQgd2UgY2hlY2sgdG8gc2VlIGlmIHRoZSB3YWl0aW5nRm9y
QVJlc3BvbnNlIGZsYWcgaXMKLSAgICAvLyB0cnVlLiBJZiBzbywgd2UganVzdCByZXR1cm4gYW5k
IHdpbGwgZG8gb3VyIHdvcmsgd2hlbiB0aGUgZmlyc3Qgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwK
LSAgICAvLyBjb21lcyBpbi4gSWYgaXQgaXMgZmFsc2UsIHdlIHdpbGwgbm90IGJlIGdldHRpbmcg
YSBub3RpZnlYWFhTdGFydGVkKCkgY2FsbCwgc28gd2Ugd2lsbAotICAgIC8vIGRvIG91ciB3b3Jr
IHJpZ2h0IGF3YXkuIEluIGJvdGggY2FzZXMgd2UgY2FsbCB0aGUgb25BbmltYXRpb25TdGFydFJl
c3BvbnNlKCkgbWV0aG9kCi0gICAgLy8gb24gZWFjaCBhbmltYXRpb24uIEluIHRoZSBmaXJzdCBj
YXNlIHdlIHNlbmQgaW4gdGhlIHRpbWUgd2UgZ290IGZyb20gbm90aWZ5WFhYU3RhcnRlZCgpLgot
ICAgIC8vIEluIHRoZSBzZWNvbmQgY2FzZSwgd2UganVzdCBwYXNzIGluIHRoZSBiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKS4KLSAgICAvLwotICAgIC8vIFRoaXMgd2lsbCBzeW5jaHJvbml6ZSBh
bGwgc29mdHdhcmUgYW5kIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgc3RhcnRlZCBpbiB0aGUgc2Ft
ZSAKLSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkIGN5Y2xlLgotICAgIC8vCi0KLSAgICBpZiAo
d2lsbEdldFJlc3BvbnNlKQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0
aW9uID0gdHJ1ZTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25z
ZS5hZGQoJmFuaW1hdGlvbik7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1h
dGlvbkJhc2UmIGFuaW1hdGlvblRvUmVtb3ZlKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZS5yZW1vdmUoJmFuaW1hdGlvblRvUmVtb3ZlKTsKLSAgICBpZiAo
bV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmlzRW1wdHkoKSkKLSAgICAg
ICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFRpbWVSZXNwb25zZShNb25vdG9u
aWNUaW1lIHRpbWUpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMgYW5kIHNl
bmQgdGhlbSBvbiB0aGVpciB3YXkKLQotICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uIDog
bV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKQotICAgICAgICBhbmltYXRp
b24tPm9uQW5pbWF0aW9uU3RhcnRSZXNwb25zZSh0aW1lKTsKLSAgICAKLSAgICBtX2FuaW1hdGlv
bnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuY2xlYXIoKTsKLSAgICBtX3dhaXRpbmdGb3JB
c3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0aW9uQmFzZSYgYW5p
bWF0aW9uKQotewotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGUgJXAgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZDogJXAiLCB0aGlzLCAmYW5pbWF0aW9uKTsK
LQotICAgIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKGFuaW1hdGlvbik7Ci0g
ICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoYW5pbWF0
aW9uKTsKLQotICAgIGJvb2wgYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0gZmFs
c2U7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+d2FpdGluZ0ZvclN0YXJ0
VGltZSgpICYmIGFuaW1hdGlvbi0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICBhbnlB
bmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSB0cnVlOwotICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIWFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5
bmNTdGFydCkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9IGZh
bHNlOwotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjpDU1NBbmltYXRpb25Db250cm9sbGVy
KEZyYW1lJiBmcmFtZSkKLSAgICA6IG1fZGF0YShtYWtlVW5pcXVlPENTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlPihmcmFtZSkpCi17Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6On5D
U1NBbmltYXRpb25Db250cm9sbGVyKCkgPSBkZWZhdWx0OwotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBpZiAo
IW1fZGF0YS0+Y2xlYXIoZWxlbWVudCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChlbGVt
ZW50LmRvY3VtZW50KCkucmVuZGVyVHJlZUJlaW5nRGVzdHJveWVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBBU1NFUlQoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgp
ID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIGVsZW1lbnQuaW52YWxp
ZGF0ZVN0eWxlKCk7Ci19Ci0KLUFuaW1hdGlvblVwZGF0ZSBDU1NBbmltYXRpb25Db250cm9sbGVy
Ojp1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlJiBu
ZXdTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKQotewotICAgIGJvb2wgaGFzT3JI
YWRBbmltYXRpb25zID0gKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zT3JUcmFu
c2l0aW9ucygpKSB8fCBuZXdTdHlsZS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpOwotICAg
IGlmICghaGFzT3JIYWRBbmltYXRpb25zKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYg
KGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSAhPSBEb2N1bWVudDo6
Tm90SW5CYWNrRm9yd2FyZENhY2hlKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8gRG9u
J3QgcnVuIHRyYW5zaXRpb25zIHdoZW4gcHJpbnRpbmcuCi0gICAgaWYgKGVsZW1lbnQuZG9jdW1l
bnQoKS5yZW5kZXJWaWV3KCktPnByaW50aW5nKCkpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAg
ICAvLyBGZXRjaCBvdXIgY3VycmVudCBzZXQgb2YgaW1wbGljaXQgYW5pbWF0aW9ucyBmcm9tIGEg
aGFzaHRhYmxlLiBXZSB0aGVuIGNvbXBhcmUgdGhlbQotICAgIC8vIGFnYWluc3QgdGhlIGFuaW1h
dGlvbnMgaW4gdGhlIHN0eWxlIGFuZCBtYWtlIHN1cmUgd2UncmUgaW4gc3luYy4gSWYgZGVzdGlu
YXRpb24gdmFsdWVzCi0gICAgLy8gaGF2ZSBjaGFuZ2VkLCB3ZSByZXNldCB0aGUgYW5pbWF0aW9u
LiBXZSB0aGVuIGRvIGEgYmxlbmQgdG8gZ2V0IG5ldyB2YWx1ZXMgYW5kIHdlIHJldHVybgotICAg
IC8vIGEgbmV3IHN0eWxlLgotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmlt
YXRpb24gPSBtX2RhdGEtPmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihlbGVtZW50KTsKLSAgICBh
dXRvIHVwZGF0ZSA9IGNvbXBvc2l0ZUFuaW1hdGlvbi5hbmltYXRlKGVsZW1lbnQsIG9sZFN0eWxl
LCBuZXdTdHlsZSk7Ci0KLSAgICBhdXRvKiByZW5kZXJlciA9IGVsZW1lbnQucmVuZGVyZXIoKTsK
LSAgICBpZiAoKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5wYXJlbnQoKSkgfHwgbmV3U3R5bGUuYW5p
bWF0aW9ucygpIHx8IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+YW5pbWF0aW9ucygpKSkgewotICAg
ICAgICBhdXRvJiBmcmFtZVZpZXcgPSAqZWxlbWVudC5kb2N1bWVudCgpLnZpZXcoKTsKLSAgICAg
ICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0
KCkpCi0gICAgICAgICAgICBtX2RhdGEtPnNldFJlcXVpcmVzTGF5b3V0KCk7Ci0gICAgICAgIG1f
ZGF0YS0+dXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50KGVsZW1lbnQpOwotICAgICAgICBm
cmFtZVZpZXcuc2NoZWR1bGVBbmltYXRpb24oKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdXBkYXRl
OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlcikKLXsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdDsKLQotICAgIGlmIChyZW5k
ZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkgJiYgcmVuZGVyZXIuZWxl
bWVudCgpKQotICAgICAgICByZXN1bHQgPSBtX2RhdGEtPmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KCpyZW5kZXJlci5lbGVtZW50KCkpOwotCi0gICAgaWYgKCFyZXN1bHQpCi0gICAgICAgIHJlc3Vs
dCA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlci5zdHlsZSgpKTsKLQotICAgIHJldHVy
biByZXN1bHQ7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Y29tcHV0ZUV4dGVu
dE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBMYXlvdXRSZWN0JiBib3VuZHMp
IGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiB0
cnVlOwotICAgIGlmICghcmVuZGVyZXIuc3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9u
cygpKQotICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBtX2RhdGEtPmNvbXB1dGVF
eHRlbnRPZkFuaW1hdGlvbigqcmVuZGVyZXIuZWxlbWVudCgpLCBib3VuZHMpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxl
bWVudCYgcmVuZGVyZXIsIE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotewotICAgIExPRyhBbmlt
YXRpb25zLCAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlciAlcCBub3RpZnlBbmltYXRpb25TdGFydGVk
IG9uIHJlbmRlcmVyICVwLCB0aW1lPSVmIiwgdGhpcywgJnJlbmRlcmVyLCBzdGFydFRpbWUuc2Vj
b25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIFVOVVNFRF9QQVJBTShyZW5kZXJlcik7
Ci0KLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsK
LSAgICBtX2RhdGEtPnJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2Uoc3RhcnRUaW1lKTsKLX0KLQot
Ym9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50
JiBlbGVtZW50LCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBBbmlt
YXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4g
bV9kYXRhLT5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBuYW1lLCB0KTsKLX0KLQotdW5z
aWduZWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERv
Y3VtZW50KiBkb2N1bWVudCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5udW1iZXJPZkFj
dGl2ZUFuaW1hdGlvbnMoZG9jdW1lbnQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcm
IHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRp
b25VcGRhdGVCbG9jayh0aGlzKTsKLSAgICByZXR1cm4gbV9kYXRhLT5wYXVzZVRyYW5zaXRpb25B
dFRpbWUoZWxlbWVudCwgcHJvcGVydHksIHQpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRy
b2xsZXI6OmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVy
ZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5z
dHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRl
cmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6aXNSdW5u
aW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVy
LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuc3R5
bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRl
cmVyKHJlbmRlcmVyLCBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6aXNTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmlzU3VzcGVuZGVk
KCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnMo
KQotewotICAgIExPRyhBbmltYXRpb25zLCAiY29udHJvbGxlciBpcyBzdXNwZW5kaW5nIGFuaW1h
dGlvbnMiKTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgTE9HKEFuaW1h
dGlvbnMsICJjb250cm9sbGVyIGlzIHJlc3VtaW5nIGFuaW1hdGlvbnMiKTsKLSAgICBtX2RhdGEt
PnJlc3VtZUFuaW1hdGlvbnMoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjph
bGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdAotewotICAgIHJldHVybiBt
X2RhdGEtPmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi12b2lkIENT
U0FuaW1hdGlvbkNvbnRyb2xsZXI6OnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRl
ZChib29sIGFsbG93ZWQpCi17Ci0gICAgbV9kYXRhLT5zZXRBbGxvd3NOZXdBbmltYXRpb25zV2hp
bGVTdXNwZW5kZWQoYWxsb3dlZCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6
c2VydmljZUFuaW1hdGlvbnMoKQotewotICAgIG1fZGF0YS0+YW5pbWF0aW9uRnJhbWVDYWxsYmFj
a0ZpcmVkKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBkYXRlVGhyb3R0
bGluZ1N0YXRlKCkKLXsKLSAgICBtX2RhdGEtPnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwotfQot
Ci1TZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbkludGVydmFsKCkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25JbnRlcnZhbCgpOwotfQotCi1ib29s
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVu
dChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25D
b250cm9sbGVyOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAg
IHJldHVybiBtX2RhdGEtPmRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1
bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJzdXNwZW5kaW5nIGFuaW1h
dGlvbnMgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotICAgIG1fZGF0YS0+c3VzcGVuZEFu
aW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlcjo6cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkK
LXsKLSAgICBMT0coQW5pbWF0aW9ucywgInJlc3VtaW5nIGFuaW1hdGlvbnMgZm9yIGRvY3VtZW50
ICVwIiwgZG9jdW1lbnQpOwotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0
ZUJsb2NrKHRoaXMpOwotICAgIG1fZGF0YS0+cmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRv
Y3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdGFydEFuaW1hdGlv
bnNJZk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgTE9HKEFuaW1hdGlv
bnMsICJhbmltYXRpb25zIG1heSBzdGFydCBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0K
LSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jayh0aGlzKTsKLSAg
ICBtX2RhdGEtPnN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVuZGVkKGRvY3VtZW50KTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17Ci0g
ICAgbV9kYXRhLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXI6OmVuZEFuaW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgbV9kYXRhLT5lbmRBbmlt
YXRpb25VcGRhdGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0
c0FjY2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQot
ewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQocHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
Omhhc0FuaW1hdGlvbnMoKSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPmhhc0FuaW1hdGlv
bnMoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIGIvU291cmNlL1dl
YkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCmRlbGV0ZWQgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCBlY2Q2MDU4NDUzOThhYThlNzVhOWE1MjY1ZTAwZWY2NGQ2MjIy
ODEwLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAorKysgL2Rl
di9udWxsCkBAIC0xLDEyMyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFz
ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJFbGVtZW50Lmgi
Ci0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotCi1u
YW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFzcyBGcmFtZTsKLWNsYXNzIExheW91dFJlY3Q7Ci1jbGFz
cyBSZW5kZXJFbGVtZW50OwotCi1zdHJ1Y3QgQW5pbWF0aW9uVXBkYXRlIHsKLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlOwotICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBh
Y3Q+IGltcGFjdDsKLQotfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlcihGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250cm9sbGVyKCk7Ci0K
LSAgICB2b2lkIGNhbmNlbEFuaW1hdGlvbnMoRWxlbWVudCYpOwotICAgIEFuaW1hdGlvblVwZGF0
ZSB1cGRhdGVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRl
clN0eWxlPiBhbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYpOwotCi0gICAg
Ly8gSWYgcG9zc2libGUsIGNvbXB1dGUgdGhlIHZpc3VhbCBleHRlbnQgb2YgYW55IHRyYW5zZm9y
bSBhbmltYXRpb24gb24gdGhlIGdpdmVuIHJlbmRlcmVyCi0gICAgLy8gdXNpbmcgdGhlIGdpdmVu
IHJlY3QsIHJldHVybmluZyB0aGUgcmVzdWx0IGluIHRoZSByZWN0LiBSZXR1cm4gZmFsc2UgaWYg
dGhlcmUgaXMgc29tZQotICAgIC8vIHRyYW5zZm9ybSBhbmltYXRpb24gYnV0IHdlIHdlcmUgdW5h
YmxlIHRvIGNoZWFwbHkgY29tcHV0ZSBpdHMgYWZmZWN0IG9uIHRoZSBleHRlbnQuCi0gICAgYm9v
bCBjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYsIExheW91dFJlY3QmKSBj
b25zdDsKLQotICAgIC8vIFRoaXMgaXMgY2FsbGVkIHdoZW4gYW4gYWNjZWxlcmF0ZWQgYW5pbWF0
aW9uIG9yIHRyYW5zaXRpb24gaGFzIGFjdHVhbGx5IHN0YXJ0ZWQgdG8gYW5pbWF0ZS4KLSAgICB2
b2lkIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoUmVuZGVyRWxlbWVudCYsIE1vbm90b25pY1RpbWUg
c3RhcnRUaW1lKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VBbmltYXRpb25BdFRp
bWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KTsgLy8gVG8gYmUg
dXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZVRyYW5z
aXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsg
Ly8gVG8gYmUgdXNlZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgV0VCQ09SRV9FWFBPUlQgdW5zaWdu
ZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7IC8vIFRvIGJlIHVz
ZWQgb25seSBmb3IgdGVzdGluZwotICAgIAotICAgIC8vICJSdW5uaW5nIiBoZXJlIG1lYW5zIHRo
ZSBhbmltYXRpb24gaXMgcnVubmluZyBvciBwYXVzZWQuCi0gICAgYm9vbCBpc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLSAg
ICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVt
ZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGlz
U3VzcGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0
aW9ucygpOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAg
IHZvaWQgc2VydmljZUFuaW1hdGlvbnMoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGluZ1N0
YXRlKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgU2Vjb25kcyBhbmltYXRpb25JbnRlcnZhbCgpIGNv
bnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3Vt
ZW50KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRpb25z
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFuaW1hdGlv
bnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJv
bURvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1c3Bl
bmRlZChEb2N1bWVudCopOwotCi0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAg
IHZvaWQgZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIGFs
bG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQ
T1JUIHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwotICAg
IAotICAgIHN0YXRpYyBib29sIHN1cHBvcnRzQWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5
KENTU1Byb3BlcnR5SUQpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3Q7Ci0KLXBy
aXZhdGU6Ci0gICAgY29uc3Qgc3RkOjp1bmlxdWVfcHRyPENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlPiBtX2RhdGE7Ci19OwotCi1jbGFzcyBBbmltYXRpb25VcGRhdGVCbG9jayB7Ci1wdWJs
aWM6Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2soQ1NTQW5pbWF0aW9uQ29udHJvbGxlciogYW5p
bWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgOiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0
aW9uQ29udHJvbGxlcikKLSAgICB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xsZXIp
Ci0gICAgICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXItPmJlZ2luQW5pbWF0aW9uVXBkYXRl
KCk7Ci0gICAgfQotICAgIAotICAgIH5BbmltYXRpb25VcGRhdGVCbG9jaygpCi0gICAgewotICAg
ICAgICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAgICAgICAgICAgbV9hbmltYXRpb25D
b250cm9sbGVyLT5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAgCi0gICAgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciogbV9hbmltYXRpb25Db250cm9sbGVyOwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IGQzMjAzNzdkZWNjOWM1MzRkZWViN2I0ZTk1Y2UwZWQyZDg1YWVkYjEuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaAorKysgL2Rl
di9udWxsCkBAIC0xLDE1MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA5IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFz
ZS5oIgotI2luY2x1ZGUgIlRpbWVyLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb247Ci1jbGFzcyBEb2N1bWVudDsK
LWNsYXNzIEZyYW1lOwotCi1lbnVtIFNldENoYW5nZWQgeyBEb05vdENhbGxTZXRDaGFuZ2VkLCBD
YWxsU2V0Q2hhbmdlZCB9OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGUoKTsKLQotICAgIC8vIFJldHVybnMgdGhlIHRpbWUgdW50aWwgdGhlIG5l
eHQgYW5pbWF0aW9uIG5lZWRzIHRvIGJlIHNlcnZpY2VkLCBvciAtMSBpZiB0aGVyZSBhcmUgbm9u
ZS4KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB1cGRhdGVBbmltYXRpb25zKFNldENoYW5nZWQgY2Fs
bFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2VkKTsKLSAgICB2b2lkIHVwZGF0ZUFuaW1h
dGlvblRpbWVyKFNldENoYW5nZWQgY2FsbFNldENoYW5nZWQgPSBEb05vdENhbGxTZXRDaGFuZ2Vk
KTsKLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKEVs
ZW1lbnQmKTsKLSAgICBib29sIGNsZWFyKEVsZW1lbnQmKTsKLQotICAgIHZvaWQgdXBkYXRlU3R5
bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpOwotICAgIHZvaWQgc3RhcnRVcGRhdGVTdHlsZUlm
TmVlZGVkRGlzcGF0Y2hlcigpOwotICAgIHZvaWQgYWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1lbnQm
LCBjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgZG91Ymxl
IGVsYXBzZWRUaW1lKTsKLSAgICB2b2lkIGFkZEVsZW1lbnRDaGFuZ2VUb0Rpc3BhdGNoKEVsZW1l
bnQmKTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0IHsgcmV0dXJuICFtX2NvbXBv
c2l0ZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzU3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc1N1c3BlbmRlZDsgfQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMo
KTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lkIGFuaW1hdGlvbkZyYW1l
Q2FsbGJhY2tGaXJlZCgpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLSAg
ICBTZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29uc3Q7Ci0KLSAgICB2b2lkIHN1c3BlbmRB
bmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHJlc3VtZUFuaW1hdGlv
bnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIGJvb2wgYW5pbWF0aW9uc0FyZVN1c3BlbmRl
ZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBzdGFydEFuaW1hdGlvbnNJZk5vdFN1
c3BlbmRlZChEb2N1bWVudCopOwotICAgIHZvaWQgZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50
Kik7Ci0KLSAgICBib29sIGlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVu
dCYsIENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAgIGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRB
bmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsK
LQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYsIGNvbnN0IEF0b21TdHJp
bmcmIG5hbWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVt
ZW50JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOwotICAgIHVuc2lnbmVkIG51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OwotCi0gICAgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlRm9yRWxlbWVudChFbGVtZW50Jik7Ci0K
LSAgICBib29sIGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihFbGVtZW50JiwgTGF5b3V0UmVjdCYp
IGNvbnN0OwotCi0gICAgTW9ub3RvbmljVGltZSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsK
LSAgICAKLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgdm9pZCBlbmRBbmlt
YXRpb25VcGRhdGUoKTsKLSAgICB2b2lkIHJlY2VpdmVkU3RhcnRUaW1lUmVzcG9uc2UoTW9ub3Rv
bmljVGltZSk7Ci0gICAgCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUo
QW5pbWF0aW9uQmFzZSYpOwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYsIGJvb2wgd2lsbEdldFJlc3BvbnNl
KTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3Bv
bnNlKEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChB
bmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIHVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVu
dChFbGVtZW50Jik7Ci0KLSAgICBib29sIGFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOyB9
Ci0gICAgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7Ci0K
LSAgICB2b2lkIHNldFJlcXVpcmVzTGF5b3V0KCkgeyBtX3JlcXVpcmVzTGF5b3V0ID0gdHJ1ZTsg
fQotCi1wcml2YXRlOgotICAgIHZvaWQgYW5pbWF0aW9uVGltZXJGaXJlZCgpOwotCi0gICAgdm9p
ZCBzdHlsZUF2YWlsYWJsZSgpOwotICAgIHZvaWQgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7
Ci0gICAgdm9pZCBzdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lKTsKLQotICAgIEhhc2hN
YXA8UmVmUHRyPEVsZW1lbnQ+LCBSZWZQdHI8Q29tcG9zaXRlQW5pbWF0aW9uPj4gbV9jb21wb3Np
dGVBbmltYXRpb25zOwotICAgIFRpbWVyIG1fYW5pbWF0aW9uVGltZXI7Ci0gICAgVGltZXIgbV91
cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcjsKLSAgICBGcmFtZSYgbV9mcmFtZTsKLQotICAg
IHN0cnVjdCBFdmVudFRvRGlzcGF0Y2ggewotICAgICAgICBSZWY8RWxlbWVudD4gZWxlbWVudDsK
LSAgICAgICAgQXRvbVN0cmluZyBldmVudFR5cGU7Ci0gICAgICAgIFN0cmluZyBuYW1lOwotICAg
ICAgICBkb3VibGUgZWxhcHNlZFRpbWU7Ci0gICAgfTsKLSAgICBWZWN0b3I8RXZlbnRUb0Rpc3Bh
dGNoPiBtX2V2ZW50c1RvRGlzcGF0Y2g7Ci0gICAgVmVjdG9yPFJlZjxFbGVtZW50Pj4gbV9lbGVt
ZW50Q2hhbmdlc1RvRGlzcGF0Y2g7Ci0gICAgSGFzaFNldDxEb2N1bWVudCo+IG1fc3VzcGVuZGVk
RG9jdW1lbnRzOwotCi0gICAgT3B0aW9uYWw8TW9ub3RvbmljVGltZT4gbV9iZWdpbkFuaW1hdGlv
blVwZGF0ZVRpbWU7Ci0KLSAgICB1c2luZyBBbmltYXRpb25zU2V0ID0gSGFzaFNldDxSZWZQdHI8
QW5pbWF0aW9uQmFzZT4+OwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0eWxlOwotICAgIEFuaW1hdGlvbnNTZXQgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlOwotCi0gICAgaW50IG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudDsKLQotICAg
IGJvb2wgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbjsKLSAgICBib29sIG1faXNT
dXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9yZXF1aXJlc0xheW91dCB7IGZhbHNlIH07
Ci0KLSAgICAvLyBVc2VkIHRvIGZsYWcgd2hldGhlciB3ZSBzaG91bGQgcmV2ZXJ0IHRvIHByZXZp
b3VzIGJ1Z2d5Ci0gICAgLy8gYmVoYXZpb3Igb2YgYWxsb3dpbmcgbmV3IHRyYW5zaXRpb25zIGFu
ZCBhbmltYXRpb25zIHRvCi0gICAgLy8gcnVuIGV2ZW4gd2hlbiB0aGlzIG9iamVjdCBpcyBzdXNw
ZW5kZWQuCi0gICAgYm9vbCBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsKLX07
Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMWJlNzU5YjA4MTYwOWJmNTMzMzQwZDMwYTAyNjE0NzM3NjUwNTAwNS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApA
QCAtMSwxODcyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDks
IDIwMTMsIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICogQ29weXJpZ2h0
IChDKSAyMDEyLCAyMDEzIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoK
LSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBB
cHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1
dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAot
ICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4g
cGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBB
TkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQK
LSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9O
IEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQot
I2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0K
LSNpbmNsdWRlICJDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1ND
cm9zc2ZhZGVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ZpbHRlckltYWdlVmFsdWUuaCIKLSNpbmNs
dWRlICJDU1NJbWFnZUdlbmVyYXRvclZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTSW1hZ2VWYWx1ZS5o
IgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudC5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRl
ICJDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIkNhbGN1bGF0aW9uVmFsdWUuaCIKLSNpbmNsdWRl
ICJDbGlwUGF0aE9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkNvbG9yQmxlbmRpbmcuaCIKLSNpbmNs
dWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNpbmNsdWRlICJGb250Q2FzY2FkZS5oIgotI2luY2x1
ZGUgIkZvbnRTZWxlY3Rpb25BbGdvcml0aG0uaCIKLSNpbmNsdWRlICJGb250VGFnZ2VkU2V0dGlu
Z3MuaCIKLSNpbmNsdWRlICJHYXBMZW5ndGguaCIKLSNpbmNsdWRlICJJZGVudGl0eVRyYW5zZm9y
bU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJNYXRyaXgzRFRy
YW5zZm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIk1hdHJpeFRyYW5zZm9ybU9wZXJhdGlvbi5o
IgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5j
bHVkZSAiU3R5bGVDYWNoZWRJbWFnZS5oIgotI2luY2x1ZGUgIlN0eWxlR2VuZXJhdGVkSW1hZ2Uu
aCIKLSNpbmNsdWRlICJTdHlsZVByb3BlcnR5U2hvcnRoYW5kLmgiCi0jaW5jbHVkZSAiU3R5bGVS
ZXNvbHZlci5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDxtZW1vcnk+Ci0jaW5j
bHVkZSA8d3RmL01hdGhFeHRyYXMuaD4KLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0cm95ZWQuaD4K
LSNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUG9pbnRlckNvbXBh
cmlzb24uaD4KLSNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0
L1RleHRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgaW5saW5lIGlu
dCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGludCBmcm9tLCBp
bnQgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHBy
b2dyZXNzKTsKLX0KLQotc3RhdGljIGlubGluZSBkb3VibGUgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqLCBkb3VibGUgZnJvbSwgZG91YmxlIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgZmxvYXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqLCBmbG9hdCBmcm9tLCBmbG9hdCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVy
biBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KGZyb20gKyAodG8gLSBmcm9tKSAqIHByb2dyZXNzKTsK
LX0KLQotc3RhdGljIGlubGluZSBDb2xvciBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIGNvbnN0IENvbG9yJiBmcm9tLCBjb25zdCBDb2xvciYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQot
c3RhdGljIGlubGluZSBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBMZW5ndGgmIGZyb20sIGNvbnN0IExlbmd0aCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBHYXBMZW5ndGggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBHYXBMZW5ndGgmIGZyb20sIGNvbnN0IEdhcExlbmd0aCYgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gKGZyb20uaXNOb3JtYWwoKSB8fCB0by5pc05vcm1h
bCgpKSA/IHRvIDogYmxlbmQoZnJvbS5sZW5ndGgoKSwgdG8ubGVuZ3RoKCksIHByb2dyZXNzKTsK
LX0KLQotc3RhdGljIGlubGluZSBMZW5ndGhTaXplIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhTaXplJiBmcm9tLCBjb25zdCBMZW5n
dGhTaXplJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiB7IGJsZW5kRnVuYyhh
bmltLCBmcm9tLndpZHRoLCB0by53aWR0aCwgcHJvZ3Jlc3MpLCBibGVuZEZ1bmMoYW5pbSwgZnJv
bS5oZWlnaHQsIHRvLmhlaWdodCwgcHJvZ3Jlc3MpIH07Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU2hh
ZG93U3R5bGUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFNoYWRvd1N0eWxlIGZyb20sIFNoYWRvd1N0eWxlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0g
ICAgaWYgKGZyb20gPT0gdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIGRvdWJsZSBmcm9t
VmFsID0gZnJvbSA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91YmxlIHRv
VmFsID0gdG8gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSByZXN1
bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICByZXR1
cm4gcmVzdWx0ID4gMCA/IFNoYWRvd1N0eWxlOjpOb3JtYWwgOiBTaGFkb3dTdHlsZTo6SW5zZXQ7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBTaGFkb3dEYXRh
KiBmcm9tLCBjb25zdCBTaGFkb3dEYXRhKiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFT
U0VSVChmcm9tICYmIHRvKTsKLSAgICBpZiAoZnJvbS0+c3R5bGUoKSAhPSB0by0+c3R5bGUoKSkK
LSAgICAgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oKnRvKTsKLQotICAgIHJldHVy
biBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KGJsZW5kKGZyb20tPmxvY2F0aW9uKCksIHRvLT5sb2Nh
dGlvbigpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnJhZGl1cygpLCB0by0+cmFk
aXVzKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+c3ByZWFkKCksIHRvLT5zcHJl
YWQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS0+c3R5bGUoKSwg
dG8tPnN0eWxlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS0+aXNXZWJraXRCb3hTaGFkb3co
KSwKLSAgICAgICAgYmxlbmQoZnJvbS0+Y29sb3IoKSwgdG8tPmNvbG9yKCksIHByb2dyZXNzKSk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVHJhbnNmb3JtT3BlcmF0aW9ucyBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbWF0aW9uLCBjb25zdCBUcmFuc2Zvcm1PcGVy
YXRpb25zJiBmcm9tLCBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dy
ZXNzKQotewotICAgIGlmIChhbmltYXRpb24tPnRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgp
KQotICAgICAgICByZXR1cm4gdG8uYmxlbmRCeU1hdGNoaW5nT3BlcmF0aW9ucyhmcm9tLCBwcm9n
cmVzcyk7Ci0gICAgcmV0dXJuIHRvLmJsZW5kQnlVc2luZ01hdHJpeEludGVycG9sYXRpb24oZnJv
bSwgcHJvZ3Jlc3MsIGlzPFJlbmRlckJveD4oYW5pbWF0aW9uLT5yZW5kZXJlcigpKSA/IGRvd25j
YXN0PFJlbmRlckJveD4oKmFuaW1hdGlvbi0+cmVuZGVyZXIoKSkuYm9yZGVyQm94UmVjdCgpLnNp
emUoKSA6IExheW91dFNpemUoKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPENsaXBQYXRo
T3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENs
aXBQYXRoT3BlcmF0aW9uKiBmcm9tLCBDbGlwUGF0aE9wZXJhdGlvbiogdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAg
ICAvLyBPdGhlciBjbGlwLXBhdGggb3BlcmF0aW9ucyB0aGFuIEJhc2ljU2hhcGVzIGNhbiBub3Qg
YmUgYW5pbWF0ZWQuCi0gICAgaWYgKGZyb20tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6
U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBDbGlwUGF0aE9wZXJhdGlvbjo6U2hhcGUpCi0gICAgICAg
IHJldHVybiB0bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9IGRvd25jYXN0
PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCpmcm9tKS5iYXNpY1NoYXBlKCk7Ci0gICAgY29uc3Qg
QmFzaWNTaGFwZSYgdG9TaGFwZSA9IGRvd25jYXN0PFNoYXBlQ2xpcFBhdGhPcGVyYXRpb24+KCp0
bykuYmFzaWNTaGFwZSgpOwotCi0gICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFwZSkp
Ci0gICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVybiBTaGFwZUNsaXBQYXRoT3BlcmF0aW9u
OjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgUmVmUHRyPFNoYXBlVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgU2hhcGVWYWx1ZSogZnJvbSwgU2hhcGVWYWx1ZSogdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4gdG87Ci0K
LSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlIHx8IHRvLT50
eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUpCi0gICAgICAgIHJldHVybiB0bzsKLQot
ICAgIGlmIChmcm9tLT5jc3NCb3goKSAhPSB0by0+Y3NzQm94KCkpCi0gICAgICAgIHJldHVybiB0
bzsKLQotICAgIGNvbnN0IEJhc2ljU2hhcGUmIGZyb21TaGFwZSA9ICpmcm9tLT5zaGFwZSgpOwot
ICAgIGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSAqdG8tPnNoYXBlKCk7Ci0KLSAgICBpZiAo
IWZyb21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAg
cmV0dXJuIFNoYXBlVmFsdWU6OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jl
c3MpLCB0by0+Y3NzQm94KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxGaWx0ZXJPcGVy
YXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsdGVy
T3BlcmF0aW9uKiBmcm9tT3AsIEZpbHRlck9wZXJhdGlvbiogdG9PcCwgZG91YmxlIHByb2dyZXNz
LCBib29sIGJsZW5kVG9QYXNzdGhyb3VnaCA9IGZhbHNlKQotewotICAgIEFTU0VSVCh0b09wKTsK
LSAgICByZXR1cm4gdG9PcC0+YmxlbmQoZnJvbU9wLCBwcm9ncmVzcywgYmxlbmRUb1Bhc3N0aHJv
dWdoKTsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5kRmlsdGVyT3Bl
cmF0aW9ucyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCAgY29uc3QgRmls
dGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLSAgICBzaXplX3QgZnJv
bVNpemUgPSBmcm9tLm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvU2l6ZSA9IHRv
Lm9wZXJhdGlvbnMoKS5zaXplKCk7Ci0gICAgc2l6ZV90IHNpemUgPSBzdGQ6Om1heChmcm9tU2l6
ZSwgdG9TaXplKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHNpemU7IGkrKykgewotICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBmcm9tT3AgPSAoaSA8IGZyb21TaXplKSA/IGZy
b20ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsKLSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gdG9PcCA9IChpIDwgdG9TaXplKSA/IHRvLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7
Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGJsZW5kZWRPcCA9IHRvT3AgPyBibGVu
ZEZ1bmMoYW5pbSwgZnJvbU9wLmdldCgpLCB0b09wLmdldCgpLCBwcm9ncmVzcykgOiAoZnJvbU9w
ID8gYmxlbmRGdW5jKGFuaW0sIDAsIGZyb21PcC5nZXQoKSwgcHJvZ3Jlc3MsIHRydWUpIDogMCk7
Ci0gICAgICAgIGlmIChibGVuZGVkT3ApCi0gICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygp
LmFwcGVuZChibGVuZGVkT3ApOwotICAgICAgICBlbHNlIHsKLSAgICAgICAgICAgIGF1dG8gaWRl
bnRpdHlPcCA9IFBhc3N0aHJvdWdoRmlsdGVyT3BlcmF0aW9uOjpjcmVhdGUoKTsKLSAgICAgICAg
ICAgIGlmIChwcm9ncmVzcyA+IDAuNSkKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9u
cygpLmFwcGVuZCh0b09wID8gdG9PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICAg
ICAgZWxzZQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGZyb21P
cCA/IGZyb21PcCA6IFdURk1vdmUoaWRlbnRpdHlPcCkpOwotICAgICAgICB9Ci0gICAgfQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRmlsdGVy
T3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9n
cmVzcywgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gQ1NTUHJvcGVydHlGaWx0ZXIpCi17Ci0g
ICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIGEgZmlsdGVy
IGZ1bmN0aW9uIGxpc3QsIHVzZSB0aGF0IHRvIGRvIGEgcGVyLWZ1bmN0aW9uIGFuaW1hdGlvbi4K
LSAgICAKLSAgICBib29sIGxpc3RzTWF0Y2ggPSBmYWxzZTsKLSAgICBzd2l0Y2ggKHByb3BlcnR5
SUQpIHsKLSAgICBjYXNlIENTU1Byb3BlcnR5RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0g
YW5pbS0+ZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9w
RmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+YmFja2Ryb3BGaWx0ZXJGdW5jdGlv
bkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jZW5kaWYKLSAgICBjYXNlIENTU1Byb3Bl
cnR5QXBwbGVDb2xvckZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmNvbG9yRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotICAgIGRlZmF1bHQ6Ci0g
ICAgICAgIGJyZWFrOwotICAgIH0KLSAgICAKLSAgICBpZiAobGlzdHNNYXRjaCkKLSAgICAgICAg
cmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7
Ci0gICAgZWxzZSB7Ci0gICAgICAgIC8vIElmIHRoZSBmaWx0ZXIgZnVuY3Rpb24gbGlzdHMgZG9u
J3QgbWF0Y2gsIHdlIGNvdWxkIHRyeSB0byBjcm9zcy1mYWRlLCBidXQgZG9uJ3QgeWV0IGhhdmUg
YSB3YXkgdG8gcmVwcmVzZW50IHRoYXQgaW4gQ1NTLgotICAgICAgICAvLyBGb3Igbm93IHdlJ2xs
IGp1c3QgZmFpbCB0byBhbmltYXRlLgotICAgICAgICByZXN1bHQgPSB0bzsKLSAgICB9Ci0KLSAg
ICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBi
bGVuZEZpbHRlcihjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDYWNoZWRJ
bWFnZSogaW1hZ2UsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKGltYWdlKTsKLSAg
ICBGaWx0ZXJPcGVyYXRpb25zIGZpbHRlclJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhh
bmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotCi0gICAgYXV0byBpbWFnZVZhbHVlID0gQ1NTSW1h
Z2VWYWx1ZTo6Y3JlYXRlKCppbWFnZSk7Ci0gICAgYXV0byBmaWx0ZXJWYWx1ZSA9IENvbXB1dGVk
U3R5bGVFeHRyYWN0b3I6OnZhbHVlRm9yRmlsdGVyKGFuaW0tPmN1cnJlbnRTdHlsZSgpLCBmaWx0
ZXJSZXN1bHQsIERvTm90QWRqdXN0UGl4ZWxWYWx1ZXMpOwotCi0gICAgYXV0byByZXN1bHQgPSBD
U1NGaWx0ZXJJbWFnZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShpbWFnZVZhbHVlKSwgV1RGTW92ZShm
aWx0ZXJWYWx1ZSkpOwotICAgIHJlc3VsdC5nZXQoKS5zZXRGaWx0ZXJPcGVyYXRpb25zKGZpbHRl
clJlc3VsdCk7Ci0gICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3Zl
KHJlc3VsdCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFZpc2liaWxpdHkgYmxlbmRGdW5jKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFZpc2liaWxpdHkgZnJvbSwgVmlzaWJp
bGl0eSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIC8vIEFueSBub24temVybyByZXN1bHQg
bWVhbnMgd2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZSB2aXNpYmxlLiBPbmx5IGF0IDAgZG8g
d2UgY29uc2lkZXIgdGhlIG9iamVjdCB0byBiZQotICAgIC8vIGludmlzaWJsZS4gVGhlIGludmlz
aWJsZSB2YWx1ZSB3ZSB1c2UgKFZpc2liaWxpdHk6OkhpZGRlbiB2cy4gVmlzaWJpbGl0eTo6Q29s
bGFwc2UpIGRlcGVuZHMgb24gdGhlIHNwZWNpZmllZCBmcm9tL3RvIHZhbHVlcy4KLSAgICBkb3Vi
bGUgZnJvbVZhbCA9IGZyb20gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAg
ZG91YmxlIHRvVmFsID0gdG8gPT0gVmlzaWJpbGl0eTo6VmlzaWJsZSA/IDEuIDogMC47Ci0gICAg
aWYgKGZyb21WYWwgPT0gdG9WYWwpCi0gICAgICAgIHJldHVybiB0bzsKLSAgICBkb3VibGUgcmVz
dWx0ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAgcmV0
dXJuIHJlc3VsdCA+IDAuID8gVmlzaWJpbGl0eTo6VmlzaWJsZSA6ICh0byAhPSBWaXNpYmlsaXR5
OjpWaXNpYmxlID8gdG8gOiBmcm9tKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0VW5kZXJsaW5l
T2Zmc2V0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0JiBmcm9tLCBjb25zdCBUZXh0VW5kZXJsaW5lT2Zmc2V0
JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8u
aXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdp
dGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3RoVmFs
dWUoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRl
V2l0aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyBi
bGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgVGV4
dERlY29yYXRpb25UaGlja25lc3MmIGZyb20sIGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLmlzTGVuZ3RoKCkgJiYgdG8u
aXNMZW5ndGgoKSkKLSAgICAgICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzOjpjcmVh
dGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0
aFZhbHVlKCksIHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHREZWNvcmF0aW9uVGhpY2tuZXNz
OjpjcmVhdGVXaXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIExlbmd0aEJveCBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoQm94
JiBmcm9tLCBjb25zdCBMZW5ndGhCb3gmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgTGVu
Z3RoQm94IHJlc3VsdChibGVuZEZ1bmMoYW5pbSwgZnJvbS50b3AoKSwgdG8udG9wKCksIHByb2dy
ZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLnJpZ2h0KCks
IHRvLnJpZ2h0KCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhh
bmltLCBmcm9tLmJvdHRvbSgpLCB0by5ib3R0b20oKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAg
ICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVmdCgpLCB0by5sZWZ0KCksIHByb2dyZXNz
KSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBTVkdMZW5ndGhWYWx1
ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IFNWR0xl
bmd0aFZhbHVlJiBmcm9tLCBjb25zdCBTVkdMZW5ndGhWYWx1ZSYgdG8sIGRvdWJsZSBwcm9ncmVz
cykKLXsKLSAgICByZXR1cm4gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb20sIHRvLCBuYXJyb3dQ
cmVjaXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmVjdG9yPFNW
R0xlbmd0aFZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IGNvbnN0IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4mIGZyb20sIGNvbnN0IFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4mIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgc2l6ZV90IGZyb21MZW5ndGgg
PSBmcm9tLnNpemUoKTsKLSAgICBzaXplX3QgdG9MZW5ndGggPSB0by5zaXplKCk7Ci0gICAgaWYg
KCFmcm9tTGVuZ3RoKQotICAgICAgICByZXR1cm4gIXByb2dyZXNzID8gZnJvbSA6IHRvOwotICAg
IGlmICghdG9MZW5ndGgpCi0gICAgICAgIHJldHVybiBwcm9ncmVzcyA9PSAxID8gZnJvbSA6IHRv
OwotICAgIHNpemVfdCByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoOwotICAgIGlmIChmcm9tTGVu
Z3RoICE9IHRvTGVuZ3RoKSB7Ci0gICAgICAgIGlmICghcmVtYWluZGVyKHN0ZDo6bWF4KGZyb21M
ZW5ndGgsIHRvTGVuZ3RoKSwgc3RkOjptaW4oZnJvbUxlbmd0aCwgdG9MZW5ndGgpKSkKLSAgICAg
ICAgICAgIHJlc3VsdExlbmd0aCA9IHN0ZDo6bWF4KGZyb21MZW5ndGgsIHRvTGVuZ3RoKTsKLSAg
ICAgICAgZWxzZQotICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aCAqIHRvTGVu
Z3RoOwotICAgIH0KLSAgICBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IHJlc3VsdChyZXN1bHRMZW5n
dGgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcmVzdWx0TGVuZ3RoOyArK2kpCi0gICAg
ICAgIHJlc3VsdFtpXSA9IFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tW2kgJSBmcm9tTGVuZ3Ro
XSwgdG9baSAlIHRvTGVuZ3RoXSwgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+
IGNyb3NzZmFkZUJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTdHlsZUNh
Y2hlZEltYWdlKiBmcm9tU3R5bGVJbWFnZSwgU3R5bGVDYWNoZWRJbWFnZSogdG9TdHlsZUltYWdl
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gSWYgcHJvZ3Jlc3MgaXMgYXQgb25lIG9mIHRo
ZSBleHRyZW1lcywgd2Ugd2FudCBnZXRDb21wdXRlZFN0eWxlIHRvIHNob3cgdGhlIGltYWdlLAot
ICAgIC8vIG5vdCBhIGNvbXBsZXRlZCBjcm9zcy1mYWRlLCBzbyB3ZSBoYW5kIGJhY2sgb25lIG9m
IHRoZSBleGlzdGluZyBpbWFnZXMuCi0gICAgaWYgKCFwcm9ncmVzcykKLSAgICAgICAgcmV0dXJu
IGZyb21TdHlsZUltYWdlOwotICAgIGlmIChwcm9ncmVzcyA9PSAxKQotICAgICAgICByZXR1cm4g
dG9TdHlsZUltYWdlOwotICAgIGlmICghZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkgfHwg
IXRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIHRvU3R5bGVJbWFn
ZTsKLQotICAgIGF1dG8gZnJvbUltYWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmZy
b21TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBhdXRvIHRvSW1hZ2VWYWx1ZSA9IENT
U0ltYWdlVmFsdWU6OmNyZWF0ZSgqdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKTsKLSAgICBh
dXRvIHBlcmNlbnRhZ2VWYWx1ZSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUocHJvZ3Jlc3Ms
IENTU1VuaXRUeXBlOjpDU1NfTlVNQkVSKTsKLQotICAgIGF1dG8gY3Jvc3NmYWRlVmFsdWUgPSBD
U1NDcm9zc2ZhZGVWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoZnJvbUltYWdlVmFsdWUpLCBXVEZNb3Zl
KHRvSW1hZ2VWYWx1ZSksIFdURk1vdmUocGVyY2VudGFnZVZhbHVlKSk7Ci0gICAgcmV0dXJuIFN0
eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZShXVEZNb3ZlKGNyb3NzZmFkZVZhbHVlKSk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTdHlsZUltYWdlKiBmcm9tLCBTdHlsZUltYWdlKiB0
bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJl
dHVybiB0bzsKLQotICAgIGZyb20gPSBmcm9tLT5zZWxlY3RlZEltYWdlKCk7Ci0gICAgdG8gPSB0
by0+c2VsZWN0ZWRJbWFnZSgpOwotCi0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0
dXJuIHRvOyAgICAKLQotICAgIC8vIEFuaW1hdGlvbiBiZXR3ZWVuIHR3byBnZW5lcmF0ZWQgaW1h
Z2VzLiBDcm9zcyBmYWRlIGZvciBhbGwgb3RoZXIgY2FzZXMuCi0gICAgaWYgKGlzPFN0eWxlR2Vu
ZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Ci0g
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxT
dHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBDU1NJbWFn
ZUdlbmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1h
Z2U+KCp0bykuaW1hZ2VWYWx1ZSgpOwotCi0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZh
bHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRl
ZCkpIHsKLSAgICAgICAgICAgIC8vIEFuaW1hdGlvbiBvZiBnZW5lcmF0ZWQgaW1hZ2VzIGp1c3Qg
cG9zc2libGUgaWYgaW5wdXQgaW1hZ2VzIGFyZSBlcXVhbC4KLSAgICAgICAgICAgIC8vIE90aGVy
d2lzZSBmYWxsIGJhY2sgdG8gY3Jvc3MgZmFkZSBhbmltYXRpb24uCi0gICAgICAgICAgICBDU1NG
aWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1
ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0Zp
bHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAg
ICAgICAgIGlmIChmcm9tRmlsdGVyLmVxdWFsSW5wdXRJbWFnZXModG9GaWx0ZXIpICYmIGZyb21G
aWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIo
YW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJhdGlv
bnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlz
PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Nyb3Nz
ZmFkZVZhbHVlJiBmcm9tQ3Jvc3NmYWRlID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KGZy
b21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIHRvQ3Jvc3NmYWRl
ID0gZG93bmNhc3Q8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAgICAg
IGlmIChmcm9tQ3Jvc3NmYWRlLmVxdWFsSW5wdXRJbWFnZXModG9Dcm9zc2ZhZGUpKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKGF1dG8gY3Jvc3NmYWRlQmxlbmQgPSB0b0Nyb3NzZmFkZS5ibGVuZChm
cm9tQ3Jvc3NmYWRlLCBwcm9ncmVzcykpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHls
ZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoKmNyb3NzZmFkZUJsZW5kKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgfQotCi0gICAgICAgIC8vIEZJWE1FOiBBZGQgc3VwcG9ydCBmb3IgYW5pbWF0aW9u
IGJldHdlZW4gdHdvICpncmFkaWVudCgpIGZ1bmN0aW9ucy4KLSAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTk1NgotICAgIH0gZWxzZSBpZiAoaXM8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykp
IHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25j
YXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlm
IChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKSkgewotICAgICAgICAgICAg
Q1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdl
VmFsdWU+KGZyb21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuY2FjaGVk
SW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigqdG8pLmNhY2hlZEltYWdlKCkg
PT0gZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVu
ZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVy
T3BlcmF0aW9ucygpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAgfQot
ICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0d2VlbiBjcm9zcy1mYWRlIGFu
ZCBpbWFnZSBzb3VyY2UuCi0gICAgfSBlbHNlIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJv
bSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAgICBDU1NJbWFnZUdl
bmVyYXRvclZhbHVlJiB0b0dlbmVyYXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+
KCp0bykuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiB0b0ZpbHRl
ciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVkKTsKLSAgICAgICAg
ICAgIGlmICh0b0ZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1h
Z2U+KCpmcm9tKS5jYWNoZWRJbWFnZSgpID09IHRvRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIHRvRmlsdGVyLmNhY2hlZEltYWdl
KCksIEZpbHRlck9wZXJhdGlvbnMoKSwgdG9GaWx0ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCBwcm9n
cmVzcyk7Ci0gICAgICAgIH0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJl
dHdlZW4gaW1hZ2Ugc291cmNlIGFuZCBjcm9zcy1mYWRlLgotICAgIH0KLQotICAgIC8vIEZJWE1F
OiBBZGQgc3VwcG9ydCBjcm9zcyBmYWRlIGJldHdlZW4gY2FjaGVkIGFuZCBnZW5lcmF0ZWQgaW1h
Z2VzLgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03ODI5
MwotICAgIGlmIChpczxTdHlsZUNhY2hlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJ
bWFnZT4oKnRvKSkKLSAgICAgICAgcmV0dXJuIGNyb3NzZmFkZUJsZW5kKGFuaW0sIGRvd25jYXN0
PFN0eWxlQ2FjaGVkSW1hZ2U+KGZyb20pLCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPih0byks
IHByb2dyZXNzKTsKLQotICAgIHJldHVybiB0bzsKLX0KLQotc3RhdGljIGlubGluZSBOaW5lUGll
Y2VJbWFnZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
Y29uc3QgTmluZVBpZWNlSW1hZ2UmIGZyb20sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiB0bywgZG91
YmxlIHByb2dyZXNzKQotewotICAgIGlmICghZnJvbS5oYXNJbWFnZSgpIHx8ICF0by5oYXNJbWFn
ZSgpKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICAvLyBGSVhNRSAoNzQxMTIpOiBTdXBwb3J0
IHRyYW5zaXRpb25pbmcgYmV0d2VlbiBOaW5lUGllY2VJbWFnZXMgdGhhdCBkaWZmZXIgYnkgbW9y
ZSB0aGFuIGltYWdlIGNvbnRlbnQuCi0KLSAgICBpZiAoZnJvbS5pbWFnZVNsaWNlcygpICE9IHRv
LmltYWdlU2xpY2VzKCkgfHwgZnJvbS5ib3JkZXJTbGljZXMoKSAhPSB0by5ib3JkZXJTbGljZXMo
KSB8fCBmcm9tLm91dHNldCgpICE9IHRvLm91dHNldCgpIHx8IGZyb20uZmlsbCgpICE9IHRvLmZp
bGwoKSB8fCBmcm9tLmhvcml6b250YWxSdWxlKCkgIT0gdG8uaG9yaXpvbnRhbFJ1bGUoKSB8fCBm
cm9tLnZlcnRpY2FsUnVsZSgpICE9IHRvLnZlcnRpY2FsUnVsZSgpKQotICAgICAgICByZXR1cm4g
dG87Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSBhbmltLT5yZW5kZXJlcigpKSB7Ci0gICAg
ICAgIGlmIChmcm9tLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSAhPSB0by5pbWFn
ZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkpCi0gICAgICAgICAgICByZXR1cm4gdG87Ci0g
ICAgfQotCi0gICAgcmV0dXJuIE5pbmVQaWVjZUltYWdlKGJsZW5kRnVuYyhhbmltLCBmcm9tLmlt
YWdlKCksIHRvLmltYWdlKCksIHByb2dyZXNzKSwKLSAgICAgICAgZnJvbS5pbWFnZVNsaWNlcygp
LCBmcm9tLmZpbGwoKSwgZnJvbS5ib3JkZXJTbGljZXMoKSwgZnJvbS5vdXRzZXQoKSwgZnJvbS5o
b3Jpem9udGFsUnVsZSgpLCBmcm9tLnZlcnRpY2FsUnVsZSgpKTsKLX0KLQotI2lmIEVOQUJMRShW
QVJJQVRJT05fRk9OVFMpCi0KLXN0YXRpYyBpbmxpbmUgRm9udFZhcmlhdGlvblNldHRpbmdzIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBGb250
VmFyaWF0aW9uU2V0dGluZ3MmIGZyb20sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5zaXplKCkgIT0gdG8uc2l6ZSgpKQot
ICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgRm9udFZhcmlhdGlv
blNldHRpbmdzIHJlc3VsdDsKLSAgICB1bnNpZ25lZCBzaXplID0gZnJvbS5zaXplKCk7Ci0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewotICAgICAgICBhdXRvJiBmcm9t
SXRlbSA9IGZyb20uYXQoaSk7Ci0gICAgICAgIGF1dG8mIHRvSXRlbSA9IHRvLmF0KGkpOwotICAg
ICAgICBpZiAoZnJvbUl0ZW0udGFnKCkgIT0gdG9JdGVtLnRhZygpKQotICAgICAgICAgICAgcmV0
dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgICAgICBmbG9hdCBpbnRlcnBvbGF0ZWQg
PSBibGVuZEZ1bmMoYW5pbSwgZnJvbUl0ZW0udmFsdWUoKSwgdG9JdGVtLnZhbHVlKCksIHByb2dy
ZXNzKTsKLSAgICAgICAgcmVzdWx0Lmluc2VydCh7IGZyb21JdGVtLnRhZygpLCBpbnRlcnBvbGF0
ZWQgfSk7Ci0gICAgfQotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLSNlbmRpZgotCi1zdGF0aWMg
aW5saW5lIEZvbnRTZWxlY3Rpb25WYWx1ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgRm9udFNlbGVjdGlvblZhbHVlIGZyb20sIEZvbnRTZWxlY3Rpb25W
YWx1ZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFs
dWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tKSwgc3RhdGljX2Nhc3Q8
ZmxvYXQ+KHRvKSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBPcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBPcHRpb25hbDxGb250U2VsZWN0aW9uVmFsdWU+IGZyb20sIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9udFNl
bGVjdGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbS52YWx1
ZSgpKSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KHRvLnZhbHVlKCkpLCBwcm9ncmVzcykpOwotfQotCi1j
bGFzcyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9OT05DT1BZ
QUJMRShBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKTsKLSAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKENTU1Byb3BlcnR5SUQgcHJvcCkKLSAgICAgICAgOiBtX3Byb3AocHJvcCkKLSAgICB7Ci0g
ICAgfQotICAgIHZpcnR1YWwgfkFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9IGRlZmF1
bHQ7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3QgeyByZXR1
cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgYm9vbCBjYW5J
bnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKikgY29uc3Qg
eyByZXR1cm4gdHJ1ZTsgfQotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0
IFJlbmRlclN0eWxlKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0gICAgCi0jaWYgIUxPR19ESVNBQkxF
RAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSkgY29uc3Qg
PSAwOwotI2VuZGlmCi0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1
cm4gbV9wcm9wOyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgp
IGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJRCBt
X3Byb3A7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ckdldHRlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIo
Q1NTUHJvcGVydHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCkKLSAg
ICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9n
ZXR0ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlm
ICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIChh
LT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSAgICBUIHZhbHVl
KGNvbnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4q
bV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5k
ZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIg
PDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8
ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICBUIChSZW5kZXJTdHlsZTo6Km1fZ2V0
dGVyKSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9wZXJ0
eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+IHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlJRCBwcm9wLCBUIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUPihw
cm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJl
bmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+
Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46
Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCks
IHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoVCk7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFJlZkNv
dW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQqIChSZW5kZXJTdHlsZTo6KmdldHRl
cikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAg
ICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3AsIGdldHRlcikKLSAgICAgICAg
LCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhh
bmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KlBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0K
LQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFJlZlB0cjxU
PiYmKTsKLX07Ci0KLWNsYXNzIExlbmd0aFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOwotcHVibGljOgotICAgIExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHBy
b3AsIGNvbnN0IExlbmd0aCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoTGVuZ3RoJiYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIHJldHVybiAhKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3Ro
Jj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpICYmICEoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxj
b25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCk7Ci0gICAgfQotCi0gICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+
OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
KFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKExlbmd0aCYmKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBl
bmFtZSBUPgotY2xhc3MgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcCwgY29uc3QgVCYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoVCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgVCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0g
ICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVj
dGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQmJik7Ci19OwotCi1jbGFz
cyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aCA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPENsaXBQYXRoT3BlcmF0aW9uPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJvcGVydHlJRCBwcm9wLCBD
bGlwUGF0aE9wZXJhdGlvbiogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChS
ZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPENsaXBQYXRoT3BlcmF0aW9uPiYmKSkKLSAgICAg
ICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPENsaXBQYXRoT3BlcmF0aW9uPihwcm9wLCBn
ZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90
aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAvLyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJu
IGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0g
YikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAg
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQ
YXRoQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlw
UGF0aEIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoY2xpcFBhdGhBID09IGNsaXBQ
YXRoQikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWNsaXBQYXRoQSB8
fCAhY2xpcFBhdGhCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4g
KmNsaXBQYXRoQSA9PSAqY2xpcFBhdGhCOwotICAgIH0KLX07Ci0KLSNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzIDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJGb250VmFy
aWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlJRCBwcm9wLCBGb250VmFyaWF0aW9uU2V0dGluZ3Mg
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoRm9udFZhcmlhdGlvblNldHRpbmdzKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Rm9u
dFZhcmlhdGlvblNldHRpbmdzPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50
ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAv
LyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1
cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25TZXR0aW5nc0EgPSAoYS0+
Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlh
dGlvblNldHRpbmdzQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiB2YXJpYXRp
b25TZXR0aW5nc0EgPT0gdmFyaWF0aW9uU2V0dGluZ3NCOwotICAgIH0KLX07Ci0jZW5kaWYKLQot
Y2xhc3MgUHJvcGVydHlXcmFwcGVyU2hhcGUgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3Jh
cHBlcjxTaGFwZVZhbHVlPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBTaGFwZVZhbHVl
KiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0
dGVyKShSZWZQdHI8U2hhcGVWYWx1ZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5
V3JhcHBlcjxTaGFwZVZhbHVlPihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgLy8gSWYgdGhlIHN0eWxlIHBvaW50
ZXJzIGFyZSB0aGUgc2FtZSwgZG9uJ3QgYm90aGVyIGRvaW5nIHRoZSB0ZXN0LgotICAgICAgICAv
LyBJZiBlaXRoZXIgaXMgbnVsbCwgcmV0dXJuIGZhbHNlLiBJZiBib3RoIGFyZSBudWxsLCByZXR1
cm4gdHJ1ZS4KLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgU2hhcGVWYWx1ZSogc2hhcGVBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU2hhcGVW
YWx1ZSogc2hhcGVCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKHNoYXBlQSA9PSBz
aGFwZUIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFzaGFwZUEgfHwg
IXNoYXBlQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpzaGFw
ZUEgPT0gKnNoYXBlQjsKLSAgICB9Ci19OwotCi1jbGFzcyBTdHlsZUltYWdlUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4gewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFN0eWxlSW1hZ2VQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBTdHlsZUltYWdlKiAoUmVuZGVyU3R5bGU6Oipn
ZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8U3R5bGVJ
bWFnZT4mJikpCi0gICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdl
Pihwcm9wLCBnZXR0ZXIsIHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
U3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgU3R5bGVJbWFn
ZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIGFyZVBvaW50aW5n
VG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5
V3JhcHBlckNvbG9yIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdy
YXBwZXJDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6
OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xv
ciYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xvciY+KHByb3As
IGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVy
U3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9z
ZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBD
b2xvciY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29s
b3ImPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAg
dm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNz
IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkoKQotICAgICAgICA6IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPcGFjaXR5LCAmUmVuZGVyU3R5bGU6Om9wYWNpdHksICZS
ZW5kZXJTdHlsZTo6c2V0T3BhY2l0eSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmltYXRp
b25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQotCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGRzdC0+c2V0T3Bh
Y2l0eShibGVuZEZ1bmMoYW5pbSwgYS0+b3BhY2l0eSgpLCBiLT5vcGFjaXR5KCksIHByb2dyZXNz
KSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zv
cm0gOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPiB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFw
cGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0oKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25z
dCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4oQ1NTUHJvcGVydHlUcmFuc2Zvcm0sICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybSkKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gdHJ1ZTsgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGRzdC0+c2V0VHJhbnNmb3JtKGJsZW5kRnVuYyhhbmltLCBhLT50cmFuc2Zvcm0oKSwg
Yi0+dHJhbnNmb3JtKCksIHByb2dyZXNzKSk7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlX
cmFwcGVyRmlsdGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3Bl
cnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQsIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXIpKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmKSkKLSAgICAgICAgOiBQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+KHByb3BlcnR5SUQsIGdldHRlciwgc2V0
dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIHByb3BlcnR5KCkgPT0gQ1NTUHJv
cGVydHlGaWx0ZXIKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAgfHwg
cHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyCi0jZW5kaWYKLSAg
ICAgICAgICAgIDsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dldHRlcikoKSwg
KGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+OjptX2dl
dHRlcikoKSwgcHJvZ3Jlc3MsIHByb3BlcnR5KCkpKTsKLSAgICB9Ci19OwotCi1zdGF0aWMgaW5s
aW5lIHNpemVfdCBzaGFkb3dMaXN0TGVuZ3RoKGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvdykKLXsK
LSAgICBzaXplX3QgY291bnQ7Ci0gICAgZm9yIChjb3VudCA9IDA7IHNoYWRvdzsgc2hhZG93ID0g
c2hhZG93LT5uZXh0KCkpCi0gICAgICAgICsrY291bnQ7Ci0gICAgcmV0dXJuIGNvdW50OwotfQot
Ci1zdGF0aWMgaW5saW5lIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0ZvckJsZW5kaW5nKGNvbnN0
IFNoYWRvd0RhdGEqIHNyY1NoYWRvdywgY29uc3QgU2hhZG93RGF0YSogb3RoZXJTaGFkb3cpCi17
Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRTaGFkb3dEYXRh
KExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIGZhbHNlLCBDb2xvcjo6
dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+
IGRlZmF1bHRJbnNldFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6
Okluc2V0LCBmYWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBOZXZl
ckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQ
b2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJl
bnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRJ
bnNldFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6
Okluc2V0LCB0cnVlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0KLSAgICBpZiAoc3JjU2hh
ZG93KQotICAgICAgICByZXR1cm4gc3JjU2hhZG93OwotCi0gICAgaWYgKG90aGVyU2hhZG93LT5z
dHlsZSgpID09IFNoYWRvd1N0eWxlOjpJbnNldCkKLSAgICAgICAgcmV0dXJuIG90aGVyU2hhZG93
LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRJbnNldFdlYktpdEJveFNoYWRvd0RhdGEu
Z2V0KCkgOiAmZGVmYXVsdEluc2V0U2hhZG93RGF0YS5nZXQoKTsKLQotICAgIHJldHVybiBvdGhl
clNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0V2ViS2l0Qm94U2hhZG93RGF0
YS5nZXQoKSA6ICZkZWZhdWx0U2hhZG93RGF0YS5nZXQoKTsKLX0KLQotY2xhc3MgUHJvcGVydHlX
cmFwcGVyU2hhZG93IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlclNo
YWRvdyhDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiwgYm9vbCkpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNvbnN0IFNo
YWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAodHJ1
ZSkgewotICAgICAgICAgICAgLy8gZW5kIG9mIGJvdGggbGlzdHMKLSAgICAgICAgICAgIGlmICgh
c2hhZG93QSAmJiAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAg
ICAgICAgICAgLy8gZW5kIG9mIGp1c3Qgb25lIG9mIHRoZSBsaXN0cwotICAgICAgICAgICAgaWYg
KCFzaGFkb3dBIHx8ICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICAgICAgaWYgKCpzaGFkb3dBICE9ICpzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAg
ICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0
ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVy
KSgpOwotCi0gICAgICAgIGludCBmcm9tTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dB
KTsKLSAgICAgICAgaW50IHRvTGVuZ3RoID0gc2hhZG93TGlzdExlbmd0aChzaGFkb3dCKTsKLQot
ICAgICAgICBpZiAoZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCB8fCAoZnJvbUxlbmd0aCA8PSAxICYm
IHRvTGVuZ3RoIDw9IDEpKSB7Ci0gICAgICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kU2lt
cGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0Ip
LCBmYWxzZSk7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KLQotICAgICAgICAoZHN0
LT4qbV9zZXR0ZXIpKGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBz
aGFkb3dBLCBzaGFkb3dCLCBmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIGZhbHNlKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0g
ICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcg
U2hhZG93RGF0YSBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRl
Z2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIHN0ZDo6dW5p
cXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3Qg
U2hhZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOwot
ICAgICAgICBTaGFkb3dEYXRhKiBsYXN0U2hhZG93ID0gMDsKLQotICAgICAgICB3aGlsZSAoc2hh
ZG93QSB8fCBzaGFkb3dCKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFk
b3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dBLCBzaGFkb3dCKTsKLSAgICAgICAgICAgIGNv
bnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0IsIHNo
YWRvd0EpOwotCi0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRl
ZFNoYWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3Mp
OwotICAgICAgICAgICAgU2hhZG93RGF0YSogYmxlbmRlZFNoYWRvd1B0ciA9IGJsZW5kZWRTaGFk
b3cuZ2V0KCk7Ci0KLSAgICAgICAgICAgIGlmICghbGFzdFNoYWRvdykKLSAgICAgICAgICAgICAg
ICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICBsYXN0U2hhZG93LT5zZXROZXh0KFdURk1vdmUoYmxlbmRlZFNo
YWRvdykpOwotCi0gICAgICAgICAgICBsYXN0U2hhZG93ID0gYmxlbmRlZFNoYWRvd1B0cjsKLQot
ICAgICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EgPyBzaGFkb3dBLT5uZXh0KCkgOiAwOwotICAg
ICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0IgPyBzaGFkb3dCLT5uZXh0KCkgOiAwOwotICAgICAg
ICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAgc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kTWlzbWF0Y2hlZFNoYWRvd0xpc3RzKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGRvdWJsZSBwcm9ncmVzcywgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSwgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiwgaW50IGZyb21MZW5n
dGgsIGludCB0b0xlbmd0aCkgY29uc3QKLSAgICB7Ci0gICAgICAgIC8vIFRoZSBzaGFkb3dzIGlu
IFNoYWRvd0RhdGEgYXJlIHN0b3JlZCBpbiByZXZlcnNlIG9yZGVyLCBzbyB3aGVuIGFuaW1hdGlu
ZyBtaXNtYXRjaGVkIGxpc3RzLAotICAgICAgICAvLyByZXZlcnNlIHRoZW0gYW5kIG1hdGNoIGZy
b20gdGhlIGVuZC4KLSAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiBmcm9tU2hh
ZG93cyhmcm9tTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IGZyb21MZW5ndGggLSAxOyBp
ID49IDA7IC0taSkgewotICAgICAgICAgICAgZnJvbVNoYWRvd3NbaV0gPSBzaGFkb3dBOwotICAg
ICAgICAgICAgc2hhZG93QSA9IHNoYWRvd0EtPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gdG9TaGFkb3dzKHRvTGVuZ3RoKTsKLSAgICAg
ICAgZm9yIChpbnQgaSA9IHRvTGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKLSAgICAgICAgICAg
IHRvU2hhZG93c1tpXSA9IHNoYWRvd0I7Ci0gICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93Qi0+
bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
IG5ld1NoYWRvd0RhdGE7Ci0KLSAgICAgICAgaW50IG1heExlbmd0aCA9IHN0ZDo6bWF4KGZyb21M
ZW5ndGgsIHRvTGVuZ3RoKTsKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtYXhMZW5ndGg7
ICsraSkgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZnJvbVNoYWRvdyA9IGkgPCBm
cm9tTGVuZ3RoID8gZnJvbVNoYWRvd3NbaV0gOiAwOwotICAgICAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogdG9TaGFkb3cgPSBpIDwgdG9MZW5ndGggPyB0b1NoYWRvd3NbaV0gOiAwOwotCi0gICAg
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhm
cm9tU2hhZG93LCB0b1NoYWRvdyk7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBkc3RT
aGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyh0b1NoYWRvdywgZnJvbVNoYWRvdyk7Ci0KLSAgICAg
ICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRG
dW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICAv
LyBJbnNlcnQgYXQgdGhlIHN0YXJ0IG9mIHRoZSBsaXN0IHRvIHByZXNlcnZlIHRoZSBvcmRlci4K
LSAgICAgICAgICAgIGJsZW5kZWRTaGFkb3ctPnNldE5leHQoV1RGTW92ZShuZXdTaGFkb3dEYXRh
KSk7Ci0gICAgICAgICAgICBuZXdTaGFkb3dEYXRhID0gV1RGTW92ZShibGVuZGVkU2hhZG93KTsK
LSAgICAgICAgfQotCi0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQotICAg
IGNvbnN0IFNoYWRvd0RhdGEqIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAg
IHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRh
PiwgYm9vbCk7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvciA6
IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xv
cihDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpKQotICAg
ICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX2dl
dHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAg
Q29sb3IgdG9Db2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFs
aWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQot
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3Ig
PSBhLT5jb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAg
ICAgdG9Db2xvciA9IGItPmNvbG9yKCk7Ci0KLSAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0
b0NvbG9yOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSB2YWx1ZShhKTsKLSAgICAgICAgQ29sb3IgdG9D
b2xvciA9IHZhbHVlKGIpOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAh
dG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsK
LSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRvQ29sb3IgPSBi
LT5jb2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9t
Q29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0gICAgQ29sb3IgdmFsdWUoY29u
c3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPiptX2dl
dHRlcikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0
eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAg
IC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1h
dGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0
eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBh
dCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVz
cykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRl
OgotICAgIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAg
ICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotCi1l
bnVtIE1heWJlSW52YWxpZENvbG9yVGFnIHsgTWF5YmVJbnZhbGlkQ29sb3IgfTsKLWNsYXNzIFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJv
cCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVu
ZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9yJiAo
UmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFByb3Bl
cnR5V3JhcHBlckNvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0gICAgICAgICwgbV92aXNp
dGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlckNvbG9yPihwcm9wLCB2aXNpdGVk
R2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7Ci0gICAgfQotICAgIFByb3BlcnR5V3JhcHBl
clZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgTWF5YmVJbnZhbGlkQ29s
b3JUYWcsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQg
KFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBDb2xv
ciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQ
cm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQot
ICAgICAgICAsIG1fdmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCi0gICAg
ewotICAgIH0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gbV93cmFw
cGVyLT5lcXVhbHMoYSwgYikgJiYgbV92aXNpdGVkV3JhcHBlci0+ZXF1YWxzKGEsIGIpOwotICAg
IH0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgbV93
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNp
dGVkV3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBtX3dyYXBwZXItPmxvZ0JsZW5k
KGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0ZWRXcmFwcGVyLT5sb2dC
bGVuZChhLCBiLCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV93cmFw
cGVyOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBt
X3Zpc2l0ZWRXcmFwcGVyOwotfTsKLQotLy8gV3JhcHBlciBiYXNlIGNsYXNzIGZvciBhbiBhbmlt
YXRhYmxlIHByb3BlcnR5IGluIGEgRmlsbExheWVyCi1jbGFzcyBGaWxsTGF5ZXJBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKENTU1Byb3BlcnR5
SUQgcHJvcGVydHkpCi0gICAgICAgIDogbV9wcm9wZXJ0eShwcm9wZXJ0eSkKLSAgICB7Ci0gICAg
fQotICAgIHZpcnR1YWwgfkZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoKSA9
IGRlZmF1bHQ7Ci0KLSAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0eTsgfQotCi0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIq
LCBjb25zdCBGaWxsTGF5ZXIqKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5
ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLQotI2lmICFMT0dfRElT
QUJMRUQKLSAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQs
IGNvbnN0IEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOwot
I2VuZGlmCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9wZXJ0eTsKLX07Ci0KLXRl
bXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVy
IDogcHVibGljIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcik7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFQgKEZpbGxMYXllcjo6KmdldHRl
cikoKSBjb25zdCkKLSAgICAgICAgOiBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKHByb3BlcnR5KQotICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIpKCkgPT0gKGItPiptX2dldHRlciko
KTsKLSAgICB9Ci0KLSAgICBUIHZhbHVlKGNvbnN0IEZpbGxMYXllciogbGF5ZXIpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gKGxheWVyLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQs
IGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9u
cywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkp
IDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIg
PDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8
PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoK
LSAgICBUIChGaWxsTGF5ZXI6OiptX2dldHRlcikoKSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlIDx0
eXBlbmFtZSBUPgotY2xhc3MgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBUJiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIpKFQpKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBtX3Nl
dHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXll
ciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCAoYi0+
KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46Om1fZ2V0dGVyKSgpLCBw
cm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxM
YXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojpw
cm9wZXJ0eSgpKQotICAgICAgICAgICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYSkKLSAgICAgICAgICAgIDw8ICIgdG8gIiA8
PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShiKQotICAg
ICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBUJj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFQpOwotfTsKLQotY2xhc3MgRmls
bExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBMZW5ndGgmIChGaWxsTGF5ZXI6OipsZW5ndGhHZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Kmxlbmd0aFNldHRlcikoTGVuZ3RoKSwgRWRnZSAo
RmlsbExheWVyOjoqb3JpZ2luR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6Oipvcmln
aW5TZXR0ZXIpKEVkZ2UpLCBFZGdlIGZhckVkZ2UpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3BlcnR5LCBsZW5ndGhHZXR0ZXIpCi0g
ICAgICAgICwgbV9sZW5ndGhTZXR0ZXIobGVuZ3RoU2V0dGVyKQotICAgICAgICAsIG1fb3JpZ2lu
R2V0dGVyKG9yaWdpbkdldHRlcikKLSAgICAgICAgLCBtX29yaWdpblNldHRlcihvcmlnaW5TZXR0
ZXIpCi0gICAgICAgICwgbV9mYXJFZGdlKGZhckVkZ2UpCi0gICAgewotICAgIH0KLQotICAgIGJv
b2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0
cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0K
LSAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExlbmd0aCB0b0xl
bmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+
OjptX2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2UgPSAoYS0+Km1f
b3JpZ2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9vcmlnaW5HZXR0
ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICByZXR1cm4gZnJvbUxlbmd0aCA9PSB0b0xlbmd0aCAm
JiBmcm9tRWRnZSA9PSB0b0VkZ2U7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExh
eWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICBM
ZW5ndGggdG9MZW5ndGggPSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdl
ID0gKGEtPiptX29yaWdpbkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1f
b3JpZ2luR2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgaWYgKGZyb21FZGdlICE9IHRvRWRn
ZSkgewotICAgICAgICAgICAgLy8gQ29udmVydCB0aGUgcmlnaHQvYm90dG9tIGludG8gYSBjYWxj
IGV4cHJlc3Npb24sCi0gICAgICAgICAgICBpZiAoZnJvbUVkZ2UgPT0gbV9mYXJFZGdlKQotICAg
ICAgICAgICAgICAgIGZyb21MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5ndGgo
ZnJvbUxlbmd0aCk7Ci0gICAgICAgICAgICBlbHNlIGlmICh0b0VkZ2UgPT0gbV9mYXJFZGdlKSB7
Ci0gICAgICAgICAgICAgICAgdG9MZW5ndGggPSBjb252ZXJ0VG8xMDBQZXJjZW50TWludXNMZW5n
dGgodG9MZW5ndGgpOwotICAgICAgICAgICAgICAgIChkc3QtPiptX29yaWdpblNldHRlcikoZnJv
bUVkZ2UpOyAvLyBOb3cgd2UgaGF2ZSBhIGNhbGMoMTAwJSAtIGwpLCBpdCdzIHJlbGF0aXZlIHRv
IHRoZSBsZWZ0L3RvcCBlZGdlLgotICAgICAgICAgICAgfQotICAgICAgICB9Ci0KLSAgICAgICAg
KGRzdC0+Km1fbGVuZ3RoU2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUxlbmd0aCwgdG9MZW5n
dGgsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9n
QmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3Qg
RmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIg
PDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8
ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVy
UmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7
Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX2xl
bmd0aFNldHRlcikoTGVuZ3RoKTsKLSAgICBFZGdlIChGaWxsTGF5ZXI6OiptX29yaWdpbkdldHRl
cikoKSBjb25zdDsKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX29yaWdpblNldHRlcikoRWRnZSk7
Ci0gICAgRWRnZSBtX2ZhckVkZ2U7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNz
IEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQqPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBUKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxs
TGF5ZXI6OipzZXR0ZXIpKFJlZlB0cjxUPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEs
IGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9
Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShB
bmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUoRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6cHJvcGVydHkoKSkKLSAgICAgICAgICAg
IDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVl
KGEpCi0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPFQqPjo6dmFsdWUoYikKLSAgICAgICAgICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpG
b3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0j
ZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShSZWZQ
dHI8VD4mJik7Ci19OwotCi1jbGFzcyBGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVy
IDogcHVibGljIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4g
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIEZpbGxMYXllclN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgU3R5bGVJbWFn
ZSogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqc2V0dGVy
KShSZWZQdHI8U3R5bGVJbWFnZT4mJikpCi0gICAgICAgIDogRmlsbExheWVyUmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPihwcm9wZXJ0eSwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAg
ewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICBpZiAoYSA9PSBiKQotICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VBID0gKGEtPiptX2dldHRl
cikoKTsKLSAgICAgICAgU3R5bGVJbWFnZSogaW1hZ2VCID0gKGItPiptX2dldHRlcikoKTsKLSAg
ICAgICAgcmV0dXJuIGFyZVBvaW50aW5nVG9FcXVhbERhdGEoaW1hZ2VBLCBpbWFnZUIpOwotICAg
IH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXll
ciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShw
cm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikg
PDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhw
cm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotfTsK
LQotY2xhc3MgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICB0eXBlZGVmIGNvbnN0IEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzR2V0dGVy
KSgpIGNvbnN0OwotICAgIHR5cGVkZWYgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNB
Y2Nlc3NvcikoKTsKLQotICAgIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgTGF5ZXJzR2V0dGVyIGdldHRlciwgTGF5ZXJzQWNjZXNzb3IgYWNjZXNzb3Ip
Ci0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAg
ICAgLCBtX2xheWVyc0dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9sYXllcnNBY2Nlc3Nvcihh
Y2Nlc3NvcikKLSAgICB7Ci0gICAgICAgIHN3aXRjaCAocHJvcGVydHkpIHsKLSAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblg6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25YOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9w
ZXJ0eSwgJkZpbGxMYXllcjo6eFBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRYUG9zaXRpb24sICZG
aWxsTGF5ZXI6OmJhY2tncm91bmRYT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWE9y
aWdpbiwgRWRnZTo6UmlnaHQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWToKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVy
ID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHks
ICZGaWxsTGF5ZXI6OnlQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WVBvc2l0aW9uLCAmRmlsbExh
eWVyOjpiYWNrZ3JvdW5kWU9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFlPcmlnaW4s
IEVkZ2U6OkJvdHRvbSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRTaXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2dy
b3VuZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRNYXNrU2l6ZToKLSAgICAg
ICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4+KHByb3BlcnR5LCAmRmlsbExheWVyOjpzaXplTGVu
Z3RoLCAmRmlsbExheWVyOjpzZXRTaXplTGVuZ3RoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlOgotICAgICAgICAgICAgbV9maWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmlsbExheWVyOjppbWFnZSwgJkZpbGxMYXllcjo6c2V0
SW1hZ2UpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGRlZmF1bHQ6Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGF1dG8qIGZy
b21MYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiB0b0xheWVy
ID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKGZyb21MYXllciAm
JiB0b0xheWVyKSB7Ci0gICAgICAgICAgICBpZiAoIW1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVy
LT5lcXVhbHMoZnJvbUxheWVyLCB0b0xheWVyKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIGZyb21MYXllciA9IGZyb21MYXllci0+bmV4dCgpOwotICAgICAg
ICAgICAgdG9MYXllciA9IHRvTGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAg
ICAgICAgYXV0byogYkxheWVyID0gJihiLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1
dG8qIGRzdExheWVyID0gJihkc3QtPiptX2xheWVyc0FjY2Vzc29yKSgpOwotCi0gICAgICAgIHdo
aWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAgICAgICAgICBtX2ZpbGxM
YXllclByb3BlcnR5V3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0TGF5ZXIsIGFMYXllciwgYkxheWVy
LCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5leHQoKTsKLSAgICAg
ICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAgZHN0TGF5ZXIgPSBk
c3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAot
ICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRlclN0
eWxlKiB0bywgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgYXV0byogYUxheWVyID0gJihmcm9tLT4qbV9sYXllcnNH
ZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIGJMYXllciA9ICYodG8tPiptX2xheWVyc0dldHRlciko
KTsKLSAgICAgICAgYXV0byogZHN0TGF5ZXIgPSAmKHJlc3VsdC0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwotCi0gICAgICAgIHdoaWxlIChhTGF5ZXIgJiYgYkxheWVyICYmIGRzdExheWVyKSB7Ci0gICAg
ICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+bG9nQmxlbmQoZHN0TGF5ZXIsIGFM
YXllciwgYkxheWVyLCBwcm9ncmVzcyk7Ci0gICAgICAgICAgICBhTGF5ZXIgPSBhTGF5ZXItPm5l
eHQoKTsKLSAgICAgICAgICAgIGJMYXllciA9IGJMYXllci0+bmV4dCgpOwotICAgICAgICAgICAg
ZHN0TGF5ZXIgPSBkc3RMYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0K
LXByaXZhdGU6Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2U+IG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyOwotCi0gICAgTGF5ZXJzR2V0
dGVyIG1fbGF5ZXJzR2V0dGVyOwotICAgIExheWVyc0FjY2Vzc29yIG1fbGF5ZXJzQWNjZXNzb3I7
Ci19OwotCi1jbGFzcyBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJs
aWM6Ci0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbG9uZ2hhbmRXcmFwcGVycykK
LSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAgICAg
ICAsIG1fcHJvcGVydHlXcmFwcGVycyhXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKQotICAgIHsK
LSAgICB9Ci0KLSAgICBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIHRydWU7IH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChh
ID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6
IG1fcHJvcGVydHlXcmFwcGVycykgewotICAgICAgICAgICAgaWYgKCF3cmFwcGVyLT5lcXVhbHMo
YSwgYikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICB9Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMp
Ci0gICAgICAgICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsK
LSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiBkc3Qs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYg
d3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykKLSAgICAgICAgICAgIHdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi0gICAgY29uc3QgVmVj
dG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiYgcHJvcGVydHlXcmFwcGVycygpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyczsgfQotCi1wcml2YXRlOgotICAgIFZlY3Rv
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwotfTsK
LQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRmxleCA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJGbGV4KCkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKENTU1Byb3BlcnR5RmxleCkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQot
ICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAg
cmV0dXJuIGEtPmZsZXhCYXNpcygpID09IGItPmZsZXhCYXNpcygpICYmIGEtPmZsZXhHcm93KCkg
PT0gYi0+ZmxleEdyb3coKSAmJiBhLT5mbGV4U2hyaW5rKCkgPT0gYi0+ZmxleFNocmluaygpOwot
ICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBkc3QtPnNldEZsZXhCYXNpcyhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleEJhc2lzKCksIGItPmZs
ZXhCYXNpcygpLCBwcm9ncmVzcykpOwotICAgICAgICBkc3QtPnNldEZsZXhHcm93KGJsZW5kRnVu
YyhhbmltLCBhLT5mbGV4R3JvdygpLCBiLT5mbGV4R3JvdygpLCBwcm9ncmVzcykpOwotICAgICAg
ICBkc3QtPnNldEZsZXhTaHJpbmsoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhTaHJpbmsoKSwgYi0+
ZmxleFNocmluaygpLCBwcm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBmbGV4IGF0ICIgPDwgVGV4dFN0cmVh
bTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7Ci0gICAgfQotI2Vu
ZGlmCi19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludCA6IHB1YmxpYyBBbmltYXRp
b25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUlEIHByb3AsIFNW
R1BhaW50VHlwZSAoUmVuZGVyU3R5bGU6OipwYWludFR5cGVHZXR0ZXIpKCkgY29uc3QsIENvbG9y
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZShwcm9wKQotICAgICAgICAsIG1fcGFpbnRUeXBlR2V0dGVyKHBhaW50VHlwZUdldHRlcikKLSAg
ICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAg
IHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBi
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRl
cikoKSAhPSAoYi0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgICAgIC8vIFdlIG9ubHkgc3VwcG9ydCBhbmltYXRpb25zIGJldHdlZW4gU1ZH
UGFpbnRzIHRoYXQgYXJlIHB1cmUgQ29sb3IgdmFsdWVzLgotICAgICAgICAvLyBGb3IgZXZlcnl0
aGluZyBlbHNlIHdlIG11c3QgcmV0dXJuIHRydWUgZm9yIHRoaXMgbWV0aG9kLCBvdGhlcndpc2UK
LSAgICAgICAgLy8gd2Ugd2lsbCB0cnkgdG8gYW5pbWF0ZSBiZXR3ZWVuIHZhbHVlcyBmb3JldmVy
LgotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdldHRlcikoKSA9PSBTVkdQYWludFR5cGU6
OlJHQkNvbG9yKSB7Ci0gICAgICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVy
KSgpOwotICAgICAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAg
ICAgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAgICAgIGlmICghZnJvbUNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAg
ICAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgICAgICB0b0NvbG9y
ID0gQ29sb3IoKTsKLQotICAgICAgICAgICAgcmV0dXJuIGZyb21Db2xvciA9PSB0b0NvbG9yOwot
ICAgICAgICB9Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoKGEtPiptX3BhaW50VHlwZUdl
dHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yCi0gICAgICAgICAgICB8fCAoYi0+Km1f
cGFpbnRUeXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IpCi0gICAgICAgICAg
ICByZXR1cm47Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsK
LSAgICAgICAgQ29sb3IgdG9Db2xvciA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgaWYg
KCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICBmcm9tQ29sb3IgPSBDb2xvcigpOwotICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQot
ICAgICAgICAgICAgdG9Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSos
IGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0g
ICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcg
U1ZHUGFpbnQgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMocHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBTVkdQYWludFR5
cGUgKFJlbmRlclN0eWxlOjoqbV9wYWludFR5cGVHZXR0ZXIpKCkgY29uc3Q7Ci0gICAgQ29sb3Ig
KFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6
OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckZv
bnRTdHlsZSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8Rm9udFNlbGVjdGlvblZh
bHVlPj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3Bl
cnR5V3JhcHBlckZvbnRTdHlsZSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFs
PEZvbnRTZWxlY3Rpb25WYWx1ZT4+KENTU1Byb3BlcnR5Rm9udFN0eWxlLCAmUmVuZGVyU3R5bGU6
OmZvbnRJdGFsaWMsICZSZW5kZXJTdHlsZTo6c2V0Rm9udEl0YWxpYykKLSAgICB7Ci0gICAgfQot
Ci0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3Qg
UmVuZGVyU3R5bGUqIHRvKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIGZy
b20tPmZvbnRJdGFsaWMoKSAmJiB0by0+Zm9udEl0YWxpYygpICYmIGZyb20tPmZvbnREZXNjcmlw
dGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50ICYmIHRvLT5mb250
RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAg
ICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5k
ZXJTdHlsZSogdG8sIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIGF1dG8gZGlzY3JldGUgPSAhY2FuSW50ZXJwb2xhdGUoZnJvbSwgdG8pOwotCi0gICAgICAg
IGF1dG8gYmxlbmRlZFN0eWxlQXhpcyA9IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgICAgIGlm
IChkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRTdHlsZUF4aXMgPSAocHJvZ3Jlc3MgPCAw
LjUgPyBmcm9tIDogdG8pLT5mb250RGVzY3JpcHRpb24oKS5mb250U3R5bGVBeGlzKCk7Ci0KLSAg
ICAgICAgYXV0byBmcm9tRm9udEl0YWxpYyA9IGZyb20tPmZvbnRJdGFsaWMoKTsKLSAgICAgICAg
YXV0byB0b0ZvbnRJdGFsaWMgPSB0by0+Zm9udEl0YWxpYygpOwotICAgICAgICBhdXRvIGJsZW5k
ZWRGb250SXRhbGljID0gcHJvZ3Jlc3MgPCAwLjUgPyBmcm9tRm9udEl0YWxpYyA6IHRvRm9udEl0
YWxpYzsKLSAgICAgICAgaWYgKCFkaXNjcmV0ZSkKLSAgICAgICAgICAgIGJsZW5kZWRGb250SXRh
bGljID0gYmxlbmRGdW5jKGFuaW0sIGZyb21Gb250SXRhbGljLCB0b0ZvbnRJdGFsaWMsIHByb2dy
ZXNzKTsKLQotICAgICAgICBGb250U2VsZWN0b3IqIGN1cnJlbnRGb250U2VsZWN0b3IgPSBkc3Qt
PmZvbnRDYXNjYWRlKCkuZm9udFNlbGVjdG9yKCk7Ci0gICAgICAgIGF1dG8gZGVzY3JpcHRpb24g
PSBkc3QtPmZvbnREZXNjcmlwdGlvbigpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRJdGFsaWMo
YmxlbmRlZEZvbnRJdGFsaWMpOwotICAgICAgICBkZXNjcmlwdGlvbi5zZXRGb250U3R5bGVBeGlz
KGJsZW5kZWRTdHlsZUF4aXMpOwotICAgICAgICBkc3QtPnNldEZvbnREZXNjcmlwdGlvbihXVEZN
b3ZlKGRlc2NyaXB0aW9uKSk7Ci0gICAgICAgIGRzdC0+Zm9udENhc2NhZGUoKS51cGRhdGUoY3Vy
cmVudEZvbnRTZWxlY3Rvcik7Ci0gICAgfQotfTsKLQotY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRp
b25XcmFwcGVyTWFwIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAg
ICBzdGF0aWMgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBzaW5nbGV0b24oKQotICAg
IHsKLSAgICAgICAgLy8gRklYTUU6IFRoaXMgZGF0YSBpcyBuZXZlciBkZXN0cm95ZWQuIE1heWJl
IHdlIHNob3VsZCByZWYgY291bnQgaXQgYW5kIHRvc3MgaXQgd2hlbiB0aGUgbGFzdCBDU1NBbmlt
YXRpb25Db250cm9sbGVyIGlzIGRlc3Ryb3llZD8KLSAgICAgICAgc3RhdGljIE5ldmVyRGVzdHJv
eWVkPENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD4gbWFwOwotICAgICAgICByZXR1cm4g
bWFwOwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXJG
b3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQpCi0gICAgewotICAgICAgICBpZiAo
cHJvcGVydHlJRCA8IGZpcnN0Q1NTUHJvcGVydHkgfHwgcHJvcGVydHlJRCA+IGxhc3RDU1NQcm9w
ZXJ0eSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHVuc2lnbmVkIHdy
YXBwZXJJbmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCk7Ci0gICAgICAgIGlm
ICh3cmFwcGVySW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAg
ICAgIHJldHVybiBudWxscHRyOwotCi0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnNb
d3JhcHBlckluZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyRm9ySW5kZXgodW5zaWduZWQgaW5kZXgpCi0gICAgewotICAgICAgICBB
U1NFUlQoaW5kZXggPCBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpKTsKLSAgICAgICAgcmV0dXJu
IG1fcHJvcGVydHlXcmFwcGVyc1tpbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgdW5zaWduZWQg
c2l6ZSgpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKTsK
LSAgICB9Ci0KLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCk7
Ci0gICAgfkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpID0gZGVsZXRlOwotCi0gICAg
dW5zaWduZWQgY2hhciYgaW5kZXhGcm9tUHJvcGVydHlJRChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
SUQpCi0gICAgewotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVRvSWRNYXBbcHJvcGVydHlJRCAt
IGZpcnN0Q1NTUHJvcGVydHldOwotICAgIH0KLQotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4+IG1fcHJvcGVydHlXcmFwcGVyczsKLSAgICB1
bnNpZ25lZCBjaGFyIG1fcHJvcGVydHlUb0lkTWFwW251bUNTU1Byb3BlcnRpZXNdOwotCi0gICAg
c3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCA9
IFVDSEFSX01BWDsKLQotICAgIGZyaWVuZCBjbGFzcyBXVEY6Ok5ldmVyRGVzdHJveWVkPENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcD47Ci19OwotCi1DU1NQcm9wZXJ0eUFuaW1hdGlvbldy
YXBwZXJNYXA6OkNTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpCi17Ci0gICAgLy8gYnVp
bGQgdGhlIGxpc3Qgb2YgcHJvcGVydHkgd3JhcHBlcnMgdG8gZG8gdGhlIGNvbXBhcmlzb25zIGFu
ZCBibGVuZHMKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiBhbmltYXRhYmxlTG9u
Z2hhbmRQcm9wZXJ0eVdyYXBwZXJzW10gPSB7Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlMZWZ0LCAmUmVuZGVyU3R5bGU6OmxlZnQsICZSZW5kZXJTdHlsZTo6
c2V0TGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlS
aWdodCwgJlJlbmRlclN0eWxlOjpyaWdodCwgJlJlbmRlclN0eWxlOjpzZXRSaWdodCksCi0gICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUb3AsICZSZW5kZXJTdHls
ZTo6dG9wLCAmUmVuZGVyU3R5bGU6OnNldFRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3R0b20sICZSZW5kZXJTdHlsZTo6Ym90dG9tLCAmUmVuZGVy
U3R5bGU6OnNldEJvdHRvbSksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVdpZHRoLCAmUmVuZGVyU3R5bGU6OndpZHRoLCAmUmVuZGVyU3R5bGU6OnNldFdp
ZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbldp
ZHRoLCAmUmVuZGVyU3R5bGU6Om1pbldpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1pbldpZHRoKSwK
LSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heFdpZHRoLCAm
UmVuZGVyU3R5bGU6Om1heFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldE1heFdpZHRoKSwKLQotICAg
ICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SGVpZ2h0LCAmUmVuZGVy
U3R5bGU6OmhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRIZWlnaHQpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1p
bkhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRNaW5IZWlnaHQpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6Om1heEhl
aWdodCwgJlJlbmRlclN0eWxlOjpzZXRNYXhIZWlnaHQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXJGbGV4KCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyTGVmdFdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpi
b3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclJpZ2h0V2lkdGgpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclRvcFdpZHRo
LCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcFdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRv
cFdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlC
b3JkZXJCb3R0b21XaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJCb3R0b21XaWR0aCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJCb3R0b21XaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5MZWZ0LCAmUmVuZGVyU3R5bGU6Om1hcmdpbkxlZnQs
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luTGVmdCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5SaWdodCwgJlJlbmRlclN0eWxlOjptYXJnaW5SaWdo
dCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5SaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Ub3AsICZSZW5kZXJTdHlsZTo6bWFyZ2luVG9w
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblRvcCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXJnaW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6bWFyZ2luQm90
dG9tLCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpbkJvdHRvbSksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nTGVmdCwgJlJlbmRlclN0eWxlOjpwYWRk
aW5nTGVmdCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nTGVmdCksCi0gICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6
cGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdSaWdodCksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nVG9wLCAmUmVuZGVyU3R5
bGU6OnBhZGRpbmdUb3AsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1RvcCksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQYWRkaW5nQm90dG9tLCAmUmVuZGVy
U3R5bGU6OnBhZGRpbmdCb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0JvdHRvbSksCi0K
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3Bl
cnR5Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpjYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dENhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtDYXJldENvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldFZpc2l0ZWRMaW5rQ2FyZXRDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Q29sb3IsICZSZW5kZXJTdHls
ZTo6Y29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExp
bmtDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0NvbG9yKSwKLQotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCYWNrZ3Jv
dW5kQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRl
ZExpbmtCYWNrZ3JvdW5kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCYWNrZ3Jv
dW5kQ29sb3IpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5QmFja2dyb3VuZEltYWdlLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBTdHlsZUlt
YWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHls
ZTo6bGlzdFN0eWxlSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TGlzdFN0eWxlSW1hZ2UpLAotICAg
ICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJ
bWFnZSwgJlJlbmRlclN0eWxlOjptYXNrSW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0ltYWdl
KSwKLQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJv
cmRlckltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckltYWdlU291cmNlKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQ
cm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlU2xpY2UsICZS
ZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTbGljZXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1h
Z2VTbGljZXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5n
dGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJJ
bWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlV2lkdGgpLAotICAgICAgICBu
ZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VPdXRzZXQsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2VPdXRzZXQpLAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlU291cmNlLCAmUmVuZGVy
U3R5bGU6Om1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2VT
b3VyY2UpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGNvbnN0IE5pbmVQaWVjZUltYWdl
Jj4oQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6bWFza0JveElt
YWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZSksCi0KLSAgICAgICAgbmV3IEZpbGxM
YXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YLCAmUmVu
ZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3Vu
ZExheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRTaXplLCAmUmVuZGVyU3R5
bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVy
cyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Vi
a2l0QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRl
clN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLQotICAgICAgICBuZXcgRmlsbExheWVy
c1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblgsICZSZW5kZXJT
dHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNrTGF5ZXJzKSwKLSAgICAg
ICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9z
aXRpb25ZLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFz
a0xheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5V2Via2l0TWFza1NpemUsICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxl
OjplbnN1cmVNYXNrTGF5ZXJzKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eUZvbnRTaXplLCAmUmVuZGVyU3R5bGU6OmNvbXB1dGVkRm9udFNpemUsICZS
ZW5kZXJTdHlsZTo6c2V0Rm9udFNpemUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVu
c2lnbmVkIHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpj
b2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZVdpZHRoKSwKLSAgICAg
ICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVuZ3RoPihDU1NQcm9wZXJ0
eUNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpjb2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6c2V0Q29s
dW1uR2FwKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8R2FwTGVu
Z3RoPihDU1NQcm9wZXJ0eVJvd0dhcCwgJlJlbmRlclN0eWxlOjpyb3dHYXAsICZSZW5kZXJTdHls
ZTo6c2V0Um93R2FwKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25lZCBzaG9y
dD4oQ1NTUHJvcGVydHlDb2x1bW5Db3VudCwgJlJlbmRlclN0eWxlOjpjb2x1bW5Db3VudCwgJlJl
bmRlclN0eWxlOjpzZXRDb2x1bW5Db3VudCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5Q29sdW1uV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1uV2lkdGgs
ICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckhvcml6b250YWxTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6Omhvcml6b250YWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldEhvcml6
b250YWxCb3JkZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlXZWJraXRCb3JkZXJWZXJ0aWNhbFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6dmVy
dGljYWxCb3JkZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnNldFZlcnRpY2FsQm9yZGVyU3BhY2lu
ZyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8aW50PihDU1NQcm9wZXJ0eVpJbmRleCwg
JlJlbmRlclN0eWxlOjpzcGVjaWZpZWRaSW5kZXgsICZSZW5kZXJTdHlsZTo6c2V0U3BlY2lmaWVk
WkluZGV4KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlP
cnBoYW5zLCAmUmVuZGVyU3R5bGU6Om9ycGhhbnMsICZSZW5kZXJTdHlsZTo6c2V0T3JwaGFucyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5V2lkb3dzLCAm
UmVuZGVyU3R5bGU6OndpZG93cywgJlJlbmRlclN0eWxlOjpzZXRXaWRvd3MpLAotICAgICAgICBu
ZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TGluZUhlaWdodCwgJlJlbmRlclN0
eWxlOjpzcGVjaWZpZWRMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldExpbmVIZWlnaHQpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91dGxpbmVPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6b3V0bGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjpzZXRPdXRsaW5l
T2Zmc2V0KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlP
dXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6b3V0bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNl
dE91dGxpbmVXaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5TGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpsZXR0ZXJTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldExldHRlclNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5V29yZFNwYWNpbmcsICZSZW5kZXJTdHlsZTo6d29yZFNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6c2V0V29yZFNwYWNpbmcpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5VGV4dEluZGVudCwgJlJlbmRlclN0eWxlOjp0ZXh0SW5kZW50LCAm
UmVuZGVyU3R5bGU6OnNldFRleHRJbmRlbnQpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5UGVyc3BlY3RpdmUsICZSZW5kZXJTdHlsZTo6cGVyc3BlY3Rp
dmUsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmUpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6
OnBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZU9yaWdpblgp
LAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGVyc3BlY3Rp
dmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlT3JpZ2luWSwgJlJlbmRlclN0eWxl
OjpzZXRQZXJzcGVjdGl2ZU9yaWdpblkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWCwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1P
cmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblgpLAotICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRl
clN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVyU3R5bGU6OnNldFRyYW5zZm9ybU9yaWdp
blkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVRyYW5z
Zm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxl
OjpzZXRUcmFuc2Zvcm1PcmlnaW5aKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0
eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
TGVmdFJhZGl1cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyVG9wUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wUmlnaHRSYWRp
dXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXpl
PihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
Qm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21MZWZ0UmFkaXVz
KSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4o
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJC
b3R0b21SaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21SaWdodFJhZGl1
cyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VmlzaWJpbGl0eT4oQ1NTUHJvcGVydHlW
aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aWJpbGl0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
Wm9vbSwgJlJlbmRlclN0eWxlOjp6b29tLCAmUmVuZGVyU3R5bGU6OnNldFpvb21XaXRob3V0UmV0
dXJuVmFsdWUpLAotCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExl
bmd0aEJveD4oQ1NTUHJvcGVydHlDbGlwLCAmUmVuZGVyU3R5bGU6OmNsaXAsICZSZW5kZXJTdHls
ZTo6c2V0Q2xpcCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3Bh
Y2l0eSgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRUcmFuc2Zvcm0o
KSwKLSAgICAgICAgCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVy
dHlGaWx0ZXIsICZSZW5kZXJTdHlsZTo6ZmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEZpbHRlciks
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
ckZpbHRlcihDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmJh
Y2tkcm9wRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tkcm9wRmlsdGVyKSwKLSNlbmRpZgot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5QXBwbGVDb2xvckZp
bHRlciwgJlJlbmRlclN0eWxlOjphcHBsZUNvbG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OnNldEFw
cGxlQ29sb3JGaWx0ZXIpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChD
U1NQcm9wZXJ0eUNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6OmNsaXBQYXRoLCAmUmVuZGVyU3R5bGU6
OnNldENsaXBQYXRoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhcGUoQ1NTUHJv
cGVydHlTaGFwZU91dHNpZGUsICZSZW5kZXJTdHlsZTo6c2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5
bGU6OnNldFNoYXBlT3V0c2lkZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlTaGFwZU1hcmdpbiwgJlJlbmRlclN0eWxlOjpzaGFwZU1hcmdpbiwgJlJlbmRl
clN0eWxlOjpzZXRTaGFwZU1hcmdpbiksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Zmxv
YXQ+KENTU1Byb3BlcnR5U2hhcGVJbWFnZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzaGFwZUlt
YWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNldFNoYXBlSW1hZ2VUaHJlc2hvbGQpLAotCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUNvbHVtblJ1bGVDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Y29sdW1u
UnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxl
Ojp2aXNpdGVkTGlua0NvbHVtblJ1bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlu
a0NvbHVtblJ1bGVDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZm
ZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRleHRTdHJva2VDb2xvciwgTWF5YmVJbnZhbGlk
Q29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFRl
eHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua1RleHRTdHJva2VDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRTdHJva2VDb2xvciksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eVdlYmtpdFRl
eHRGaWxsQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OnRleHRGaWxsQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua1RleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0RmlsbENv
bG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENT
U1Byb3BlcnR5Qm9yZGVyTGVmdENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxl
Ojpib3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdENvbG9yLCAmUmVu
ZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZp
c2l0ZWRMaW5rQm9yZGVyTGVmdENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZp
c2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVyUmlnaHRDb2xvciwgTWF5YmVJbnZh
bGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjpz
ZXRCb3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3IpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlC
b3JkZXJUb3BDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9w
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRl
clRvcENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENv
bG9yKENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRv
bUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciksCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eU91dGxpbmVDb2xv
ciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6b3V0bGluZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldE91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua091dGxpbmVD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua091dGxpbmVDb2xvciksCi0KLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eUJveFNoYWRvdywgJlJlbmRl
clN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVdlYmtpdEJveFNoYWRvdywgJlJl
bmRlclN0eWxlOjpib3hTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0Qm94U2hhZG93KSwKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYWRvdyhDU1NQcm9wZXJ0eVRleHRTaGFkb3csICZSZW5k
ZXJTdHlsZTo6dGV4dFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRUZXh0U2hhZG93KSwKLQotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlGaWxsLCAmUmVuZGVy
U3R5bGU6OmZpbGxQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6ZmlsbFBhaW50Q29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0RmlsbFBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eUZpbGxPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OmZpbGxPcGFjaXR5
LCAmUmVuZGVyU3R5bGU6OnNldEZpbGxPcGFjaXR5KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlTdHJva2UsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFp
bnRUeXBlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
U3Ryb2tlUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5U3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdHJva2VPcGFjaXR5LCAmUmVu
ZGVyU3R5bGU6OnNldFN0cm9rZU9wYWNpdHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4+KENTU1Byb3BlcnR5U3Ryb2tlRGFzaGFycmF5LCAmUmVu
ZGVyU3R5bGU6OnN0cm9rZURhc2hBcnJheSwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VEYXNoQXJy
YXkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0cm9r
ZU1pdGVybGltaXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlTWl0ZXJMaW1pdCwgJlJlbmRlclN0eWxl
OjpzZXRTdHJva2VNaXRlckxpbWl0KSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5Q3gsICZSZW5kZXJTdHlsZTo6Y3gsICZSZW5kZXJTdHlsZTo6c2V0Q3gp
LAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Q3ksICZSZW5k
ZXJTdHlsZTo6Y3ksICZSZW5kZXJTdHlsZTo6c2V0Q3kpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UiwgJlJlbmRlclN0eWxlOjpyLCAmUmVuZGVyU3R5bGU6
OnNldFIpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Ungs
ICZSZW5kZXJTdHlsZTo6cngsICZSZW5kZXJTdHlsZTo6c2V0UngpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UnksICZSZW5kZXJTdHlsZTo6cnksICZSZW5k
ZXJTdHlsZTo6c2V0UnkpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5U3Ryb2tlRGFzaG9mZnNldCwgJlJlbmRlclN0eWxlOjpzdHJva2VEYXNoT2Zmc2V0LCAm
UmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hPZmZzZXQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5U3Ryb2tlV2lkdGgsICZSZW5kZXJTdHlsZTo6c3Ryb2tl
V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5WCwgJlJlbmRlclN0eWxlOjp4LCAmUmVuZGVyU3R5
bGU6OnNldFgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
WSwgJlJlbmRlclN0eWxlOjp5LCAmUmVuZGVyU3R5bGU6OnNldFkpLAotCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Rmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5
bGU6OmZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZE9wYWNpdHkpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlGbG9vZENv
bG9yLCAmUmVuZGVyU3R5bGU6OmZsb29kQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RDb2xv
ciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdG9w
T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzdG9wT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRTdG9w
T3BhY2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihD
U1NQcm9wZXJ0eVN0b3BDb2xvciwgJlJlbmRlclN0eWxlOjpzdG9wQ29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0U3RvcENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3IoQ1NTUHJvcGVydHlMaWdodGluZ0NvbG9yLCAmUmVuZGVyU3R5bGU6OmxpZ2h0aW5n
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0TGlnaHRpbmdDb2xvciksCi0KLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NTUHJvcGVydHlCYXNlbGluZVNoaWZ0LCAm
UmVuZGVyU3R5bGU6OmJhc2VsaW5lU2hpZnRWYWx1ZSwgJlJlbmRlclN0eWxlOjpzZXRCYXNlbGlu
ZVNoaWZ0VmFsdWUpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVl
PihDU1NQcm9wZXJ0eUtlcm5pbmcsICZSZW5kZXJTdHlsZTo6a2VybmluZywgJlJlbmRlclN0eWxl
OjpzZXRLZXJuaW5nKSwKLSNpZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQotICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5Rm9udFZhcmlh
dGlvblNldHRpbmdzLCAmUmVuZGVyU3R5bGU6OmZvbnRWYXJpYXRpb25TZXR0aW5ncywgJlJlbmRl
clN0eWxlOjpzZXRGb250VmFyaWF0aW9uU2V0dGluZ3MpLAotI2VuZGlmCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZvbnRXZWlnaHQs
ICZSZW5kZXJTdHlsZTo6Zm9udFdlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRGb250V2VpZ2h0KSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3Bl
cnR5Rm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6Zm9udFN0cmV0Y2gsICZSZW5kZXJTdHlsZTo6
c2V0Rm9udFN0cmV0Y2gpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dERlY29yYXRpb25UaGlja25lc3M+KENT
U1Byb3BlcnR5VGV4dERlY29yYXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6dGV4dERlY29y
YXRpb25UaGlja25lc3MsICZSZW5kZXJTdHlsZTo6c2V0VGV4dERlY29yYXRpb25UaGlja25lc3Mp
LAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHRVbmRlcmxpbmVPZmZzZXQ+KENTU1By
b3BlcnR5VGV4dFVuZGVybGluZU9mZnNldCwgJlJlbmRlclN0eWxlOjp0ZXh0VW5kZXJsaW5lT2Zm
c2V0LCAmUmVuZGVyU3R5bGU6OnNldFRleHRVbmRlcmxpbmVPZmZzZXQpLAotICAgIH07Ci0gICAg
Y29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FS
UkFZX0xFTkdUSChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzKTsKLQotICAgIHN0
YXRpYyBjb25zdCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzW10g
PSB7Ci0gICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZCwgLy8gZm9yIGJhY2tncm91bmQtY29s
b3IsIGJhY2tncm91bmQtcG9zaXRpb24sIGJhY2tncm91bmQtaW1hZ2UKLSAgICAgICAgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kUG9zaXRpb24sCi0gICAgICAgIENTU1Byb3BlcnR5Rm9udCwgLy8gZm9y
IGZvbnQtc2l6ZSwgZm9udC13ZWlnaHQKLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrLCAv
LyBmb3IgbWFzay1wb3NpdGlvbgotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlv
biwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJUb3AsIENTU1Byb3BlcnR5Qm9yZGVyUmlnaHQs
IENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tLCBDU1NQcm9wZXJ0eUJvcmRlckxlZnQsCi0gICAgICAg
IENTU1Byb3BlcnR5Qm9yZGVyQ29sb3IsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyUmFkaXVz
LAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlcldpZHRoLAotICAgICAgICBDU1NQcm9wZXJ0eUJv
cmRlciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJJbWFnZSwKLSAgICAgICAgQ1NTUHJvcGVy
dHlCb3JkZXJTcGFjaW5nLAotICAgICAgICBDU1NQcm9wZXJ0eUxpc3RTdHlsZSwgLy8gZm9yIGxp
c3Qtc3R5bGUtaW1hZ2UKLSAgICAgICAgQ1NTUHJvcGVydHlNYXJnaW4sCi0gICAgICAgIENTU1By
b3BlcnR5T3V0bGluZSwKLSAgICAgICAgQ1NTUHJvcGVydHlQYWRkaW5nLAotICAgICAgICBDU1NQ
cm9wZXJ0eVdlYmtpdFRleHRTdHJva2UsCi0gICAgICAgIENTU1Byb3BlcnR5Q29sdW1uUnVsZSwK
LSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJSYWRpdXMsCi0gICAgICAgIENTU1Byb3Bl
cnR5VHJhbnNmb3JtT3JpZ2luCi0gICAgfTsKLSAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxl
U2hvcnRoYW5kUHJvcGVydGllc0NvdW50ID0gV1RGX0FSUkFZX0xFTkdUSChhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllcyk7Ci0KLSAgICAvLyBUT0RPOgotICAgIC8vCi0gICAgLy8gIENTU1By
b3BlcnR5VmVydGljYWxBbGlnbgotICAgIC8vCi0gICAgLy8gQ29tcG91bmQgcHJvcGVydGllcyB0
aGF0IGhhdmUgY29tcG9uZW50cyB0aGF0IHNob3VsZCBiZSBhbmltYXRhYmxlOgotICAgIC8vCi0g
ICAgLy8gIENTU1Byb3BlcnR5Q29sdW1ucwotICAgIC8vICBDU1NQcm9wZXJ0eVdlYmtpdEJveFJl
ZmxlY3QKLQotICAgIC8vIE1ha2Ugc3VyZSB1bnVzZWQgc2xvdHMgaGF2ZSBhIHZhbHVlCi0gICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1DU1NQcm9wZXJ0aWVzOyArK2kpCi0gICAgICAgIG1fcHJv
cGVydHlUb0lkTWFwW2ldID0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleDsKLQotICAgIENP
TVBJTEVfQVNTRVJUKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPCBVQ0hBUl9NQVgsIG51bWJlck9mQW5pbWF0YWJs
ZVByb3BlcnRpZXNNdXN0QmVMZXNzVGhhblVDaGFyTWF4KTsKLSAgICBtX3Byb3BlcnR5V3JhcHBl
cnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eShhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291
bnQgKyBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50KTsKLQotICAgIC8vIEZpcnN0
IHdlIHB1dCB0aGUgbm9uLXNob3J0aGFuZCBwcm9wZXJ0eSB3cmFwcGVycyBpbnRvIHRoZSBtYXAs
IHNvIHRoZSBzaG9ydGhhbmQtYnVpbGRpbmcKLSAgICAvLyBjb2RlIGNhbiBmaW5kIHRoZW0uCi0K
LSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGll
c0NvdW50OyArK2kpIHsKLSAgICAgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3Jh
cHBlciA9IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbaV07Ci0gICAgICAgIG1f
cHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQoc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2U+KHdyYXBwZXIpKTsKLSAgICAgICAgaW5kZXhGcm9tUHJvcGVy
dHlJRCh3cmFwcGVyLT5wcm9wZXJ0eSgpKSA9IGk7Ci0gICAgfQotCi0gICAgZm9yIChzaXplX3Qg
aSA9IDA7IGkgPCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc0NvdW50OyArK2kpIHsKLSAg
ICAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0gYW5pbWF0YWJsZVNob3J0aGFuZFByb3Bl
cnRpZXNbaV07Ci0gICAgICAgIGF1dG8gc2hvcnRoYW5kID0gc2hvcnRoYW5kRm9yUHJvcGVydHko
cHJvcGVydHlJRCk7Ci0gICAgICAgIGlmICghc2hvcnRoYW5kLmxlbmd0aCgpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0KLSAgICAgICAgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UqPiBsb25naGFuZFdyYXBwZXJzOwotICAgICAgICBsb25naGFuZFdyYXBwZXJzLnJlc2VydmVJ
bml0aWFsQ2FwYWNpdHkoc2hvcnRoYW5kLmxlbmd0aCgpKTsKLSAgICAgICAgZm9yIChhdXRvIGxv
bmdoYW5kIDogc2hvcnRoYW5kKSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCB3cmFwcGVySW5kZXgg
PSBpbmRleEZyb21Qcm9wZXJ0eUlEKGxvbmdoYW5kKTsKLSAgICAgICAgICAgIGlmICh3cmFwcGVy
SW5kZXggPT0gY0ludmFsaWRQcm9wZXJ0eVdyYXBwZXJJbmRleCkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIEFTU0VSVChtX3Byb3BlcnR5V3JhcHBlcnNbd3JhcHBlcklu
ZGV4XSk7Ci0gICAgICAgICAgICBsb25naGFuZFdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtX3By
b3BlcnR5V3JhcHBlcnNbd3JhcHBlckluZGV4XS5nZXQoKSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICBtX3Byb3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1ha2VVbmlxdWU8U2hvcnRoYW5k
UHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eUlELCBXVEZNb3ZlKGxvbmdoYW5kV3JhcHBlcnMpKSk7
Ci0gICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQocHJvcGVydHlJRCkgPSBhbmltYXRhYmxlTG9u
Z2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBpOwotICAgIH0KLX0KLQotc3RhdGljIGJvb2wgZ2F0aGVy
RW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyLCBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+
JiBwcm9wZXJ0eVNldCkKLXsKLSAgICBpZiAoIXdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigp
KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIq
IHNob3J0aGFuZFdyYXBwZXIgPSBzdGF0aWNfY2FzdDxTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIq
Pih3cmFwcGVyKTsKLSAgICBib29sIGNvbnRhaW5lZCA9IGZhbHNlOwotICAgIGZvciAoYXV0byYg
Y3VycldyYXBwZXIgOiBzaG9ydGhhbmRXcmFwcGVyLT5wcm9wZXJ0eVdyYXBwZXJzKCkpIHsKLSAg
ICAgICAgaWYgKGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMocHJvcGVydHksIGN1
cnJXcmFwcGVyLCBwcm9wZXJ0eVNldCkgfHwgY3VycldyYXBwZXItPnByb3BlcnR5KCkgPT0gcHJv
cGVydHkpCi0gICAgICAgICAgICBjb250YWluZWQgPSB0cnVlOwotICAgIH0KLQotICAgIGlmIChj
b250YWluZWQpCi0gICAgICAgIHByb3BlcnR5U2V0LmFkZCh3cmFwcGVyLT5wcm9wZXJ0eSgpKTsK
LQotICAgIHJldHVybiBjb250YWluZWQ7Ci19Ci0KLS8vIFJldHVybnMgdHJ1ZSBpZiB3ZSBuZWVk
IHRvIHN0YXJ0IGFuaW1hdGlvbiB0aW1lcnMKLXZvaWQgQ1NTUHJvcGVydHlBbmltYXRpb246OmJs
ZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBDU1NQ
cm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChwcm9w
ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24o
KS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpIHsKLSAgICAgICAg
d3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0jaWYgIUxPR19ESVNB
QkxFRAotICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChhLCBiLCBkc3QsIHByb2dyZXNzKTsKLSNl
bmRpZgotICAgIH0KLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6aXNQcm9wZXJ0eUFu
aW1hdGFibGUoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsK
LX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNj
ZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCBwcm9wKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICByZXR1cm4gd3JhcHBlciA/IHdy
YXBwZXItPmFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSA6IGZhbHNlOwotfQotCi0vLyBOb3RlOiB0
aGlzIGlzIGluZWZmaWNpZW50LiBJdCdzIG9ubHkgY2FsbGVkIGZyb20gcGF1c2VUcmFuc2l0aW9u
QXRUaW1lKCkuCi1IYXNoU2V0PENTU1Byb3BlcnR5SUQ+IENTU1Byb3BlcnR5QW5pbWF0aW9uOjph
bmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkpCi17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAgPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgSGFzaFNldDxDU1NQ
cm9wZXJ0eUlEPiBmb3VuZFByb3BlcnRpZXM7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IG1hcC5zaXplKCk7ICsraSkKLSAgICAgICAgZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVy
dGllcyhwcm9wZXJ0eSwgbWFwLndyYXBwZXJGb3JJbmRleChpKSwgZm91bmRQcm9wZXJ0aWVzKTsK
LQotICAgIHJldHVybiBmb3VuZFByb3BlcnRpZXM7Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmlt
YXRpb246OnByb3BlcnRpZXNFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5n
bGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0gICAg
ICAgIHJldHVybiB3cmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0K
LWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NT
UHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1By
b3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5
KHByb3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICByZXR1cm4gd3JhcHBlci0+Y2FuSW50
ZXJwb2xhdGUoYSwgYik7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi1DU1NQcm9wZXJ0eUlEIENT
U1Byb3BlcnR5QW5pbWF0aW9uOjpnZXRQcm9wZXJ0eUF0SW5kZXgoaW50IGksIE9wdGlvbmFsPGJv
b2w+JiBpc1Nob3J0aGFuZCkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAm
IG1hcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0KLSAg
ICBpZiAoaSA8IDAgfHwgc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGkpID49IG1hcC5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBDU1NQcm9wZXJ0eUludmFsaWQ7Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gbWFwLndyYXBwZXJGb3JJbmRleChpKTsKLSAgICBpc1No
b3J0aGFuZCA9IHdyYXBwZXItPmlzU2hvcnRoYW5kV3JhcHBlcigpOwotICAgIHJldHVybiB3cmFw
cGVyLT5wcm9wZXJ0eSgpOwotfQotCi1pbnQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVBy
b3BlcnRpZXMoKQotewotICAgIHJldHVybiBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpLnNpemUoKTsKLX0KLQotfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IGNkZTJjODc1ODMyMzgwYzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIuLjAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0x
LDU0ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFt
ZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNv
bnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVy
aXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdy
aXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElN
UExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwg
T1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQK
LSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0g
Ki8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5j
bHVkZSA8d3RmL0hhc2hTZXQuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLWNsYXNzIENTU1By
b3BlcnR5QW5pbWF0aW9uIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5QW5p
bWF0YWJsZShDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlByb3Bl
cnR5SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEKTsKLSAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0
aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKTsKLSAgICBzdGF0aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENT
U1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7
Ci0gICAgc3RhdGljIENTU1Byb3BlcnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0aW9u
YWw8Ym9vbD4mIGlzU2hvcnRoYW5kKTsKLSAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMo
KTsKLQotICAgIHN0YXRpYyBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9ydGhh
bmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCk7Ci0KLSAgICAvLyBSZXR1cm4gdHJ1
ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKLSAgICBzdGF0
aWMgdm9pZCBibGVuZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCos
IENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKTsKLX07Ci0KLX0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA5M2M0OWJj
ZjZkOTFmNGRjZGY1NDY3MTRhNTQzNjgzZTEyZDQ3OTc2Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1ODQgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAi
Y29uZmlnLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5p
bWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkltcGxp
Y2l0QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRl
ICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUmVuZGVyRWxlbWVudC5oIgotI2luY2x1ZGUgIlJlbmRl
clN0eWxlLmgiCi0jaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgotI2luY2x1ZGUgPHd0Zi9OZXZl
ckRlc3Ryb3llZC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KLQotbmFtZXNwYWNl
IFdlYkNvcmUgewotCi1Db21wb3NpdGVBbmltYXRpb246OkNvbXBvc2l0ZUFuaW1hdGlvbihDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICA6IG1f
YW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRpb25Db250cm9sbGVyKQotewotICAgIG1fc3VzcGVu
ZGVkID0gbV9hbmltYXRpb25Db250cm9sbGVyLmlzU3VzcGVuZGVkKCkgJiYgIW1fYW5pbWF0aW9u
Q29udHJvbGxlci5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQotQ29t
cG9zaXRlQW5pbWF0aW9uOjp+Q29tcG9zaXRlQW5pbWF0aW9uKCkKLXsKLSAgICAvLyBUb3NzIHRo
ZSByZWZzIHRvIGFsbCBhbmltYXRpb25zLCBidXQgbWFrZSBzdXJlIHdlIHJlbW92ZSB0aGVtIGZy
b20KLSAgICAvLyBhbnkgd2FpdGluZyBsaXN0cyBmaXJzdC4KLQotICAgIGNsZWFyRWxlbWVudCgp
OwotICAgIG1fdHJhbnNpdGlvbnMuY2xlYXIoKTsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5j
bGVhcigpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y2xlYXJFbGVtZW50KCkKLXsK
LSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIC8vIENsZWFyIHRo
ZSByZW5kZXJlcnMgZnJvbSBhbGwgcnVubmluZyBhbmltYXRpb25zLCBpbiBjYXNlIHdlIGFyZSBp
biB0aGUgbWlkZGxlIG9mCi0gICAgICAgIC8vIGFuIGFuaW1hdGlvbiBjYWxsYmFjayAoc2VlIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjA1MikKLSAgICAgICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAg
ICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5zaXRp
b24pOwotICAgICAgICAgICAgdHJhbnNpdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0K
LSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAg
IGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24p
OwotICAgICAgICAgICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUm
IHRhcmdldFN0eWxlKQotewotICAgIC8vIElmIGN1cnJlbnRTdHlsZSBpcyBudWxsIG9yIHRoZXJl
IGFyZSBubyBvbGQgb3IgbmV3IHRyYW5zaXRpb25zLCBqdXN0IHNraXAgaXQKLSAgICBpZiAoIWN1
cnJlbnRTdHlsZSB8fCAoIXRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCkgJiYgbV90cmFuc2l0aW9u
cy5pc0VtcHR5KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBNYXJrIGFsbCBleGlzdGlu
ZyB0cmFuc2l0aW9ucyBhcyBubyBsb25nZXIgYWN0aXZlLiBXZSB3aWxsIG1hcmsgdGhlIHN0aWxs
IGFjdGl2ZSBvbmVzCi0gICAgLy8gaW4gdGhlIG5leHQgbG9vcCBhbmQgdGhlbiB0b3NzIHRoZSBv
bmVzIHRoYXQgZGlkbid0IGdldCBtYXJrZWQuCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJhbnNpdGlvbi0+c2V0QWN0aXZlKGZh
bHNlKTsKLSAgICAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtb2RpZmll
ZEN1cnJlbnRTdHlsZTsKLSAgICAKLSAgICAvLyBDaGVjayB0byBzZWUgaWYgd2UgbmVlZCB0byB1
cGRhdGUgdGhlIGFjdGl2ZSB0cmFuc2l0aW9ucwotICAgIGlmICh0YXJnZXRTdHlsZS50cmFuc2l0
aW9ucygpKSB7Ci0gICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgdGFyZ2V0U3R5bGUudHJh
bnNpdGlvbnMoKS0+c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFuaW1hdGlvbiA9
IHRhcmdldFN0eWxlLnRyYW5zaXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAgICAgICAgIGJv
b2wgaXNBY3RpdmVUcmFuc2l0aW9uID0gYW5pbWF0aW9uLmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9u
LmRlbGF5KCkgPiAwOwotCi0gICAgICAgICAgICBhdXRvIG1vZGUgPSBhbmltYXRpb24ucHJvcGVy
dHkoKS5tb2RlOwotICAgICAgICAgICAgaWYgKG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9u
TW9kZTo6Tm9uZSB8fCBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlVua25vd25Q
cm9wZXJ0eSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgQ1NTUHJv
cGVydHlJRCBwcm9wID0gYW5pbWF0aW9uLnByb3BlcnR5KCkuaWQ7Ci0KLSAgICAgICAgICAgIGJv
b2wgYWxsID0gbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpBbGw7Ci0KLSAgICAg
ICAgICAgIC8vIEhhbmRsZSBib3RoIHRoZSAnYWxsJyBhbmQgc2luZ2xlIHByb3BlcnR5IGNhc2Vz
LiBGb3IgdGhlIHNpbmdsZSBwcm9wIGNhc2UsIHdlIG1ha2Ugb25seSBvbmUgcGFzcwotICAgICAg
ICAgICAgLy8gdGhyb3VnaCB0aGUgbG9vcC4KLSAgICAgICAgICAgIGZvciAoaW50IHByb3BlcnR5
SW5kZXggPSAwOyBwcm9wZXJ0eUluZGV4IDwgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldE51bVBy
b3BlcnRpZXMoKTsgKytwcm9wZXJ0eUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGFsbCkg
ewotICAgICAgICAgICAgICAgICAgICAvLyBHZXQgdGhlIG5leHQgcHJvcGVydHkgd2hpY2ggaXMg
bm90IGEgc2hvcnRoYW5kLgotICAgICAgICAgICAgICAgICAgICBPcHRpb25hbDxib29sPiBpc1No
b3J0aGFuZDsKLSAgICAgICAgICAgICAgICAgICAgcHJvcCA9IENTU1Byb3BlcnR5QW5pbWF0aW9u
OjpnZXRQcm9wZXJ0eUF0SW5kZXgocHJvcGVydHlJbmRleCwgaXNTaG9ydGhhbmQpOwotICAgICAg
ICAgICAgICAgICAgICBpZiAoaXNTaG9ydGhhbmQgJiYgKmlzU2hvcnRoYW5kKQotICAgICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICAgICAgaWYgKHByb3AgPT0gQ1NTUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmICghYWxsKQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYXJlIGFsd2F5cyBoYXNoZWQg
YnkgYWN0dWFsIHByb3BlcnRpZXMsIG5ldmVyIGFuaW1hdGVBbGwuCi0gICAgICAgICAgICAgICAg
QVNTRVJUKHByb3AgPj0gZmlyc3RDU1NQcm9wZXJ0eSAmJiBwcm9wIDwgKGZpcnN0Q1NTUHJvcGVy
dHkgKyBudW1DU1NQcm9wZXJ0aWVzKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBp
cyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGZvciB0aGlzIHByb3BlcnR5LCB0aGUgdHJhbnNpdGlvbiBp
cyBvdmVycmlkZGVuCi0gICAgICAgICAgICAgICAgLy8gYW5kIHdlIGhhdmUgdG8gdXNlIHRoZSB1
bmFuaW1hdGVkU3R5bGUgZnJvbSB0aGUgYW5pbWF0aW9uLiBXZSBkbyB0aGUgdGVzdAotICAgICAg
ICAgICAgICAgIC8vIGFnYWluc3QgdGhlIHVuYW5pbWF0ZWQgc3R5bGUgaGVyZSwgYnV0IHdlICJv
dmVycmlkZSIgdGhlIHRyYW5zaXRpb24gbGF0ZXIuCi0gICAgICAgICAgICAgICAgYXV0byoga2V5
ZnJhbWVBbmltYXRpb24gPSBhbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wKTsKLSAgICAgICAgICAg
ICAgICBhdXRvKiBmcm9tU3R5bGUgPSBrZXlmcmFtZUFuaW1hdGlvbiA/ICZrZXlmcmFtZUFuaW1h
dGlvbi0+dW5hbmltYXRlZFN0eWxlKCkgOiBjdXJyZW50U3R5bGU7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBTZWUgaWYgdGhlcmUgaXMgYSBjdXJyZW50IHRyYW5zaXRpb24gZm9yIHRoaXMgcHJvcAot
ICAgICAgICAgICAgICAgIEltcGxpY2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlv
bnMuZ2V0KHByb3ApOwotICAgICAgICAgICAgICAgIGJvb2wgZXF1YWwgPSB0cnVlOwotCi0gICAg
ICAgICAgICAgICAgaWYgKGltcGxBbmltKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElmIHdl
IGFyZSBwb3N0IGFjdGl2ZSBkb24ndCBib3RoZXIgc2V0dGluZyB0aGUgYWN0aXZlIGZsYWcuIFRo
aXMgd2lsbCBjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyB0aGlzIGFuaW1hdGlvbiB0byBn
ZXQgcmVtb3ZlZCBhdCB0aGUgZW5kIG9mIHRoaXMgZnVuY3Rpb24uCi0gICAgICAgICAgICAgICAg
ICAgIGlmICghaW1wbEFuaW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgICAg
IGltcGxBbmltLT5zZXRBY3RpdmUodHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICAgIAotICAgICAg
ICAgICAgICAgICAgICAvLyBUaGlzIG1pZ2h0IGJlIGEgdHJhbnNpdGlvbiB0aGF0IGlzIGp1c3Qg
ZmluaXNoaW5nLiBUaGF0IHdvdWxkIGJlIHRoZSBjYXNlCi0gICAgICAgICAgICAgICAgICAgIC8v
IGlmIGl0IHdlcmUgcG9zdEFjdGl2ZS4gQnV0IHdlIHN0aWxsIG5lZWQgdG8gY2hlY2sgZm9yIGVx
dWFsaXR5IGJlY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaXQgY291bGQgYmUganVzdCBm
aW5pc2hpbmcgQU5EIGNoYW5naW5nIHRvIGEgbmV3IGdvYWwgc3RhdGUuCi0gICAgICAgICAgICAg
ICAgICAgIC8vCi0gICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaW1wbEFuaW0gbWlnaHQgYWxz
byBub3QgYmUgYW4gYWxyZWFkeSBydW5uaW5nIHRyYW5zaXRpb24uIEl0IG1pZ2h0IGJlCi0gICAg
ICAgICAgICAgICAgICAgIC8vIG5ld2x5IGFkZGVkIHRvIHRoZSBsaXN0IGluIGEgcHJldmlvdXMg
aXRlcmF0aW9uLiBUaGlzIHdvdWxkIGhhcHBlbiBpZgotICAgICAgICAgICAgICAgICAgICAvLyB5
b3UgaGF2ZSBib3RoIGFuIGV4cGxpY2l0IHRyYW5zaXRpb24tcHJvcGVydHkgYW5kICdhbGwnIGlu
IHRoZSBzYW1lCi0gICAgICAgICAgICAgICAgICAgIC8vIGxpc3QuIEluIHRoaXMgY2FzZSwgdGhl
IGxhdHRlciBvbmUgb3ZlcnJpZGVzIHRoZSBlYXJsaWVyIG9uZSwgc28gd2UKLSAgICAgICAgICAg
ICAgICAgICAgLy8gYmVoYXZlIGFzIHRob3VnaCB0aGlzIGlzIGEgcnVubmluZyBhbmltYXRpb24g
YmVpbmcgcmVwbGFjZWQuCi0gICAgICAgICAgICAgICAgICAgIGlmICghaW1wbEFuaW0tPmlzVGFy
Z2V0UHJvcGVydHlFcXVhbChwcm9wLCAmdGFyZ2V0U3R5bGUpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICAvLyBGb3IgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyB3ZSBuZWVkIHRvIHJldHVybiBh
IG5ldyBSZW5kZXJTdHlsZSB3aXRoIHRoZSBfY3VycmVudF8gdmFsdWUKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIG9mIHRoZSBwcm9wZXJ0eSwgc28gdGhhdCByZXN0YXJ0ZWQgdHJhbnNpdGlv
bnMgdXNlIHRoZSBjb3JyZWN0IHN0YXJ0aW5nIHBvaW50LgotICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVy
YXRlZChwcm9wKSAmJiBpbXBsQW5pbS0+aXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgaWYgKCFtb2RpZmllZEN1cnJlbnRTdHlsZSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbW9kaWZpZWRDdXJyZW50U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmVQdHIoKmN1cnJlbnRTdHlsZSk7Ci0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbXBs
QW5pbS0+YmxlbmRQcm9wZXJ0eVZhbHVlSW5TdHlsZShwcm9wLCBtb2RpZmllZEN1cnJlbnRTdHls
ZS5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIGV4aXN0aW5nIEltcGxpY2l0QW5pbWF0aW9u
ICVwIGZvciBwcm9wZXJ0eSAlcyIsIGltcGxBbmltLCBnZXRQcm9wZXJ0eU5hbWUocHJvcCkpOwot
ICAgICAgICAgICAgICAgICAgICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldp
bGxCZVJlbW92ZWQoKmltcGxBbmltKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fdHJhbnNp
dGlvbnMucmVtb3ZlKHByb3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgZXF1YWwgPSBmYWxz
ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAg
ICAgICAgICAgICAgICAgIC8vIFdlIG5lZWQgdG8gc3RhcnQgYSB0cmFuc2l0aW9uIGlmIGl0IGlz
IGFjdGl2ZSBhbmQgdGhlIHByb3BlcnRpZXMgZG9uJ3QgbWF0Y2gKLSAgICAgICAgICAgICAgICAg
ICAgZXF1YWwgPSAhaXNBY3RpdmVUcmFuc2l0aW9uIHx8IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpw
cm9wZXJ0aWVzRXF1YWwocHJvcCwgZnJvbVN0eWxlLCAmdGFyZ2V0U3R5bGUpIHx8ICFDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChwcm9wLCBmcm9tU3R5bGUs
ICZ0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8g
V2UgY2FuIGJlIGluIHRoaXMgbG9vcCB3aXRoIGFuIGluYWN0aXZlIHRyYW5zaXRpb24gKCFpc0Fj
dGl2ZVRyYW5zaXRpb24pLiBXZSBuZWVkCi0gICAgICAgICAgICAgICAgLy8gdG8gZG8gdGhhdCB0
byBjaGVjayB0byBzZWUgaWYgd2UgYXJlIGNhbmNlbGluZyBhIHRyYW5zaXRpb24uIEJ1dCB3ZSBk
b24ndCB3YW50IHRvCi0gICAgICAgICAgICAgICAgLy8gc3RhcnQgb25lIG9mIHRoZSBpbmFjdGl2
ZSB0cmFuc2l0aW9ucy4gU28gc2hvcnQgY2lyY3VpdCB0aGF0IGhlcmUuIChTZWUKLSAgICAgICAg
ICAgICAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0Nzg3
PgotICAgICAgICAgICAgICAgIGlmICghZXF1YWwgJiYgaXNBY3RpdmVUcmFuc2l0aW9uKSB7Ci0g
ICAgICAgICAgICAgICAgICAgIC8vIEFkZCB0aGUgbmV3IHRyYW5zaXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbXBsaWNpdEFuaW1hdGlvbiA9IEltcGxpY2l0QW5pbWF0aW9uOjpjcmVh
dGUoYW5pbWF0aW9uLCBwcm9wLCBlbGVtZW50LCAqdGhpcywgbW9kaWZpZWRDdXJyZW50U3R5bGUg
PyAqbW9kaWZpZWRDdXJyZW50U3R5bGUgOiAqZnJvbVN0eWxlKTsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fc3VzcGVuZGVkICYmIGltcGxpY2l0QW5pbWF0aW9uLT5oYXNTdHlsZSgpKQotICAg
ICAgICAgICAgICAgICAgICAgICAgaW1wbGljaXRBbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShB
bmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCk7Ci0KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICJDcmVhdGVkIEltcGxpY2l0QW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgZm9y
IHByb3BlcnR5ICVzIGR1cmF0aW9uICUuMmYgZGVsYXkgJS4yZiIsIGltcGxpY2l0QW5pbWF0aW9u
LnB0cigpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHByb3ApLCBhbmltYXRpb24uZHVyYXRp
b24oKSwgYW5pbWF0aW9uLmRlbGF5KCkpOwotICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRp
b25zLnNldChwcm9wLCBXVEZNb3ZlKGltcGxpY2l0QW5pbWF0aW9uKSk7Ci0gICAgICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2Ugb25seSBuZWVkIG9uZSBwYXNzIGZvciB0aGUg
c2luZ2xlIHByb3AgY2FzZQotICAgICAgICAgICAgICAgIGlmICghYWxsKQotICAgICAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAgIC8v
IE1ha2UgYSBsaXN0IG9mIHRyYW5zaXRpb25zIHRvIGJlIHJlbW92ZWQKLSAgICBWZWN0b3I8aW50
PiB0b0JlUmVtb3ZlZDsKLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25z
LnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghdHJhbnNpdGlvbi0+YWN0aXZlKCkpIHsKLSAgICAg
ICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFu
c2l0aW9uKTsKLSAgICAgICAgICAgIHRvQmVSZW1vdmVkLmFwcGVuZCh0cmFuc2l0aW9uLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3Zpbmcg
SW1wbGljaXRBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIGZvciBwcm9wZXJ0eSAlcyIsIHRy
YW5zaXRpb24uZ2V0KCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUodHJhbnNpdGlvbi0+YW5p
bWF0aW5nUHJvcGVydHkoKSkpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHJlbW92
ZSB0aGUgdHJhbnNpdGlvbnMgZnJvbSB0aGUgbGlzdAotICAgIGZvciAoYXV0byBwcm9wZXJ0eVRv
UmVtb3ZlIDogdG9CZVJlbW92ZWQpCi0gICAgICAgIG1fdHJhbnNpdGlvbnMucmVtb3ZlKHByb3Bl
cnR5VG9SZW1vdmUpOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6dXBkYXRlS2V5ZnJh
bWVBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50
U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBOb3RoaW5n
IHRvIGRvIGlmIHdlIGRvbid0IGhhdmUgYW55IGFuaW1hdGlvbnMsIGFuZCBkaWRuJ3QgaGF2ZSBh
bnkgYmVmb3JlCi0gICAgaWYgKG1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSAmJiAhdGFy
Z2V0U3R5bGUuaGFzQW5pbWF0aW9ucygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2tleWZy
YW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgCi0gICAgaWYgKGN1cnJlbnRT
dHlsZSAmJiBjdXJyZW50U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSAmJiB0YXJnZXRTdHlsZS5oYXNB
bmltYXRpb25zKCkgJiYgKihjdXJyZW50U3R5bGUtPmFuaW1hdGlvbnMoKSkgPT0gKih0YXJnZXRT
dHlsZS5hbmltYXRpb25zKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBBbmltYXRpb25OYW1l
TWFwIG5ld0FuaW1hdGlvbnM7Ci0KLSAgICAvLyBUb3NzIHRoZSBhbmltYXRpb24gb3JkZXIgbWFw
LgotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5jbGVhcigpOwotCi0gICAgc3RhdGlj
IE1haW5UaHJlYWROZXZlckRlc3Ryb3llZDxjb25zdCBBdG9tU3RyaW5nPiBub25lKCJub25lIiwg
QXRvbVN0cmluZzo6Q29uc3RydWN0RnJvbUxpdGVyYWwpOwotICAgIAotICAgIC8vIE5vdyBtYXJr
IGFueSBzdGlsbCBhY3RpdmUgYW5pbWF0aW9ucyBhcyBhY3RpdmUgYW5kIGFkZCBhbnkgbmV3IGFu
aW1hdGlvbnMuCi0gICAgaWYgKHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKSkgewotICAgICAgICBp
bnQgbnVtQW5pbXMgPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPnNpemUoKTsKLSAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1BbmltczsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBh
bmltYXRpb24gPSB0YXJnZXRTdHlsZS5hbmltYXRpb25zKCktPmFuaW1hdGlvbihpKTsKLSAgICAg
ICAgICAgIEF0b21TdHJpbmcgYW5pbWF0aW9uTmFtZShhbmltYXRpb24ubmFtZSgpKTsKLQotICAg
ICAgICAgICAgaWYgKCFhbmltYXRpb24uaXNWYWxpZEFuaW1hdGlvbigpKQotICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBTZWUgaWYgdGhlcmUg
aXMgYSBjdXJyZW50IGFuaW1hdGlvbiBmb3IgdGhpcyBuYW1lLgotICAgICAgICAgICAgUmVmUHRy
PEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5n
ZXQoYW5pbWF0aW9uTmFtZS5pbXBsKCkpOwotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkg
ewotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuYWRkKGtleWZyYW1lQW5pbS0+bmFtZSgp
LmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLQotICAgICAgICAgICAgICAgIGlmIChrZXlmcmFtZUFu
aW0tPnBvc3RBY3RpdmUoKSkKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBBbmltYXRpb25zIG1hdGNoLCBidXQgcGxheSBzdGF0ZXMgbWF5IGRpZmZl
ci4gVXBkYXRlIGlmIG5lZWRlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVwZGF0
ZVBsYXlTdGF0ZShhbmltYXRpb24ucGxheVN0YXRlKCkpOwotCi0gICAgICAgICAgICAgICAgLy8g
U2V0IHRoZSBzYXZlZCBhbmltYXRpb24gdG8gdGhpcyBuZXcgb25lLCBqdXN0IGluIGNhc2UgdGhl
IHBsYXkgc3RhdGUgaGFzIGNoYW5nZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT5z
ZXRBbmltYXRpb24oYW5pbWF0aW9uKTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoKGFuaW1hdGlv
bi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxheSgpKSAmJiBhbmltYXRpb24uaXRlcmF0aW9u
Q291bnQoKSAmJiBhbmltYXRpb25OYW1lICE9IG5vbmUpIHsKLSAgICAgICAgICAgICAgICBrZXlm
cmFtZUFuaW0gPSBLZXlmcmFtZUFuaW1hdGlvbjo6Y3JlYXRlKGFuaW1hdGlvbiwgZWxlbWVudCwg
KnRoaXMsIHRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIkNy
ZWF0aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIG9uIGVsZW1lbnQgJXAgd2l0aCBrZXlmcmFtZXMg
JXMsIGR1cmF0aW9uICUuMmYsIGRlbGF5ICUuMmYsIGl0ZXJhdGlvbnMgJS4yZiIsIGtleWZyYW1l
QW5pbS5nZXQoKSwgJmVsZW1lbnQsIGFuaW1hdGlvbi5uYW1lKCkudXRmOCgpLmRhdGEoKSwgYW5p
bWF0aW9uLmR1cmF0aW9uKCksIGFuaW1hdGlvbi5kZWxheSgpLCBhbmltYXRpb24uaXRlcmF0aW9u
Q291bnQoKSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9zdXNwZW5kZWQpIHsKLSAgICAgICAg
ICAgICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0
YXRlOjpQYXVzZWQpOwotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiAgKGNy
ZWF0ZWQgaW4gc3VzcGVuZGVkL3BhdXNlZCBzdGF0ZSkiKTsKLSAgICAgICAgICAgICAgICB9Ci0j
aWYgIUxPR19ESVNBQkxFRAotICAgICAgICAgICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDog
a2V5ZnJhbWVBbmltLT5rZXlmcmFtZXMoKS5wcm9wZXJ0aWVzKCkpCi0gICAgICAgICAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiICBwcm9wZXJ0eSAlcyIsIGdldFByb3BlcnR5TmFtZShwcm9w
ZXJ0eUlEKSk7Ci0jZW5kaWYKLQotICAgICAgICAgICAgICAgIG5ld0FuaW1hdGlvbnMuc2V0KGtl
eWZyYW1lQW5pbS0+bmFtZSgpLmltcGwoKSwga2V5ZnJhbWVBbmltKTsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gQWRkIHRoaXMgdG8gdGhlIGFuaW1hdGlvbiBv
cmRlciBtYXAuCi0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKQotICAgICAgICAgICAgICAg
IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcC5hcHBlbmQoa2V5ZnJhbWVBbmltLT5uYW1lKCku
aW1wbCgpKTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICAvLyBNYWtlIGEgbGlzdCBvZiBh
bmltYXRpb25zIHRvIGJlIHJlbW92ZWQuCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tl
eWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoIW5ld0FuaW1hdGlvbnMu
Y29udGFpbnMoYW5pbWF0aW9uLT5uYW1lKCkuaW1wbCgpKSkgewotICAgICAgICAgICAgYW5pbWF0
aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7Ci0gICAg
ICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IlJlbW92aW5nIEtleWZyYW1lQW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCIsIGFuaW1hdGlv
bi5nZXQoKSwgJmVsZW1lbnQpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIHN0ZDo6c3dh
cChuZXdBbmltYXRpb25zLCBtX2tleWZyYW1lQW5pbWF0aW9ucyk7Ci19Ci0KLUFuaW1hdGlvblVw
ZGF0ZSBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGUoRWxlbWVudCYgZWxlbWVudCwgY29uc3Qg
UmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxl
KQotewotICAgIC8vIFdlIGRvbid0IGRvIGFueSB0cmFuc2l0aW9ucyBpZiB3ZSBkb24ndCBoYXZl
IGEgY3VycmVudFN0eWxlIChvbiBzdGFydHVwKS4KLSAgICB1cGRhdGVUcmFuc2l0aW9ucyhlbGVt
ZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICB1cGRhdGVLZXlmcmFtZUFuaW1h
dGlvbnMoZWxlbWVudCwgY3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGlv
bkltcGFjdD4gaW1hcGN0OwotCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmlt
YXRlZFN0eWxlOwotCi0gICAgaWYgKGN1cnJlbnRTdHlsZSkgewotICAgICAgICAvLyBOb3cgdGhh
dCB3ZSBoYXZlIHRyYW5zaXRpb24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0
aGUgbmV3IGdvYWwgc3RhdGUuICBXZSB3YW50IHRoZW0KLSAgICAgICAgLy8gdG8gZmlsbCBpbiBh
IFJlbmRlclN0eWxlKiYgb25seSBpZiBuZWVkZWQuCi0gICAgICAgIGJvb2wgY2hlY2tGb3JTdGFj
a2luZ0NvbnRleHQgPSBmYWxzZTsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90
cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0gdHJhbnNp
dGlvbi0+YW5pbWF0ZSgqdGhpcywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAgICAg
ICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSkK
LSAgICAgICAgICAgICAgICBjaGVja0ZvclN0YWNraW5nQ29udGV4dCB8PSBXaWxsQ2hhbmdlRGF0
YTo6cHJvcGVydHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHRyYW5zaXRpb24tPmFuaW1hdGluZ1By
b3BlcnR5KCkpOwotCi0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hh
bmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIHRyYW5zaXRpb24tPmFmZmVjdHNBY2NlbGVyYXRl
ZFByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6
OlJlcXVpcmVzUmVjb21wb3NpdGUpOwotICAgICAgICB9Ci0KLSAgICAgICAgaWYgKGFuaW1hdGVk
U3R5bGUgJiYgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQpIHsKLSAgICAgICAgICAgIC8vIE5vdGUg
dGhhdCB0aGlzIGlzIHNpbWlsYXIgdG8gY29kZSBpbiBTdHlsZTo6QWRqdXN0ZXI6OmFkanVzdCgp
IGJ1dCBvbmx5IG5lZWRzIHRvIGNvbnN1bHQKLSAgICAgICAgICAgIC8vIGFuaW1hdGFibGUgcHJv
cGVydGllcyB0aGF0IGNhbiB0cmlnZ2VyIHN0YWNraW5nIGNvbnRleHQuCi0gICAgICAgICAgICBp
ZiAoYW5pbWF0ZWRTdHlsZS0+b3BhY2l0eSgpIDwgMS4wZgotICAgICAgICAgICAgICAgIHx8IGFu
aW1hdGVkU3R5bGUtPmhhc1RyYW5zZm9ybVJlbGF0ZWRQcm9wZXJ0eSgpCi0gICAgICAgICAgICAg
ICAgfHwgYW5pbWF0ZWRTdHlsZS0+aGFzTWFzaygpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0
ZWRTdHlsZS0+Y2xpcFBhdGgoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmJv
eFJlZmxlY3QoKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5bGUtPmhhc0ZpbHRlcigp
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRl
ZFN0eWxlLT5oYXNCYWNrZHJvcEZpbHRlcigpCi0jZW5kaWYKLSAgICAgICAgICAgICAgICApCi0g
ICAgICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdDb250
ZXh0KTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyB0aGF0IHdlIGhhdmUgYW5pbWF0
aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5ldyBnb2FsIHN0YXRl
LiAgV2Ugd2FudCB0aGVtCi0gICAgLy8gdG8gZmlsbCBpbiBhIFJlbmRlclN0eWxlKiYgb25seSBp
ZiBuZWVkZWQuCi0gICAgZm9yIChhdXRvJiBuYW1lIDogbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVy
TWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0g
bV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwotICAgICAgICBpZiAoa2V5ZnJhbWVBbmlt
KSB7Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSBrZXlmcmFtZUFuaW0tPmFuaW1hdGUoKnRo
aXMsIHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAgIGlmIChjaGFuZ2Vz
LmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYga2V5ZnJhbWVB
bmltLT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpKQotICAgICAgICAgICAgICAgIGltYXBj
dC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1aXJlc1JlY29tcG9zaXRlKTsKLQotICAgICAgICAg
ICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKSAmJiBr
ZXlmcmFtZUFuaW0tPnRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkpCi0gICAgICAgICAgICAgICAg
aW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7Ci0KLSAg
ICAgICAgICAgIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCB8PSBrZXlmcmFtZUFu
aW0tPmRlcGVuZHNPbkxheW91dCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
V1RGTW92ZShhbmltYXRlZFN0eWxlKSwgaW1hcGN0IH07Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gQ29tcG9zaXRlQW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKCkgY29uc3QK
LXsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJlc3VsdFN0eWxlOwotICAgIGZv
ciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRy
YW5zaXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotCi0gICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgZm9yIChhdXRvJiBuYW1lIDog
bV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwKSB7Ci0gICAgICAgIFJlZlB0cjxLZXlmcmFtZUFu
aW1hdGlvbj4ga2V5ZnJhbWVBbmltYXRpb24gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFt
ZSk7Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW1hdGlvbikKLSAgICAgICAgICAgIGtleWZyYW1l
QW5pbWF0aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIHJlc3VsdFN0eWxlOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDb21wb3NpdGVB
bmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3QKLXsKLSAgICAvLyBSZXR1cm5zIHRo
ZSB0aW1lIGF0IHdoaWNoIG5leHQgc2VydmljZSBpcyByZXF1aXJlZC4gV1RGOjpudWxsb3B0IG1l
YW5zIG5vIHNlcnZpY2UgaXMgcmVxdWlyZWQuIDAgbWVhbnMKLSAgICAvLyBzZXJ2aWNlIGlzIHJl
cXVpcmVkIG5vdywgYW5kID4gMCBtZWFucyBzZXJ2aWNlIGlzIHJlcXVpcmVkIHRoYXQgbWFueSBz
ZWNvbmRzIGluIHRoZSBmdXR1cmUuCi0gICAgT3B0aW9uYWw8U2Vjb25kcz4gbWluVDsKLSAgICAK
LSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYg
dHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlv
bmFsPFNlY29uZHM+IHQgPSB0cmFuc2l0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAg
ICAgICAgaWYgKCF0KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYg
KCFtaW5UIHx8IHQudmFsdWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtaW5U
ID0gdC52YWx1ZSgpOwotICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLSAgICBpZiAoIW1fa2V5
ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9u
cy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9r
ZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHQgPSBhbmltYXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAo
IXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAoIW1pblQgfHwg
dC52YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQgPSB0LnZhbHVl
KCk7Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAgICAgICAgICAg
ICByZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJuIG1pblQ7Ci19Ci0K
LUtleWZyYW1lQW5pbWF0aW9uKiBDb21wb3NpdGVBbmltYXRpb246OmFuaW1hdGlvbkZvclByb3Bl
cnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgS2V5ZnJhbWVBbmltYXRp
b24qIHJlc3VsdCA9IG51bGxwdHI7Ci0KLSAgICAvLyBXZSB3YW50IHRvIHNlbmQgYmFjayB0aGUg
bGFzdCBhbmltYXRpb24gd2l0aCB0aGUgcHJvcGVydHkgaWYgdGhlcmUgYXJlIG11bHRpcGxlcy4K
LSAgICAvLyBTbyB3ZSBuZWVkIHRvIGl0ZXJhdGUgdGhyb3VnaCBhbGwgYW5pbWF0aW9ucwotICAg
IGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmlt
YXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYg
KGFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAg
ICAgICAgIHJlc3VsdCA9IGFuaW1hdGlvbi5nZXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpjb21wdXRlRXh0
ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAg
IC8vIElmIG1vcmUgdGhhbiBvbmUgdHJhbnNpdGlvbiBhbmQgYW5pbWF0aW9uIGFmZmVjdCB0cmFu
c2Zvcm0sIGdpdmUgdXAuCi0gICAgYm9vbCBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7
Ci0gICAgCi0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52
YWx1ZXMoKSkgewotICAgICAgICBpZiAoIWFuaW1hdGlvbi0+aGFzQW5pbWF0aW9uRm9yUHJvcGVy
dHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAg
ICAgaWYgKHNlZW5UcmFuc2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICAgICAgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IHRydWU7Ci0KLSAgICAgICAgaWYg
KCFhbmltYXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJhbnNp
dGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24t
PmFuaW1hdGluZ1Byb3BlcnR5KCkgIT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0gfHwgIXRyYW5zaXRp
b24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoc2Vl
blRyYW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBpZiAoIXRyYW5zaXRpb24tPmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihib3Vu
ZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnN1c3BlbmRBbmltYXRpb25zKCkK
LXsKLSAgICBpZiAobV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fc3VzcGVu
ZGVkID0gdHJ1ZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAg
ICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkK
LSAgICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0
ZTo6UGF1c2VkKTsKLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7
Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkp
IHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNTdHlsZSgpKQotICAgICAgICAgICAg
ICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNl
ZCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1
bWVBbmltYXRpb25zKCkKLXsKLSAgICBpZiAoIW1fc3VzcGVuZGVkKQotICAgICAgICByZXR1cm47
Ci0KLSAgICBtX3N1c3BlbmRlZCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0
aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25z
aXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmlt
YXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5wbGF5U3RhdGVQ
bGF5aW5nKCkpCi0gICAgICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5p
bWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgh
bV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9u
IDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24t
Pmhhc1N0eWxlKCkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0YXRl
KEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZv
aWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5KQotewotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkg
ewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJv
cGVydHkpCi0gICAgICAgICAgICAgICAgdHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbih0cnVlKTsK
LSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3VtZU92
ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAg
ICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJh
bnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFu
c2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5KQotICAgICAgICAgICAgICAg
IHRyYW5zaXRpb24tPnNldE92ZXJyaWRkZW4oZmFsc2UpOwotICAgICAgICB9Ci0gICAgfQotfQot
Ci1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLXsKLSAgICBpZiAoIW1f
a2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0
aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDog
bV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltYXRp
b24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0gICAg
ICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1f
dHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6
IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5p
c0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0
IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4ga2V5
ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUuaW1wbCgpKTsKLSAgICBp
ZiAoIWtleWZyYW1lQW5pbSB8fCAha2V5ZnJhbWVBbmltLT5ydW5uaW5nKCkpCi0gICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgIGtleWZyYW1lQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAgIHJl
dHVybiB0cnVlOwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VUcmFuc2l0aW9u
QXRUaW1lKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIGlmICgocHJv
cGVydHkgPCBmaXJzdENTU1Byb3BlcnR5KSB8fCAocHJvcGVydHkgPj0gZmlyc3RDU1NQcm9wZXJ0
eSArIG51bUNTU1Byb3BlcnRpZXMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBJbXBs
aWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdldChwcm9wZXJ0eSk7Ci0g
ICAgaWYgKCFpbXBsQW5pbSkgewotICAgICAgICAvLyBDaGVjayB0byBzZWUgaWYgdGhpcyBwcm9w
ZXJ0eSBpcyBiZWluZyBhbmltYXRlZCB2aWEgYSBzaG9ydGhhbmQuCi0gICAgICAgIC8vIFRoaXMg
Y29kZSBpcyBvbmx5IHVzZWQgZm9yIHRlc3RpbmcsIHNvIHBlcmZvcm1hbmNlIGlzIG5vdCBjcml0
aWNhbCBoZXJlLgotICAgICAgICBIYXNoU2V0PENTU1Byb3BlcnR5SUQ+IHNob3J0aGFuZFByb3Bl
cnRpZXMgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0YWJsZVNob3J0aGFuZHNBZmZlY3Rp
bmdQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgICAgIGJvb2wgYW55UGF1c2VkID0gZmFsc2U7Ci0g
ICAgICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogc2hvcnRoYW5kUHJvcGVydGllcykgewotICAg
ICAgICAgICAgaWYgKHBhdXNlVHJhbnNpdGlvbkF0VGltZShwcm9wZXJ0eUlELCB0KSkKLSAgICAg
ICAgICAgICAgICBhbnlQYXVzZWQgPSB0cnVlOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybiBh
bnlQYXVzZWQ7Ci0gICAgfQotCi0gICAgaWYgKCFpbXBsQW5pbS0+cnVubmluZygpKQotICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICBpZiAoKHQgPj0gMC4wKSAmJiAodCA8PSBpbXBsQW5pbS0+
ZHVyYXRpb24oKSkpIHsKLSAgICAgICAgaW1wbEFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOwotfQotCi11bnNpZ25l
ZCBDb21wb3NpdGVBbmltYXRpb246Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0Ci17
Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPnJ1bm5pbmco
KSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlvbi0+
cnVubmluZygpKQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IGNvdW50OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCA5NDIyNjkyMzk2ZDJmYmE2ODgwZDFjZDlmOWM4ZDY5YjgyZTdiMGM1Li4w
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAg
LTEsMTAzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUg
bWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUg
bmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRz
IGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMg
ZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9y
IHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
IElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVO
VElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVN
RU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFU
QSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBB
TkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBT
VFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RI
RVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
Ci0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
LmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
QXRvbVN0cmluZy5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsKLWNsYXNz
IFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBDb21wb3NpdGVBbmlt
YXRpb24gcmVwcmVzZW50cyBhIGNvbGxlY3Rpb24gb2YgYW5pbWF0aW9ucyB0aGF0IGFyZSBydW5u
aW5nCi0vLyBvbiBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LCBzdWNoIGFzIGEgbnVtYmVyIG9mIHBy
b3BlcnRpZXMgdHJhbnNpdGlvbmluZyBhdCBvbmNlLgotY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9u
IDogcHVibGljIFJlZkNvdW50ZWQ8Q29tcG9zaXRlQW5pbWF0aW9uPiB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxDb21wb3NpdGVBbmltYXRp
b24+IGNyZWF0ZShDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJv
bGxlcikKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IENvbXBvc2l0ZUFuaW1h
dGlvbihhbmltYXRpb25Db250cm9sbGVyKSk7Ci0gICAgfTsKLQotICAgIH5Db21wb3NpdGVBbmlt
YXRpb24oKTsKLSAgICAKLSAgICB2b2lkIGNsZWFyRWxlbWVudCgpOwotCi0gICAgQW5pbWF0aW9u
VXBkYXRlIGFuaW1hdGUoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUs
IGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBnZXRBbmltYXRlZFN0eWxlKCkgY29uc3Q7Ci0gICAgYm9vbCBjb21wdXRlRXh0
ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgT3B0aW9u
YWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdDsKLSAgICAKLSAgICBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcigpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsgfQotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9u
cygpOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIGJvb2wgaXNTdXNwZW5kZWQo
KSBjb25zdCB7IHJldHVybiBtX3N1c3BlbmRlZDsgfQotICAgIAotICAgIGJvb2wgaGFzQW5pbWF0
aW9ucygpIGNvbnN0ICB7IHJldHVybiAhbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkgfHwgIW1fa2V5
ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQsIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdDsKLQotICAgIEtl
eWZyYW1lQW5pbWF0aW9uKiBhbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25z
dDsKLQotICAgIHZvaWQgb3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJRCk7
Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5
SUQpOwotCi0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9tU3RyaW5nJiBu
YW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoQ1NTUHJvcGVy
dHlJRCwgZG91YmxlKTsKLSAgICB1bnNpZ25lZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBj
b25zdDsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpIGNvbnN0
IHsgcmV0dXJuIG1faGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dDsgfQotCi1wcml2YXRl
OgotICAgIENvbXBvc2l0ZUFuaW1hdGlvbihDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYp
OwotCi0gICAgdm9pZCB1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5
bGUqIGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICB2
b2lkIHVwZGF0ZUtleWZyYW1lQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUq
IGN1cnJlbnRTdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICAKLSAg
ICB0eXBlZGVmIEhhc2hNYXA8aW50LCBSZWZQdHI8SW1wbGljaXRBbmltYXRpb24+PiBDU1NQcm9w
ZXJ0eVRyYW5zaXRpb25zTWFwOwotICAgIHR5cGVkZWYgSGFzaE1hcDxBdG9tU3RyaW5nSW1wbCos
IFJlZlB0cjxLZXlmcmFtZUFuaW1hdGlvbj4+IEFuaW1hdGlvbk5hbWVNYXA7Ci0KLSAgICBib29s
IG1fc3VzcGVuZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1faGFzQW5pbWF0aW9uVGhhdERlcGVu
ZHNPbkxheW91dCB7IGZhbHNlIH07Ci0KLSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZSYgbV9hbmltYXRpb25Db250cm9sbGVyOwotICAgIENTU1Byb3BlcnR5VHJhbnNpdGlvbnNNYXAg
bV90cmFuc2l0aW9uczsKLSAgICBBbmltYXRpb25OYW1lTWFwIG1fa2V5ZnJhbWVBbmltYXRpb25z
OwotICAgIFZlY3RvcjxBdG9tU3RyaW5nSW1wbCo+IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1h
cDsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggNDUzOWY2YTUzZWM1MTUwYzkwNzM3ZDIwZTFiYjJhNWJiNDBhMDlhOC4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKKysrIC9kZXYvbnVsbApAQCAt
MSwzNzggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiSW1wbGljaXRBbmltYXRpb24u
aCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVk
ZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24u
aCIKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotI2luY2x1ZGUgIkNvbnRlbnRDaGFuZ2VPYnNl
cnZlci5oIgotI2VuZGlmCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlb21l
dHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLSNpbmNsdWRl
ICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1JbXBsaWNpdEFuaW1hdGlvbjo6SW1wbGljaXRBbmltYXRpb24o
Y29uc3QgQW5pbWF0aW9uJiB0cmFuc2l0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3Bl
cnR5LCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1h
dGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIGZyb21TdHlsZSkKLSAgICA6IEFuaW1hdGlvbkJhc2Uo
dHJhbnNpdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9mcm9tU3R5
bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKGZyb21TdHlsZSkpCi0gICAgLCBtX3RyYW5zaXRpb25Q
cm9wZXJ0eSh0cmFuc2l0aW9uLnByb3BlcnR5KCkuaWQpCi0gICAgLCBtX2FuaW1hdGluZ1Byb3Bl
cnR5KGFuaW1hdGluZ1Byb3BlcnR5KQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAg
ZWxlbWVudC5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZEFkZFRyYW5zaXRp
b24oZWxlbWVudCwgdHJhbnNpdGlvbik7Ci0jZW5kaWYKLSAgICBBU1NFUlQoYW5pbWF0aW5nUHJv
cGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLX0KLQotSW1wbGljaXRBbmltYXRpb246On5J
bXBsaWNpdEFuaW1hdGlvbigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAo
YXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1l
bnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVtZW50
LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIC8vIC8vIE1ha2Ugc3VyZSB0byB0
ZWxsIHRoZSByZW5kZXJlciB0aGF0IHdlIGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1cmUg
YW55IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0QWN0
aXZlKCkpCi0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0
aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGlu
TGlzdGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRvY3VtZW50KCku
aGFzTGlzdGVuZXJUeXBlKGluTGlzdGVuZXJUeXBlKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1hdGVD
aGFuZ2U+IEltcGxpY2l0QW5pbWF0aW9uOjphbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UgZ2V0
IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBjbGVh
bmluZyB1cCBhIGp1c3QgZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIFNvIGp1c3QgcmV0dXJu
LiBFdmVyeXRoaW5nIGlzIGFscmVhZHkgYWxsIGNsZWFuZWQgdXAuCi0gICAgaWYgKHBvc3RBY3Rp
dmUoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0YXRl
ID0gc3RhdGUoKTsKLQotICAgIC8vIFJlc2V0IHRvIHN0YXJ0IHRoZSB0cmFuc2l0aW9uIGlmIHdl
IGFyZSBuZXcKLSAgICBpZiAoaXNOZXcoKSkKLSAgICAgICAgcmVzZXQodGFyZ2V0U3R5bGUsIGNv
bXBvc2l0ZUFuaW1hdGlvbik7Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmltYXRpb24uCi0g
ICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBzbyBtYWtlIG9u
ZSBpZiBuZWVkZWQKLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5
bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgQ1NTUHJvcGVy
dHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBh
bmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBw
cm9ncmVzcygpKTsKLSAgICAvLyBGSVhNRTogd2UgYWxzbyBuZWVkIHRvIGRldGVjdCBjYXNlcyB3
aGVyZSB3ZSBoYXZlIHRvIHNvZnR3YXJlIGFuaW1hdGUgZm9yIG90aGVyIHJlYXNvbnMsCi0gICAg
Ly8gc3VjaCBhcyBhIGNoaWxkIHVzaW5nIGluaGVyaXRpbmcgdGhlIHRyYW5zZm9ybS4gaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzOTAyCi0KLSAgICAvLyBGaXJlIHRo
ZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRl
ZCgpOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hhbmdl
OjpTdHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0ZSgpICE9IG9sZFN0YXRlKQotICAgICAgICBj
aGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRlQ2hhbmdlKTsKLQotICAgIGlmICgoaXNQYXVz
ZWRTdGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5nU3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQYXVz
ZWRTdGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdTdGF0ZShzdGF0ZSgpKSkpCi0gICAgICAgIGNo
YW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKTsKLQotICAgIHJldHVy
biBjaGFuZ2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUo
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBpZiAo
IWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xv
bmVQdHIoKm1fdG9TdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9w
ZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFuaW1hdGVkU3R5bGUuZ2V0KCksIG1f
ZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dyZXNzKCkpOwotfQotCi1ib29s
IEltcGxpY2l0QW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oTGF5
b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChoYXNTdHlsZSgpKTsKLQotICAg
IGlmICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8v
IE5vbi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBBU1NFUlQobV9hbmltYXRp
bmdQcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0KLSAgICBSZW5kZXJCb3gmIGJv
eCA9IGRvd25jYXN0PFJlbmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIEZsb2F0UmVjdCByZW5k
ZXJlckJveCA9IHNuYXBSZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94
LmRvY3VtZW50KCkuZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IHN0YXJ0
Qm91bmRzID0gYm91bmRzOwotICAgIExheW91dFJlY3QgZW5kQm91bmRzID0gYm91bmRzOwotCi0g
ICAgaWYgKHRyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCgpKSB7Ci0gICAgICAgIGlmICghY29t
cHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKm1fZnJv
bVN0eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVy
Qm94LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0
cml4KHJlbmRlcmVyQm94LCAqbV9mcm9tU3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZp
YU1hdHJpeChyZW5kZXJlckJveCwgKm1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSB1bmlvblJlY3Qoc3RhcnRCb3Vu
ZHMsIGVuZEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmlt
YXRpb246OmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
Q1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1f
YW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9uOjpzdGFydEFu
aW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0VHJhbnNpdGlv
bih0aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90
b1N0eWxlLmdldCgpKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChhdXRv
KiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT50cmFuc2l0
aW9uUGF1c2VkKHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHkpOwotICAgIC8vIFJlc3Rv
cmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBJbXBsaWNp
dEFuaW1hdGlvbjo6Y2xlYXIoKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYg
KGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3Vt
ZW50KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxlbWVu
dCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICBBbmltYXRpb25CYXNlOjpjbGVh
cigpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCkKLXsK
LSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5k
ZXJlci0+dHJhbnNpdGlvbkZpbmlzaGVkKG1fYW5pbWF0aW5nUHJvcGVydHkpOwotfQotCi12b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCi17
Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAoYXV0byogZWxlbWVudCA9IHRoaXMt
PmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2Jz
ZXJ2ZXIoKS5kaWRGaW5pc2hUcmFuc2l0aW9uKCplbGVtZW50LCBtX2FuaW1hdGluZ1Byb3BlcnR5
KTsKLSNlbmRpZgotICAgIC8vIElmIHdlIGhhdmUgYSBrZXlmcmFtZSBhbmltYXRpb24gb24gdGhp
cyBwcm9wZXJ0eSwgdGhpcyB0cmFuc2l0aW9uIGlzIGJlaW5nIG92ZXJyaWRkZW4uIFRoZSBrZXlm
cmFtZQotICAgIC8vIGFuaW1hdGlvbiBrZWVwcyBhbiB1bmFuaW1hdGVkIHN0eWxlIGluIGNhc2Ug
YSB0cmFuc2l0aW9uIHN0YXJ0cyB3aGlsZSB0aGUga2V5ZnJhbWUgYW5pbWF0aW9uIGlzCi0gICAg
Ly8gcnVubmluZy4gQnV0IG5vdyB0aGF0IHRoZSB0cmFuc2l0aW9uIGhhcyBjb21wbGV0ZWQsIHdl
IG5lZWQgdG8gdXBkYXRlIHRoaXMgc3R5bGUgd2l0aCBpdHMgbmV3Ci0gICAgLy8gZGVzdGluYXRp
b24uIElmIHdlIGRpZG4ndCwgdGhlIG5leHQgdGltZSB0aHJvdWdoIHdlIHdvdWxkIHRoaW5rIGEg
dHJhbnNpdGlvbiBoYWQgc3RhcnRlZAotICAgIC8vIChjb21wYXJpbmcgdGhlIG9sZCB1bmFuaW1h
dGVkIHN0eWxlIHdpdGggdGhlIG5ldyBmaW5hbCBzdHlsZSBvZiB0aGUgdHJhbnNpdGlvbikuCi0g
ICAgaWYgKGF1dG8qIGFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25G
b3JQcm9wZXJ0eShtX2FuaW1hdGluZ1Byb3BlcnR5KSkKLSAgICAgICAgYW5pbWF0aW9uLT5zZXRV
bmFuaW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKCptX3RvU3R5bGUpKTsKLQotICAg
IHNlbmRUcmFuc2l0aW9uRXZlbnQoZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCwgZWxh
cHNlZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbigpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0
aW9uOjpzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgZG91
YmxlIGVsYXBzZWRUaW1lKQotewotICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRy
YW5zaXRpb25lbmRFdmVudCkgewotICAgICAgICBEb2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3Rl
bmVyVHlwZSA9IERvY3VtZW50OjpUUkFOU0lUSU9ORU5EX0xJU1RFTkVSOwotCi0gICAgICAgIGlm
IChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7Ci0gICAgICAgICAg
ICBTdHJpbmcgcHJvcGVydHlOYW1lID0gZ2V0UHJvcGVydHlOYW1lU3RyaW5nKG1fYW5pbWF0aW5n
UHJvcGVydHkpOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdGhl
IGV2ZW50Ci0gICAgICAgICAgICBhdXRvIGVsZW1lbnQgPSBtYWtlUmVmUHRyKHRoaXMtPmVsZW1l
bnQoKSk7Ci0KLSAgICAgICAgICAgIEFTU0VSVCghZWxlbWVudCB8fCBlbGVtZW50LT5kb2N1bWVu
dCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpOb3RJbkJhY2tGb3J3YXJk
Q2FjaGUpOwotICAgICAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcKLSAgICAg
ICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRXZl
bnRUb0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIHByb3BlcnR5TmFtZSwgZWxhcHNlZFRp
bWUpOwotCi0gICAgICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5hbmltYXRlZCkg
c3R5bGUKLSAgICAgICAgICAgIGlmIChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRp
b25lbmRFdmVudCAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgICAgIHNldE5l
ZWRzU3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgICAgIHJldHVybiB0cnVl
OyAvLyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVy
biBmYWxzZTsgLy8gRGlkbid0IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgSW1wbGljaXRB
bmltYXRpb246OnJlc2V0KGNvbnN0IFJlbmRlclN0eWxlJiB0bywgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24pCi17Ci0gICAgQVNTRVJUKG1fZnJvbVN0eWxlKTsKLQotICAg
IG1fdG9TdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0byk7Ci0KLSAgICBpZiAoZWxlbWVu
dCgpKQotICAgICAgICBTdHlsZTo6bG9hZFBlbmRpbmdSZXNvdXJjZXMoKm1fdG9TdHlsZSwgZWxl
bWVudCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkpOwotCi0gICAgLy8gUmVzdGFydCB0aGUgdHJh
bnNpdGlvbi4KLSAgICBpZiAobV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlICYmICFjb21wb3NpdGVB
bmltYXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRpb24sIC0xKTsKLQotICAgIC8vIFNldCB0aGUg
dHJhbnNmb3JtIGFuaW1hdGlvbiBsaXN0LgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25M
aXN0KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBF
TkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRl
ckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRl
ckZ1bmN0aW9uTGlzdHMoKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6c2V0T3ZlcnJp
ZGRlbihib29sIGIpCi17Ci0gICAgaWYgKGIgPT0gbV9vdmVycmlkZGVuKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBtX292ZXJyaWRkZW4gPSBiOwotICAgIHVwZGF0ZVN0YXRlTWFjaGluZShtX292
ZXJyaWRkZW4gPyBBbmltYXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlIDogQW5pbWF0aW9u
U3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUsIC0xKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1h
dGlvbjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIChtX2FuaW1hdGluZ1Byb3BlcnR5ID09IHByb3BlcnR5KTsKLX0KLQotYm9vbCBJ
bXBsaWNpdEFuaW1hdGlvbjo6aXNUYXJnZXRQcm9wZXJ0eUVxdWFsKENTU1Byb3BlcnR5SUQgcHJv
cCwgY29uc3QgUmVuZGVyU3R5bGUqIHRhcmdldFN0eWxlKQotewotICAgIC8vIFdlIGNhbiBnZXQg
aGVyZSBmb3IgYSB0cmFuc2l0aW9uIHRoYXQgaGFzIG5vdCBzdGFydGVkIHlldC4gVGhpcyB3b3Vs
ZCBtYWtlIG1fdG9TdHlsZSB1bnNldCBhbmQgbnVsbC4gCi0gICAgLy8gU28gd2UgY2hlY2sgdGhh
dCBoZXJlIChzZWUgPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNjcw
Nj4pCi0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1
cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OnByb3BlcnRpZXNFcXVhbChwcm9wLCBtX3RvU3R5bGUu
Z2V0KCksIHRhcmdldFN0eWxlKTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6YmxlbmRQ
cm9wZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlEIHByb3AsIFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUpCi17Ci0gICAgLy8gV2Ugc2hvdWxkIG5ldmVyIGFkZCBhIHRyYW5zaXRpb24gd2l0
aCBhIDAgZHVyYXRpb24gYW5kIGRlbGF5LiBCdXQgaWYgd2UgZXZlciBkaWQKLSAgICAvLyBpdCB3
b3VsZCBoYXZlIGEgbnVsbCB0b1N0eWxlLiBTbyBqdXN0IGluIGNhc2UsIGxldCdzIGNoZWNrIHRo
YXQgaGVyZS4gKFNlZQotICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjQ3ODc+Ci0gICAgaWYgKCFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgCi0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9w
LCBjdXJyZW50U3R5bGUsIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHByb2dy
ZXNzKCkpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1
bmN0aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxz
ZTsKLSAgICAKLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJl
dHVybjsKLSAgICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdmFsID0gJm1f
ZnJvbVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB0
b1ZhbCA9ICZtX3RvU3R5bGUtPnRyYW5zZm9ybSgpOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0aW9u
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgdmFsID0gdG9WYWw7Ci0KLSAgICBpZiAodmFsLT5vcGVy
YXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgIC8vIEFu
IGVtcHR5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55dGhpbmcuCi0gICAgaWYgKHZhbCAhPSB0
b1ZhbCAmJiAhdG9WYWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIXZhbC0+b3BlcmF0aW9u
c01hdGNoKCp0b1ZhbCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFRyYW5zZm9ybSBsaXN0
cyBtYXRjaC4KLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19Ci0K
LXN0YXRpYyBib29sIGZpbHRlck9wZXJhdGlvbnNNYXRjaChjb25zdCBGaWx0ZXJPcGVyYXRpb25z
KiBmcm9tT3BlcmF0aW9ucywgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG9PcGVyYXRpb25zKQot
ewotICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAg
ICAgZnJvbU9wZXJhdGlvbnMgPSAmdG9PcGVyYXRpb25zOwotCi0gICAgaWYgKGZyb21PcGVyYXRp
b25zLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICBpZiAoZnJvbU9wZXJhdGlvbnMgIT0gJnRvT3BlcmF0aW9ucyAmJiAhdG9PcGVyYXRpb25zLm9w
ZXJhdGlvbnMoKS5pc0VtcHR5KCkgJiYgIWZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zTWF0Y2go
dG9PcGVyYXRpb25zKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5j
dGlvbkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwot
Ci0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRjaCgm
bV9mcm9tU3R5bGUtPmZpbHRlcigpLCBtX3RvU3R5bGUtPmZpbHRlcigpKTsKLX0KLQotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1h
dGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9wRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8
ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5j
dGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJvbVN0eWxlLT5iYWNr
ZHJvcEZpbHRlcigpLCBtX3RvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpOwotfQotI2VuZGlmCi0K
LXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0
aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0
Y2goJm1fZnJvbVN0eWxlLT5hcHBsZUNvbG9yRmlsdGVyKCksIG1fdG9TdHlsZS0+YXBwbGVDb2xv
ckZpbHRlcigpKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gSW1wbGljaXRBbmltYXRpb246OnRp
bWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0ID0gQW5pbWF0aW9u
QmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAoIXQgfHwgdC52YWx1ZSgpICE9IDBf
cyB8fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZDKSAmJiBfTVNDX1ZFUiA+PSAxOTIw
Ci0gICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuIHQ7Ci0j
ZW5kaWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAgbWVhbnMgd2UgbmVlZCBzZXJ2aWNl
LiBCdXQgaWYgdGhpcyBpcyBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24gd2UgCi0gICAgLy8gb25s
eSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUgdHJhbnNpdGlvbi4KLSAgICBpZiAoQ1NT
UHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKG1fYW5p
bWF0aW5nUHJvcGVydHkpICYmIGlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICBib29sIGlzTG9v
cGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsK
LSAgICB9Ci0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCmRlbGV0
ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3MmI4NGFkY2VjZjkyOGQ4NGUxNWE0MGM1Yzg4NTc2
MDVmM2U2NDYyLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKKysrIC9k
ZXYvbnVsbApAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVz
ZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmlj
YXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlv
bnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBO
ZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YK
LSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3Bl
Y2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgot
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJh
c2UuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBSZW5kZXJFbGVtZW50OwotCi0vLyBB
biBJbXBsaWNpdEFuaW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGEgdHJhbnNpdGlvbiBvZiBh
IHNwZWNpZmljIENTUyBwcm9wZXJ0eQotLy8gZm9yIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCi1j
bGFzcyBJbXBsaWNpdEFuaW1hdGlvbiA6IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1YmxpYzoK
LSAgICBzdGF0aWMgUmVmPEltcGxpY2l0QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9u
JiBhbmltYXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHksIEVsZW1lbnQmIGVs
ZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSYgZnJvbVN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
SW1wbGljaXRBbmltYXRpb24oYW5pbWF0aW9uLCBhbmltYXRpbmdQcm9wZXJ0eSwgZWxlbWVudCwg
Y29tcG9zaXRlQW5pbWF0aW9uLCBmcm9tU3R5bGUpKTsKLSAgICB9OwotICAgIAotICAgIENTU1By
b3BlcnR5SUQgdHJhbnNpdGlvblByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV90cmFuc2l0aW9u
UHJvcGVydHk7IH0KLSAgICBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5KCkgY29uc3Qg
eyByZXR1cm4gbV9hbmltYXRpbmdQcm9wZXJ0eTsgfQotCi0gICAgdm9pZCBvbkFuaW1hdGlvbkVu
ZChkb3VibGUgZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24o
ZG91YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91
YmxlIHRpbWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmls
bGluZ0ZvcndhcmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVD
aGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmIHRh
cmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKTsK
LSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCByZXNldChjb25zdCBSZW5kZXJTdHls
ZSYgdG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZU
cmFuc2Zvcm1BbmltYXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9v
bCBhZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0OwotCi0gICAgdm9pZCBzZXRPdmVy
cmlkZGVuKGJvb2wpOwotICAgIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0IG92ZXJyaWRlIHsgcmV0
dXJuIG1fb3ZlcnJpZGRlbjsgfQotCi0gICAgYm9vbCBhZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVy
dHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGhhc1N0eWxlKCkgY29uc3QgeyByZXR1
cm4gbV9mcm9tU3R5bGUgJiYgbV90b1N0eWxlOyB9Ci0KLSAgICBib29sIGlzVGFyZ2V0UHJvcGVy
dHlFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSopOwotCi0gICAgdm9pZCBi
bGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQsIFJlbmRlclN0eWxlKik7Ci0K
LSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwotICAg
IAotICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1cm4gbV9hY3RpdmU7IH0KLSAgICB2b2lk
IHNldEFjdGl2ZShib29sIGIpIHsgbV9hY3RpdmUgPSBiOyB9Ci0KLSAgICBjb25zdCBSZW5kZXJT
dHlsZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gKm1fZnJvbVN0
eWxlOyB9Ci0KLSAgICB2b2lkIGNsZWFyKCkgb3ZlcnJpZGU7Ci0KLXByb3RlY3RlZDoKLSAgICBi
b29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUpIGNv
bnN0OyAgICAKLSAgICBib29sIHNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYs
IGRvdWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICB2b2lkIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rp
b25MaXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygp
OwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5n
QmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICB2b2lkIGNoZWNrRm9y
TWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotcHJpdmF0ZToKLSAgICBJbXBs
aWNpdEFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBDU1NQcm9wZXJ0eUlELCBFbGVtZW50Jiwg
Q29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5bGUmKTsKLSAgICB2aXJ0dWFsIH5J
bXBsaWNpdEFuaW1hdGlvbigpOwotCi0gICAgLy8gVGhlIHR3byBzdHlsZXMgdGhhdCB3ZSBhcmUg
YmxlbmRpbmcuCi0gICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX2Zyb21TdHlsZTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fdG9TdHlsZTsKLQotICAgIENTU1By
b3BlcnR5SUQgbV90cmFuc2l0aW9uUHJvcGVydHk7IC8vIFRyYW5zaXRpb24gcHJvcGVydHkgYXMg
c3BlY2lmaWVkIGluIHRoZSBSZW5kZXJTdHlsZS4KLSAgICBDU1NQcm9wZXJ0eUlEIG1fYW5pbWF0
aW5nUHJvcGVydHk7IC8vIFNwZWNpZmljIHByb3BlcnR5IGZvciB0aGlzIEltcGxpY2l0QW5pbWF0
aW9uCi0KLSAgICBib29sIG1fYWN0aXZlIHsgdHJ1ZSB9OyAvLyBVc2VkIGZvciBjdWxsaW5nIHRo
ZSBsaXN0IG9mIHRyYW5zaXRpb25zLgotICAgIGJvb2wgbV9vdmVycmlkZGVuIHsgZmFsc2UgfTsg
Ly8gVHJ1ZSB3aGVuIHRoZXJlIGlzIGEga2V5ZnJhbWUgYW5pbWF0aW9uIHRoYXQgb3ZlcnJpZGVz
IHRoZSB0cmFuc2l0aW9uaW5nIHByb3BlcnR5Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1h
dGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGIxYjU3MTUwNzcyMzg3N2I1ZWJm
MzMyYmIwOGM4NTA5Nzc3OTg4YzQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRp
b24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTQzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMDcsIDIwMTIgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUi
KSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0
byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBz
b2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9S
UyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUK
LSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0g
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5o
IgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1h
dGlvbi5oIgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0aWxp
dGllcy5oIgotI2luY2x1ZGUgIlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgi
Ci0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0jaW5jbHVkZSAiU3R5bGVSZXNv
bHZlci5oIgotI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKLSNpbmNsdWRlICJUcmFuc2xhdGVUcmFu
c2Zvcm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJXaWxsQ2hhbmdlRGF0YS5oIgotCi1uYW1lc3Bh
Y2UgV2ViQ29yZSB7Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjpLZXlmcmFtZUFuaW1hdGlvbihjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0
aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5
bGUpCi0gICAgOiBBbmltYXRpb25CYXNlKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5p
bWF0aW9uKQotICAgICwgbV9rZXlmcmFtZXMoYW5pbWF0aW9uLm5hbWUoKSkKLSAgICAsIG1fdW5h
bmltYXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cih1bmFuaW1hdGVkU3R5bGUpKQotewot
ICAgIHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotCi0gICAgLy8gVXBkYXRlIHRoZSBtX3RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdFZhbGlkIGZsYWcgYmFzZWQgb24gd2hldGhlciB0aGUgZnVuY3Rpb24g
bGlzdHMgaW4gdGhlIGtleWZyYW1lcyBtYXRjaC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0
aW9uTGlzdCgpOwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0j
aWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29sb3JG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5
ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICBpZiAoV2lsbENoYW5nZURhdGE6OnByb3Bl
cnR5Q3JlYXRlc1N0YWNraW5nQ29udGV4dChwcm9wZXJ0eUlEKSkKLSAgICAgICAgICAgIG1fdHJp
Z2dlcnNTdGFja2luZ0NvbnRleHQgPSB0cnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKENTU1By
b3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0
eUlEKSkKLSAgICAgICAgICAgIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSA9IHRydWU7Ci0gICAg
ICAgIAotICAgICAgICBpZiAobV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCAmJiBtX2hhc0FjY2Vs
ZXJhdGVkUHJvcGVydHkpCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci0KLSAgICBjb21wdXRl
TGF5b3V0RGVwZW5kZW5jeSgpOwotfQotCi1LZXlmcmFtZUFuaW1hdGlvbjo6fktleWZyYW1lQW5p
bWF0aW9uKCkKLXsKLSAgICAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0aGUgcmVuZGVyZXIgdGhhdCB3
ZSBhcmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBhY2NlbGVyYXRlZCBhbmltYXRp
b25zIGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgpKQotICAgICAgICBlbmRBbmlt
YXRpb24oKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUxheW91dERlcGVu
ZGVuY3koKQotewotICAgIGlmICghbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHNpemVfdCBudW1LZXlmcmFt
ZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1L
ZXlmcmFtZXM7IGkrKykgewotICAgICAgICBhdXRvKiBrZXlmcmFtZVN0eWxlID0gbV9rZXlmcmFt
ZXNbaV0uc3R5bGUoKTsKLSAgICAgICAgaWYgKCFrZXlmcmFtZVN0eWxlKSB7Ci0gICAgICAgICAg
ICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICB9
Ci0gICAgICAgIGlmIChrZXlmcmFtZVN0eWxlLT5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAgICAg
ICAgYXV0byYgdHJhbnNmb3JtT3BlcmF0aW9ucyA9IGtleWZyYW1lU3R5bGUtPnRyYW5zZm9ybSgp
OwotICAgICAgICAgICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiB0cmFuc2Zvcm1PcGVy
YXRpb25zLm9wZXJhdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIGlmIChvcGVyYXRpb24tPmlz
VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uVHlwZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGF1dG8gdHJhbnNsYXRpb24gPSBkb3duY2FzdDxUcmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb24+
KG9wZXJhdGlvbi5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmICh0cmFuc2xhdGlvbi0+
eCgpLmlzUGVyY2VudCgpIHx8IHRyYW5zbGF0aW9uLT55KCkuaXNQZXJjZW50KCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIG1fZGVwZW5kc09uTGF5b3V0ID0gdHJ1ZTsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJT
dHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZykgY29uc3QKLXsKLSAgICBzaXplX3QgbnVtS2V5
ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGlmICghbnVtS2V5ZnJhbWVzKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICAvLyBGaW5kIHRoZSBmaXJzdCBrZXkKLSAgICBkb3VibGUgZWxh
cHNlZFRpbWUgPSBnZXRFbGFwc2VkVGltZSgpOwotICAgIGlmIChtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSAmJiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSAhPSBBbmltYXRpb246Okl0ZXJh
dGlvbkNvdW50SW5maW5pdGUpCi0gICAgICAgIGVsYXBzZWRUaW1lID0gc3RkOjptaW4oZWxhcHNl
ZFRpbWUsIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNv
dW50KCkpOwotCi0gICAgY29uc3QgZG91YmxlIGZyYWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJhY3Rp
b25hbFRpbWUoMSwgZWxhcHNlZFRpbWUsIDApOwotICAgIEFTU0VSVCghbV9rZXlmcmFtZXNbMF0u
a2V5KCkpOwotICAgIEFTU0VSVChtX2tleWZyYW1lc1ttX2tleWZyYW1lcy5zaXplKCkgLSAxXS5r
ZXkoKSA9PSAxKTsKLQotICAgIGludCBwcmV2SW5kZXggPSAtMTsKLSAgICBpbnQgbmV4dEluZGV4
ID0gLTE7Ci0gICAgLy8gRklYTUU6IHdpdGggYSBsb3Qgb2Yga2V5cywgdGhpcyBsaW5lYXIgc2Vh
cmNoIHdpbGwgYmUgc2xvdy4gV2UgY291bGQgYmluYXJ5IHNlYXJjaC4KLSAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1l
VmFsdWUmIGN1cnJLZXlGcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotCi0gICAgICAgIGlmICghY3Vy
cktleUZyYW1lLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpKQotICAgICAgICAgICAgY29udGlu
dWU7Ci0KLSAgICAgICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgY3VycktleUZyYW1lLmtleSgpKSB7
Ci0gICAgICAgICAgICBuZXh0SW5kZXggPSBpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KLSAgICAgICAgcHJldkluZGV4ID0gaTsKLSAgICB9Ci0KLSAgICBpZiAocHJldkluZGV4ID09
IC0xKQotICAgICAgICBwcmV2SW5kZXggPSAwOwotICAgIGlmIChuZXh0SW5kZXggPT0gLTEpCi0g
ICAgICAgIG5leHRJbmRleCA9IG1fa2V5ZnJhbWVzLnNpemUoKSAtIDE7Ci0KLSAgICBjb25zdCBL
ZXlmcmFtZVZhbHVlJiBwcmV2S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1twcmV2SW5kZXhdOwotICAg
IGNvbnN0IEtleWZyYW1lVmFsdWUmIG5leHRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW25leHRJbmRl
eF07Ci0KLSAgICBmcm9tU3R5bGUgPSBwcmV2S2V5ZnJhbWUuc3R5bGUoKTsKLSAgICB0b1N0eWxl
ID0gbmV4dEtleWZyYW1lLnN0eWxlKCk7Ci0KLSAgICBkb3VibGUgb2Zmc2V0ID0gcHJldktleWZy
YW1lLmtleSgpOwotICAgIGRvdWJsZSBzY2FsZSA9IDEuMCAvIChuZXh0SW5kZXggPT0gcHJldklu
ZGV4ID8gIDEgOiAobmV4dEtleWZyYW1lLmtleSgpIC0gcHJldktleWZyYW1lLmtleSgpKSk7Ci0K
LSAgICBwcm9nID0gcHJvZ3Jlc3Moc2NhbGUsIG9mZnNldCwgcHJldktleWZyYW1lLnRpbWluZ0Z1
bmN0aW9uKCkpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gS2V5ZnJhbWVBbmltYXRp
b246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0
IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkKLXsKLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0YXRlKCk7
Ci0KLSAgICAvLyBVcGRhdGUgc3RhdGUgYW5kIGZpcmUgdGhlIHN0YXJ0IHRpbWVvdXQgaWYgbmVl
ZGVkIChGSVhNRTogdGhpcyBmdW5jdGlvbiBuZWVkcyBhIGJldHRlciBuYW1lKS4KLSAgICBmaXJl
QW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsKLQotICAgIC8vIElmIHdlIGhhdmUgbm90IHlldCBz
dGFydGVkLCB3ZSB3aWxsIG5vdCBoYXZlIGEgdmFsaWQgc3RhcnQgdGltZSwgc28ganVzdCBzdGFy
dCB0aGUgYW5pbWF0aW9uIGlmIG5lZWRlZC4KLSAgICBpZiAoaXNOZXcoKSkgewotICAgICAgICBp
ZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGxheWlu
ZyAmJiAhY29tcG9zaXRlQW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0xKTsK
LSAgICAgICAgZWxzZSBpZiAobV9hbmltYXRpb24tPnBsYXlTdGF0ZSgpID09IEFuaW1hdGlvblBs
YXlTdGF0ZTo6UGF1c2VkKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCwgLTEpOwotICAgIH0KLQotICAgIC8vIElmIHdl
IGdldCB0aGlzIGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUg
Y2xlYW5pbmcgdXAgYSBqdXN0LWZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBJZiBzbywgd2Ug
bmVlZCB0byBzZW5kIGJhY2sgdGhlIHRhcmdldFN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZlKCkp
IHsKLSAgICAgICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICAgICAgYW5pbWF0ZWRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0gICAgICAgIHJldHVybiB7
IH07Ci0gICAgfQotCi0gICAgLy8gSWYgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBzdGFydCB0aW1l
ciwgd2UgZG9uJ3Qgd2FudCB0byBjaGFuZ2UgdGhlIHN0eWxlIHlldC4KLSAgICAvLyBTcGVjaWFs
IGNhc2UgMSAtIGlmIHRoZSBkZWxheSB0aW1lIGlzIDAsIHRoZW4gd2UgZG8gd2FudCB0byBzZXQg
dGhlIGZpcnN0IGZyYW1lIG9mIHRoZQotICAgIC8vIGFuaW1hdGlvbiByaWdodCBhd2F5LiBUaGlz
IGF2b2lkcyBhIGZsYXNoIHdoZW4gdGhlIGFuaW1hdGlvbiBzdGFydHMuCi0gICAgLy8gU3BlY2lh
bCBjYXNlIDIgLSBpZiB0aGVyZSBpcyBhIGJhY2t3YXJkcyBmaWxsIG1vZGUsIHRoZW4gd2Ugd2Fu
dCB0byBjb250aW51ZQotICAgIC8vIHRocm91Z2ggdG8gdGhlIHN0eWxlIGJsZW5kIHNvIHRoYXQg
d2UgZ2V0IHRoZSBmcm9tU3R5bGUuCi0gICAgaWYgKHdhaXRpbmdUb1N0YXJ0KCkgJiYgbV9hbmlt
YXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNCYWNrd2FyZHMoKSkKLSAg
ICAgICAgcmV0dXJuIHsgfTsKLSAgICAKLSAgICAvLyBJZiB3ZSBoYXZlIG5vIGtleWZyYW1lcywg
ZG9uJ3QgYW5pbWF0ZS4KLSAgICBpZiAoIW1fa2V5ZnJhbWVzLnNpemUoKSkgewotICAgICAgICB1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kQW5pbWF0aW9uLCAtMSk7
Ci0gICAgICAgIHJldHVybiB7IH07Ci0gICAgfQotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5p
bWF0aW9uLgotICAgIC8vIFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwg
c28gbWFrZSBvbmUgaWYgbmVlZGVkLgotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAg
YW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0KLSAg
ICAvLyBGSVhNRTogd2UgbmVlZCB0byBiZSBtb3JlIGVmZmljaWVudCBhYm91dCBkZXRlcm1pbmlu
ZyB3aGljaCBrZXlmcmFtZXMgd2UgYXJlIGFuaW1hdGluZyBiZXR3ZWVuLgotICAgIC8vIFdlIHNo
b3VsZCBjYWNoZSB0aGUgbGFzdCBwYWlyIG9yIHNvbWV0aGluZy4KLSAgICBmb3IgKGF1dG8gcHJv
cGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMoKSkgewotICAgICAgICAvLyBHZXQgdGhl
IGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3ZWVuCi0gICAgICAgIGNvbnN0IFJlbmRl
clN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSog
dG9TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJsZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAg
IGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShwcm9wZXJ0eUlELCBmcm9tU3R5bGUs
IHRvU3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFuaW1hdGVkU3R5bGUuZ2V0KCksIGZyb21T
dHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0KLQotICAgIE9wdGlvblNldDxBbmltYXRl
Q2hhbmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5bGVCbGVuZGVkKTsKLSAgICBpZiAoc3Rh
dGUoKSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpTdGF0
ZUNoYW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3RhdGUob2xkU3RhdGUpIHx8IGlzUnVubmlu
Z1N0YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3RhdGUoc3RhdGUoKSkgfHwgaXNSdW5uaW5n
U3RhdGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlJ1bm5p
bmdTdGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hhbmdlOwotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
IGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgLy8gSWYgd2UncmUgZG9uZSwgb3IgaW4gdGhlIGRlbGF5
IHBoYXNlIGFuZCB3ZSdyZSBub3QgYmFja3dhcmRzIGZpbGxpbmcsIHRlbGwgdGhlIGNhbGxlciB0
byB1c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8fCAod2FpdGlu
Z1RvU3RhcnQoKSAmJiBtX2FuaW1hdGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9uLT5m
aWxsc0JhY2t3YXJkcygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFtX2tleWZyYW1l
cy5zaXplKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAg
ICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cihyZW5kZXJlcigpLT5z
dHlsZSgpKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVy
dGllcygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUgZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNz
IGJldHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSA9IG51bGxwdHI7
Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlID0gbnVsbHB0cjsKLSAgICAgICAg
ZG91YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAgZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclBy
b3BlcnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0gICAg
ICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcGVydHlJ
RCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0g
ICAgfQotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlRXh0ZW50T2ZUcmFuc2Zv
cm1BbmltYXRpb24oTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIEFTU0VSVChtX2tl
eWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSk7Ci0KLSAgICBp
ZiAoIWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBO
b24tYm94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgYXV0byYgYm94ID0gZG93bmNh
c3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgYXV0byByZW5kZXJlckJveCA9IHNuYXBS
ZWN0VG9EZXZpY2VQaXhlbHMoYm94LmJvcmRlckJveFJlY3QoKSwgYm94LmRvY3VtZW50KCkuZGV2
aWNlU2NhbGVGYWN0b3IoKSk7Ci0KLSAgICBMYXlvdXRSZWN0IGN1bXVsYXRpdmVCb3VuZHM7Ci0K
LSAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFtZXMua2V5ZnJhbWVzKCkpIHsKLSAg
ICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIGtleWZyYW1lU3R5bGUgPSBrZXlmcmFtZS5zdHlsZSgp
OwotCi0gICAgICAgIGlmICgha2V5ZnJhbWUuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRy
YW5zZm9ybSkpIHsKLSAgICAgICAgICAgIC8vIElmIHRoZSBmaXJzdCBrZXlmcmFtZSBpcyBtaXNz
aW5nIHRyYW5zZm9ybSBzdHlsZSwgdXNlIHRoZSBjdXJyZW50IHN0eWxlLgotICAgICAgICAgICAg
aWYgKCFrZXlmcmFtZS5rZXkoKSkKLSAgICAgICAgICAgICAgICBrZXlmcmFtZVN0eWxlID0gJmJv
eC5zdHlsZSgpOwotICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICB9Ci0KLSAgICAgICAgYXV0byBrZXlmcmFtZUJvdW5kcyA9IGJvdW5kczsKLSAgICAg
ICAgCi0gICAgICAgIGJvb2wgY2FuQ29tcHV0ZTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUZ1bmN0
aW9uTGlzdHNNYXRjaCgpKQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNvbXB1dGVUcmFuc2Zv
cm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0eWxlLCBr
ZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBj
b21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgocmVuZGVyZXJCb3gsICprZXlmcmFtZVN0
eWxlLCBrZXlmcmFtZUJvdW5kcyk7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWNhbkNvbXB1dGUp
Ci0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIAotICAgICAgICBjdW11bGF0aXZl
Qm91bmRzLnVuaXRlKGtleWZyYW1lQm91bmRzKTsKLSAgICB9Ci0KLSAgICBib3VuZHMgPSBjdW11
bGF0aXZlQm91bmRzOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0
aW9uOjpoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25z
dAotewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KTsK
LX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAg
ICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0LCBtX2FuaW1h
dGlvbiwgbV9rZXlmcmFtZXMpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBLZXlmcmFt
ZUFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYg
KCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9
IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25QYXVzZWQodGlt
ZU9mZnNldCwgbV9rZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUg
dGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghcGF1c2VkKCkpCi0gICAg
ICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0ZvcndhcmRzKQotewotICAgIGlmICgh
ZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0
aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uRmluaXNoZWQobV9r
ZXlmcmFtZXMuYW5pbWF0aW9uTmFtZSgpKTsKLQotICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFs
ICh1bmFuaW1hdGVkKSBzdHlsZQotICAgIGlmICghZmlsbGluZ0ZvcndhcmRzICYmICFwYXVzZWQo
KSkKLSAgICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi1ib29sIEtl
eWZyYW1lQW5pbWF0aW9uOjpzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlz
dGVuZXJUeXBlIGxpc3RlbmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5k
b2N1bWVudCgpLmhhc0xpc3RlbmVyVHlwZShsaXN0ZW5lclR5cGUpOwotfQotCi12b2lkIEtleWZy
YW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAg
ICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZlbnQsIGVs
YXBzZWRUaW1lKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25JdGVy
YXRpb24oZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVu
dE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQsIGVsYXBzZWRUaW1lKTsKLX0KLQotdm9p
ZCBLZXlmcmFtZUFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQot
ewotICAgIHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQs
IGVsYXBzZWRUaW1lKTsKLSAgICBlbmRBbmltYXRpb24obV9hbmltYXRpb24tPmZpbGxzRm9yd2Fy
ZHMoKSk7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnNlbmRBbmltYXRpb25FdmVudChj
b25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBE
b2N1bWVudDo6TGlzdGVuZXJUeXBlIGxpc3RlbmVyVHlwZTsKLSAgICBpZiAoZXZlbnRUeXBlID09
IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25JdGVyYXRpb25FdmVudCB8fCBldmVudFR5cGUg
PT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50KQotICAgICAgICBsaXN0ZW5l
clR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OSVRFUkFUSU9OX0xJU1RFTkVSOwotICAgIGVsc2Ug
aWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9uRW5kRXZlbnQgfHwg
ZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCkKLSAgICAgICAgbGlz
dGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTkVORF9MSVNURU5FUjsKLSAgICBlbHNlIHsK
LSAgICAgICAgQVNTRVJUKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Via2l0QW5pbWF0aW9u
U3RhcnRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbnN0YXJ0RXZl
bnQpOwotICAgICAgICBpZiAobV9zdGFydEV2ZW50RGlzcGF0Y2hlZCkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgbV9zdGFydEV2ZW50RGlzcGF0Y2hlZCA9IHRydWU7Ci0gICAg
ICAgIGxpc3RlbmVyVHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05TVEFSVF9MSVNURU5FUjsKLSAg
ICB9Ci0KLSAgICBpZiAoc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkg
ewotICAgICAgICAvLyBEaXNwYXRjaCB0aGUgZXZlbnQKLSAgICAgICAgYXV0byBlbGVtZW50ID0g
bWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkpOwotCi0gICAgICAgIEFTU0VSVCghZWxlbWVudCB8
fCBlbGVtZW50LT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50
OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgLy8gU2NoZWR1bGUgZXZlbnQgaGFuZGxpbmcK
LSAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRF
dmVudFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgbV9rZXlmcmFtZXMuYW5pbWF0aW9u
TmFtZSgpLCBlbGFwc2VkVGltZSk7Ci0KLSAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwg
KHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgICAgIGlmICgoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMo
KS53ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFu
aW1hdGlvbmVuZEV2ZW50KSAmJiBlbGVtZW50LT5yZW5kZXJlcigpKQotICAgICAgICAgICAgc2V0
TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICByZXR1cm4gdHJ1ZTsg
Ly8gRGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgfQotCi0gICAgcmV0dXJuIGZhbHNlOyAvLyBE
aWQgbm90IGRpc3BhdGNoIGFuIGV2ZW50Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om92
ZXJyaWRlQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIG92ZXJyaWRlIGltcGxpY2l0
IGFuaW1hdGlvbnMgdGhhdCBtYXRjaCB0aGUgcHJvcGVydGllcyBpbiB0aGUga2V5ZnJhbWUgYW5p
bWF0aW9uCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVz
KCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5vdmVycmlkZUltcGxpY2l0QW5pbWF0
aW9ucyhwcm9wZXJ0eUlEKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzdW1lT3Zl
cnJpZGRlbkFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCByZXN1bWUgb3ZlcnJpZGRl
biBpbXBsaWNpdCBhbmltYXRpb25zCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZy
YW1lcy5wcm9wZXJ0aWVzKCkpCi0gICAgICAgIGNvbXBvc2l0ZUFuaW1hdGlvbigpLT5yZXN1bWVP
dmVycmlkZGVuSW1wbGljaXRBbmltYXRpb25zKHByb3BlcnR5SUQpOwotfQotCi1ib29sIEtleWZy
YW1lQW5pbWF0aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29u
c3QKLXsKLSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSk7
Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc29sdmVLZXlmcmFtZVN0eWxlcygpCi17
Ci0gICAgaWYgKCFlbGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiBz
dHlsZVNjb3BlID0gU3R5bGU6OlNjb3BlOjpmb3JPcmRpbmFsKCplbGVtZW50KCksIG1fYW5pbWF0
aW9uLT5uYW1lU3R5bGVTY29wZU9yZGluYWwoKSkpCi0gICAgICAgIHN0eWxlU2NvcGUtPnJlc29s
dmVyKCkua2V5ZnJhbWVTdHlsZXNGb3JBbmltYXRpb24oKmVsZW1lbnQoKSwgbV91bmFuaW1hdGVk
U3R5bGUuZ2V0KCksIG1fa2V5ZnJhbWVzKTsKLQotICAgIC8vIEVuc3VyZSByZXNvdXJjZSBsb2Fk
cyBmb3IgYWxsIHRoZSBmcmFtZXMuCi0gICAgZm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5ZnJh
bWVzLmtleWZyYW1lcygpKSB7Ci0gICAgICAgIGlmIChhdXRvKiBzdHlsZSA9IGNvbnN0X2Nhc3Q8
UmVuZGVyU3R5bGUqPihrZXlmcmFtZS5zdHlsZSgpKSkKLSAgICAgICAgICAgIFN0eWxlOjpsb2Fk
UGVuZGluZ1Jlc291cmNlcygqc3R5bGUsIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKSwgZWxlbWVudCgp
KTsKLSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3Jt
RnVuY3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZh
bHNlOwotICAgIAotICAgIGlmIChtX2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1l
cy5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgLy8gRW1wdHkgdHJhbnNmb3JtcyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUg
Zmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRoZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5
ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5VHJh
bnNmb3JtS2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsKLQotICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1
ZSYgY3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGlmIChjdXJyZW50
S2V5ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3JtKCkub3BlcmF0aW9ucygpLnNpemUoKSkgewotICAg
ICAgICAgICAgZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPSBpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0Tm9uRW1w
dHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0dXJu
OwotICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiBmaXJzdFZhbCA9ICZt
X2tleWZyYW1lc1tmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleF0uc3R5bGUoKS0+
dHJhbnNmb3JtKCk7Ci0gICAgCi0gICAgLy8gU2VlIGlmIHRoZSBrZXlmcmFtZXMgYXJlIHZhbGlk
Ci0gICAgZm9yIChzaXplX3QgaSA9IGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4
ICsgMTsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFs
dWUmIGN1cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBjb25zdCBUcmFu
c2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmY3VycmVudEtleWZyYW1lLnN0eWxlKCktPnRyYW5zZm9y
bSgpOwotICAgICAgICAKLSAgICAgICAgLy8gQW4gZW10cHkgdHJhbnNmb3JtIGxpc3QgbWF0Y2hl
cyBhbnl0aGluZy4KLSAgICAgICAgaWYgKHZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAKLSAgICAgICAgaWYgKCFmaXJzdFZhbC0+b3Bl
cmF0aW9uc01hdGNoKCp2YWwpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIG1f
dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFtZUFu
aW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMm
IChjb25zdCBSZW5kZXJTdHlsZSYpPiYgZmlsdGVyc0dldHRlcikgY29uc3QKLXsKLSAgICBpZiAo
bV9rZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShw
cm9wZXJ0eUlEKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gRW1wdHkgZmlsdGVy
cyBtYXRjaCBhbnl0aGluZywgc28gZmluZCB0aGUgZmlyc3Qgbm9uLWVtcHR5IGVudHJ5IGFzIHRo
ZSByZWZlcmVuY2UKLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0gbV9rZXlmcmFtZXMuc2l6ZSgp
OwotICAgIHNpemVfdCBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IG51bUtleWZyYW1lczsK
LQotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAg
ICAgaWYgKGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ldLnN0eWxlKCkpLm9wZXJhdGlvbnMo
KS5zaXplKCkpIHsKLSAgICAgICAgICAgIGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0gaTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJz
dE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybiBm
YWxzZTsKLQotICAgIGF1dG8mIGZpcnN0VmFsID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNb
Zmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXhdLnN0eWxlKCkpOwotICAgIAotICAgIGZvciAoc2l6
ZV90IGkgPSBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCArIDE7IGkgPCBudW1LZXlmcmFtZXM7
ICsraSkgewotICAgICAgICBhdXRvJiB2YWx1ZSA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVz
W2ldLnN0eWxlKCkpOwotCi0gICAgICAgIC8vIEFuIGVtdHB5IGZpbHRlciBsaXN0IG1hdGNoZXMg
YW55dGhpbmcuCi0gICAgICAgIGlmICh2YWx1ZS5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKCFmaXJzdFZhbC5vcGVyYXRpb25zTWF0
Y2godmFsdWUpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIHJldHVy
biB0cnVlOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmls
dGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBj
aGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUZpbHRlciwgW10g
KGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewot
ICAgICAgICByZXR1cm4gc3R5bGUuZmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLSNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGlu
Z0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENT
U1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHlsZSYgc3R5
bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0eWxlLmJh
Y2tkcm9wRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0jZW5kaWYKLQotdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAg
bV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJG
dW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5QXBwbGVDb2xvckZpbHRlciwgW10gKGNvbnN0IFJlbmRl
clN0eWxlJiBzdHlsZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICByZXR1
cm4gc3R5bGUuYXBwbGVDb2xvckZpbHRlcigpOwotICAgIH0pOwotfQotCi1PcHRpb25hbDxTZWNv
bmRzPiBLZXlmcmFtZUFuaW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9wdGlv
bmFsPFNlY29uZHM+IHQgPSBBbmltYXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwotICAg
IGlmICghdCB8fCB0LnZhbHVlKCkgIT0gMF9zIHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJTEVS
KE1TVkMpICYmIF9NU0NfVkVSID49IDE5MjAKLSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7Ci0j
ZWxzZQotICAgICAgICByZXR1cm4gdDsKLSNlbmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFsdWUg
b2YgMCBtZWFucyB3ZSBuZWVkIHNlcnZpY2UuIEJ1dCBpZiB3ZSBvbmx5IGhhdmUgYWNjZWxlcmF0
ZWQgYW5pbWF0aW9ucyB3ZSAKLSAgICAvLyBvbmx5IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9m
IHRoZSB0cmFuc2l0aW9uLgotICAgIGJvb2wgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IHRy
dWU7Ci0gICAgCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0
aWVzKCkpIHsKLSAgICAgICAgaWYgKCFDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQ
cm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkgfHwgIWlzQWNjZWxlcmF0ZWQoKSkgewot
ICAgICAgICAgICAgYWNjZWxlcmF0ZWRQcm9wZXJ0aWVzT25seSA9IGZhbHNlOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYWNjZWxlcmF0ZWRQcm9wZXJ0
aWVzT25seSkgewotICAgICAgICBib29sIGlzTG9vcGluZzsKLSAgICAgICAgZ2V0VGltZVRvTmV4
dEV2ZW50KHQudmFsdWUoKSwgaXNMb29waW5nKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdDsKLX0K
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDQ5MmUzOTE1NWM0YTliNzhjMWM2ZDZmZWUxYzJlZTNlMGJiNmJmMzguLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBA
Ci0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFn
bWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotI2luY2x1ZGUgIkRvY3VtZW50
LmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVMaXN0LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQot
Y2xhc3MgRmlsdGVyT3BlcmF0aW9uczsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIEtleWZy
YW1lQW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYW4gZXhwbGljaXQgYW5pbWF0aW9uIGZv
ciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3MgS2V5ZnJhbWVBbmltYXRpb24gZmluYWwg
OiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxLZXlmcmFt
ZUFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBl
bGVtZW50LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVu
ZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IEtleWZyYW1lQW5pbWF0aW9uKGFuaW1hdGlvbiwgZWxlbWVudCwgY29tcG9zaXRlQW5p
bWF0aW9uLCB1bmFuaW1hdGVkU3R5bGUpKTsKLSAgICB9Ci0gICAgCi0gICAgT3B0aW9uU2V0PEFu
aW1hdGVDaGFuZ2U+IGFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiwgY29uc3QgUmVuZGVyU3R5
bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0
eWxlKTsKLSAgICB2b2lkIGdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0
eWxlPiYpIG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1Bbmlt
YXRpb24oTGF5b3V0UmVjdCYpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgY29uc3QgS2V5ZnJhbWVM
aXN0JiBrZXlmcmFtZXMoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lczsgfQotCi0gICAgY29u
c3QgQXRvbVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzLmFuaW1hdGlv
bk5hbWUoKTsgfQotCi0gICAgYm9vbCBoYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEKSBjb25zdDsKLQotICAgIGJvb2wgdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSBjb25zdCB7
IHJldHVybiBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0OyB9Ci0gICAgYm9vbCBkZXBlbmRzT25M
YXlvdXQoKSBjb25zdCB7IHJldHVybiBtX2RlcGVuZHNPbkxheW91dDsgfQotICAgIGJvb2wgYWZm
ZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX2hhc0FjY2VsZXJhdGVk
UHJvcGVydHk7IH0KLQotICAgIHZvaWQgc2V0VW5hbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGUpIHsgbV91bmFuaW1hdGVkU3R5bGUgPSBXVEZNb3ZlKHN0eWxl
KTsgfQotICAgIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBvdmVy
cmlkZSB7IHJldHVybiAqbV91bmFuaW1hdGVkU3R5bGU7IH0KLQotICAgIE9wdGlvbmFsPFNlY29u
ZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgS2V5ZnJh
bWVBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1hdGlv
biYsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1hdGVkU3R5bGUpOwotICAgIHZpcnR1YWwgfktl
eWZyYW1lQW5pbWF0aW9uKCk7Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVs
YXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uSXRlcmF0aW9uKGRvdWJs
ZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkVuZChkb3VibGUg
ZWxhcHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRp
bWVPZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVP
ZmZzZXQpIG92ZXJyaWRlOwotICAgIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgZmlsbGluZ0Zvcndh
cmRzID0gZmFsc2UpIG92ZXJyaWRlOwotCi0gICAgdm9pZCBvdmVycmlkZUFuaW1hdGlvbnMoKSBv
dmVycmlkZTsKLSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCkgb3ZlcnJpZGU7
Ci0KLSAgICBib29sIHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5l
clR5cGUgaW5MaXN0ZW5lclR5cGUpIGNvbnN0OwotICAgIGJvb2wgc2VuZEFuaW1hdGlvbkV2ZW50
KGNvbnN0IEF0b21TdHJpbmcmLCBkb3VibGUgZWxhcHNlZFRpbWUpOwotCi0gICAgYm9vbCBhZmZl
Y3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNv
bXB1dGVFeHRlbnRPZkFuaW1hdGlvbkZvck1hdHJpeEFuaW1hdGlvbihjb25zdCBGbG9hdFJlY3Qm
IHJlbmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBib29sIGNvbXB1dGVFeHRl
bnRPZkFuaW1hdGlvbkZvck1hdGNoaW5nVHJhbnNmb3JtTGlzdHMoY29uc3QgRmxvYXRSZWN0JiBy
ZW5kZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgdm9pZCBjb21wdXRlTGF5b3V0
RGVwZW5kZW5jeSgpOwotICAgIHZvaWQgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0gICAgdm9p
ZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgpOwotICAgIHZvaWQgY2hlY2tGb3JNYXRj
aGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQot
ICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
I2VuZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3Rz
KCk7Ci0gICAgYm9vbCBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9w
ZXJ0eUlELCBjb25zdCBzdGQ6OmZ1bmN0aW9uPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIChjb25z
dCBSZW5kZXJTdHlsZSYpPiYpIGNvbnN0OwotICAgIAotICAgIC8vIEdldCB0aGUgc3R5bGVzIGZv
ciB0aGUgZ2l2ZW4gcHJvcGVydHkgc3Vycm91bmRpbmcgdGhlIGN1cnJlbnQgYW5pbWF0aW9uIHRp
bWUgYW5kIHRoZSBwcm9ncmVzcyBiZXR3ZWVuIHRoZW0uCi0gICAgdm9pZCBmZXRjaEludGVydmFs
RW5kcG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqJiBm
cm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9ncmVzcykg
Y29uc3Q7Ci0KLSAgICBLZXlmcmFtZUxpc3QgbV9rZXlmcmFtZXM7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBtX3VuYW5pbWF0ZWRTdHlsZTsgLy8gVGhlIHN0eWxlIGp1c3QgYmVm
b3JlIHdlIHN0YXJ0ZWQgYW5pbWF0aW9uCi0KLSAgICBib29sIG1fc3RhcnRFdmVudERpc3BhdGNo
ZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgeyBmYWxzZSB9OwotICAgIGJv
b2wgbV9kZXBlbmRzT25MYXlvdXQgeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhp
Y3NMYXllci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXll
ci5oCmluZGV4IDdlNGZlM2ZkMDBjYTU5ZDliNzgyYThhMDQwZjRkNWI3OTE4MDlmZTYuLmVlMzQ3
YmE4NTMyNjFjOTYyZWE5OTQyYjY4M2YyYTJkYTkxMmFkMTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKQEAgLTQ3NCw5ICs0NzQsNyBA
QCBwdWJsaWM6CiAgICAgLy8gVHJhbnNpdGlvbnMgYXJlIGlkZW50aWZpZWQgYnkgYSBzcGVjaWFs
IGFuaW1hdGlvbiBuYW1lIHRoYXQgY2Fubm90IGNsYXNoIHdpdGggYSBrZXlmcmFtZSBpZGVudGlm
aWVyLgogICAgIHN0YXRpYyBTdHJpbmcgYW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0
ZWRQcm9wZXJ0eUlEKTsKIAotICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMg
aGFuZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLiBJZiB0aGlzIHJldHVybnMKLSAgICAv
LyBmYWxzZSwgdGhlIGFuaW1hdGlvbiB3aWxsIGJlIHJ1biBieSBDU1NBbmltYXRpb25Db250cm9s
bGVyLgotICAgIC8vIFRoZXNlIG1ldGhvZHMgaGFuZGxlIGJvdGggdHJhbnNpdGlvbnMgYW5kIGtl
eWZyYW1lIGFuaW1hdGlvbnMuCisgICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBp
cyBoYW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uCiAgICAgdmlydHVhbCBib29sIGFk
ZEFuaW1hdGlvbihjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYsIGNvbnN0IEZsb2F0U2l6ZSYgLypi
b3hTaXplKi8sIGNvbnN0IEFuaW1hdGlvbiosIGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1l
Ki8sIGRvdWJsZSAvKnRpbWVPZmZzZXQqLykgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAgdmlydHVh
bCB2b2lkIHBhdXNlQW5pbWF0aW9uKGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8sIGRv
dWJsZSAvKnRpbWVPZmZzZXQqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1hdGlv
bihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovKSB7IH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCmluZGV4
IDQ3MjBlMTI5OWVhNjRiNGNiYmRmOWZlMGVjMmI0M2RmY2U1YjRiMWUuLjVlOTY0N2ZmYWM4MDEz
ZjkyNDM3ZjVkYWViMTBhODdiNTVhZTQzNmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcApAQCAtMzA0MCw5ICsz
MDQwLDcgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6OnVwZGF0ZUNvbnRlbnRzTmVlZHNEaXNwbGF5
KCkKIAogc3RhdGljIGJvb2wgaXNLZXlmcmFtZShjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgbGlz
dCkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBsaXN0
LnNpemUoKSA+IDE7Ci0gICAgcmV0dXJuIGxpc3Quc2l6ZSgpID4gMjsKKyAgICByZXR1cm4gbGlz
dC5zaXplKCkgPiAxOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6Y3JlYXRlQW5pbWF0aW9u
RnJvbUtleWZyYW1lcyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBTZWNvbmRz
IHRpbWVPZmZzZXQpCkBAIC0zMjkzLDM5ICszMjkxLDI5IEBAIHZvaWQgR3JhcGhpY3NMYXllckNB
OjpzZXR1cEFuaW1hdGlvbihQbGF0Zm9ybUNBQW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW0sIGNvbnN0
IEFuCiAgICAgcHJvcGVydHlBbmltLT5zZXRBZGRpdGl2ZShhZGRpdGl2ZSk7CiAgICAgcHJvcGVy
dHlBbmltLT5zZXRGaWxsTW9kZShmaWxsTW9kZSk7CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBpcyB0aGUgb25s
eSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZlCi0gICAgICAg
IC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBkb24n
dCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCi0gICAgICAgIC8vIHRpbWluZyBmdW5jdGlvbiB0byB3
b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24uCi0gICAgICAgIGlmIChhbmlt
LT5wcm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJv
cGVydHkpCi0gICAgICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKGFuaW0t
PnRpbWluZ0Z1bmN0aW9uKCkpOwotICAgIH0KKyAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAorICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24g
aXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2
ZQorICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3
ZSBkb24ndCBzZXQgdGhlIGFuaW1hdGlvbi13aWRlCisgICAgLy8gdGltaW5nIGZ1bmN0aW9uIHRv
IHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRhdGlvbi4KKyAgICBpZiAoYW5pbS0+
cHJvcGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3Bl
cnR5KQorICAgICAgICBwcm9wZXJ0eUFuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKGFuaW0tPnRpbWlu
Z0Z1bmN0aW9uKCkpOwogfQogCiBjb25zdCBUaW1pbmdGdW5jdGlvbiYgR3JhcGhpY3NMYXllckNB
Ojp0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKGNvbnN0IEFuaW1hdGlvblZhbHVlJiBh
bmltVmFsdWUsIGNvbnN0IEFuaW1hdGlvbiYgYW5pbSkKIHsKLSAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGFuaW0ucHJvcGVydHkoKS5tb2RlID09IEFuaW1hdGlv
bjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5ICYmIGFuaW0udGltaW5nRnVuY3Rpb24o
KSkgewotICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMTU5MTgKLSAgICAgICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhl
IG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQotICAg
ICAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmdsZVByb3BlcnR5LiBJbiB0aGlzIGNhc2Us
IHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQotICAgICAgICAgICAgLy8gYW5pbWF0aW9uLXdp
ZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQgb24gdGhlIHNpbmdsZSBrZXlmcmFtZSBp
bnRlcnZhbAotICAgICAgICAgICAgLy8gdG8gd29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBs
aW1pdGF0aW9uLgotICAgICAgICAgICAgcmV0dXJuICphbmltLnRpbWluZ0Z1bmN0aW9uKCk7Ci0g
ICAgICAgIH0KLSAgICAgICAgaWYgKGFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQotICAgICAg
ICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKTsKLSAgICAgICAgaWYgKGFu
aW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCkpCi0gICAgICAgICAgICByZXR1
cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5ZnJhbWVzKCk7Ci0gICAgICAgIHJl
dHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVkTGluZWFyVGltaW5nRnVuY3Rpb24oKTsK
KyAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9k
ZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdGdW5jdGlvbigpKSB7CisgICAgICAgIC8v
IEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTE4Cisg
ICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2NlbmFyaW8gd2hlcmUgQW5p
bWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQorICAgICAgICAvLyBpdHMgbW9kZSBzZXQgdG8g
U2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgY2hvc2Ugbm90IHRvIHNldCBzZXQgdGhl
CisgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRpbWluZyBmdW5jdGlvbiwgc28gd2Ugc2V0IGl0
IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2YWwKKyAgICAgICAgLy8gdG8gd29yayBhcm91
bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgorICAgICAgICByZXR1cm4gKmFuaW0udGlt
aW5nRnVuY3Rpb24oKTsKICAgICB9Ci0KICAgICBpZiAoYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9u
KCkpCiAgICAgICAgIHJldHVybiAqYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgaWYg
KGFuaW0uaXNUaW1pbmdGdW5jdGlvblNldCgpKQotICAgICAgICByZXR1cm4gKmFuaW0udGltaW5n
RnVuY3Rpb24oKTsKLSAgICByZXR1cm4gQ3ViaWNCZXppZXJUaW1pbmdGdW5jdGlvbjo6ZGVmYXVs
dFRpbWluZ0Z1bmN0aW9uKCk7CisgICAgaWYgKGFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9y
S2V5ZnJhbWVzKCkpCisgICAgICAgIHJldHVybiAqYW5pbS5kZWZhdWx0VGltaW5nRnVuY3Rpb25G
b3JLZXlmcmFtZXMoKTsKKyAgICByZXR1cm4gTGluZWFyVGltaW5nRnVuY3Rpb246OnNoYXJlZExp
bmVhclRpbWluZ0Z1bmN0aW9uKCk7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRBbmlt
YXRpb25FbmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3Qg
QW5pbWF0aW9uKiBhbmltYXRpb24sIFBsYXRmb3JtQ0FBbmltYXRpb24qIGJhc2ljQW5pbSkKQEAg
LTMzNDYsMTEgKzMzMzQsNiBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9uRW5k
cG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsCiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBh
bmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8g
Zm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNh
c2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAg
IGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5n
RnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDAp
LCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0z
NDQwLDExICszNDIzLDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldFRyYW5zZm9ybUFuaW1h
dGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmEKICAgICAgICAgfQogICAg
IH0KIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1rZXlmcmFtZSBhbmltYXRp
b25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0Ci0gICAgLy8gZm9yIGEg
dGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5pbWF0aW9uIGNhc2UsIHRo
ZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0aW9uLgotICAgIGlmICgh
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5pbS0+c2V0VGltaW5nRnVuY3Rp
b24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVMaXN0LmF0KDApLCAqYW5p
bWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIGF1dG8gdmFsdWVGdW5jdGlvbiA9IGdldFZhbHVl
RnVuY3Rpb25OYW1lRm9yVHJhbnNmb3JtT3BlcmF0aW9uKHRyYW5zZm9ybU9wVHlwZSk7CiAgICAg
aWYgKHZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9u
KQogICAgICAgICBiYXNpY0FuaW0tPnNldFZhbHVlRnVuY3Rpb24odmFsdWVGdW5jdGlvbik7CkBA
IC0zNTUxLDExICszNTI5LDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEZpbHRlckFuaW1h
dGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWUKICAgICBiYXNpY0Fu
aW0tPnNldEZyb21WYWx1ZShmcm9tT3BlcmF0aW9uLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5k
ZXgpOwogICAgIGJhc2ljQW5pbS0+c2V0VG9WYWx1ZSh0b09wZXJhdGlvbiwgaW50ZXJuYWxGaWx0
ZXJQcm9wZXJ0eUluZGV4KTsKIAotICAgIC8vIFRoaXMgY29kZXBhdGggaXMgdXNlZCBmb3IgMi1r
ZXlmcmFtZSBhbmltYXRpb25zLCBzbyB3ZSBzdGlsbCBuZWVkIHRvIGxvb2sgaW4gdGhlIHN0YXJ0
Ci0gICAgLy8gZm9yIGEgdGltaW5nIGZ1bmN0aW9uLiBFdmVuIGluIHRoZSByZXZlcnNpbmcgYW5p
bWF0aW9uIGNhc2UsIHRoZSBmaXJzdCBrZXlmcmFtZSBwcm92aWRlcyB0aGUgdGltaW5nIGZ1bmN0
aW9uLgotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIGJhc2ljQW5pbS0+
c2V0VGltaW5nRnVuY3Rpb24oJnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUodmFsdWVM
aXN0LmF0KDApLCAqYW5pbWF0aW9uKSwgIWZvcndhcmRzKTsKLQogICAgIHJldHVybiB0cnVlOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5jcHAKaW5kZXggZDYz
NTgxMTliNGNjNzE0ZTFkZTU4MTY0NjM4NWNiZWUzMmRjODUwMy4uZGZkMGJkOTkxMDNkMGM5ZDNh
ZDdmNzE2ZDc4YjFjZjBjN2Q0ODAyYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJFbGVtZW50LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2VuZGlmCiAjaW5jbHVkZSAiQ29udGVu
dERhdGEuaCIKICNpbmNsdWRlICJDdXJzb3JMaXN0LmgiCisjaW5jbHVkZSAiRG9jdW1lbnRUaW1l
bGluZS5oIgogI2luY2x1ZGUgIkVsZW1lbnRDaGlsZEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRXZl
bnRIYW5kbGVyLmgiCiAjaW5jbHVkZSAiRm9jdXNDb250cm9sbGVyLmgiCkBAIC02Niw2ICs2Nyw3
IEBACiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgogI2VuZGlmCiAjaW5jbHVkZSAiUmVu
ZGVyRnJhZ21lbnRDb250YWluZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgogI2luY2x1
ZGUgIlJlbmRlclRhYmxlQ2FwdGlvbi5oIgogI2luY2x1ZGUgIlJlbmRlclRhYmxlQ2VsbC5oIgog
I2luY2x1ZGUgIlJlbmRlclRhYmxlQ29sLmgiCkBAIC0yMjkwLDQgKzIyOTIsMTcgQEAgdm9pZCBS
ZW5kZXJFbGVtZW50OjpyZXNldFRleHRBdXRvc2l6aW5nKCkKIH0KICNlbmRpZiAvLyBFTkFCTEUo
VEVYVF9BVVRPU0laSU5HKQogCitzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IFJlbmRlckVs
ZW1lbnQ6OmFuaW1hdGVkU3R5bGUoKQoreworICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gcmVzdWx0OworCisgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnRUaW1lbGluZSgp
KQorICAgICAgICByZXN1bHQgPSB0aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCp0
aGlzKTsKKworICAgIGlmICghcmVzdWx0KQorICAgICAgICByZXN1bHQgPSBSZW5kZXJTdHlsZTo6
Y2xvbmVQdHIoc3R5bGUoKSk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAppbmRleCBlMGE2MmQwZWUyNjBjNzQ4NDNk
MGU5ZTE0ZjJmMmYzN2IzMmQ0ODJjLi5iYTM0OGI3YTUzOTA4ZjkxMDlkNzVhNDRmZTBlYmFhMTc1
ZDU1NDg2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVu
dC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKQEAgLTMw
LDYgKzMwLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgQ29udHJvbFN0YXRlczsKIGNs
YXNzIEtleWZyYW1lTGlzdDsKIGNsYXNzIFJlbmRlckJsb2NrOworY2xhc3MgUmVuZGVyU3R5bGU7
CiBjbGFzcyBSZW5kZXJUcmVlQnVpbGRlcjsKIAogY2xhc3MgUmVuZGVyRWxlbWVudCA6IHB1Ymxp
YyBSZW5kZXJPYmplY3QgewpAQCAtMjI2LDE1ICsyMjcsMTIgQEAgcHVibGljOgogICAgIFJlbmRl
ck9iamVjdCogYXR0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5kZXJQdHI8UmVuZGVyT2JqZWN0PiBj
aGlsZCwgUmVuZGVyT2JqZWN0KiBiZWZvcmVDaGlsZCk7CiAgICAgUmVuZGVyUHRyPFJlbmRlck9i
amVjdD4gZGV0YWNoUmVuZGVyZXJJbnRlcm5hbChSZW5kZXJPYmplY3QmKTsKIAotICAgIHZpcnR1
YWwgYm9vbCBzdGFydFRyYW5zaXRpb24oZG91YmxlIC8qIHRpbWVPZmZzZXQgKi8sIENTU1Byb3Bl
cnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiAvKiBmcm9tU3R5bGUgKi8sIGNvbnN0IFJlbmRlclN0
eWxlKiAvKiB0b1N0eWxlICovKSB7IHJldHVybiBmYWxzZTsgfQotICAgIHZpcnR1YWwgdm9pZCB0
cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQcm9wZXJ0eUlEKSB7
IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpIHsg
fQotCiAgICAgdmlydHVhbCBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0
ICovLCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKSB7IHJldHVybiBmYWxz
ZTsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRpb25QYXVzZWQoZG91YmxlIC8qIHRpbWVPZmZz
ZXQgKi8sIGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAgICAgdmlydHVhbCB2b2lkIGFu
aW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgLyogbmFtZSAqLykgeyB9CiAKICAgICB2aXJ0
dWFsIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZSA9IE1vbm90b25pY1RpbWUo
KSkgeyB9CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBhbmltYXRlZFN0eWxlKCk7
CiAKIHByb3RlY3RlZDoKICAgICBlbnVtIEJhc2VUeXBlRmxhZyB7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyLmNwcAppbmRleCA3ZDA3Y2RiZDg0OTcwMjg1M2UxYjkyNWEwYmJj
OThkN2RkYWZhNzY2Li5hMGUwZTIzZThjZjhkNmUyNjg5ZjFjYmI2MjZjOWFhYWQ1ZTVkNGEwIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKQEAgLTQ2LDcgKzQ2LDYg
QEAKICNpbmNsdWRlICJSZW5kZXJMYXllci5oIgogCiAjaW5jbHVkZSAiQm94U2hhcGUuaCIKLSNp
bmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTRmlsdGVyLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAt
MTMyNywyMSArMTMyNiwxMCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJMYXllcjo6Y3Vy
cmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6QXBwbHlUcmFuc2Zvcm1PcgogCiAgICAgYXV0byYg
cmVuZGVyQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94PihyZW5kZXJlcigpKTsKIAotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5k
ZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgewotICAgICAgICAgICAgaWYgKHRpbWVsaW5lLT5p
c1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJv
cGVydHlUcmFuc2Zvcm0pKSB7Ci0gICAgICAgICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXgg
Y3VyclRyYW5zZm9ybTsKLSAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+IHN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigp
KTsKLSAgICAgICAgICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNu
YXBSZWN0VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hU
b0NTU0JveFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgp
LmRldmljZVNjYWxlRmFjdG9yKCkpOwotICAgICAgICAgICAgICAgIHN0eWxlLT5hcHBseVRyYW5z
Zm9ybShjdXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBhcHBseU9yaWdpbik7
Ci0gICAgICAgICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2Fu
UmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwotICAgICAgICAgICAgICAgIHJldHVybiBjdXJyVHJhbnNm
b3JtOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYg
KHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRp
b25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKSkgeworICAgIGlm
IChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKSB7CisgICAg
ICAgIGlmICh0aW1lbGluZS0+aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVy
KHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKSkgewogICAgICAgICAgICAgVHJhbnNm
b3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1h
dGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGVkU3R5bGUoKTsKICAg
ICAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0gc25hcFJlY3RUb0Rl
dmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94VHlw
ZShzdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNlU2Nh
bGVGYWN0b3IoKSk7CiAgICAgICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0oY3VyclRyYW5z
Zm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmlnaW4pOwogICAgICAgICAgICAg
bWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRyYW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1z
KCkpOwpAQCAtMTM0OSwxMSArMTMzNywxMCBAQCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBSZW5kZXJM
YXllcjo6Y3VycmVudFRyYW5zZm9ybShSZW5kZXJTdHlsZTo6QXBwbHlUcmFuc2Zvcm1PcgogICAg
ICAgICB9CiAgICAgfQogCi0KICAgICAvLyBtX3RyYW5zZm9ybSBpbmNsdWRlcyB0cmFuc2Zvcm0t
b3JpZ2luLCBzbyB3ZSBuZWVkIHRvIHJlY29tcHV0ZSB0aGUgdHJhbnNmb3JtIGhlcmUuCiAgICAg
aWYgKGFwcGx5T3JpZ2luID09IFJlbmRlclN0eWxlOjpFeGNsdWRlVHJhbnNmb3JtT3JpZ2luKSB7
CiAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1h
dGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihyZW5kZXJlcigpKTsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCkuYW5pbWF0ZWRTdHls
ZSgpOwogICAgICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0
VG9EZXZpY2VQaXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0Jv
eFR5cGUoc3R5bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmlj
ZVNjYWxlRmFjdG9yKCkpOwogICAgICAgICByZW5kZXJCb3guc3R5bGUoKS5hcHBseVRyYW5zZm9y
bShjdXJyVHJhbnNmb3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBSZW5kZXJTdHlsZTo6RXhj
bHVkZVRyYW5zZm9ybU9yaWdpbik7CiAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJU
cmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsKQEAgLTYxNjUsMjAgKzYxNTIsMTMg
QEAgYm9vbCBSZW5kZXJMYXllcjo6Z2V0T3ZlcmxhcEJvdW5kc0luY2x1ZGluZ0NoaWxkcmVuQWNj
b3VudGluZ0ZvclRyYW5zZm9ybUFuaW1hdGkKICAgICBib3VuZHMgPSBjYWxjdWxhdGVMYXllckJv
dW5kcyh0aGlzLCBMYXlvdXRTaXplKCksIGJvdW5kc0ZsYWdzKTsKICAgICAKICAgICBMYXlvdXRS
ZWN0IGFuaW1hdGVkQm91bmRzID0gYm91bmRzOwotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
KSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGlt
ZWxpbmUoKSkgewotICAgICAgICAgICAgaWYgKHRpbWVsaW5lLT5jb21wdXRlRXh0ZW50T2ZBbmlt
YXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3VuZHMpKSB7Ci0gICAgICAgICAgICAgICAgYm91
bmRzID0gYW5pbWF0ZWRCb3VuZHM7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAocmVuZGVyZXIo
KS5sZWdhY3lBbmltYXRpb24oKS5jb21wdXRlRXh0ZW50T2ZBbmltYXRpb24ocmVuZGVyZXIoKSwg
YW5pbWF0ZWRCb3VuZHMpKSB7CisgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5k
b2N1bWVudFRpbWVsaW5lKCkpIHsKKyAgICAgICAgaWYgKHRpbWVsaW5lLT5jb21wdXRlRXh0ZW50
T2ZBbmltYXRpb24ocmVuZGVyZXIoKSwgYW5pbWF0ZWRCb3VuZHMpKSB7CiAgICAgICAgICAgICBi
b3VuZHMgPSBhbmltYXRlZEJvdW5kczsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwCmluZGV4IDRkNTQ3YzRiN2Zk
ZDFhZTQwOWE2Y2U2ZjgyOTJmNmE2Y2QzMDMyNmYuLjJmN2I1ODkyMzJmYTcyMjM0NmY3MDJhOGQ0
MmRlMTMzYmRlN2VlYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJMYXllckJhY2tpbmcuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckJhY2tpbmcuY3BwCkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJC
YWNraW5nLmgiCiAKICNpbmNsdWRlICJCaXRtYXBJbWFnZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAj
aW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCkBA
IC0xMjUxLDExICsxMjUwLDggQEAgdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21l
dHJ5KGNvbnN0IFJlbmRlckxheWVyKiBjb21wb3NpdGVkQW5jZXN0b3IpCiAgICAgY29uc3QgYXV0
byBkZXZpY2VTY2FsZUZhY3RvciA9IHRoaXMtPmRldmljZVNjYWxlRmFjdG9yKCk7CiAKICAgICBi
b29sIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gZmFsc2U7Ci0gICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZSA9
IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQotICAgICAgICAgICAgaXNSdW5uaW5nQWNj
ZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSB0aW1lbGluZS0+aXNSdW5uaW5nQWNjZWxlcmF0
ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsK
LSAgICB9IGVsc2UKLSAgICAgICAgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRp
b24gPSByZW5kZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5p
bWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CisgICAg
aWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpCisgICAg
ICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSk7CiAKICAgICB1cGRhdGVUcmFuc2Zvcm0oc3R5bGUpOwogICAgIHVwZGF0
ZU9wYWNpdHkoc3R5bGUpOwpAQCAtMzY0OCw5NyArMzY0NCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJC
YWNraW5nOjphbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUpCiAg
ICAgbV9vd25pbmdMYXllci5zZXROZWVkc0NvbXBvc2l0aW5nR2VvbWV0cnlVcGRhdGUoKTsKIH0K
IAotYm9vbCBSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9m
ZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHls
ZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpCi17Ci0gICAgYm9vbCBkaWRBbmltYXRlID0g
ZmFsc2U7Ci0KLSAgICBBU1NFUlQocHJvcGVydHkgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLQot
ICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eU9wYWNpdHkpIHsKLSAgICAgICAgY29uc3Qg
QW5pbWF0aW9uKiBvcGFjaXR5QW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShD
U1NQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAgICBpZiAob3BhY2l0eUFuaW0gJiYgIW9wYWNpdHlB
bmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1
ZUxpc3Qgb3BhY2l0eVZlY3RvcihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSk7Ci0gICAgICAgICAg
ICBvcGFjaXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDAs
IGNvbXBvc2l0aW5nT3BhY2l0eShmcm9tU3R5bGUtPm9wYWNpdHkoKSkpKTsKLSAgICAgICAgICAg
IG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMSwg
Y29tcG9zaXRpbmdPcGFjaXR5KHRvU3R5bGUtPm9wYWNpdHkoKSkpKTsKLSAgICAgICAgICAgIC8v
IFRoZSBib3hTaXplIHBhcmFtIGlzIG9ubHkgdXNlZCBmb3IgdHJhbnNmb3JtIGFuaW1hdGlvbnMg
KHdoaWNoIGNhbiBvbmx5IHJ1biBvbiBSZW5kZXJCb3hlcyksIHNvIHdlIHBhc3MgYW4gZW1wdHkg
c2l6ZSBoZXJlLgotICAgICAgICAgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9u
KG9wYWNpdHlWZWN0b3IsIEZsb2F0U2l6ZSgpLCBvcGFjaXR5QW5pbSwgR3JhcGhpY3NMYXllcjo6
YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpLCB0aW1l
T2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0
IG9wYWNpdHkgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhl
IGZpbmFsIG9wYWNpdHkuCi0gICAgICAgICAgICAgICAgdXBkYXRlT3BhY2l0eSgqdG9TdHlsZSk7
Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0g
JiYgbV9vd25pbmdMYXllci5oYXNUcmFuc2Zvcm0oKSkgewotICAgICAgICBjb25zdCBBbmltYXRp
b24qIHRyYW5zZm9ybUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJv
cGVydHlUcmFuc2Zvcm0pOwotICAgICAgICBpZiAodHJhbnNmb3JtQW5pbSAmJiAhdHJhbnNmb3Jt
QW5pbS0+aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFs
dWVMaXN0IHRyYW5zZm9ybVZlY3RvcihBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtKTsKLSAgICAg
ICAgICAgIHRyYW5zZm9ybVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRp
b25WYWx1ZT4oMCwgZnJvbVN0eWxlLT50cmFuc2Zvcm0oKSkpOwotICAgICAgICAgICAgdHJhbnNm
b3JtVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPFRyYW5zZm9ybUFuaW1hdGlvblZhbHVlPigxLCB0
b1N0eWxlLT50cmFuc2Zvcm0oKSkpOwotICAgICAgICAgICAgaWYgKG1fZ3JhcGhpY3NMYXllci0+
YWRkQW5pbWF0aW9uKHRyYW5zZm9ybVZlY3Rvciwgc25hcHBlZEludFJlY3QocmVuZGVyQm94KCkt
PmJvcmRlckJveFJlY3QoKSkuc2l6ZSgpLCB0cmFuc2Zvcm1BbmltLCBHcmFwaGljc0xheWVyOjph
bmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5VHJhbnNmb3JtKSwgdGlt
ZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVj
dCB0cmFuc2Zvcm0gaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQg
dGhlIGZpbmFsIHRyYW5zZm9ybS4KLSAgICAgICAgICAgICAgICB1cGRhdGVUcmFuc2Zvcm0oKnRv
U3R5bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAg
fQotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5Rmls
dGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzRmlsdGVyKCkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0
aW9uKiBmaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3Bl
cnR5RmlsdGVyKTsKLSAgICAgICAgaWYgKGZpbHRlckFuaW0gJiYgIWZpbHRlckFuaW0tPmlzRW1w
dHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBmaWx0
ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eUZpbHRlcik7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0
b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+
ZmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxG
aWx0ZXJBbmltYXRpb25WYWx1ZT4oMSwgdG9TdHlsZS0+ZmlsdGVyKCkpKTsKLSAgICAgICAgICAg
IGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihmaWx0ZXJWZWN0b3IsIEZsb2F0U2l6
ZSgpLCBmaWx0ZXJBbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlv
bihBbmltYXRlZFByb3BlcnR5RmlsdGVyKSwgdGltZU9mZnNldCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBmaWx0ZXIgaXMgdmlzaWJsZSB3aGVuIHRo
ZSBhbmltYXRpb24gZW5kcywgYWxzbyBzZXQgdGhlIGZpbmFsIGZpbHRlci4KLSAgICAgICAgICAg
ICAgICB1cGRhdGVGaWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRl
ID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotI2lmIEVOQUJMRShG
SUxURVJTX0xFVkVMXzIpCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5V2Via2l0QmFj
a2Ryb3BGaWx0ZXIgJiYgbV9vd25pbmdMYXllci5oYXNCYWNrZHJvcEZpbHRlcigpKSB7Ci0gICAg
ICAgIGNvbnN0IEFuaW1hdGlvbiogYmFja2Ryb3BGaWx0ZXJBbmltID0gdG9TdHlsZS0+dHJhbnNp
dGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIpOwotICAgICAg
ICBpZiAoYmFja2Ryb3BGaWx0ZXJBbmltICYmICFiYWNrZHJvcEZpbHRlckFuaW0tPmlzRW1wdHlP
clplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlzdCBiYWNrZHJv
cEZpbHRlclZlY3RvcihBbmltYXRlZFByb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIpOwotICAg
ICAgICAgICAgYmFja2Ryb3BGaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5p
bWF0aW9uVmFsdWU+KDAsIGZyb21TdHlsZS0+YmFja2Ryb3BGaWx0ZXIoKSkpOwotICAgICAgICAg
ICAgYmFja2Ryb3BGaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVyQW5pbWF0aW9u
VmFsdWU+KDEsIHRvU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGlmICht
X2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihiYWNrZHJvcEZpbHRlclZlY3RvciwgRmxvYXRT
aXplKCksIGJhY2tkcm9wRmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZv
clRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKSwgdGltZU9m
ZnNldCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBi
YWNrZHJvcCBmaWx0ZXIgaXMgdmlzaWJsZSB3aGVuIHRoZSBhbmltYXRpb24gZW5kcywgYWxzbyBz
ZXQgdGhlIGZpbmFsIGJhY2tkcm9wIGZpbHRlci4KLSAgICAgICAgICAgICAgICB1cGRhdGVCYWNr
ZHJvcEZpbHRlcnMoKnRvU3R5bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVl
OwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotI2VuZGlmCi0KLSAgICBpZiAoZGlk
QW5pbWF0ZSkKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc1Bvc3RMYXlvdXRDb21wb3Np
dGluZ1VwZGF0ZSgpOwotCi0gICAgcmV0dXJuIGRpZEFuaW1hdGU7Ci19Ci0KLXZvaWQgUmVuZGVy
TGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5KQotewotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBhbmltYXRlZFByb3Bl
cnR5ID0gY3NzVG9HcmFwaGljc0xheWVyUHJvcGVydHkocHJvcGVydHkpOwotICAgIGlmIChhbmlt
YXRlZFByb3BlcnR5ICE9IEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKQotICAgICAgICBtX2dyYXBo
aWNzTGF5ZXItPnBhdXNlQW5pbWF0aW9uKEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JU
cmFuc2l0aW9uKGFuaW1hdGVkUHJvcGVydHkpLCB0aW1lT2Zmc2V0KTsKLX0KLQotdm9pZCBSZW5k
ZXJMYXllckJhY2tpbmc6OnRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
KQotewotICAgIEFuaW1hdGVkUHJvcGVydHlJRCBhbmltYXRlZFByb3BlcnR5ID0gY3NzVG9HcmFw
aGljc0xheWVyUHJvcGVydHkocHJvcGVydHkpOwotICAgIGlmIChhbmltYXRlZFByb3BlcnR5ICE9
IEFuaW1hdGVkUHJvcGVydHlJbnZhbGlkKSB7Ci0gICAgICAgIG1fZ3JhcGhpY3NMYXllci0+cmVt
b3ZlQW5pbWF0aW9uKEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKGFu
aW1hdGVkUHJvcGVydHkpKTsKLSAgICAgICAgbV9vd25pbmdMYXllci5zZXROZWVkc1Bvc3RMYXlv
dXRDb21wb3NpdGluZ1VwZGF0ZSgpOwotICAgIH0KLX0KLQotdm9pZCBSZW5kZXJMYXllckJhY2tp
bmc6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGNvbnN0IFN0
cmluZyYsIE1vbm90b25pY1RpbWUgdGltZSkKK3ZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3Rp
ZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcmLCBN
b25vdG9uaWNUaW1lKQogewotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAg
IHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkubm90aWZ5QW5pbWF0aW9uU3RhcnRlZChyZW5k
ZXJlcigpLCB0aW1lKTsKIH0KIAogdm9pZCBSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUZsdXNo
UmVxdWlyZWQoY29uc3QgR3JhcGhpY3NMYXllciopCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKaW5kZXggOWM3NjQ3YmIyNjc2YjNmYzFmOTI2ZmFkOTI4
NDdkOGY4ZWE3YzBmMC4uNWMxMTI1Mjg3MzE5MjAyY2EwNGQyODI5NWRhMjJhN2MxZjJkYmNhMyAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaApAQCAt
MTg0LDExICsxODQsNyBAQCBwdWJsaWM6CiAgICAgLy8gTm90aWZpY2F0aW9uIGZyb20gdGhlIHJl
bmRlcmVyIHRoYXQgaXRzIGNvbnRlbnQgY2hhbmdlZC4KICAgICB2b2lkIGNvbnRlbnRDaGFuZ2Vk
KENvbnRlbnRDaGFuZ2VUeXBlKTsKIAotICAgIC8vIEludGVyZmFjZSB0byBzdGFydCwgZmluaXNo
LCBzdXNwZW5kIGFuZCByZXN1bWUgYW5pbWF0aW9ucyBhbmQgdHJhbnNpdGlvbnMKLSAgICBib29s
IHN0YXJ0VHJhbnNpdGlvbihkb3VibGUsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxl
KiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKTsKLSAgICB2b2lkIHRyYW5z
aXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQpOwotICAgIHZvaWQg
dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpOwotCisgICAgLy8gSW50ZXJmYWNlIHRv
IHN0YXJ0LCBmaW5pc2gsIHN1c3BlbmQgYW5kIHJlc3VtZSBhbmltYXRpb25zCiAgICAgYm9vbCBz
dGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5pbWF0aW9uJiwgY29uc3Qg
S2V5ZnJhbWVMaXN0Jik7CiAgICAgdm9pZCBhbmltYXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZz
ZXQsIGNvbnN0IFN0cmluZyYgbmFtZSk7CiAgICAgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25z
dCBTdHJpbmcmIG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQ29tcG9zaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJDb21wb3NpdG9yLmNwcAppbmRleCAxODQxZjk2ZjBiNjI5OGNhNTIzZWQ3ZjFlNjk4OWYy
YzI3NmRkZDc1Li5mMjM5YzRhNDQ4MGFlZTcyYTM5MmIzNmM1MjQ1YjdjZDQxZDYyZDM3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNw
cApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQ29tcG9zaXRvci5oIgog
CiAjaW5jbHVkZSAiQXN5bmNTY3JvbGxpbmdDb29yZGluYXRvci5oIgotI2luY2x1ZGUgIkNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5j
bHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpAQCAt
NTYwLDkgKzU1OSw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpmbHVzaFBlbmRpbmdM
YXllckNoYW5nZXMoYm9vbCBpc0ZsdXNoUm9vdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAot
ICAgIGF1dG8mIGZyYW1lVmlldyA9IG1fcmVuZGVyVmlldy5mcmFtZVZpZXcoKTsKLSAgICBBbmlt
YXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmZnJhbWVWaWV3LmZyYW1lKCku
bGVnYWN5QW5pbWF0aW9uKCkpOwotCiAgICAgQVNTRVJUKCFtX2ZsdXNoaW5nTGF5ZXJzKTsKICAg
ICB7CiAgICAgICAgIFNldEZvclNjb3BlPGJvb2w+IGZsdXNoaW5nTGF5ZXJzU2NvcGUobV9mbHVz
aGluZ0xheWVycywgdHJ1ZSk7CkBAIC04MTksOCArODE1LDYgQEAgYm9vbCBSZW5kZXJMYXllckNv
bXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKENvbXBvc2l0aW5nVXBkYXRlVHlwZSB1
cGRhdGUKIAogICAgICsrbV9jb21wb3NpdGluZ1VwZGF0ZUNvdW50OwogCi0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fcmVuZGVyVmlldy5mcmFtZVZpZXco
KS5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKLQogICAgIFNldEZvclNjb3BlPGJvb2w+IHBv
c3RMYXlvdXRDaGFuZ2UobV9pblBvc3RMYXlvdXRVcGRhdGUsIHRydWUpOwogCiAjaWYgIUxPR19E
SVNBQkxFRApAQCAtMjk3NywxNyArMjk3MSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9y
OjpyZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplCiAg
ICAgICAgIH0KICAgICB9CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGF1dG8mIGFuaW1Db250cm9sbGVyID0gcmVuZGVyZXIubGVn
YWN5QW5pbWF0aW9uKCk7Ci0gICAgcmV0dXJuIChhbmltQ29udHJvbGxlci5pc1J1bm5pbmdBbmlt
YXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eU9wYWNpdHkpCi0gICAgICAgICYm
ICh1c2VzQ29tcG9zaXRpbmcoKSB8fCAobV9jb21wb3NpdGluZ1RyaWdnZXJzICYgQ2hyb21lQ2xp
ZW50OjpBbmltYXRlZE9wYWNpdHlUcmlnZ2VyKSkpCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVy
LmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5RmlsdGVy
KQotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVy
LmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5V2Via2l0
QmFja2Ryb3BGaWx0ZXIpCi0jZW5kaWYKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIuaXNSdW5u
aW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwor
ICAgIHJldHVybiBmYWxzZTsKIH0KIAogYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OnJlcXVp
cmVzQ29tcG9zaXRpbmdGb3JUcmFuc2Zvcm0oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYgcmVuZGVy
ZXIpIGNvbnN0CkBAIC0zNTE1LDEwICszNDk5LDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0
b3I6OmlzUnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZWN0Jgog
ICAgICAgICAgICAgcmV0dXJuIGVmZmVjdHNTdGFjay0+aXNDdXJyZW50bHlBZmZlY3RpbmdQcm9w
ZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7CiAgICAgfQogCi0gICAgaWYgKFJ1bnRpbWVFbmFi
bGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gcmVuZGVyZXIu
bGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwg
Q1NTUHJvcGVydHlUcmFuc2Zvcm0pOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogLy8gSWYgYW4g
ZWxlbWVudCBoYXMgY29tcG9zaXRlZCBuZWdhdGl2ZSB6LWluZGV4IGNoaWxkcmVuLCB0aG9zZSBj
aGlsZHJlbiByZW5kZXIgaW4gZnJvbnQgb2YgdGhlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHAKaW5kZXggY2ZlY2FlNDRkM2RkODg2
YWQ2NDc0OTdiOWExMWI4NDBlNGQxNWQ2Yi4uY2FlOGY3MmYzNmNkODUzMmEyNTk4YjQ4YjZiZWJm
ODM1MzhmNDQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmNwcApAQCAtMjUwLDI3ICsyNTAsNiBAQCB2b2lkIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OmNvbXB1dGVSZXBhaW50TGF5b3V0UmVjdHMoY29uc3QgUmVuZGVyTGF5ZXJN
b2RlbE9iagogICAgICAgICBzZXRSZXBhaW50TGF5b3V0UmVjdHMoUmVwYWludExheW91dFJlY3Rz
KCp0aGlzLCByZXBhaW50Q29udGFpbmVyLCBnZW9tZXRyeU1hcCkpOwogfQogCi1ib29sIFJlbmRl
ckxheWVyTW9kZWxPYmplY3Q6OnN0YXJ0VHJhbnNpdGlvbihkb3VibGUgdGltZU9mZnNldCwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eUlkLCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogdG9TdHlsZSkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCkt
PmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBsYXllcigpLT5i
YWNraW5nKCktPnN0YXJ0VHJhbnNpdGlvbih0aW1lT2Zmc2V0LCBwcm9wZXJ0eUlkLCBmcm9tU3R5
bGUsIHRvU3R5bGUpOwotfQotCi12b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRp
b25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsK
LSAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIGxheWVyKCktPmJhY2tpbmcoKS0+dHJhbnNpdGlvblBhdXNlZCh0aW1lT2Zmc2V0LCBw
cm9wZXJ0eUlkKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9u
RmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQotewotICAgIGlmICghbGF5ZXIoKSB8
fCAhbGF5ZXIoKS0+YmFja2luZygpKQotICAgICAgICByZXR1cm47Ci0gICAgbGF5ZXIoKS0+YmFj
a2luZygpLT50cmFuc2l0aW9uRmluaXNoZWQocHJvcGVydHlJZCk7Ci19Ci0KIGJvb2wgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdDo6c3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0
IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBjb25zdCBLZXlmcmFtZUxpc3QmIGtleWZyYW1lcykKIHsK
ICAgICBpZiAoIWxheWVyKCkgfHwgIWxheWVyKCktPmJhY2tpbmcoKSkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmggYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oCmluZGV4IGEzYjNkY2Fk
Y2E2ZDUwNDM3NzEzZGI3MmVhMjJiNjMxZmZlMmRiYTcuLmQ5NzgxY2VjYzg5N2MzNTg2OWE3NzI5
YmExY2QwZTc2ZTE5NDFmMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaApAQCAtNjksMTAgKzY5LDYgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0UmVwYWludExheW91dFJlY3RzKGNvbnN0IFJlcGFpbnRMYXlvdXRSZWN0cyYpOwogICAg
IHZvaWQgY2xlYXJSZXBhaW50TGF5b3V0UmVjdHMoKTsKIAotICAgIGJvb2wgc3RhcnRUcmFuc2l0
aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSog
ZnJvbVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSkgb3ZlcnJpZGU7Ci0gICAgdm9p
ZCB0cmFuc2l0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEKSBvdmVy
cmlkZTsKLSAgICB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKSBvdmVycmlk
ZTsKLQogICAgIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFu
aW1hdGlvbiYsIGNvbnN0IEtleWZyYW1lTGlzdCYpIG92ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0
aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRl
OwogICAgIHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlk
ZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaCBi
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaAppbmRleCAxOTEyNWZlZjc5
ZmZlMjYwMDRmZmU5OTg3ZTFmZjBiMzQwZGRmOWFkLi41MDA5YWQxN2JhOWNiN2I2MjMwZmMxYzNk
ZmU0YzZkZjBhZjc3Mjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyT2JqZWN0LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5o
CkBAIC00Niw3ICs0Niw2IEBAIGNsYXNzIFRleHRTdHJlYW07CiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiAKIGNsYXNzIEFmZmluZVRyYW5zZm9ybTsKLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7
CiBjbGFzcyBDb2xvcjsKIGNsYXNzIEN1cnNvcjsKIGNsYXNzIERvY3VtZW50OwpAQCAtNzA2LDcg
KzcwNSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIGltYWdlQ2hhbmdlZChDYWNoZWRJbWFnZSosIGNv
bnN0IEludFJlY3QqID0gbnVsbHB0cikgb3ZlcnJpZGU7CiAgICAgdmlydHVhbCB2b2lkIGltYWdl
Q2hhbmdlZChXcmFwcGVkSW1hZ2VQdHIsIGNvbnN0IEludFJlY3QqID0gbnVsbHB0cikgeyB9CiAK
LSAgICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSBjb25zdDsKICAg
ICBEb2N1bWVudFRpbWVsaW5lKiBkb2N1bWVudFRpbWVsaW5lKCkgY29uc3Q7CiAKICAgICAvLyBN
YXAgcG9pbnRzIGFuZCBxdWFkcyB0aHJvdWdoIGVsZW1lbnRzLCBwb3RlbnRpYWxseSB2aWEgM2Qg
dHJhbnNmb3Jtcy4gWW91IHNob3VsZCBuZXZlciBuZWVkIHRvIGNhbGwgdGhlc2UgZGlyZWN0bHk7
IHVzZQpAQCAtOTczLDExICs5NzEsNiBAQCBpbmxpbmUgUGFnZSYgUmVuZGVyT2JqZWN0OjpwYWdl
KCkgY29uc3QKICAgICByZXR1cm4gKmZyYW1lKCkucGFnZSgpOwogfQogCi1pbmxpbmUgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciYgUmVuZGVyT2JqZWN0OjpsZWdhY3lBbmltYXRpb24oKSBjb25zdAot
ewotICAgIHJldHVybiBmcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpOwotfQotCiBpbmxpbmUgRG9j
dW1lbnRUaW1lbGluZSogUmVuZGVyT2JqZWN0Ojpkb2N1bWVudFRpbWVsaW5lKCkgY29uc3QKIHsK
ICAgICByZXR1cm4gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCk7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcApp
bmRleCA4YTdmZDY1OGIyZGQ5OTA3MDk3MDUyZDExM2JkY2Y4N2RkODE4ZDg2Li5iMTMyOGFhOTk5
OTk2M2ZjMjRmYzU5ZWVlYjhmY2Q1YWRlMmRmZTY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKQEAgLTI3LDcg
KzI3LDYgQEAKICNpbmNsdWRlICJSZW5kZXJUcmVlVXBkYXRlci5oIgogCiAjaW5jbHVkZSAiQVhP
YmplY3RDYWNoZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNs
dWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29tcG9zZWRU
cmVlSXRlcmF0b3IuaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgpAQCAtNTU2LDcgKzU1NSw2IEBA
IHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1lbnQmIHJvb3Qs
IFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAKICAgICBhdXRvJiBkb2N1bWVudCA9IHJvb3QuZG9j
dW1lbnQoKTsKICAgICBhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50LmV4aXN0aW5nVGltZWxpbmUo
KTsKLSAgICBhdXRvJiBhbmltYXRpb25Db250cm9sbGVyID0gZG9jdW1lbnQuZnJhbWUoKS0+bGVn
YWN5QW5pbWF0aW9uKCk7ICAgIAogCiAgICAgYXV0byBwb3AgPSBbJl0gKHVuc2lnbmVkIGRlcHRo
KSB7CiAgICAgICAgIHdoaWxlICh0ZWFyZG93blN0YWNrLnNpemUoKSA+IGRlcHRoKSB7CkBAIC01
NzUsNyArNTczLDYgQEAgdm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMo
RWxlbWVudCYgcm9vdCwgVGVhcmRvd25UeXBlIHRlYXJkb3duVHkKICAgICAgICAgICAgICAgICAg
ICAgZWxzZSBpZiAodGVhcmRvd25UeXBlID09IFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGVD
YW5jZWxpbmdBbmltYXRpb25zKQogICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmUtPmNh
bmNlbERlY2xhcmF0aXZlQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgV2ViQW5pbWF0aW9u
OjpTaWxlbnRseTo6Tm8pOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyLmNhbmNlbEFuaW1hdGlvbnMoZWxlbWVudCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgICAgICBjYXNlIFRlYXJkb3duVHlwZTo6UmVuZGVyZXJVcGRhdGU6
CiAgICAgICAgICAgICAgICAgaWYgKHRpbWVsaW5lKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFk
anVzdGVyLmNwcAppbmRleCA4Y2UwNzUyYTYzNjZkODMzMDAyNjJiMDJlZTA4M2VlNTlmYzEwNzM4
Li5hM2ViZjZmYjY3ZjFmYTYxMmJmMDY0NjdhN2Q1OGQ4OWEzZWI5OWE2IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcApAQCAtMzAsNyArMzAsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKIAotI2luY2x1ZGUgIkFuaW1hdGlv
bkJhc2UuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIKICNpbmNsdWRlICJET01XaW5k
b3cuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCkBAIC01Nyw2ICs1Niw3IEBACiAjaW5jbHVkZSAi
U1ZHVVJJUmVmZXJlbmNlLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJUZXh0
LmgiCisjaW5jbHVkZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogbmFtZXNwYWNlIFN0eWxlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0
eWxlVHJlZVJlc29sdmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29s
dmVyLmNwcAppbmRleCBiODVjZjQ2NmMxNzNiODgwM2Y3NWUzNzYyNWJmMDI1ODZlZjkwYWU1Li5m
N2ZmZDQ0ZjlhYTRiOTcxZGQ5ZjFiNjZhYzUyZTAzM2VmNjdmZjU3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVk
ZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVUcmVlUmVzb2x2ZXIuaCIKIAotI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDb21wb3NlZFRyZWVBbmNlc3Rvckl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiQ29t
cG9zZWRUcmVlSXRlcmF0b3IuaCIKQEAgLTU0LDYgKzUzLDcgQEAKICNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCiAjaW5jbHVkZSAiU3R5bGVTY29wZS5oIgogI2luY2x1ZGUgIlRleHQuaCIKKyNp
bmNsdWRlICJXZWJBbmltYXRpb25UeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTMxMiwyNiArMzEyLDIzIEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmlt
YXRlZEVsZW1lbnRVcGRhdGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAKICAgICBPcHRpb25T
ZXQ8QW5pbWF0aW9uSW1wYWN0PiBhbmltYXRpb25JbXBhY3Q7CiAKLSAgICAvLyBOZXcgY29kZSBw
YXRoIGZvciBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zLgotICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtlIHN1
cmUgdGhhdCBhbnkgbmV3IENTUyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50IGhh
cyBhIG1hdGNoaW5nIFdlYkFuaW1hdGlvbgotICAgICAgICAvLyBvbiB0aGUgZG9jdW1lbnQgdGlt
ZWxpbmUuIE5vdGUgdGhhdCB3ZSBnZXQgdGltZWxpbmUoKSBvbiB0aGUgRG9jdW1lbnQgaGVyZSBi
ZWNhdXNlIHdlIG5lZWQgYSB0aW1lbGluZSBjcmVhdGVkCi0gICAgICAgIC8vIGluIGNhc2Ugbm8g
V2ViIEFuaW1hdGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSlMgQVBJLgotICAg
ICAgICBpZiAoZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERv
Y3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5k
ZXJWaWV3KCktPnByaW50aW5nKCkpIHsKLSAgICAgICAgICAgIGlmIChvbGRTdHlsZSAmJiAob2xk
U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkgfHwgbmV3U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkpKQot
ICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NUcmFuc2l0aW9u
c0ZvckVsZW1lbnQoZWxlbWVudCwgKm9sZFN0eWxlLCAqbmV3U3R5bGUpOwotCi0gICAgICAgICAg
ICAvLyBUaGUgb3JkZXIgaW4gd2hpY2ggQ1NTIFRyYW5zaXRpb25zIGFuZCBDU1MgQW5pbWF0aW9u
cyBhcmUgdXBkYXRlZCBtYXR0ZXJzIHNpbmNlIENTUyBUcmFuc2l0aW9ucyBkZWZpbmUgdGhlIGFm
dGVyLWNoYW5nZSBzdHlsZQotICAgICAgICAgICAgLy8gdG8gdXNlIENTUyBBbmltYXRpb25zIGFz
IGRlZmluZWQgaW4gdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4gQXMgc3VjaCwgd2Ug
dXBkYXRlIENTUyBBbmltYXRpb25zIGFmdGVyIENTUyBUcmFuc2l0aW9ucwotICAgICAgICAgICAg
Ly8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRyYW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5p
bWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1lIGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hh
bmdlIGV2ZW50LgotICAgICAgICAgICAgaWYgKChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5p
bWF0aW9ucygpKSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgICAgICAg
ICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgYW5kIHBhc3MgdGhlIHBhcmVudCBzdHlsZSB2
aWEgdXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQuCi0gICAgICAgICAgICAgICAgc2NvcGUo
KS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlmcmFtZXMoJnBhcmVudCgpLnN0
eWxlKTsKLQotICAgICAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NB
bmltYXRpb25zRm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0eWxlKTsKLQotICAg
ICAgICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5
ZnJhbWVzKG51bGxwdHIpOwotICAgICAgICAgICAgfQorICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRv
IG1ha2Ugc3VyZSB0aGF0IGFueSBuZXcgQ1NTIGFuaW1hdGlvbiBvY2N1cmluZyBvbiB0aGlzIGVs
ZW1lbnQgaGFzIGEgbWF0Y2hpbmcgV2ViQW5pbWF0aW9uCisgICAgLy8gb24gdGhlIGRvY3VtZW50
IHRpbWVsaW5lLiBOb3RlIHRoYXQgd2UgZ2V0IHRpbWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhl
cmUgYmVjYXVzZSB3ZSBuZWVkIGEgdGltZWxpbmUgY3JlYXRlZAorICAgIC8vIGluIGNhc2Ugbm8g
V2ViIEFuaW1hdGlvbnMgaGF2ZSBiZWVuIGNyZWF0ZWQgdGhyb3VnaCB0aGUgSlMgQVBJLgorICAg
IGlmIChlbGVtZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1l
bnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSAmJiAhZWxlbWVudC5kb2N1bWVudCgpLnJlbmRlclZp
ZXcoKS0+cHJpbnRpbmcoKSkgeworICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxlLT5o
YXNUcmFuc2l0aW9ucygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKKyAgICAgICAg
ICAgIG1fZG9jdW1lbnQudGltZWxpbmUoKS51cGRhdGVDU1NUcmFuc2l0aW9uc0ZvckVsZW1lbnQo
ZWxlbWVudCwgKm9sZFN0eWxlLCAqbmV3U3R5bGUpOworCisgICAgICAgIC8vIFRoZSBvcmRlciBp
biB3aGljaCBDU1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25zIGFyZSB1cGRhdGVkIG1h
dHRlcnMgc2luY2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0ZXItY2hhbmdlIHN0eWxl
CisgICAgICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZpbmVkIGluIHRoZSBwcmV2
aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0ZSBDU1MgQW5pbWF0aW9u
cyBhZnRlciBDU1MgVHJhbnNpdGlvbnMKKyAgICAgICAgLy8gc3VjaCB0aGF0IHdoZW4gQ1NTIFRy
YW5zaXRpb25zIGFyZSB1cGRhdGVkIHRoZSBDU1MgQW5pbWF0aW9ucyBkYXRhIGlzIHRoZSBzYW1l
IGFzIGR1cmluZyB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LgorICAgICAgICBpZiAo
KG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmltYXRpb25zKCkpIHx8IG5ld1N0eWxlLT5oYXNB
bmltYXRpb25zKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIGFu
ZCBwYXNzIHRoZSBwYXJlbnQgc3R5bGUgdmlhIHVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50
LgorICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JL
ZXlmcmFtZXMoJnBhcmVudCgpLnN0eWxlKTsKKworICAgICAgICAgICAgbV9kb2N1bWVudC50aW1l
bGluZSgpLnVwZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsIG9sZFN0eWxlLCAq
bmV3U3R5bGUpOworCisgICAgICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1l
bnRTdHlsZUZvcktleWZyYW1lcyhudWxscHRyKTsKICAgICAgICAgfQogICAgIH0KIApAQCAtMzQ3
LDE3ICszNDQsNiBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRF
bGVtZW50VXBkYXRlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdAogICAgIH0gZWxzZQogICAgICAg
ICBlbGVtZW50LnNldExhc3RTdHlsZUNoYW5nZUV2ZW50U3R5bGUobnVsbHB0cik7CiAKLSAgICAv
LyBPbGQgY29kZSBwYXRoIGZvciBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zLgot
ICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgYXV0byYgYW5pbWF0aW9u
Q29udHJvbGxlciA9IG1fZG9jdW1lbnQuZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCk7Ci0KLSAg
ICAgICAgYXV0byBhbmltYXRpb25VcGRhdGUgPSBhbmltYXRpb25Db250cm9sbGVyLnVwZGF0ZUFu
aW1hdGlvbnMoZWxlbWVudCwgKm5ld1N0eWxlLCBvbGRTdHlsZSk7Ci0gICAgICAgIGFuaW1hdGlv
bkltcGFjdC5hZGQoYW5pbWF0aW9uVXBkYXRlLmltcGFjdCk7Ci0KLSAgICAgICAgaWYgKGFuaW1h
dGlvblVwZGF0ZS5zdHlsZSkKLSAgICAgICAgICAgIG5ld1N0eWxlID0gV1RGTW92ZShhbmltYXRp
b25VcGRhdGUuc3R5bGUpOwotICAgIH0KLQogICAgIGlmIChhbmltYXRpb25JbXBhY3QpCiAgICAg
ICAgIEFkanVzdGVyOjphZGp1c3RBbmltYXRlZFN0eWxlKCpuZXdTdHlsZSwgcGFyZW50Qm94U3R5
bGUoKSwgYW5pbWF0aW9uSW1wYWN0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxTZXR0aW5ncy5jcHAKaW5kZXggYjM3NmJmNmMxNzVkNTQ1OWE0ZTBiNDYzY2E0OGI5YmYwY2E2
Njc5OS4uNmE1YjZmNGFlNDIwMjljZTY2MDhjMDRiYzkyNjRmZDAzNmZlZDhkMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCkBAIC0xMDI5LDExICsxMDI5
LDYgQEAgdm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRGb3JjZWRTdXBwb3J0c0hpZ2hEeW5hbWlj
UmFuZ2VWYWx1ZShJbnRlcm5hbFNldHRpbmdzOjoKICAgICBzZXR0aW5ncygpLnNldEZvcmNlZFN1
cHBvcnRzSGlnaER5bmFtaWNSYW5nZVZhbHVlKGludGVybmFsU2V0dGluZ3NUb1NldHRpbmdzVmFs
dWUodmFsdWUpKTsKIH0KIAotYm9vbCBJbnRlcm5hbFNldHRpbmdzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkKLXsKLSAgICByZXR1cm4gUnVudGltZUVuYWJsZWRGZWF0dXJl
czo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7
Ci19Ci0KIHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0U2hvdWxkRGVhY3RpdmF0ZUF1ZGlvU2Vz
c2lvbihib29sIHNob3VsZCkKIHsKICNpZiBFTkFCTEUoVklERU8pIHx8IEVOQUJMRShXRUJfQVVE
SU8pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3Mu
aCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oCmluZGV4IGI1Mjdl
MTU1YzkwZDQ2NjhlMzEyNGM1ZTliNDhiZmUwZDBlMzk1NzIuLmY2NWE3NDEzNDlmZmNhMjliMTk1
NWM2NzRhYTQ4MzNkNzIzNjU3NWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxT
ZXR0aW5ncy5oCkBAIC0xMzUsOCArMTM1LDYgQEAgcHVibGljOgogICAgIHN0YXRpYyB2b2lkIHNl
dFBpY3R1cmVJblBpY3R1cmVBUElFbmFibGVkKGJvb2wpOwogICAgIHN0YXRpYyB2b2lkIHNldEZl
dGNoQVBJS2VlcEFsaXZlRW5hYmxlZChib29sKTsKIAotICAgIHN0YXRpYyBib29sIHdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLQogICAgIHZvaWQgc2V0U2hvdWxkRGVhY3Rp
dmF0ZUF1ZGlvU2Vzc2lvbihib29sKTsKICAgICAKICAgICB2b2lkIHNldFN0b3JhZ2VBY2Nlc3NB
UElQZXJQYWdlU2NvcGVFbmFibGVkKGJvb2wpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxTZXR0aW5ncy5pZGwKaW5kZXggNDFhMjdkNjJlMjc2NDY0YWFlNWUxMjhiOGU5YmUxZWNm
OTFmZWRmZi4uNWNjNjJmMzI1YTJmNjg5NjAwZTNiZjg4Y2VhMDVjNjU2ZmFlNGVmMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCkBAIC0xMTcsOCArMTE3
LDYgQEAgZW51bSBGb250TG9hZFRpbWluZ092ZXJyaWRlIHsgIkJsb2NrIiwgIlN3YXAiLCAiRmFp
bHVyZSIgfTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBzZXRTaG91bGRNYW5h
Z2VBdWRpb1Nlc3Npb25DYXRlZ29yeShib29sZWFuIHNob3VsZCk7CiAgICAgW01heVRocm93RXhj
ZXB0aW9uXSB1bmRlZmluZWQgc2V0Q3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKGJvb2xlYW4g
ZW5hYmxlZCk7CiAKLSAgICBbRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zXSBib29sZWFu
IHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLQogICAgIHVuZGVmaW5lZCBz
ZXRTaG91bGREZWFjdGl2YXRlQXVkaW9TZXNzaW9uKGJvb2xlYW4gc2hvdWxkRGVhY3RpdmF0ZSk7
CiAgICAgCiAgICAgdW5kZWZpbmVkIHNldFN0b3JhZ2VBY2Nlc3NBUElQZXJQYWdlU2NvcGVFbmFi
bGVkKGJvb2xlYW4gZW5hYmxlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5n
L0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5k
ZXggMWQxNGQ3MGVkOGYxMmExZTZkM2QwZjI1NWNiMWJhMGY1MDc4M2U4Yy4uN2M0ZGYwM2U1ZTE4
NGI1YjU5YzkwZDQ2ZjY2ZWNlMTA2OGQ2ZmI3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
dGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcApAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJCaXRtYXBJbWFn
ZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NL
ZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTTWVkaWFSdWxlLmgiCiAjaW5jbHVkZSAiQ1NT
UHJvcGVydHlQYXJzZXIuaCIKQEAgLTEwNjksOSArMTA2OCw3IEBAIGJvb2wgSW50ZXJuYWxzOjph
bmltYXRpb25XaXRoSWRFeGlzdHMoY29uc3QgU3RyaW5nJiBpZCkgY29uc3QKIAogdW5zaWduZWQg
SW50ZXJuYWxzOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAogewotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCkt
PnRpbWVsaW5lKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRm9yVGVzdGluZygpOwotICAgIHJl
dHVybiBmcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMo
ZnJhbWUoKS0+ZG9jdW1lbnQoKSk7CisgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRp
bWVsaW5lKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zRm9yVGVzdGluZygpOwogfQogCiBFeGNl
cHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKSBjb25zdApA
QCAtMTA4MCw5ICsxMDc3LDcgQEAgRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjphbmltYXRp
b25zQXJlU3VzcGVuZGVkKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+
ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9
OwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZG9jdW1l
bnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7
Ci0gICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRp
b25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpOworICAgIHJldHVybiBkb2N1bWVu
dC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsK
IH0KIAogZG91YmxlIEludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QKQEAgLTEw
OTEsMTUgKzEwODYsOSBAQCBkb3VibGUgSW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwoKSBj
b25zdAogICAgIGlmICghZG9jdW1lbnQpCiAgICAgICAgIHJldHVybiBJTkZJTklUWTsKIAotICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byB0aW1lbGluZSA9
IGRvY3VtZW50LT5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAgICAgICByZXR1cm4gdGltZWxp
bmUtPmFuaW1hdGlvbkludGVydmFsKCkuc2Vjb25kcygpOwotICAgICAgICByZXR1cm4gSU5GSU5J
VFk7Ci0gICAgfQotCi0gICAgaWYgKCFkb2N1bWVudC0+ZnJhbWUoKSkKLSAgICAgICAgcmV0dXJu
IElORklOSVRZOwotICAgIHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9u
KCkuYW5pbWF0aW9uSW50ZXJ2YWwoKS52YWx1ZSgpOworICAgIGlmIChhdXRvIHRpbWVsaW5lID0g
ZG9jdW1lbnQtPmV4aXN0aW5nVGltZWxpbmUoKSkKKyAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5h
bmltYXRpb25JbnRlcnZhbCgpLnNlY29uZHMoKTsKKyAgICByZXR1cm4gSU5GSU5JVFk7CiB9CiAK
IEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMoKSBjb25zdApA
QCAtMTEwOCwxOSArMTA5NywxMCBAQCBFeGNlcHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1c3Bl
bmRBbmltYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+ZnJh
bWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9Owog
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGRvY3VtZW50LT5lbnN1
cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgZm9y
IChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUt
PnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1
bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1
cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgfQot
ICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLQotICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZnJhbWUtPmxlZ2FjeUFu
aW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotICAgICAg
ICB9CisgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5p
bWF0aW9ucygpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKKyAgICAgICAgaWYg
KERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQorICAgICAgICAgICAgZG9j
dW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwog
ICAgIH0KIAogICAgIHJldHVybiB7IH07CkBAIC0xMTMyLDczICsxMTEyLDE3IEBAIEV4Y2VwdGlv
bk9yPHZvaWQ+IEludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFk
b2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24g
eyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkg
ewotICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFu
aW1hdGlvbnMoKTsKLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUo
KTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAg
ICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAg
ICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5p
bWF0aW9ucygpOwotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgZG9jdW1lbnQtPmZy
YW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1
bWVudCk7Ci0KLSAgICAgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsg
ZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAg
ICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAg
ICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1l
bnQoZG9jdW1lbnQpOwotICAgICAgICB9CisgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0Nv
bnRyb2xsZXIoKS5yZXN1bWVBbmltYXRpb25zKCk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBk
b2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5l
eHQoKSkgeworICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCkpCisgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJl
c3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiAKICAgICByZXR1cm4geyB9OwogfQogCi1FeGNlcHRp
b25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0
IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVu
dCkKLXsKLSAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwotICAgIHJldHVybiBmcmFtZSgpLT5sZWdhY3lBbmltYXRp
b24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShlbGVtZW50LCBBdG9tU3RyaW5nKGFuaW1hdGlvbk5h
bWUpLCBwYXVzZVRpbWUpOwotfQotCi1FeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFt
ZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1
ZG9JZCkKLXsKLSAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotCi0gICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUi
ICYmIHBzZXVkb0lkICE9ICJhZnRlciIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBw
c2V1ZG9JZCA9PSAiYmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxl
bWVudC5hZnRlclBzZXVkb0VsZW1lbnQoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIHJldHVy
biBmcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZSgqcHNldWRv
RWxlbWVudCwgQXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwgcGF1c2VUaW1lKTsKLX0KLQotRXhj
ZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQo
Y29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVs
ZW1lbnQpCi17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5p
bWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGVsZW1lbnQsIHByb3BlcnR5TmFtZSwgcGF1
c2VUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRp
b25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHBh
dXNlVGltZSwgRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCkKLXsKLSAg
ICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRB
Y2Nlc3NFcnJvciB9OwotCi0gICAgaWYgKHBzZXVkb0lkICE9ICJiZWZvcmUiICYmIHBzZXVkb0lk
ICE9ICJhZnRlciIpCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJy
b3IgfTsKLQotICAgIFBzZXVkb0VsZW1lbnQqIHBzZXVkb0VsZW1lbnQgPSBwc2V1ZG9JZCA9PSAi
YmVmb3JlIiA/IGVsZW1lbnQuYmVmb3JlUHNldWRvRWxlbWVudCgpIDogZWxlbWVudC5hZnRlclBz
ZXVkb0VsZW1lbnQoKTsKLSAgICBpZiAoIXBzZXVkb0VsZW1lbnQpCi0gICAgICAgIHJldHVybiBF
eGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIHJldHVybiBmcmFtZSgpLT5s
ZWdhY3lBbmltYXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoKnBzZXVkb0VsZW1lbnQsIHBy
b3BlcnR5LCBwYXVzZVRpbWUpOwotfQotCiBWZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFu
aW1hdGlvbj4gSW50ZXJuYWxzOjphY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JFbGVtZW50KEVsZW1l
bnQmIGVsZW1lbnQpCiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIHsgfTsKLQogICAgIFZlY3RvcjxJbnRlcm5hbHM6OkFjY2VsZXJhdGVkQW5pbWF0aW9u
PiBhbmltYXRpb25zOwogICAgIGZvciAoY29uc3QgYXV0byYgYW5pbWF0aW9uQXNQYWlyIDogZWxl
bWVudC5kb2N1bWVudCgpLnRpbWVsaW5lKCkuYWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWVu
dChlbGVtZW50KSkKICAgICAgICAgYW5pbWF0aW9ucy5hcHBlbmQoeyBhbmltYXRpb25Bc1BhaXIu
Zmlyc3QsIGFuaW1hdGlvbkFzUGFpci5zZWNvbmQgfSk7CkBAIC0xMjA3LDkgKzExMzEsNyBAQCBW
ZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gSW50ZXJuYWxzOjphY2NlbGVy
YXRlZEFuaW1hdGlvbnNGb3JFbGVtZQogCiB1bnNpZ25lZCBJbnRlcm5hbHM6Om51bWJlck9mQW5p
bWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGlu
ZSgpLm51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zRm9yVGVzdGluZygpOwot
ICAgIHJldHVybiAwOworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGluZSgp
Lm51bWJlck9mQW5pbWF0aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zRm9yVGVzdGluZygpOwogfQog
CiBkb3VibGUgSW50ZXJuYWxzOjp0aW1lVG9OZXh0QW5pbWF0aW9uVGljayhXZWJBbmltYXRpb24m
IGFuaW1hdGlvbikgY29uc3QKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50
ZXJuYWxzLmggYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCmluZGV4IDM3MTE3
NmY2YzJhM2M3ODdlMDM2ZjUyMjY2MjU4MzVmZGMxM2VlOGEuLmQxN2NkZWQxZDIxOWU2NTM4Y2Mx
NDgxMzNjNTZlZmIxMmFhYzVhZTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaApAQCAt
MjMzLDE0ICsyMzMsOCBAQCBwdWJsaWM6CiAgICAgRXhjZXB0aW9uT3I8Ym9vbD4gYW5pbWF0aW9u
c0FyZVN1c3BlbmRlZCgpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHN1c3BlbmRBbmlt
YXRpb25zKCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gcmVzdW1lQW5pbWF0aW9ucygp
IGNvbnN0OwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVt
ZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVu
dCYpOwotICAgIEV4Y2VwdGlvbk9yPGJvb2w+IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9F
bGVtZW50KGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxl
bWVudCYsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpOwogICAgIGRvdWJsZSBhbmltYXRpb25zSW50
ZXJ2YWwoKSBjb25zdDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRlc3RpbmcuCi0gICAgRXhj
ZXB0aW9uT3I8Ym9vbD4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0IFN0cmlu
ZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50Jik7Ci0gICAgRXhjZXB0
aW9uT3I8Ym9vbD4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0
cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmLCBjb25zdCBTdHJpbmcm
IHBzZXVkb0lkKTsKLQogICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAgc3RydWN0
IEFjY2VsZXJhdGVkQW5pbWF0aW9uIHsKICAgICAgICAgU3RyaW5nIHByb3BlcnR5OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsIGIvU291cmNlL1dlYkNv
cmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCmluZGV4IDhkMWFkNDJmZDVhN2I1MDA0Y2IwOGZhNjZl
ZWY3NGFiYzQ2NDhkNDMuLmZkNjdlNzEyMmFjZDQxNmJjZGQ3MDRlYTVkMDAzNTVmOWM2OGIwNDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAorKysgYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKQEAgLTMxNSwxNCArMzE1LDggQEAg
ZW51bSBDb250ZW50U2l6ZUNhdGVnb3J5IHsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVm
aW5lZCBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZp
bmVkIHJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4g
YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVh
biBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChET01TdHJpbmcgYW5pbWF0aW9uTmFtZSwg
dW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW01h
eVRocm93RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlQW5pbWF0aW9uQXRUaW1lT25Qc2V1ZG9FbGVt
ZW50KERPTVN0cmluZyBhbmltYXRpb25OYW1lLCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGlt
ZSwgRWxlbWVudCBlbGVtZW50LCBET01TdHJpbmcgcHNldWRvSWQpOwogICAgIHJlYWRvbmx5IGF0
dHJpYnV0ZSBkb3VibGUgYW5pbWF0aW9uc0ludGVydmFsOwogCi0gICAgLy8gQ1NTIFRyYW5zaXRp
b24gdGVzdGluZy4KLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VUcmFuc2l0
aW9uQXRUaW1lT25FbGVtZW50KERPTVN0cmluZyBwcm9wZXJ0eU5hbWUsIHVucmVzdHJpY3RlZCBk
b3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoRE9NU3RyaW5n
IHByb3BlcnR5LCB1bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50
LCBET01TdHJpbmcgcHNldWRvSWQpOwotCiAgICAgLy8gV2ViIEFuaW1hdGlvbnMgdGVzdGluZy4K
ICAgICBzZXF1ZW5jZTxBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYWNjZWxlcmF0ZWRBbmltYXRpb25z
Rm9yRWxlbWVudChFbGVtZW50IGVsZW1lbnQpOwogICAgIHVuc2lnbmVkIGxvbmcgbnVtYmVyT2ZB
bmltYXRpb25UaW1lbGluZUludmFsaWRhdGlvbnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQ
cmVmZXJlbmNlcy55YW1sCmluZGV4IGE4MTQyMmM5YjFkNzBlMDBjZjVhZjIyN2IzYmQ3YTJiZjZj
YjNjZDkuLmJkMTFmYTYxYmU0YWNmYzFlYjcyYjg0ZTE5YTcxZjA3YmFhNmQyYzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNl
L1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAtMTQwNSwyMiArMTQwNSw2IEBA
IENTU09NVmlld1Ntb290aFNjcm9sbGluZ0VuYWJsZWQ6CiAgIGh1bWFuUmVhZGFibGVEZXNjcmlw
dGlvbjogIkVuYWJsZSBET00gQVBJIGFuZCBDU1MgcHJvcGVydHkgZm9yICdzbW9vdGgnIHNjcm9s
bCBiZWhhdmlvciIKICAgY2F0ZWdvcnk6IGV4cGVyaW1lbnRhbAogCi1XZWJBbmltYXRpb25zRW5h
YmxlZDoKLSAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJs
ZU5hbWU6ICJXZWIgQW5pbWF0aW9ucyIKLSAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiV2Vi
IEFuaW1hdGlvbnMgcHJvdG90eXBlIgotICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCi0gIHdlYmNv
cmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KLVdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ6Ci0gIHR5cGU6IGJvb2wKLSAgZGVmYXVsdFZhbHVlOiB0cnVlCi0gIGh1
bWFuUmVhZGFibGVOYW1lOiAiQ1NTIEFuaW1hdGlvbnMgdmlhIFdlYiBBbmltYXRpb25zIgotICBo
dW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJFeHBvc2UgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBU
cmFuc2l0aW9ucyB0aHJvdWdoIGdldEFuaW1hdGlvbnMoKSIKLSAgY2F0ZWdvcnk6IGV4cGVyaW1l
bnRhbAotICB3ZWJjb3JlQmluZGluZzogUnVudGltZUVuYWJsZWRGZWF0dXJlcwotCiBXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6CiAgIHR5cGU6IGJvb2wKICAgZGVmYXVs
dFZhbHVlOiBERUZBVUxUX0VYUEVSSU1FTlRBTF9GRUFUVVJFU19FTkFCTEVECmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzLmNwcCBiL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwCmluZGV4IGViYzJkMjdh
Zjc3NGU4MzI1ZDVhZGIzYTk0NDYwMzE2NjMxMDAwM2UuLjE3ZGNmMzgzZTU1MDdlMWI3MGQwZGU4
MzEzMTdkZGQxYzdmOWNhZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
L1dLUHJlZmVyZW5jZXMuY3BwCkBAIC00ODYsMjYgKzQ4Niw2IEBAIGJvb2wgV0tQcmVmZXJlbmNl
c0dldEFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCiAgICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPmFjY2VsZXJhdGVkMmRD
YW52YXNFbmFibGVkKCk7CiB9CiAKLXZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKLXsKLSAg
ICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChmbGFnKTsK
LX0KLQotYm9vbCBXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKLXsKLSAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2Vz
UmVmKS0+d2ViQW5pbWF0aW9uc0VuYWJsZWQoKTsKLX0KLQotdm9pZCBXS1ByZWZlcmVuY2VzU2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZl
cmVuY2VzUmVmLCBib29sIGZsYWcpCi17Ci0gICAgdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+c2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChmbGFnKTsKLX0KLQotYm9vbCBXS1By
ZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIHZvaWQgV0tQ
cmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYgcHJl
ZmVyZW5jZXNSZWYsIGJvb2wgZmxhZykKIHsKICAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5z
ZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhmbGFnKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmggYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCmluZGV4IDdlMTRh
MmFjNDVjYjFiZjVmYWUwMzkxNGVjOTI4YjkxMzJmYmM1NjEuLjIxZGYzNzQ4NjZjZDI1ODI5Nzk3
YzcyOWIzODI2MWQ1OGYwZmI2MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaApAQCAtOTcsMTQgKzk3LDYgQEAg
V0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkdMRW5hYmxlZChXS1ByZWZlcmVuY2Vz
UmVmKTsKIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRBY2NlbGVyYXRlZDJEQ2FudmFz
RW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXRBY2NlbGVyYXRlZDJEQ2FudmFzRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmKTsKIAot
Ly8gRGVmYXVsdHMgdG8gZmFsc2UKLVdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJB
bmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwotV0tfRVhQT1JU
IGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYpOwotCi0vLyBEZWZhdWx0cyB0byBmYWxzZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNl
c1NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiwg
Ym9vbCBmbGFnKTsKLVdLX0VYUE9SVCBib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwotCiAvLyBEZWZhdWx0cyB0
byBmYWxzZS4KIFdLX0VYUE9SVCB2b2lkIFdLUHJlZmVyZW5jZXNTZXROZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmLCBib29sKTsKIFdLX0VYUE9SVCBib29sIFdLUHJlZmVy
ZW5jZXNHZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrcyhXS1ByZWZlcmVuY2VzUmVmKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzLm1t
IGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KaW5k
ZXggMTNhODgxMGMzYWY0YjczZmUyZTBiMmJiZGQ3ZThiNTc2ODYxMmRhNi4uZGFkYTkxMzNmY2Q5
NzNiZjVmYjY2MDAyYjUzOTE5OTZlMjA5ZWNhMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0KQEAgLTE0MzAsMTYgKzE0MzAsNiBA
QCAtIChCT09MKV92aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQK
ICAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT52aWRlb1F1YWxpdHlJbmNsdWRlc0Rpc3BsYXlDb21w
b3NpdGluZ0VuYWJsZWQoKTsKIH0KIAotLSAodm9pZClfc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZDooQk9PTCllbmFibGVkCi17Ci0gICAgX3ByZWZlcmVuY2VzLT5zZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCi0tIChCT09MKV93
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIF9wcmVmZXJl
bmNlcy0+d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQotCiAtICh2b2lk
KV9zZXREZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZDooQk9PTCllbmFibGVkCiB7CiAjaWYg
RU5BQkxFKERFVklDRV9PUklFTlRBVElPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1ByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggYTM0OTg5NTY5
MjY5NDQ3ODUzNmM0YTQ0NDVlNWE4MGU0NDNmMTg3Mi4uNTg0MDRhNjg0NWQ3YTQ5YzhhNzZhYWVh
Zjg4NGRmMmEwZTMzY2RkZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTE1MSw3ICsxNTEsNiBAQCB0
eXBlZGVmIE5TX0VOVU0oTlNJbnRlZ2VyLCBfV0tFZGl0YWJsZUxpbmtCZWhhdmlvcikgewogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0TG93UG93ZXJWaWRlb0F1ZGlvQnVmZmVyU2l6
ZUVuYWJsZWQ6KSBCT09MIF9sb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZCBXS19B
UElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25h
dG9taWMsIHNldHRlcj1fc2V0U2hvdWxkSWdub3JlTWV0YVZpZXdwb3J0OikgQk9PTCBfc2hvdWxk
SWdub3JlTWV0YVZpZXdwb3J0IFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygx
Mi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRWaWRlb1F1YWxpdHlJbmNs
dWRlc0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQ6KSBCT09MIF92aWRlb1F1YWxpdHlJbmNsdWRl
c0Rpc3BsYXlDb21wb3NpdGluZ0VuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40
KSwgaW9zKDEyLjIpKTsKLUBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KSBCT09MIF93ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQpLCBpb3MoMTIuMikpOwog
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0RGV2aWNlT3JpZW50YXRpb25FdmVudEVu
YWJsZWQ6KSBCT09MIF9kZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZCBXS19BUElfQVZBSUxB
QkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwogQHByb3BlcnR5IChub25hdG9taWMsIHNl
dHRlcj1fc2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3M6KSBCT09MIF9uZWVkc1NpdGVTcGVjaWZp
Y1F1aXJrcyBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjEzLjQpLCBpb3MoMTMuMCkpOwogQHBy
b3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0SXRwRGVidWdNb2RlRW5hYmxlZDopIEJPT0wg
X2l0cERlYnVnTW9kZUVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNSksIGlvcygx
My4wKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5k
bGUvSW5qZWN0ZWRCdW5kbGUuY3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmNwcAppbmRleCA0MTljMTVmOTcwMTdkZGJkMmRiOGIzODcw
NjgzNzUwYWEwMzRlZjExLi5iZTVkZWQ1NzgzNzIyMDU0MGUwMTMyYzcyZTgyYzY0MWZhYzNmZjk0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5q
ZWN0ZWRCdW5kbGUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1
bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAKQEAgLTE4NywxMiArMTg3LDYgQEAgdm9pZCBJbmplY3Rl
ZEJ1bmRsZTo6b3ZlcnJpZGVCb29sUHJlZmVyZW5jZUZvclRlc3RSdW5uZXIoV2ViUGFnZUdyb3Vw
UHJveHkqIHBhZ2UKICAgICB9CiAjZW5kaWYKIAotICAgIGlmIChwcmVmZXJlbmNlID09ICJXZWJL
aXRXZWJBbmltYXRpb25zRW5hYmxlZCIpCi0gICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZW5hYmxlZCk7Ci0KLSAg
ICBpZiAocHJlZmVyZW5jZSA9PSAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCIpCi0gICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCku
c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsKLQogICAgIGlm
IChwcmVmZXJlbmNlID09ICJXZWJLaXRDYWNoZUFQSUVuYWJsZWQiKQogICAgICAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldENhY2hlQVBJRW5hYmxlZChlbmFi
bGVkKTsKIApAQCAtNTg5LDE2ICs1ODMsNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRUYWJL
ZXlDeWNsZXNUaHJvdWdoRWxlbWVudHMoV2ViUGFnZSogcGFnZSwgYm9vbCBlbmFibGVkKQogICAg
IHBhZ2UtPmNvcmVQYWdlKCktPnNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhlbmFibGVk
KTsKIH0KIAotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9v
bCBlbmFibGVkKQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVz
KCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLXZvaWQgSW5qZWN0ZWRC
dW5kbGU6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoYm9vbCBlbmFibGVk
KQotewotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChlbmFibGVkKTsKLX0KLQogdm9pZCBJbmpl
Y3RlZEJ1bmRsZTo6c2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCBlbmFi
bGVkKQogewogI2lmIEVOQUJMRShBQ0NFU1NJQklMSVRZX0lTT0xBVEVEX1RSRUUpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1
bmRsZS5oCmluZGV4IDA5YTEyNWNhNGM5NmNjM2EwMzJhZTU4YTRlYmJjMmJjNDNjNzVmYmYuLmMw
MWRlODBmY2NiY2UzZDM1YmUzMmFmN2EwZGE0YjNjM2MxZGY2NDMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oCisrKyBi
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5o
CkBAIC0xNDIsOCArMTQyLDYgQEAgcHVibGljOgogCiAgICAgdm9pZCBzZXRUYWJLZXlDeWNsZXNU
aHJvdWdoRWxlbWVudHMoV2ViUGFnZSosIGJvb2wgZW5hYmxlZCk7CiAgICAgdm9pZCBzZXRTZXJp
YWxMb2FkaW5nRW5hYmxlZChib29sKTsKLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNFbmFibGVk
KGJvb2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChi
b29sKTsKICAgICB2b2lkIHNldEFjY2Vzc2liaWxpdHlJc29sYXRlZFRyZWVFbmFibGVkKGJvb2wp
OwogICAgIHZvaWQgZGlzcGF0Y2hQZW5kaW5nTG9hZFJlcXVlc3RzKCk7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRl
LmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJp
dmF0ZS5oCmluZGV4IGUyM2I4NDA2OGYyNDBjZTIxYmJhZDE3MDRiOWUzNmM3ZGFlNDFkZWIuLjFi
Y2E3YmZhODdiY2YzOTA5YTQ3NzZlZjk0OTk1ZjBlMTliYTAwMjAgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysr
IGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZh
dGUuaApAQCAtNTIsNyArNTIsNiBAQAogI2RlZmluZSBXZWJLaXRKYXZhRW5hYmxlZFByZWZlcmVu
Y2VLZXkgQCJXZWJLaXRKYXZhRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SmF2YVNjcmlwdEVuYWJs
ZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdEVuYWJsZWQiCiAjZGVmaW5lIFdlYktp
dEphdmFTY3JpcHRNYXJrdXBFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEphdmFTY3JpcHRN
YXJrdXBFbmFibGVkIgotI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVu
Y2VLZXkgQCJXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0V2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0V2Vi
QW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0Q1NTQ3Vz
dG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q1NTQ3Vz
dG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQiCkBAIC0yMDUsNyArMjA0LDYgQEAKICNkZWZp
bmUgV2ViS2l0Q29sb3JGaWx0ZXJFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdENvbG9yRmls
dGVyRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0UHVuY2hPdXRXaGl0ZUJhY2tncm91bmRzSW5EYXJr
TW9kZVByZWZlcmVuY2VLZXkgQCJXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlIgogI2RlZmluZSBXZWJLaXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWRQcmVmZXJlbmNlS2V5
IEAiV2ViS2l0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkIgotI2RlZmluZSBXZWJLaXRXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdENTU1NoYWRvd1BhcnRz
RW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NTaGFkb3dQYXJ0c0VuYWJsZWQiCiAjZGVm
aW5lIFdlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkUHJlZmVy
ZW5jZUtleSBAIldlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVk
IgogI2RlZmluZSBXZWJLaXRXZWJTUUxFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdlYlNR
TEVuYWJsZWQiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dl
YlByZWZlcmVuY2VzLm1tIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVm
ZXJlbmNlcy5tbQppbmRleCA1N2I2NDg2ZTk5MzdmYzFiZGFiZWFiZTMwYWNhMWIyN2E5NjA5YjVj
Li5hZGFkZTk3MDA0MTY3YTg0ZmM1ZWYxZTQ4ODgwNjBkMmUxOTMyY2UwIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KQEAgLTYzNiw3
ICs2MzYsNiBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgQE5PLCBXZWJLaXREaWFsb2dF
bGVtZW50RW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBOTywgV2ViS2l0SGlnaGxpZ2h0
QVBJRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMsIFdlYktpdE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkUHJlZmVyZW5jZUtleSwKLSAgICAgICAgQFlFUywgV2ViS2l0V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMs
IFdlYktpdExheW91dEZvcm1hdHRpbmdDb250ZXh0SW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5j
ZUtleSwKIAogI2lmIEVOQUJMRShXRUJHTDIpCkBAIC02NTgsNyArNjU3LDYgQEAgKyAodm9pZClp
bml0aWFsaXplCiAgICAgICAgIEBOTywgV2ViS2l0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkUHJl
ZmVyZW5jZUtleSwKICNlbmRpZgogICAgICAgICBATk8sIFdlYktpdERpcmVjdG9yeVVwbG9hZEVu
YWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVTLCBXZWJLaXRXZWJBbmltYXRpb25zRW5h
YmxlZFByZWZlcmVuY2VLZXksCiAgICAgICAgIEBZRVMsIFdlYktpdFN5bnRoZXRpY0VkaXRpbmdD
b21tYW5kc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAogCiAjaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkK
QEAgLTMxNzYsMTYgKzMxNzQsNiBAQCAtICh2b2lkKXNldENTU09NVmlld1Ntb290aFNjcm9sbGlu
Z0VuYWJsZWQ6KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6
V2ViS2l0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQog
Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNFbmFibGVkCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9ib29s
VmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKLX0K
LQotLSAodm9pZClzZXRXZWJBbmltYXRpb25zRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW3Nl
bGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFBy
ZWZlcmVuY2VLZXldOwotfQotCiAtIChCT09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRp
b25zRW5hYmxlZAogewogICAgIHJldHVybiBbc2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdFdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXldOwpAQCAt
MzI0NiwxNiArMzIzNCw2IEBAIC0gKHZvaWQpc2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ6
KEJPT0wpZmxhZwogICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6V2ViS2l0TW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5XTsKIH0KIAotLSAoQk9PTCl3ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkCi17Ci0gICAgcmV0dXJuIFtzZWxmIF9ib29s
VmFsdWVGb3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZl
cmVuY2VLZXldOwotfQotCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ6KEJPT0wpZmxhZwotewotICAgIFtzZWxmIF9zZXRCb29sVmFsdWU6ZmxhZyBmb3JLZXk6
V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXldOwot
fQotCiAtIChCT09MKWludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZAogewogICAgIHJldHVybiBb
c2VsZiBfYm9vbFZhbHVlRm9yS2V5OldlYktpdEludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZFBy
ZWZlcmVuY2VLZXldOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZp
ZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKaW5kZXggNzMwZWI2YmYxZjJkNjdiZjQ3MTI3MGM5
NTk1Y2JkMmQzYzk4NGQwNS4uYjk4N2M5YzI4OGQ3YjUzMDczNDUzNjNhOWM4MjQ4OWRhY2UyMTM0
OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJl
bmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlBy
ZWZlcmVuY2VzUHJpdmF0ZS5oCkBAIC01NjQsOSArNTY0LDYgQEAgZXh0ZXJuIE5TU3RyaW5nICpX
ZWJQcmVmZXJlbmNlc0NhY2hlTW9kZWxDaGFuZ2VkSW50ZXJuYWxOb3RpZmljYXRpb24gV0VCS0lU
X0RFUFIKIC0gKHZvaWQpc2V0RGlyZWN0b3J5VXBsb2FkRW5hYmxlZDooQk9PTClmbGFnOwogLSAo
Qk9PTClkaXJlY3RvcnlVcGxvYWRFbmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNF
bmFibGVkOihCT09MKWZsYWc7Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNFbmFibGVkOwotCiAtICh2
b2lkKXNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDooQk9PTClmbGFn
OwogLSAoQk9PTCl3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ7CiAKQEAg
LTU4NSw5ICs1ODIsNiBAQCBleHRlcm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVNb2Rl
bENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBXRUJLSVRfREVQUgogLSAodm9pZClzZXRNb2Rl
cm5NZWRpYUNvbnRyb2xzRW5hYmxlZDooQk9PTClmbGFnOwogLSAoQk9PTCltb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZDsKIAotLSAodm9pZClzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkOihCT09MKWZsYWc7Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ7Ci0KIC0gKHZvaWQpc2V0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOihCT09MKWZs
YWc7CiAtIChCT09MKWludGVyc2VjdGlvbk9ic2VydmVyRW5hYmxlZDsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tIGIvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCmluZGV4IDRlYzAyMzdhNzRjN2M0OWRkZTgy
ODU5Y2U1ODllMTc0Y2Q1ZTk0MDUuLmNlNGNiM2Q0YzA2ODExODk2MjYyY2E4OTUyMDYzN2QxM2U1
MWVhNDUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KQEAg
LTEzMiw3ICsxMzIsNiBAQAogI2ltcG9ydCA8V2ViQ29yZS9BcHBsaWNhdGlvbkNhY2hlU3RvcmFn
ZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9CYWNrRm9yd2FyZENhY2hlLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0JhY2tGb3J3YXJkQ29udHJvbGxlci5oPgotI2ltcG9ydCA8V2ViQ29yZS9DU1NBbmltYXRp
b25Db250cm9sbGVyLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NhY2hlU3RvcmFnZVByb3ZpZGVyLmg+
CiAjaW1wb3J0IDxXZWJDb3JlL0Nocm9tZS5oPgogI2ltcG9ydCA8V2ViQ29yZS9Db2xvck1hYy5o
PgpAQCAtMzMzNCw3ICszMzMzLDYgQEAgLSAodm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQ
cmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAKICAgICBzZXR0aW5ncy5zZXRJbnRlcmFjdGl2ZUZv
cm1WYWxpZGF0aW9uRW5hYmxlZChbc2VsZiBpbnRlcmFjdGl2ZUZvcm1WYWxpZGF0aW9uRW5hYmxl
ZF0pOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0TW9k
ZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoW3ByZWZlcmVuY2VzIG1vZGVybk1lZGlhQ29udHJvbHNF
bmFibGVkXSk7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5z
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkXSk7CiAKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1
cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldENhY2hlQVBJRW5hYmxlZChbcHJlZmVyZW5jZXMgY2Fj
aGVBUElFbmFibGVkXSk7CiAKQEAgLTMzNTgsNyArMzM1Niw2IEBAIC0gKHZvaWQpX3ByZWZlcmVu
Y2VzQ2hhbmdlZDooV2ViUHJlZmVyZW5jZXMgKilwcmVmZXJlbmNlcwogICAgIHNldHRpbmdzLnNl
dERvd25sb2FkQXR0cmlidXRlRW5hYmxlZChbcHJlZmVyZW5jZXMgZG93bmxvYWRBdHRyaWJ1dGVF
bmFibGVkXSk7CiAjZW5kaWYKIAotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlv
bnNFbmFibGVkXSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoW3ByZWZlcmVuY2Vz
IHdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZF0pOwogICAgIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc011dGFibGVU
aW1lbGluZXNFbmFibGVkKFtwcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5l
c0VuYWJsZWRdKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJm
YWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVy
ZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGwKaW5kZXggZmUyMjgxMWM4NmVjNWNkOGUzMzFjNjdl
MTZmM2NkOTMxYjIzZDMwNy4uZGY3YzE3ZjdmOWIwNWYxOGQ2NjE5Yjg4NjlkMDY2NzM1Njk2MDQ4
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRnJh
bWVQcml2YXRlLmlkbAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lX
ZWJGcmFtZVByaXZhdGUuaWRsCkBAIC04NCwxMCArODQsNiBAQCBpbnRlcmZhY2UgSVdlYkZyYW1l
UHJpdmF0ZSA6IElVbmtub3duCiAKICAgICBIUkVTVUxUIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
KFtpbl0gSURPTUVsZW1lbnQqIGVsZW1lbnQsIFtvdXQsIHJldHZhbF0gQk9PTCogcmVzdWx0KTsK
IAotICAgIEhSRVNVTFQgcGF1c2VBbmltYXRpb24oW2luXSBCU1RSIGFuaW1hdGlvbk5hbWUsIFtp
bl0gSURPTU5vZGUqIG5vZGUsIFtpbl0gZG91YmxlIHNlY29uZHNGcm9tTm93LCBbb3V0LCByZXR2
YWxdIEJPT0wqIGFuaW1hdGlvbldhc1J1bm5pbmcpOwotICAgIEhSRVNVTFQgcGF1c2VUcmFuc2l0
aW9uKFtpbl0gQlNUUiBwcm9wZXJ0eU5hbWUsIFtpbl0gSURPTU5vZGUqIG5vZGUsIFtpbl0gZG91
YmxlIHNlY29uZHNGcm9tTm93LCBbb3V0LCByZXR2YWxdIEJPT0wqIHRyYW5zaXRpb25XYXNSdW5u
aW5nKTsKLSAgICBIUkVTVUxUIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhbb3V0LCByZXR2YWxd
IFVJTlQqIG51bWJlcik7Ci0KICAgICBIUkVTVUxUIGlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFn
ZShbb3V0LCByZXR2YWxdIEJPT0wqIHJlc3VsdCk7CiAKICAgICBIUkVTVUxUIGFsbG93c0ZvbGxv
d2luZ0xpbmsoW2luXSBCU1RSIHVybCwgW291dCwgcmV0dmFsXSBCT09MKiByZXN1bHQpOwpAQCAt
MTEwLDkgKzEwNiw2IEBAIGludGVyZmFjZSBJV2ViRnJhbWVQcml2YXRlIDogSVVua25vd24KIAog
ICAgIEhSRVNVTFQgdW51c2VkNSgpOwogCi0gICAgSFJFU1VMVCBzdXNwZW5kQW5pbWF0aW9ucygp
OwotICAgIEhSRVNVTFQgcmVzdW1lQW5pbWF0aW9ucygpOyAKLQogICAgIEhSRVNVTFQgbG9hZFBs
YWluVGV4dFN0cmluZyhbaW5dIEJTVFIgc3RyaW5nLCBbaW5dIEJTVFIgdXJsKTsKIAogICAgIEhS
RVNVTFQgY2xlYXJPcGVuZXIoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwgYi9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCmluZGV4IDlhODc1
ZDQ3OWU3YmZhZDczNjFhNmYyZjhhNGQzMTkzMzdlZTU3ZjIuLmIwYmQwNWYyNTA1ODJlMTQ3YTZh
N2ZiZGEzYjZkYmY0YjZhYjYwODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwKKysrIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbApAQCAtMTgz
LDE2ICsxODMsMTIgQEAgaW50ZXJmYWNlIElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzIDogSVdlYlBy
ZWZlcmVuY2VzUHJpdmF0ZTIKICAgICBIUkVTVUxUIHNldEN1c3RvbUVsZW1lbnRzRW5hYmxlZChb
aW5dIEJPT0wgZW5hYmxlZCk7CiAgICAgSFJFU1VMVCBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZChbb3V0LCByZXR2YWxdIEJPT0wqIGVuYWJsZWQpOwogICAgIEhSRVNVTFQgc2V0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQpOwotICAgIEhSRVNVTFQgd2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChbb3V0LCByZXR2YWxdIEJPT0wqIGVuYWJsZWQp
OwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChbaW5d
IEJPT0wgZW5hYmxlZCk7CiB9CiAKIFt1dWlkKEY5NTgyRDcyLTYzNDgtNDVCMS1BQjA5LTM5RTMz
NDU5QjVCOSldCiBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTQgOiBJV2ViUHJlZmVy
ZW5jZXNQcml2YXRlMwogewogICAgIEhSRVNVTFQgc2V0QXBwbGljYXRpb25JZChbaW5dIEJTVFIg
YXBwbGljYXRpb25JZCk7Ci0gICAgSFJFU1VMVCB3ZWJBbmltYXRpb25zRW5hYmxlZChbb3V0LCBy
ZXR2YWxdIEJPT0wqKTsKLSAgICBIUkVTVUxUIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKFtpbl0g
Qk9PTCBlbmFibGVkKTsKICAgICBIUkVTVUxUIHVzZXJUaW1pbmdFbmFibGVkKFtvdXQsIHJldHZh
bF0gQk9PTCopOwogICAgIEhSRVNVTFQgc2V0VXNlclRpbWluZ0VuYWJsZWQoW2luXSBCT09MIGVu
YWJsZWQpOwogICAgIEhSRVNVTFQgcmVzb3VyY2VUaW1pbmdFbmFibGVkKFtvdXQsIHJldHZhbF0g
Qk9PTCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3Bw
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuY3BwCmluZGV4IGYwNjI5YmJlMzcy
Y2JhOThkMzZkZDhjOGYyNDAxZDc2MTVlYmY3NTguLjhjOGU1ODVhN2JjN2I5MzRiOGNhMGFmZDBj
YzczOGQyZGJiYjY2OWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZy
YW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKQEAgLTEx
NzcsNjQgKzExNzcsNiBAQCBIUkVTVUxUIFdlYkZyYW1lOjplbGVtZW50RG9lc0F1dG9Db21wbGV0
ZShfSW5fb3B0XyBJRE9NRWxlbWVudCAqZWxlbWVudCwgX091dF8gQgogICAgIHJldHVybiBTX09L
OwogfQogCi1IUkVTVUxUIFdlYkZyYW1lOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBGcmFt
ZSogZnJhbWUgPSBjb3JlKHRoaXMpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBF
X1VORVhQRUNURUQ7Ci0KLSAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0
aW9ucygpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFdlYkZyYW1lOjpzdXNwZW5k
QW5pbWF0aW9ucygpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOwotCi0gICAgZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0K
LUhSRVNVTFQgV2ViRnJhbWU6OnBhdXNlQW5pbWF0aW9uKF9Jbl8gQlNUUiBhbmltYXRpb25OYW1l
LCBfSW5fb3B0XyBJRE9NTm9kZSogbm9kZSwgZG91YmxlIHNlY29uZHNGcm9tTm93LCBfT3V0XyBC
T09MKiBhbmltYXRpb25XYXNSdW5uaW5nKQotewotICAgIGlmICghbm9kZSB8fCAhYW5pbWF0aW9u
V2FzUnVubmluZykKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgICphbmltYXRpb25X
YXNSdW5uaW5nID0gRkFMU0U7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHRoaXMpOwotICAg
IGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7Ci0KLSAgICBDT01QdHI8
RE9NTm9kZT4gZG9tTm9kZShRdWVyeSwgbm9kZSk7Ci0gICAgaWYgKCFkb21Ob2RlKQotICAgICAg
ICByZXR1cm4gRV9GQUlMOwotCi0gICAgKmFuaW1hdGlvbldhc1J1bm5pbmcgPSBmcmFtZS0+bGVn
YWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUoZG93bmNhc3Q8RWxlbWVudD4oKmRv
bU5vZGUtPm5vZGUoKSksIFN0cmluZyhhbmltYXRpb25OYW1lLCBTeXNTdHJpbmdMZW4oYW5pbWF0
aW9uTmFtZSkpLCBzZWNvbmRzRnJvbU5vdyk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNV
TFQgV2ViRnJhbWU6OnBhdXNlVHJhbnNpdGlvbihfSW5fIEJTVFIgcHJvcGVydHlOYW1lLCBfSW5f
b3B0XyBJRE9NTm9kZSogbm9kZSwgZG91YmxlIHNlY29uZHNGcm9tTm93LCBfT3V0XyBCT09MKiB0
cmFuc2l0aW9uV2FzUnVubmluZykKLXsKLSAgICBpZiAoIW5vZGUgfHwgIXRyYW5zaXRpb25XYXNS
dW5uaW5nKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgKnRyYW5zaXRpb25XYXNS
dW5uaW5nID0gRkFMU0U7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHRoaXMpOwotICAgIGlm
ICghZnJhbWUpCi0gICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7Ci0KLSAgICBDT01QdHI8RE9N
Tm9kZT4gZG9tTm9kZShRdWVyeSwgbm9kZSk7Ci0gICAgaWYgKCFkb21Ob2RlKQotICAgICAgICBy
ZXR1cm4gRV9GQUlMOwotCi0gICAgKnRyYW5zaXRpb25XYXNSdW5uaW5nID0gZnJhbWUtPmxlZ2Fj
eUFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShkb3duY2FzdDxFbGVtZW50PigqZG9t
Tm9kZS0+bm9kZSgpKSwgU3RyaW5nKHByb3BlcnR5TmFtZSwgU3lzU3RyaW5nTGVuKHByb3BlcnR5
TmFtZSkpLCBzZWNvbmRzRnJvbU5vdyk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNVTFQg
V2ViRnJhbWU6OnZpc2libGVDb250ZW50UmVjdChfT3V0XyBSRUNUKiByZWN0KQogewogICAgIGlm
ICghcmVjdCkKQEAgLTEyNTMsMjEgKzExOTUsNiBAQCBIUkVTVUxUIFdlYkZyYW1lOjp2aXNpYmxl
Q29udGVudFJlY3QoX091dF8gUkVDVCogcmVjdCkKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJF
U1VMVCBXZWJGcmFtZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKF9PdXRfIFVJTlQqIG51bWJl
cikKLXsKLSAgICBpZiAoIW51bWJlcikKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAg
ICpudW1iZXIgPSAwOwotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBpZiAo
IWZyYW1lKQotICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOwotCi0gICAgKm51bWJlciA9IGZy
YW1lLT5sZWdhY3lBbmltYXRpb24oKS5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoZnJhbWUtPmRv
Y3VtZW50KCkpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVTVUxUIFdlYkZyYW1lOjppc0Rp
c3BsYXlpbmdTdGFuZGFsb25lSW1hZ2UoX091dF8gQk9PTCogcmVzdWx0KQogewogICAgIGlmICgh
cmVzdWx0KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuaCBi
L1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmgKaW5kZXggNzY3Mjc0MTU3YThkZTIw
M2JkMGEzMGI1MjNkOTljZWIxMTE0ODI2MS4uNDA2MjM1NDY5NjZiMWQ1ZTcyYWI0NzlmZGE4MzA0
OTQ0ZTM2N2QzNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUu
aAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5oCkBAIC0xMzYsOSArMTM2
LDYgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwYWlu
dERvY3VtZW50UmVjdFRvQ29udGV4dChSRUNULCBfSW5fIEhEQyk7CiAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHBhaW50U2Nyb2xsVmlld1JlY3RUb0NvbnRleHRBdFBvaW50
KFJFQ1QsIFBPSU5ULCBfSW5fIEhEQyk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIGVsZW1lbnREb2VzQXV0b0NvbXBsZXRlKF9Jbl9vcHRfIElET01FbGVtZW50KiwgX091
dF8gQk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwYXVzZUFu
aW1hdGlvbihfSW5fIEJTVFIgYW5pbWF0aW9uTmFtZSwgX0luX29wdF8gSURPTU5vZGUqLCBkb3Vi
bGUgc2Vjb25kc0Zyb21Ob3csIF9PdXRfIEJPT0wqIGFuaW1hdGlvbldhc1J1bm5pbmcpOwotICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBwYXVzZVRyYW5zaXRpb24oX0luXyBC
U1RSIHByb3BlcnR5TmFtZSwgX0luX29wdF8gSURPTU5vZGUqLCBkb3VibGUgc2Vjb25kc0Zyb21O
b3csIF9PdXRfIEJPT0wqIHRyYW5zaXRpb25XYXNSdW5uaW5nKTsKLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKF9PdXRfIFVJTlQq
KTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgbG9hZFBsYWluVGV4dFN0
cmluZyhfSW5fIEJTVFIsIF9Jbl8gQlNUUiB1cmwpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSBpc0Rpc3BsYXlpbmdTdGFuZGFsb25lSW1hZ2UoX091dF8gQk9PTCopOwog
ICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBhbGxvd3NGb2xsb3dpbmdMaW5r
KF9Jbl8gQlNUUiwgX091dF8gQk9PTCopOwpAQCAtMTUwLDggKzE0Nyw2IEBAIHB1YmxpYzoKICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgY2xlYXJPcGVuZXIoKTsKICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0VGV4dERpcmVjdGlvbihfSW5fIEJT
VFIpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB1bnVzZWQ0KCkgeyBy
ZXR1cm4gRV9OT1RJTVBMOyB9Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgcmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXByZXNlbnRhdGlvbih1bnNpZ25lZCBvcHRpb25z
LCBfRGVyZWZfb3B0X291dF8gQlNUUiogcmVzdWx0KTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgcmVuZGVyVHJlZUFzRXh0ZXJuYWxSZXByZXNlbnRhdGlvbkZvclByaW50
aW5nKF9EZXJlZl9vcHRfb3V0XyBCU1RSKiByZXN1bHQpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCmluZGV4IDJhMjEyMWFkYjk2
ODY5ODQxMjFjMGU0YmE4ZGFmZmNhN2JjYzZjYWIuLjkyMTdiODVlNDk3ZGExM2RhNzY4MjI5NWIy
ZGU3NjJhMmRlNzE2NWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC0xODgsMTQgKzE4OCwxMCBAQAogCiAjZGVmaW5lIFdl
YktpdE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0TW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWQiCiAKLSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJs
ZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZCIKLQogI2RlZmluZSBX
ZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5
ICJXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQiCiAKICNkZWZp
bmUgV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkUHJlZmVyZW5jZUtl
eSAiV2ViS2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkIgogCi0jZGVmaW5l
IFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5ICJX
ZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIgotCiAjZGVmaW5lIFdlYktp
dENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0
Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQiCiAKICNkZWZpbmUgV2ViS2l0VXNl
clRpbWluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRVc2VyVGltaW5nRW5hYmxlZCIKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcAppbmRleCA5ZDliMGRmZTEx
OWJjZjE4YmU0MDM1NjEyNDU2ZWI2YTgzZWJhZWM4Li5mNzQyNmE5NTYzZDlmZGJiYmE1NzY0YjE2
N2M1YzAxYmFkMWIzODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQ
cmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5j
ZXMuY3BwCkBAIC0zMTEsMTQgKzMxMSwxMCBAQCB2b2lkIFdlYlByZWZlcmVuY2VzOjppbml0aWFs
aXplRGVmYXVsdFNldHRpbmdzKCkKIAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRz
LCBDRlNUUihXZWJLaXRDdXN0b21FbGVtZW50c0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9v
bGVhbkZhbHNlKTsKIAotICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihX
ZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuVHJ1ZSk7
Ci0KICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xl
YW5GYWxzZSk7CiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2Vi
S2l0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtD
RkJvb2xlYW5GYWxzZSk7CiAKLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZT
VFIoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkp
LCBrQ0ZCb29sZWFuRmFsc2UpOwotCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMs
IENGU1RSKFdlYktpdENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkUHJlZmVyZW5j
ZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7CiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZh
dWx0cywgQ0ZTVFIoV2ViS2l0VXNlclRpbWluZ0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9v
bGVhbkZhbHNlKTsKQEAgLTIxMzgsMjAgKzIxMzQsNiBAQCBIUkVTVUxUIFdlYlByZWZlcmVuY2Vz
Ojptb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQogICAgIHJl
dHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKF9PdXRfIEJPT0wqIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFi
bGVkKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotICAgICplbmFibGVkID0gYm9vbFZhbHVl
Rm9yS2V5KFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNl
S2V5KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChCT09MIGVuYWJsZWQpCi17Ci0gICAg
c2V0Qm9vbFZhbHVlKFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVm
ZXJlbmNlS2V5LCBlbmFibGVkKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQogSFJFU1VMVCBXZWJQ
cmVmZXJlbmNlczo6ZmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkKF9PdXRfIEJPT0wqIGVuYWJsZWQp
CiB7CiAgICAgaWYgKCFlbmFibGVkKQpAQCAtMjM0MCwyMCArMjMyMiw2IEBAIEhSRVNVTFQgV2Vi
UHJlZmVyZW5jZXM6OnNldEFwcGxpY2F0aW9uSWQoQlNUUiBhcHBsaWNhdGlvbklkKQogICAgIHJl
dHVybiBTX09LOwogfQogCi1IUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25z
RW5hYmxlZChCT09MIGVuYWJsZWQpCi17Ci0gICAgc2V0Qm9vbFZhbHVlKFdlYktpdFdlYkFuaW1h
dGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwgZW5hYmxlZCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19
Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OndlYkFuaW1hdGlvbnNFbmFibGVkKF9PdXRfIEJP
T0wqIGVuYWJsZWQpCi17Ci0gICAgaWYgKCFlbmFibGVkKQotICAgICAgICByZXR1cm4gRV9QT0lO
VEVSOwotICAgICplbmFibGVkID0gYm9vbFZhbHVlRm9yS2V5KFdlYktpdFdlYkFuaW1hdGlvbnNF
bmFibGVkUHJlZmVyZW5jZUtleSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNVTFQgV2Vi
UHJlZmVyZW5jZXM6OnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChC
T09MIGVuYWJsZWQpCiB7CiAgICAgc2V0Qm9vbFZhbHVlKFdlYktpdFdlYkFuaW1hdGlvbnNDb21w
b3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmgKaW5kZXggMjQzN2IwZTc2Mjg5NTA2YzI2NDA0
ODg2YmQyYzAzZjU4MzI1M2M1MS4uMjEyOTA1Y2IxYmE2MDA5NDAzODY5NTM5MTc4YTNmZWE3MDNh
MzhlOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMu
aAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5oCkBAIC0yMzYs
MTMgKzIzNiw5IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgc2V0Q3VzdG9tRWxlbWVudHNFbmFibGVkKEJPT0wpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBtb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChfT3V0XyBCT09MKik7
CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldE1vZGVybk1lZGlhQ29u
dHJvbHNFbmFibGVkKEJPT0wpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKF9PdXRfIEJPT0wqKTsKLSAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZChCT09MKTsKICAgICAKICAgICAvLyBJV2ViUHJlZmVyZW5jZXNQcml2YXRl
NAogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRBcHBsaWNhdGlvbklk
KEJTVFIpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSB3ZWJBbmltYXRp
b25zRW5hYmxlZChfT3V0XyBCT09MKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKEJPT0wpOwogICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSB1c2VyVGltaW5nRW5hYmxlZChfT3V0XyBCT09MKik7CiAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldFVzZXJUaW1pbmdFbmFibGVkKEJP
T0wpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZXNvdXJjZVRpbWlu
Z0VuYWJsZWQoX091dF8gQk9PTCopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93
aW4vV2ViVmlldy5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcAppbmRl
eCBiNmEyODNjOTNlODgyYTNlMjFkNDE2OGM0YjMxY2I4NDlkMTVkMWFjLi4yZTI1YmU5NmIyYWQ0
NWI1ZjRlNWUzMTg4ZDYyYzE0ZTAyZTk5ZDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9XZWJWaWV3LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3
LmNwcApAQCAtNTI0NCwxMSArNTI0NCw2IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVy
ZW5jZXNDaGFuZ2VkKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICAgICAgcmV0
dXJuIGhyOwogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0
TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoISFlbmFibGVkKTsKIAotICAgIGhyID0gcHJlZnNQ
cml2YXRlLT53ZWJBbmltYXRpb25zRW5hYmxlZCgmZW5hYmxlZCk7Ci0gICAgaWYgKEZBSUxFRCho
cikpCi0gICAgICAgIHJldHVybiBocjsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKCEhZW5hYmxlZCk7Ci0KICAgICBo
ciA9IHByZWZzUHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVk
KCZlbmFibGVkKTsKICAgICBpZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwpAQCAt
NTI1OSwxMSArNTI1NCw2IEBAIEhSRVNVTFQgV2ViVmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFu
Z2VkKElXZWJOb3RpZmljYXRpb24qIG5vdGlmaWNhdGlvbikKICAgICAgICAgcmV0dXJuIGhyOwog
ICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0
aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkKCEhZW5hYmxlZCk7CiAKLSAgICBociA9IHByZWZz
UHJpdmF0ZS0+d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgmZW5hYmxlZCk7Ci0g
ICAgaWYgKEZBSUxFRChocikpCi0gICAgICAgIHJldHVybiBocjsKLSAgICBSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoISFlbmFibGVkKTsKLQogICAgIGhyID0gcHJlZnNQcml2YXRlLT5DU1NDdXN0b21Q
cm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCgmZW5hYmxlZCk7CiAgICAgaWYgKEZBSUxFRChocikp
CiAgICAgICAgIHJldHVybiBocjsKZGlmZiAtLWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xz
L0NoYW5nZUxvZwppbmRleCA0ZmE3MDk0N2MzODM4MmZjMDMwYzIxYWU3ZTZiZTI1ZTFiMjZlZTNl
Li44MzMwNzUyMWM4ODQyYjIwOGUyOGRmY2UzM2MyNDM1YWY2Y2JlZmM2IDEwMDY0NAotLS0gYS9U
b29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjQgQEAKKzIw
MjAtMDktMTYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CisKKyAgICAgICAg
UmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFNpbmNlIHdlIG5vdyBoYXZlIGEgc2luZ2xlIGFuaW1h
dGlvbiBlbmdpbmUsIHRoZSBydW50aW1lIGZsYWdzIHRvIG9wdGlvbmFsbHkgZW5hYmxlIHRoZSBX
ZWIgQW5pbWF0aW9ucyBlbmdpbmUgYXJlCisgICAgICAgIG5vdCBuZWVkZWQgYW55bW9yZSBhbmQg
YXJlIG5vdyByZW1vdmVkLgorCisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMu
Y3BwOgorICAgICAgICAoVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKToKKyAgICAgICAgKFRlc3RP
cHRpb25zOjp3ZWJWaWV3SXNDb21wYXRpYmxlV2l0aE9wdGlvbnMgY29uc3QpOgorICAgICAgICAq
IER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmg6CisgICAgICAgICogRHVtcFJlbmRlclRyZWUv
bWFjL0R1bXBSZW5kZXJUcmVlLm1tOgorICAgICAgICAoZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVy
ZXMpOgorICAgICAgICAoc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyk6CisgICAgICAg
ICogRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcDoKKyAgICAgICAgKGVuYWJs
ZUV4cGVyaW1lbnRhbEZlYXR1cmVzKToKKyAgICAgICAgKHNldFdlYlByZWZlcmVuY2VzRm9yVGVz
dE9wdGlvbnMpOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KIAogICAgICAgICBbRmxhdHBhayBTREtdIENoZXJyeS1waWNrIE1lc2EgdXNlLWFm
dGVyLWZyZWUgZml4ZXMKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRp
b25zLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcAppbmRleCAwNjQ1
N2RmZGZkZWVhNTAzMDRlMzMyZDBhMzE4MmY1YWJhNGFmODA1Li4wZGJmYWM5ZjNjODc0OTQyY2Q3
YjFkZWYxNDA4ODQ4NDMyZTQyNjRmIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9U
ZXN0T3B0aW9ucy5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3Bw
CkBAIC0xMjYsOCArMTI2LDYgQEAgVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6
c3RyaW5nJiBwYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHUKICAgICAgICAgICAg
IGR1bXBKU0NvbnNvbGVMb2dJblN0ZEVyciA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2
YWx1ZSk7CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiYWxsb3dDcm9zc09yaWdpblN1YnJlc291
cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMiKQogICAgICAgICAgICAgYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFs
dWUodmFsdWUpOwotICAgICAgICBlbHNlIGlmIChrZXkgPT0gImV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIikKLSAgICAgICAgICAgIGVuYWJsZVdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbiA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7
CiAgICAgICAgIGVsc2UgaWYgKGtleSA9PSAiaW50ZXJuYWw6c2VsZWN0aW9uQWNyb3NzU2hhZG93
Qm91bmRhcmllc0VuYWJsZWQiKQogICAgICAgICAgICAgZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllcyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1ZSh2YWx1ZSk7CiAgICAg
ICAgIGVsc2UgaWYgKGtleSA9PSAiZW5hYmxlQ29sb3JGaWx0ZXIiKQpAQCAtMTY3LDYgKzE2NSw1
IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9yVVJM
LCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiBib29sIFRlc3RPcHRpb25zOjp3ZWJWaWV3SXND
b21wYXRpYmxlV2l0aE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMmIG90aGVyKSBjb25zdAogewog
ICAgIHJldHVybiBvdGhlci5sYXllckJhY2tlZFdlYlZpZXcgPT0gbGF5ZXJCYWNrZWRXZWJWaWV3
Ci0gICAgICAgICYmIG90aGVyLmpzY09wdGlvbnMgPT0ganNjT3B0aW9ucwotICAgICAgICAmJiBv
dGhlci5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24gPT0gZW5hYmxlV2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uOworICAgICAgICAmJiBvdGhlci5qc2NPcHRpb25zID09IGpzY09w
dGlvbnM7CiB9CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5o
IGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAppbmRleCBjNWM4Yzg1OTkyZTFj
ZmYzNzUwODIxYzgxZmYyODQzZGQwOWViOTk3Li5kNzY2ODE3YjcwNWI0NjI1MGQyZWZmNTUzMzQ2
YTdkZDkzN2ViMzY2IDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9u
cy5oCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKQEAgLTI5LDcgKzI5
LDYgQEAKIAogc3RydWN0IFRlc3RPcHRpb25zIHsKICAgICBib29sIGVuYWJsZUF0dGFjaG1lbnRF
bGVtZW50IHsgZmFsc2UgfTsKLSAgICBib29sIGVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbiB7IHRydWUgfTsKICAgICBib29sIHVzZUFjY2VsZXJhdGVkRHJhd2luZyB7IGZhbHNlIH07
CiAgICAgYm9vbCBlbmFibGVJbnRlcnNlY3Rpb25PYnNlcnZlciB7IGZhbHNlIH07CiAgICAgYm9v
bCB1c2VFcGhlbWVyYWxTZXNzaW9uIHsgZmFsc2UgfTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbSBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21h
Yy9EdW1wUmVuZGVyVHJlZS5tbQppbmRleCA0NjNjOWI5MmVlYjVlZWU5N2ExYTcyMGRlZjg1ZmM2
MGQ0ODc4NTNjLi42OTE1N2M0MzAwMWM1NDQxNDMwYjExMTdjZGEzYWNjNDcwMjc0ZTg5IDEwMDY0
NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KKysrIGIv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCkBAIC04MTQsNyArODE0
LDYgQEAgc3RhdGljIHZvaWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoV2ViUHJlZmVyZW5j
ZXMqIHByZWZlcmVuY2VzKQogICAgIFtwcmVmZXJlbmNlcyBzZXRNZWRpYVByZWxvYWRpbmdFbmFi
bGVkOllFU107CiAgICAgLy8gRklYTUU6IElucHV0RXZlbnRzCiAgICAgW3ByZWZlcmVuY2VzIHNl
dEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZDpZRVNdOwotICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJB
bmltYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJBbmltYXRpb25z
Q29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0V2Vi
QW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2Vz
IHNldENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkOllFU107CkBAIC05NzksNyAr
OTc4LDYgQEAgc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhjb25z
dCBUZXN0T3B0aW9ucyYgb3B0aW9ucykKICAgICBwcmVmZXJlbmNlcy5pc1NlY3VyZUNvbnRleHRB
dHRyaWJ1dGVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVJc1NlY3VyZUNvbnRleHRBdHRyaWJ1dGU7
CiAgICAgcHJlZmVyZW5jZXMuaW5zcGVjdG9yQWRkaXRpb25zRW5hYmxlZCA9IG9wdGlvbnMuZW5h
YmxlSW5zcGVjdG9yQWRkaXRpb25zOwogICAgIHByZWZlcmVuY2VzLmFsbG93Q3Jvc3NPcmlnaW5T
dWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzID0gb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFsczsKLSAgICBwcmVmZXJlbmNlcy53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb247CiAgICAgcHJlZmVyZW5jZXMuY29sb3JGaWx0ZXJFbmFibGVkID0gb3B0
aW9ucy5lbmFibGVDb2xvckZpbHRlcjsKICAgICBwcmVmZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NT
aGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hh
ZG93Qm91bmRhcmllczsKICAgICBwcmVmZXJlbmNlcy53ZWJHUFVFbmFibGVkID0gb3B0aW9ucy5l
bmFibGVXZWJHUFU7CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJl
bmRlclRyZWUuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNw
cAppbmRleCBhNzI3MzRmNmY0ZmFmNmFkZTk1N2NjM2NiMzQzZDU2N2U0ODdkMzNlLi5kNzQ3MTMx
ZjkyYmRmZGZiYzM3YTkxYTNmN2U4ZmJiMmY0NmIxNjU5IDEwMDY0NAotLS0gYS9Ub29scy9EdW1w
UmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKQEAgLTc5Niw3ICs3OTYsNiBAQCBzdGF0aWMgdm9p
ZCBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyhJV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2Vz
KQogICAgIHByZWZzUHJpdmF0ZS0+c2V0VmlzdWFsVmlld3BvcnRBUElFbmFibGVkKFRSVUUpOwog
ICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTT01WaWV3U2Nyb2xsaW5nQVBJRW5hYmxlZChUUlVFKTsK
ICAgICBwcmVmc1ByaXZhdGUtPnNldFJlc2l6ZU9ic2VydmVyRW5hYmxlZChUUlVFKTsKLSAgICBw
cmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJp
dmF0ZS0+c2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKFRSVUUpOwog
ICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVk
KFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVl
c0VuYWJsZWQoVFJVRSk7CkBAIC05MDksNyArOTA4LDYgQEAgc3RhdGljIHZvaWQgc2V0V2ViUHJl
ZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhJV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzLCBjb25z
dAogewogICAgIENPTVB0cjxJV2ViUHJlZmVyZW5jZXNQcml2YXRlOD4gcHJlZnNQcml2YXRlIHsg
UXVlcnksIHByZWZlcmVuY2VzIH07CiAKLSAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQob3B0aW9ucy5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb24pOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChv
cHRpb25zLmVuYWJsZU1lbnVJdGVtRWxlbWVudCk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRLZXln
ZW5FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZUtleWdlbkVsZW1lbnQpOwogICAgIHByZWZz
UHJpdmF0ZS0+c2V0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQob3B0aW9ucy5lbmFibGVNb2Rl
cm5NZWRpYUNvbnRyb2xzKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xh
eW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCBhOWFlZDc2NDliNDhkODk0YWZmYTk0YTA1YjI0ZGJk
ODg4NDIxYzFhLi42MjMyZWUyNTYyZjFmOWJmOGUyOWY3ZWY1MDlmZDIzOWQ1Nzc3YTU4IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsOTEgQEAKKzIwMjAtMDktMTYgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjYwOAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZSBhbnkg
dXNlIG9mIG5vdy1yZW1vdmVkIHRlc3RpbmcgbWV0aG9kcyBhbmQgc29tZSBydW50aW1lIGZsYWdz
IGZyb20gbGF5b3V0IHRlc3RzLgorCisgICAgICAgICogYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2Rp
bmctdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogYW5pbWF0aW9ucy9yZXNvdXJjZXMv
YW5pbWF0aW9uLXRlc3QtaGVscGVycy5qczoKKyAgICAgICAgKHBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1k
aXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbDoKKyAgICAgICAgKiBpbXBvcnRlZC9ibGluay90cmFu
c2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlm
cmFtZS1pbm5lci5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIHRyYW5zaXRpb25zL2JhY2tncm91
bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9iYWNr
Z3JvdW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvYmxlbmRtb2Rl
LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10
cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJh
bnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlv
bnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9kZWxheS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ZsZXgt
dHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJp
bmctdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmct
ZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJh
bnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFu
ZC1pbml0aWFsLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRp
b25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVz
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlv
bnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRpb25zLmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sOgor
ICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgICogdHJh
bnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmct
bGF5b3V0LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmctdGV4dC1z
aGFkb3ctdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3N2Zy10cmFuc2l0
aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRpb24u
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0u
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWw6CisgICAg
ICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRp
c3BsYXktbm9uZS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5p
bWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbDoKKyAgICAgICAg
KiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWw6Cisg
ICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5n
LXByb3BlcnR5Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVu
dC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWw6CisgICAgICAg
ICogd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNz
cy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25z
L2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFs
LWNyYXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVj
dC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWw6CisgICAgICAgICog
d2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlv
bnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWw6Cisg
ICAgICAgICogd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbDoKKyAgICAg
ICAgKiB3ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92
aW5nLXByb3BlcnR5Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1h
bmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbDoKKyAgICAgICAgKiB3ZWJh
bmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxl
LWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sOgorCiAyMDIwLTA5LTE1ICBSb2IgQnVpcyAgPHJi
dWlzQGlnYWxpYS5jb20+CiAKICAgICAgICAgRml4IGxhenkgaW1hZ2UgbG9hZCBwYWludGluZwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5n
LWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1lbmNvZGluZy10
aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA0MDJmOThlYTMxMTVhYTFkNzc2ZmFmODhlZWRiOTFh
Mjg3NTFmOTczLi4wOGViYzQ0YzRkMTZkYTY5MjVkNjVlZGMxMzE5NGQ4YWQzMjU2NDc1IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVu
Y3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1lbmNvZGluZy10
aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPiA8IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+
CiAgICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9yZXNvdXJj
ZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVz
b3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKaW5kZXggMThhNWEwMTI5ZmY3ZjJhZTI0
YmQzM2UzMTllNjA2ZjU3OWFhNDE5ZS4uNmRlMDhkMzg1NTE4NDQzNjcxMTdmMDA3MjI1NzA5MDNl
YWY1YmNmZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5p
bWF0aW9uLXRlc3QtaGVscGVycy5qcworKysgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL3Jlc291
cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC01MTQsMTEgKzUxNCw2IEBAIGZ1bmN0
aW9uIGNoZWNrRXhwZWN0ZWRWYWx1ZUNhbGxiYWNrKGV4cGVjdGVkLCBpbmRleCkKIAogZnVuY3Rp
b24gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoYW5pbWF0aW9uTmFtZSwgdGltZSwgZWxl
bWVudCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlbid0IG9wdGVkIGludG8gQ1NTIEFuaW1hdGlvbnMg
YW5kIENTUyBUcmFuc2l0aW9ucyBhcyBXZWIgQW5pbWF0aW9ucywgdXNlIHRoZSBpbnRlcm5hbCBB
UEkuCi0gICAgaWYgKCdpbnRlcm5hbHMnIGluIHdpbmRvdyAmJiAhaW50ZXJuYWxzLnNldHRpbmdz
LndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGlu
dGVybmFscy5wYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChhbmltYXRpb25OYW1lLCB0aW1l
LCBlbGVtZW50KTsKLQotICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBXZWIgQW5pbWF0aW9ucyBB
UEkuCiAgICAgY29uc3QgYW5pbWF0aW9ucyA9IGVsZW1lbnQuZ2V0QW5pbWF0aW9ucygpOwogICAg
IGZvciAobGV0IGFuaW1hdGlvbiBvZiBhbmltYXRpb25zKSB7CiAgICAgICAgIGlmIChhbmltYXRp
b24gaW5zdGFuY2VvZiBDU1NBbmltYXRpb24gJiYgYW5pbWF0aW9uLmFuaW1hdGlvbk5hbWUgPT0g
YW5pbWF0aW9uTmFtZSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jb250
ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWwgYi9MYXlvdXRUZXN0
cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUu
aHRtbAppbmRleCBjMWM2ZmQ2NzJjNGQwZWY3OWY4YmU3YmE4ODE5NDlmYjI2ZDk0Yzk5Li5hNWNl
MzQyZDUyZWJmYjAwNWZkMDQxYjc4OGZiYjExNmIxNjdmNmRmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJh
bWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nz
cy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBI
VE1MPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9ZmFsc2UgXSAtLT4KKzwhRE9DVFlQRSBIVE1MPgogPHNjcmlw
dD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAgIHRlc3RSdW5uZXIuZHVtcEFzVGV4dCgp
OwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVz
b3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUtaW5uZXIu
aHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRpb25zL3Jlc291cmNlcy9v
cGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1lLWlubmVyLmh0bWwKZGVs
ZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDFjYmM4YmZjNzg0M2MzYmI5ODkzMmZjOWVj
OTk3M2JjNTA3MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0t
IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNp
dHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUtaW5uZXIuaHRtbAorKysgL2Rl
di9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwhRE9DVFlQRT4KLTxodG1sPgotPGhlYWQ+Ci08c3R5
bGU+Ci0gICAgI2JhY2tncm91bmQgewotICAgICAgICB3aWR0aDogMjAwcHg7Ci0gICAgICAgIGhl
aWdodDogMjAwcHg7Ci0gICAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbjsKLSAgICB9Ci0gICAgLm92ZXJsYXkgewotICAgICAgICB3aWR0aDogNTBw
eDsKLSAgICAgICAgaGVpZ2h0OiA1MHB4OwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2Jh
KDI1NSwgMjU1LCAyNTUsIDEpOwotICAgICAgICAtd2Via2l0LXRyYW5zaXRpb246IG9wYWNpdHkg
MXM7Ci0gICAgfQotCi0gICAgI3BvcHVwIHsKLSAgICAgICAgd2lkdGg6IDIwcHg7Ci0gICAgICAg
IGhlaWdodDogMjBweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwotICAgICAgICBi
b3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogLXdlYmtpdC10
cmFuc2Zvcm0gMXM7Ci0gICAgfQotCi0gICAgLnRyYW5zcGFyZW50IHsKLSAgICAgICAgb3BhY2l0
eTogMDsKLSAgICB9Ci0KLSAgICBbaGlkZGVuXSB7Ci0gICAgICAgIGRpc3BsYXk6IG5vbmU7Ci0g
ICAgfQotCi0gICAgLm92ZXJsYXkudHJhbnNwYXJlbnQgLnBhZ2UgewotICAgICAgICB0cmFuc2Zv
cm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMHB4KTsKLSAgICB9Ci0KLTwvc3R5bGU+Ci08c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgotICAgIGZ1bmN0aW9uIHJ1
blRlc3QoKQotICAgIHsKLSAgICAgICAgdmFyIHNvbGlkX2NvbG9yX292ZXJsYXkgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgic29saWRfY29sb3Jfb3ZlcmxheSIpOwotICAgICAgICBzb2xpZF9j
b2xvcl9vdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7Ci0KLSAgICAgICAgdmFyIHBv
cHVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwIik7Ci0gICAgICAgIHBvcHVwLnJl
bW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7Ci0KLSAgICAgICAgLy8gTk9URTogVGhpcyBpcyBhIGhh
Y2t5IHdheSB0byBmb3JjZSB0aGUgY29udGFpbmVyIHRvIGxheW91dCB3aGljaAotICAgICAgICAv
LyB3aWxsIGFsbG93IHVzIHRvIHRyaWdnZXIgdGhlIHdlYmtpdCB0cmFuc2l0aW9uLgotICAgICAg
ICAvLyBTZWUgY3JidWcuY29tLzMyNDY4NQotICAgICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LnNj
cm9sbFRvcDsKLSAgICAgICAgc29saWRfY29sb3Jfb3ZlcmxheS5jbGFzc0xpc3QucmVtb3ZlKCd0
cmFuc3BhcmVudCcpOwotCi0gICAgICAgIC8vIGR1bXAgdGhlIHBpeGVsIGluIHRoZSBtaWRkbGUg
b2YgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKLSAgICAg
ICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZm9yY2VDb21wb3NpdGluZ1VwZGF0ZShkb2N1bWVudCk7
Ci0gICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnBhdXNlQW5pbWF0aW9ucygwLjUpOwotICAg
ICAgICB9Ci0gICAgICAgIHRyaWdnZXJQaXhlbFJlc3VsdHMoKTsKLSAgICB9Ci0KLSAgICBmdW5j
dGlvbiB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCkKLSAgICB7Ci0gICAgICAgIHBhcmVudC5wb3N0TWVz
c2FnZSgiVHJpZ2dlclBpeGVsUmVzdWx0cyIsICcqJyk7Ci0gICAgfQotCi0gICAgd2luZG93LmFk
ZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBydW5UZXN0LCBmYWxzZSk7Ci08L3NjcmlwdD4KLTwvaGVh
ZD4KLTxib2R5PgotPGRpdiBpZD0iYmFja2dyb3VuZCI+Ci0gICAgPGRpdiBpZD0ic29saWRfY29s
b3Jfb3ZlcmxheSIgY2xhc3M9Im92ZXJsYXkgdHJhbnNwYXJlbnQiIGhpZGRlbj10cnVlPgotICAg
ICAgICA8ZGl2IGlkPSJwb3B1cCIgY2xhc3M9InBhZ2UiIGhpZGRlbj10cnVlPjwvZGl2PgotICAg
IDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWwK
aW5kZXggNjAxY2Q1YTg3ZjIwNDEwNjJmMWE5ZDA5ODAwOWM1NDdmNTJmMzQ1ZS4uZDkxNGZjYmJl
ODFkNDdjZGJiMWFlZWJhY2I3OTVhMzc5MzFhNGExYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBhODM3ZTA1N2RiYzExOGM3
NGFiYmI2MDNlZWM1NTZlN2M4ODdlNWE4Li5iYTQwMGNhYzllYmZlMWNhMTBlMjkwYTc5OGU5OWQ3
MmIzNDg4MGJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5k
LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3Vu
ZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRpb25zLmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCA4
OTdjYjQ3ODkwZWNmNDhlMWZkMDA1ODhkNGI4OGM5MTcyYjI2MTAzLi5hNWJmYTI3ZDNhZDMyMTk5
MjA4OTIxNjE1MzBiNWQ3M2UxOWQ1Njk2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxo
dG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ib3JkZXIt
cmFkaXVzLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1y
YWRpdXMtdHJhbnNpdGlvbi5odG1sCmluZGV4IGI4YTNmYjUzZTdiZDZiYjA2ZDE5OWQ5NTVlNDAz
YzkxMzcwN2Q1ODkuLjU2M2JhOWM4ZmY0ZjhhYzJkYjNkNTE0YWIxYjM2MTYyNGNjZTMzMGMgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlv
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNp
dGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKaW5kZXgg
ZmYyM2ZhMDQ1MTIzZWQzMTA1N2U4MjdkNzFhYWRjOTg4ZDIxMmQ3OC4uYzFmYWE1Y2Y0MjEyMTgw
MzViNDEwZTJhZWMyYmQ2MjNiNzQwYTc2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYjU1ZWRmYjdlYTg0NTU1ZDhhYzQ0YmNh
ZmZjYTg0MGM3NTc4ZWY1Ni4uNWU2NjQ0YTg4NGZjY2Q2MDdiYjc2MGIxOThkOTkwZjcxZTI5YWZk
YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRp
b25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbAppbmRleCAzYzdlMjlmMTk3MDEy
ZGZkZWE0MzA0M2NjMDQyYTcyMWRlMDgxM2UxLi5mZGUxZjE3M2FiYzk2YjkxYWE0NmJlZjk3YThm
OTA5ZWNmN2QwMWI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRy
YW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRp
b24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbAppbmRleCAzM2M1
OTgwZTY4N2FiM2UwMmU3ZTNmMjU3NzZjODczZmQ1ZGU4YWI5Li5hNDkyZTcxMzM5NDQwMGMyNmQz
NDdlODhhZTFkMTNjMzE3ZTNkYzdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11
bHRpcGxpZWQuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24t
cHJlbXVsdGlwbGllZC5odG1sCmluZGV4IGM3M2ZkNGFhODNjZmFkOTViNTBiNmU2MzU5MWU5YWU2
Nzk4OTU2ZGQuLjU3YzYzZWM5YThjMWFlMDdkYWQ4YzM3ODVkZjNiODE0NGI5MjhmMjAgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlw
bGllZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24t
cHJlbXVsdGlwbGllZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91
bmRpbmcuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91
bmRpbmcuaHRtbAppbmRleCA2ZTc1NmJmMzM3ODNmZDcyMWYzM2E2N2M4ZmJkNmYyOGYxNTVlNWIw
Li5jYWFhMTE1NzlmOWIwZGY4NmUwODE5NGMwZDkwZjFkZGY4YjUwMzE3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbAppbmRleCA3NmU5ZGIy
NmEzYjE0ZDRhMzhhM2NkYWYwMGVmNjZiZmY4ZWRkYjY0Li5iOGQ3MGEyNzkzNTE1NWJlYWIyOGU3
ODVjYWVmOGYyNTM4ZGM5NTZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
cm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUt
Ym9yZGVyLWltYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJv
cmRlci1pbWFnZS5odG1sCmluZGV4IDRkYmRmN2E2YjEzZjhhZWUwM2E3Nzg5YjM2OGMxMDhlM2Qx
YTRkZGYuLjg3ZGMwMDdlZGY1ZmI3NmZmMTQ1MWNhOWFmZjhjYjljYWFhNDE4OTUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwKaW5kZXggYjc2ZWI2
NWFlZDMzYzg0NmM0ZGNlYzQ1Yjk3ZDU0MWEwMzhjZTdiYS4uNzQ3NGY2NmQxMTZjNmYyYTIzYTJh
ZjYzM2E1MDQ0ZTI4YzJiNzY3MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1s
PgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZs
b3c6IENvbG9yczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKaW5kZXggNjZmZWJhY2ZmOTdlNDJh
NjczYjFkYTU5YWFjMGY2MzcxZjllYzVhZC4uMWI1ZGRhZmRmNjQ4ZDlmMTBmMGVjOGYyMGQ5NDli
YTM2MTZmZTg0ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6
aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhZG9jdHlw
ZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+CiA8aHRt
bD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxvdzogTGVu
Z3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1i
ZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJp
Yy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKaW5kZXggYTk5YTRkYmE3MzZhZmIyZjk1ODA1
YWU4ODg1ZTAyYmUwYzBhNzNmOC4uMGJjY2E4OGU4NzE3ZGFkZjU5ZTNjZWJkMDY5MTljZWFjNGEy
YTc2ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92
ZXJmbG93LXNoYWRvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJl
emllci1vdmVyZmxvdy1zaGFkb3cuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAg
PGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxvdzogU2hhZG93czwv
dGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXIt
b3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbAppbmRleCA3MjAyNDY4MWIzYzNhN2NkZDE5
YTI4ZjRjMjgzOGU2MDRhZDViN2NiLi4zNTU1MzAzOWZjOWRhOGRiNmVlYTMyOTU2ZDkxYWMxZTY0
MmNhMWQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXIt
b3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRv
Y3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgog
PGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6
IFNWRyBMZW5ndGhzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbAppbmRleCA2NjA5NzI1
MzRkYzY2MmJjM2I4MGZmNzY0OTM2ZmZiNGFkYTVmMjY4Li42NTI5MTEyYjExZDY0ZjFlYzQwYWJh
YzU3NWE2ODY4MTU0MDVkNTc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5
cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVl
IG92ZXJmbG93OiBUcmFuc2Zvcm1zPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDc5ODNmZGNlZDIyNjM3
MGUxYTM0NDkwMTNlMGM5ODVlMGQ2ZTI4NmMuLjM1MDg3YzM2NGEzZjFjOThlNDQwZDlhNzk5ZTBi
ZGQwY2JmMDAwYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1bHQt
dGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVmYXVs
dC10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbAppbmRleCA5OWMzMWVhODdkYTA5MWQ1ZDY3
ZGE1OWYxMWIzZjI2OTNhMGZmNGMwLi4zYTAyYjYyNzk4MTA1YTM2ZDYwZWVhMTgyMWFmNzAzODBl
Y2NlYTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sCisr
KyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFuc2l0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFuc2l0aW9ucy5odG1sCmluZGV4IDlm
YzQ2NjAzN2E1Mzk1MmZkYjkwMGRjMGU5NjNmNDM1MmU5MTY5NDUuLjYxZjQ1NmFjZTkxNzMwZTdi
MjRjZmY2YzU0MThmNzIwNWQ3NTNjZDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9m
bGV4LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVyaW5nLXRy
YW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmlu
Zy10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2RjZDIwZjE1NzQ5MzdkOWFiY2I3NjZmMmU5MjA3ZGM3
OGZkY2M3OC4uMDNmOTUyZGExYjczM2U4NDk2OTE0YzVhMTc2OWE4MDE3YmM2YzhmZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVyaW5nLXRyYW5zaXRp
b24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmct
dHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24u
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRt
bAppbmRleCAzMGZlY2M2ZDUxZDRjMDZlNjRlYzdhZWYwMDA5ODUwNDZiYjVmMDhhLi5lOGIxNjIx
MGVhNzY1N2U0NzBiMGRhMjgxNDAzOWY4NTUyMmE0MzA5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sCmluZGV4IDdkNDczZTkxMjE0NjU4
M2Y4MTEwOTNkZTI5N2JlM2FhZjUzOGJiNDguLjllNjZjZDRmOTI2MTRlMWU1MDdmMmNmYTY0MjNm
N2QyZTYxMDA5ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ludGVycnVw
dGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvaW50
ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBo
dG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9sb25naGFuZC12
cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hh
bmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbAppbmRleCA2MDk5MzNmNjA0YTcxNTI4Y2VmNDMx
YTdiYTQ5NThiYTcyZTQ3OTVmLi4yMDJlNjRkNjQ0ZGY1YzhkNWY1ZTRmOTkxODdiNDc3YTNhOGZi
ZDFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9sb25naGFuZC12cy1zaG9y
dGhhbmQtaW5pdGlhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5k
LXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYmM3
YzcxODNlYWYzZjlkOWI0YzA2ODdkYmI5NzY0ZDNhOTcyZjUwOC4uMGMzZDM5YWI5ZjIxYWQxZmIw
OTc4NjJmMDNlZDEyZWU1ZmNhMTZiMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvbWFzay10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21h
c2stdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10
cmFuc2l0aW9ucy5odG1sCmluZGV4IDEyMDQxMTdiY2MzMjBjMTJhODFlZTJiZWVlMjI4ZTQxMWY5
OWI5YzcuLjlkZGYzOTM4YTI5YmYzZTEwYzhjOGI2Yjc0NmUzMWIwM2Q3NDI2MGIgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRp
b25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWln
aHQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXN0
eWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5
bGVzLmh0bWwKaW5kZXggZTJlNWNiMDcyOWQ4MTNkOTg0NjBiODk4NGE0MTIwYjRmYjllZGUyNy4u
ODcyM2MyNzQxNjg4YmVkNDkwM2M3OGM4Mjk2ODRiNDVkNGNjNzYwMSAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKaW5k
ZXggY2I2ZDM0ZDg0NzViZmE2MTEzNmIzNjMzOGJiYzc4N2UwZThlYzUwOC4uNjg3ZDEwZjEyMDhh
ODM1Y2QyNWZlOTAwOWQ0NTM3ZDRhMDhjNjcwNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvbWl4ZWQtdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5o
dG1sCmluZGV4IDI0ZmIxMWZlZjRlMTg3MmYxNDJiMGY1NzJkZjU1MWMwNzM5M2IxYmQuLjMzMzIz
NjhkNmU0NDg1MjBmYjgxNjgzN2Q0OWY3Yzk3OGU0NDg5ZmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9taXhlZC10eXBlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPHN0eWxlPgogI2JveCB7
CiAgICAgd2lkdGg6IDEwJTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21v
dmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1h
ZnRlci10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2VkMmQ1YTIyMjI4MDcwMTdlNTM2OWFkMDFlMTNk
YjYxNWYzZTcyZi4uZGM0NDU4ZjJkNTI3Njc2YzhjZDczMmUwZTJiZWM5NjBlZDhiM2I2ZiAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRpb25z
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUt
dHJhbnNpdGlvbnMuaHRtbAppbmRleCAyMTNlMjFhZGNlZDY2YTdhYWQ2N2VjOGI1Zjk1NjhjN2Y3
YmVmZjI0Li4xNGQ3NTFjNjQ5NzMzYzFjMzBhMDdiZGM0ZmZiOGVlMzYxYzUyMDI5IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJh
bnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNr
Z3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQt
dHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tn
cm91bmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiMjllZTczZDM1MGQ5NWIzN2I3MjE3MTg2ZWFh
OWJjMjkzMTgwNmM1Li41MDMwNjdjMTY0Y2E2MDc5NTdhZDU4ZjM2NmRmZmRhMjc0ZTc1ODU3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRy
YW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFj
a2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9u
cy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9u
cy5odG1sCmluZGV4IDM5MjNkOTNjNmQ4NDUzNGU1ZjdkNzhlYjlmM2UzNmFkYTRmZDMwMmMuLjVj
YmU2OWZjMDQ3NTcyZWFiZTYwYTA0ODdmMTUzNjVhNGNhOWE5MTkgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmlt
ZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURP
Q1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCmluZGV4IDM0YTBhZDI2M2Nh
OWYxNThkNzQ5OTA1YTRjNWRmYzY1NTFlOTNlYjYuLjRhOWQ0ZWM1NjRmMzNjNTU0NzMzMTdlMTE4
ZjRmOTA3ZWNlNzUwODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRp
cGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXku
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWwKaW5kZXgg
Yzc1YmU3ZjNjYzZkNTkzY2ZkMTA2MmE3NzU2NTc2YjViYWE2YTZiNi4uZDMzZTRiNTc2MGY1NTNj
N2NjZDcwYjdkNGM3ZDgzNjY1NTNkMWY0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9u
ZWdhdGl2ZS1kZWxheS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiAg
IDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJh
bnNpdGlvbi16aW5kZXguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJh
bnNpdGlvbi16aW5kZXguaHRtbAppbmRleCBkODYzNzA1OWVmNzBmZTdhMjJlYjBjZDIwOTU2ZTdh
YmRkODc3MThlLi44NjJiYTAyYjE1ZjYyZWIzNDI4N2ZhNThmNDRjYjVlYjQ3ZjljOWI2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24temluZGV4
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9uLXpp
bmRleC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVs
cGVycy5qcyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRl
c3QtaGVscGVycy5qcwppbmRleCA3ZTc5ZDBjOWUxYjQ5YThlNzgxNjkzZTg0YmZmNDA5MTgzMjVi
ZmM2Li5mMzU3MzFiNjVmYTRjNzUyZmQxMjYwMmQ3MDFmYzA5Yjg2MGQwN2VhIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBl
cnMuanMKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24t
dGVzdC1oZWxwZXJzLmpzCkBAIC0zODEsMTQgKzM4MSw5IEBAIGNvbnN0IHByb3BlcnRpZXNSZXF1
aXJpbmdQcmVmaXggPSBbIi13ZWJraXQtdGV4dC1zdHJva2UtY29sb3IiLCAiLXdlYmtpdC10ZXh0
LWZpCiAKIGZ1bmN0aW9uIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudCh0cmFuc2l0aW9u
UHJvcGVydHksIHRpbWUsIGVsZW1lbnQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2ZW4ndCBvcHRlZCBp
bnRvIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgYXMgV2ViIEFuaW1hdGlvbnMs
IHVzZSB0aGUgaW50ZXJuYWwgQVBJLgotICAgIGlmICgnaW50ZXJuYWxzJyBpbiB3aW5kb3cgJiYg
IWludGVybmFscy5zZXR0aW5ncy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkp
Ci0gICAgICAgIHJldHVybiBpbnRlcm5hbHMucGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50
KHRyYW5zaXRpb25Qcm9wZXJ0eSwgdGltZSwgZWxlbWVudCk7Ci0KICAgICBpZiAodHJhbnNpdGlv
blByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4KSAmJiAhcHJvcGVydGllc1JlcXVpcmluZ1ByZWZp
eC5pbmNsdWRlcyh0cmFuc2l0aW9uUHJvcGVydHkpKQogICAgICAgICB0cmFuc2l0aW9uUHJvcGVy
dHkgPSB0cmFuc2l0aW9uUHJvcGVydHkuc3Vic3RyKHByZWZpeC5sZW5ndGgpOwogCi0gICAgLy8g
T3RoZXJ3aXNlLCB1c2UgdGhlIFdlYiBBbmltYXRpb25zIEFQSS4KICAgICBjb25zdCBhbmltYXRp
b25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zKCk7CiAgICAgZm9yIChsZXQgYW5pbWF0aW9uIG9m
IGFuaW1hdGlvbnMpIHsKICAgICAgICAgaWYgKGFuaW1hdGlvbiBpbnN0YW5jZW9mIENTU1RyYW5z
aXRpb24gJiYgYW5pbWF0aW9uLnRyYW5zaXRpb25Qcm9wZXJ0eSA9PSB0cmFuc2l0aW9uUHJvcGVy
dHkpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUt
dHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUt
dHJhbnNpdGlvbnMuaHRtbAppbmRleCA3MDg4MWZlOTAyMWM4OTUwMTEwNTNmNDJmMWNiYmFhYzQz
Mjg2MjRkLi5hZWZjOWEwNTM4ZmViMDRmODNhZTE1ZTQ4YjI1MjM5OWRkODE2NWYxIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRpb25zLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9u
cy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMu
aHRtbAppbmRleCAzNWM5ZTMyOTFmYWExMjYyMjJkNDQxMGUyYTJmZTNlNzQ0OWU3ZjljLi5mYWE3
NDVjMWIxZTdlMWEzOTFkNjI0Y2ViMWY1MTU0YzNkMDA4NzI4IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggZDMyMmI0ZTFm
NDFjNTVlMDRkMzA5OTM3ZmRkY2JiMTE2NWY5OTdjYy4uYjU1MWEyY2JjNzY0YmNlMmVjZmRiNTcx
NjJiNGExN2EyNGQzMTZkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hv
cnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hv
cnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48
IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxo
ZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1
bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rp
b24uaHRtbAppbmRleCAzZWU1NWUwMGE0Y2NjMjdkYTQ3Nzk1NTdjYTNmOTZmZTcwZWNiZmVmLi5i
Yjk2MmJjYjk3MDQzMjI5NjI5Yjg0YTkyZTRhMGNlMDU4MDE1NDFlIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCmluZGV4IDE0NWQ4M2EwMmIwMjJjNjFlNmZh
ODhkOTQ2NzAzZmJhYTRhYTE5NTEuLjAwNThhYjVkMTQxNmRhNGI3Y2RlYmJkMmQxNGVhZDI4NjBm
N2JjYmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJh
bnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJh
bnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKaW5k
ZXggM2ZjYWQzODgwNmNhNjAwN2JhNzhmNWYwYjQyMDI4MDE1NDIzYTY1Zi4uNTc5N2U1ZWRlM2Rl
YWRkNzJkM2MzYWEzNTE1NmExMmExMDRjN2FhYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbAppbmRleCA4ZjNkODJmNGU3NWQzNGQ1YWI2ZmIz
ODdiNDNlZDhiMzViOGVjNGMxLi5hYTM5ODgwNzhmYzllZGNhNmUyMGUyMjU4ZjEzZWM5ZTE5ZTlk
ZTc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxo
ZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0
LWluZGVudC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWlu
ZGVudC10cmFuc2l0aW9uLmh0bWwKaW5kZXggNDc0NGI1ODVjZWVmYjgxNDVlYjJlNDljNzk2MDFh
NjE5MzFkZDFlMS4uMTZmOGFmMTg4MmE1YTc2Y2FkM2NmNzM1NDRhZjU5M2E5ZjIwMDcxYyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRpb24u
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCmluZGV4IDBm
OWM0ODczNGRkZmVkY2Y2ZmNmZmI3ZTM5Nzg5MDU4YWViODE1NDIuLjBkM2YzM2VkMTUyNzkzNDAz
MTU5YzMyMjYwZDJiMmZkODAyZDYzNWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAppbmRleCA4NmRlYTdlMGZhNWViZDM1NjdiYzIx
NDA4YzA3N2YyYTQ3MjgyYTI3Li5iZjZkMzBkZDNkYTZhMjhjNzgxNTgwZDY0MWY3YmQyYzJlYzBh
OTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlz
dC1uby1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1v
cC1saXN0LW5vLW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZl
bnQtcmVuZGVyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVu
ZC1ldmVudC1yZW5kZXJpbmcuaHRtbAppbmRleCAwMDdjZThkZDA1ODUzNTY3MjdkZTkxNjUxNWZi
YjNjYzQyN2IxN2JkLi45NTlhZmQ2MGQwOWIwMTFiY2UzYWUxMDZkNjc5Y2E5YjZkMGMzYTlmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1y
ZW5kZXJpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVu
ZC1ldmVudC1yZW5kZXJpbmcuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10
ZXN0LXRyYW5zZm9ybS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1o
aXQtdGVzdC10cmFuc2Zvcm0uaHRtbAppbmRleCAzZDMyOWY0NjAyMTk2YWExZjQ5MzQwMDg4MmM4
ODgwY2Y0NTgyMzdjLi5lZjgwNmM3MTFhMWUxNWFiZGQzNzk2YzVhNTg3MWI2OTEyZGM3ZDM4IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0LXRy
YW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0
LXRlc3QtdHJhbnNmb3JtLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVz
dC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1s
CmluZGV4IGQ5ZGY4NWMxNDQ3ZjA5YWRlNTJhYWE0MmIwMWYyMjM4Y2JjYmUzYzcuLjgzYTYwYTZl
MmU1NTNmMzdhN2Y1OWU2NzIxYjk4NWJlZDczYTAxNjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sCmluZGV4IDkzZTA0ZjJhMzI4ZmYyY2RhMTY1NmE0
MzQ5MTA0ZjIxNDIxMDNhYjAuLmZjMmNlOTk1MTBhZGU3MmQ2Y2U4MTU2OTE3NDViOTkwMDgwYTY4
MmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taW4tZGVs
YXktcGhhc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWlu
LWRlbGF5LXBoYXNlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29udGVudC5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29udGVu
dC5odG1sCmluZGV4IDFmMDNlZWE3NzQ5NmY3YjczZmFlYTdmMmMwY2M3ZDY3ZDg0YTJiYWIuLjNj
NDcyOTQ5MTY3ZDY4MzIyYTI3MzcxZWEwNzFmMjc2MTFmNjUzNjkgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0
aC1jb250ZW50Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbApp
bmRleCA2ODczMjI5ZDE0ZDc5NDYzY2UwZjQ0ZGY0NDkwYWI0OTg3ZGNiYzNjLi5kZjA5ODlkOWY2
NGZhN2RlNGU0ZWIzNTA4M2FlOGQ0NDliZWY0NmY2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXggOTExNzQ5MmIw
YmIzYTEyYjgxMDM3ZWQyMjlmYzU5ZTBiNmVjZmQ5OS4uMDUwYzUyZDMxNzFjODYyOTZmYzI3NjU1
Y2IxMzQzYTU0NGYxOWJmNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1s
CmluZGV4IDRlMzdlMTY3ZjQxZjEyM2JlZGVkYjAyODBlMjFiMDBjOTE2YjA4ZWYuLmQ4NDU5Yjcx
ZDRjODNhOWMzZDdlMzY5MTUzNmY1OGJhNjkwOTRiYTQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
IGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKaW5kZXggMTRlNzhjNTAx
NjFkZTgyNDI2ZGFjMmY3OWY0NjQ2OGYwNDI0ZWNlMC4uNjI4Y2YyNjg1MmVhYThmOTM1NjYyNGQ5
MTE5YzZlODc4ZWJhZjc4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy92
aXNpdGVkLWxpbmstY29sb3IuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQt
bGluay1jb2xvci5odG1sCmluZGV4IDJlYTQ0NmM2YjJmOTVhYTJjZjNkZWQzNjY3NjFlNDA2NTgz
NjJjMmUuLmIxODc4ZDMxOTA1MjE3NjhlNjNiYTVlNWFkN2M2ZDUzMmRlZTczZTEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiA8
c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9u
LWluLWxpc3QuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4t
bGlzdC5odG1sCmluZGV4IGU2NmFkZjNiMTkwYzllMGQ4NWVhNzgwMmMxZDk3MWQzOGExY2ZlMmQu
LmIyYmNiZjUyNTk3ZGRiM2Q2ZWRmZTg5MGNkZDYwNTZmNTBlMmQ3ZGIgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmlt
ZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURP
Q1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1zdGFydC5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5
LXN0YXJ0Lmh0bWwKaW5kZXggNjY2MWY5MWE0MDlhOTFhYmQzYjljMDVlMTRiYTQ3NDQxMDUzMjQ1
MC4uNjA4ZTAwM2Y1YzBkZTdmNjMwMzU4YTZiMDQ3M2E0MzU5NTQ1YzIyNiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5
LXN0YXJ0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13
aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVy
YXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3Bs
YXktbm9uZS5odG1sCmluZGV4IDljN2ExM2I0NWI2NDUzYTg0NWQ1OGUyMDVjOWI0ZTNlYzg1NDY1
NGMuLmQxMTVjOTUxMTg0N2NjNWIxYThmNjg4NDk5MzU3ZTZlYjBhMjAwYmMgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVw
dGlvbi1kaXNwbGF5LW5vbmUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Fj
Y2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10
cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNj
ZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRt
bAppbmRleCBiMzc2NjgxN2NmNDBlM2Q5ZGFlNjVlNDM5Y2EyZGZmM2M2OWU1YmI2Li5hMWM4NDhh
M2ExNTZhMGEwNGMwMGRiM2Q5Mjc2NGI0ZDA3OWI2MTIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNp
dGlvbi1jb21wbGV0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
bGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5z
aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlv
bi1zdXNwZW5zaW9uLmh0bWwKaW5kZXggMDY1NGE2OTVmNWIyNGJjNDJmY2E3ZjFkMjM4MWRhMGY3
MmFiNjg4Yy4uZWZhYTU0MzlkNGZiNzQwYWI1Yzc0MzEwZDE0NzY4ODgzYzM2OGZlZiAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3Vz
cGVuc2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQt
YW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxo
ZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
bGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVy
dHkuaHRtbAppbmRleCBiZWYwODA4ZTk0N2M5NmEwNTRjMzE4YjkxZDU5YTUyNDAyMWUzYjI3Li5m
MzQwMWI2Y2U2NjBmYjYyMDdkOGI5MWYzYzUyNmViZjZjNmMwN2Q2IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3Zpbmct
cHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVk
LXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiA8Ym9keT4KIDxzdHlsZT4KICAgICBkaXYgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFyaW5nLWNzcy1hbmlt
YXRpb24tZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1j
dXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbAppbmRl
eCBiNjA1YzA4OTExYmE2OTMxYjBjZjM4MzViNzljY2IwYzRmZjUzNjc0Li45ZGQ1NjE4YmI2NzUw
MWVmOTA5ZjYzNzJkMWYxMTkxZjVhZWM5MjY3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1h
dGlvbi1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2lu
Zy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIGFj
Y2Vzc2luZyBhIENTU0FuaW1hdGlvbidzIGN1cnJlbnQgdGltZSBhZnRlciBzZXR0aW5nIGl0cyBl
ZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFu
aW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9h
Y2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24tdGFyZ2V0
LXJlbW92YWwuaHRtbAppbmRleCA1OGY2YzQ5YjljOGMwODJkZjhjZTkxNmQ4YzYxNjhhMGQ4OThj
ZTNmLi40MzA2YTE5ZWJiZDNjY2Y4ZGU5OTFiNWM1ODMyYjRiMTNmN2QwYTFiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXIt
ZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sCisrKyBiL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1j
c3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1l
dGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBhY2Nlc3NpbmcgYSBDU1NBbmltYXRpb24n
cyBjdXJyZW50IHRpbWUgYWZ0ZXIgcmVtb3ZhbCBvZiBpdHMgdGFyZ2V0PC90aXRsZT4KIDxzdHls
ZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1l
ZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5n
ZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbAppbmRleCBkOTgwZDM1NjI4ZTRhYTM5
YTE4MzQwMzVkNTdlNDdhZjBjZDFjYmI3Li42NmZiYTU1MmY4NWRkM2MyODE3ZDcyMTE5ODM3NTYz
MmI4ZDY5OTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmlt
YXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10
YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlm
cmFtZXMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlv
bi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sCmluZGV4
IDU2MDg3MjEzYTQ1ZWRkNDc2YTA4ZWQ5MzljYzE2YjA4ZjUxNGNjN2IuLjllNTUzYmRmYmE0YmY2
ZTVmMTExM2U4MTg5ZmMyYTAxMzc3NDE4NzYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZy
YW1lcy1jcmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1h
dGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwKaW5kZXggODNmZTk1Y2E3ZGYxNjYzYWQ1OTA4
YWJlMDRhMzZiZjU3MWE1NTFhZS4uZTVmOTUyMDAwYzZhNGVlZTVlZmRiMjFhYTZlN2U0NzdkNTli
YmEwYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9u
cy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04PgogPHRpdGxlPkNTUyBB
bmltYXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVkaWE9InNjcmVlbiI+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWlu
LWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbApp
bmRleCAzMDc4M2E4YmZmMGJiMDFhNGVmYjQwNThiYWRjNzA5MThhMmU5NzBmLi4wNGRiYWE1M2Nh
MWQyMzZmZDk4MGJjY2Q3MWNhOGI5YTNhZjkyODc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRl
ZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4t
ZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1l
dGEgY2hhcnNldD0idXRmLTgiPgogPHRpdGxlPlJldmVyc2FsIG9mIGFjY2VsZXJhdGVkIGluLWZs
aWdodCBDU1MgVHJhbnNpdGlvbnM8L3RpdGxlPgogPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRp
YT0ic2NyZWVuIj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkt
a2V5ZnJhbWVzLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtl
eWZyYW1lcy1jcmFzaC5odG1sCmluZGV4IDYwYWMzNjVmMzA1NjU0M2EzZjE4NjU0YjlmN2MyZjNl
MTI0N2M1NjIuLjBmNWZmYjNmMjcwODY3YjNhNjNlZTAzMWEzMjViYmFiYWE0MTc3ZDMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2gu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVu
bmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1
ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNp
dGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1s
CmluZGV4IDRkYmY3MDZlNDE3NGYyOWFiMTk1YjhlMmZmNTYyYTlkMDkzN2FmN2EuLmZhM2M4NTVk
YmNiMjZlOGQ5OTdjMTI1MjQyODgzMmM5MTExODdjOGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3Zpbmct
cHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2Nl
bGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPGJvZHk+CiA8cHJlIGlkPSJyZXN1bHRzIj48L3ByZT4KIDxkaXYgaWQ9InRhcmdl
dCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAwOyB3aWR0aDogMTAw
cHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrOyI+PC9kaXY+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi1u
b25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbApp
bmRleCBiZDI0MDY4YmNjNDVkYzM4MjkwODg5ZmQ3YzNhMzQ2NGNmMjAxN2ViLi5mODBiMDQ3ZjI2
NTZmZTU5MTg4MTViMDMyYzg3NTU0ODZlMDdiZmJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93
ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVm
ZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5p
bWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1s
PgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBzZXR0aW5nIGEgQ1NTIEFuaW1h
dGlvbiB0byAibm9uZSIgYWZ0ZXIgc2V0dGluZyBpdHMgZWZmZWN0IHRvIG51bGw8L3RpdGxlPgog
PHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNz
cy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZl
Y3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9u
LXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKaW5k
ZXggNGIxNTA0YWJjYWQzZTdkYjA0MTNjZGRiZjMzMzYxZWE0OTQ1NGFmMS4uOTMyYmM5MWE3NmVh
MTU1ZjlhYjg2ZDhjOTA0ZDhmZWI1MzVjNzc2YiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHls
ZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVy
LWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9
dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENTU0FuaW1hdGlvbidzIHByb3BlcnR5IHZp
YSBzdHlsZSBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+
Cg==
</data>
<flag name="commit-queue"
          id="424501"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>408952</attachid>
            <date>2020-09-16 13:40:04 -0700</date>
            <delta_ts>2020-09-17 03:47:57 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200916224002.patch</filename>
            <type>text/plain</type>
            <size>534261</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTQwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggYjRhNzhmNTM4YmVhZjc2
NjhkZjY4MmJmYjkzODE1ZDUzMzNjNTRlNi4uZGE2ZjY0MjBjNDcyMzJiNWE4MTBiOGY4YjAzYWUz
NjczNjU1ZWY4ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzOSBAQAorMjAyMC0wOS0xNiAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgV2UgcmVtb3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUgZm91bmQgaW4g
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vLCBzYXZlIGZvciBDU1NQcm9wZXJ0eUFuaW1h
dGlvbiB3aGljaAorICAgICAgICBpcyBhbHNvIHVzZWQgYnkgdGhlIG5ldyBXZWIgQW5pbWF0aW9u
cyBlbmdpbmUgYW5kIG5vdyBtb3ZlZCB0byBTb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vLiBTaW5j
ZSB3ZSBub3cgaGF2ZSBhIHNpbmdsZQorICAgICAgICBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVu
dGltZSBmbGFncyB0byBvcHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5l
IGFyZSBub3QgbmVlZGVkIGFueW1vcmUgYW5kIHJlbW92ZWQKKyAgICAgICAgYXMgd2VsbC4KKwor
ICAgICAgICBXZSBhbHNvIHJlbW92ZSBzb21lIHRlc3RpbmcgdXRpbGl0aWVzIGFuZCBzb21lIFJl
bmRlckxheWVyQmFja2luZyBtZXRob2RzIHNwZWNpZmljIHRvIGFjY2VsZXJhdGVkIHRyYW5zaXRp
b25zIHdoaWNoCisgICAgICAgIHRoZSBuZXcgYW5pbWF0aW9uIGVuZ2luZSBkb2VzIG5vdCB1c2Uu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0YWJsZS5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbDoKKyAgICAgICAg
KiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3I6OlByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKToKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmguCisgICAgICAgICogYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbDoKKyAgICAgICAgKiBhbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZXN1bWUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAgICAqIGRv
bS9Qc2V1ZG9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQpOgorICAgICAgICAqIGRvbS9TaGFkb3dSb290LmlkbDoKKyAgICAgICAg
KiBoaXN0b3J5L0NhY2hlZEZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZEZyYW1l
OjpkZXN0cm95KToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkZyYW1lOjpGcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2xlYXJUaW1lcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OnJlc3VtZUFjdGl2ZURPTU9iamVjdHNBbmRBbmltYXRp
b25zKToKKyAgICAgICAgKiBwYWdlL0ZyYW1lLmg6CisgICAgICAgICogcGFnZS9GcmFtZVZpZXcu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVWaWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXc6OnVwZGF0ZUxheW91dEFuZFN0eWxlSWZOZWVk
ZWRSZWN1cnNpdmUpOgorICAgICAgICAqIHBhZ2UvRnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZpZXdMYXlvdXRDb250ZXh0OjpsYXlvdXQpOgorICAg
ICAgICAqIHBhZ2UvUGFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYWdlOjpoYW5kbGVMb3dN
b2RlUG93ZXJDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6c2V0SXNWaXNpYmxlSW50
ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6UGFnZTo6aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1
c3BlbnNpb25TdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIHBhZ2UvUnVudGltZUVuYWJsZWRGZWF0
dXJlcy5oOgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2Vi
QW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UnVudGltZUVu
YWJsZWRGZWF0dXJlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2V0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIGNvbnN0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcDog
UmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmg6IFJlbW92
ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA6
IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxl
ci5oOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRy
b2xsZXJQcml2YXRlLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vQ29tcG9z
aXRlQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9Db21w
b3NpdGVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBs
aWNpdEFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vSW1w
bGljaXRBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlm
cmFtZUFuaW1hdGlvbi5jcHA6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9hbmltYXRpb24vS2V5
ZnJhbWVBbmltYXRpb24uaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9H
cmFwaGljc0xheWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzS2V5ZnJhbWUpOgorICAgICAgICAoV2Vi
Q29yZTo6R3JhcGhpY3NMYXllckNBOjpjcmVhdGVUcmFuc2Zvcm1BbmltYXRpb25zRnJvbUtleWZy
YW1lcyk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6YW5pbWF0ZWRTdHlsZSk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnN0
YXJ0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50
Ojp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckVs
ZW1lbnQ6OnRyYW5zaXRpb25GaW5pc2hlZCk6IERlbGV0ZWQuCisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckxheWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjdXJyZW50
VHJhbnNmb3JtIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyOjpjYWxjdWxh
dGVDbGlwUmVjdHMgY29uc3QpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tp
bmcuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9t
ZXRyeSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlmeUFuaW1h
dGlvblN0YXJ0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFy
dFRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNr
aW5nOjp0cmFuc2l0aW9uUGF1c2VkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBy
ZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRl
ckxheWVyQ29tcG9zaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBv
c2l0b3I6OmZsdXNoUGVuZGluZ0xheWVyQ2hhbmdlcyk6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckNvbXBvc2l0b3I6OnVwZGF0ZUNvbXBvc2l0aW5nTGF5ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWlyZXNDb21wb3NpdGluZ0ZvckFuaW1h
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllckNvbXBvc2l0b3I6Omlz
UnVubmluZ1RyYW5zZm9ybUFuaW1hdGlvbiBjb25zdCk6CisgICAgICAgICogcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6c3RhcnRUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlzaGVk
KTogRGVsZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5o
OgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJPYmplY3QuaDoKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlck9iamVjdDo6bGVnYWN5QW5pbWF0aW9uIGNvbnN0KTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKToKKyAgICAgICAgKiBz
dHlsZS9TdHlsZUFkanVzdGVyLmNwcDoKKyAgICAgICAgKiBzdHlsZS9TdHlsZVRyZWVSZXNvbHZl
ci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZTo6VHJlZVJlc29sdmVyOjpjcmVhdGVBbmlt
YXRlZEVsZW1lbnRVcGRhdGUpOgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbFNldHRpbmdzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsOgorICAg
ICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
czo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnRlcm5hbHM6OnN1c3BlbmRBbmltYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkludGVybmFsczo6cmVzdW1lQW5pbWF0aW9ucyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9ucyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
T25FbGVtZW50KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cGF1c2VB
bmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVk
b0VsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmg6CisgICAg
ICAgICogdGVzdGluZy9JbnRlcm5hbHMuaWRsOgorCiAyMDIwLTA5LTE2ICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1N0cmVhbWVyXVsxLjE4XSBS
ZWdyZXNzaW9ucwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZwppbmRleCBmZDg4ZDA5YzYwZDI2OWViOGViOTFmODEyYzIxMmU3Nzk4
Y2MxMzU4Li43NGFkZDdjZTMyMjYxMGU2NjliNzNhYzY5MDdiNzhhZDdhNzQyZWNlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTA5LTE2ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBTaW5jZSB3ZSBu
b3cgaGF2ZSBhIHNpbmdsZSBhbmltYXRpb24gZW5naW5lLCB0aGUgcnVudGltZSBmbGFncyB0byBv
cHRpb25hbGx5IGVuYWJsZSB0aGUgV2ViIEFuaW1hdGlvbnMgZW5naW5lIGFyZQorICAgICAgICBu
b3QgbmVlZGVkIGFueW1vcmUgYW5kIGFyZSBub3cgcmVtb3ZlZC4KKworICAgICAgICAqIFNoYXJl
ZC9XZWJQcmVmZXJlbmNlcy55YW1sOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQy9XS1ByZWZl
cmVuY2VzLmNwcDoKKyAgICAgICAgKFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zRW5hYmxl
ZCk6IERlbGV0ZWQuCisgICAgICAgIChXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJs
ZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dldFdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAqIFVJ
UHJvY2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbToKKyAgICAgICAgKC1bV0tQcmVmZXJlbmNl
cyBfc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAg
ICAgICAgKC1bV0tQcmVmZXJlbmNlcyBfd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZF0pOiBEZWxldGVkLgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNl
c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVk
QnVuZGxlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5kbGU6Om92ZXJyaWRlQm9v
bFByZWZlcmVuY2VGb3JUZXN0UnVubmVyKToKKyAgICAgICAgKFdlYktpdDo6SW5qZWN0ZWRCdW5k
bGU6OnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYktpdDo6
SW5qZWN0ZWRCdW5kbGU6OnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBE
ZWxldGVkLgorICAgICAgICAqIFdlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRCdW5k
bGUuaDoKKwogMjAyMC0wOS0xNSAgU2FpZCBBYm91LUhhbGxhd2EgIDxzYWJvdWhhbGxhd2FAYXBw
bGUuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI2NjY3Nyk6IEFTU0VSVElPTiBGQUlMRUQg
aW4gUGFpbnRGcmVxdWVuY3lUcmFja2VyOjplbmQoKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dExlZ2FjeS9tYWMvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9n
CmluZGV4IGIwNzFhYWZiNzgxMDBjNjg4YTIyMTQ4NTFkMWViMTI4NzFjZDY1YjYuLjcyNGU3NDYx
M2M0OTI5ZDU2YzY2ZmE2ODEzODIzOGFmOWFkMzRjYjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91
dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29k
ZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ug
d2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3Mg
dG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAg
ICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBX
ZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW06CisgICAgICAgICgrW1dlYlByZWZlcmVuY2VzIGluaXRpYWxpemVdKToK
KyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTogRGVsZXRl
ZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQ6XSk6
IERlbGV0ZWQuCisgICAgICAgICgtW1dlYlByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgc2V0
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDpdKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oOgorICAgICAgICAqIFdlYlZpZXcvV2Vi
Vmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBfcHJlZmVyZW5jZXNDaGFuZ2VkOl0pOgorCiAy
MDIwLTA5LTE1ICBTYW0gV2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1v
dmUgcnVudGltZSBzZXR0aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCmluZGV4IGU0OTFlMDBmYjUyMTgxODk4Y2M4NDcyZGQ0
NjA4MWExNGFhYzE0MzIuLmI2ZTBhNTRkMjdkZDEzOWUwYTMwYjM2MWY5MzJkNzg4MWE2NDJiYWEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNSBAQAorMjAyMC0wOS0x
NiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUg
dGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0aW9uIGVu
Z2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdlYiBBbmlt
YXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBhcmUgbm93
IHJlbW92ZWQuCisKKyAgICAgICAgKiBJbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUu
aWRsOgorICAgICAgICAqIFdlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oOgorICAgICAgICAqIFdl
YlByZWZlcmVuY2VzLmNwcDoKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjppbml0aWFsaXplRGVm
YXVsdFNldHRpbmdzKToKKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYlByZWZlcmVuY2VzOjpz
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYlByZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAg
ICAgICAqIFdlYlByZWZlcmVuY2VzLmg6CisgICAgICAgICogV2ViVmlldy5jcHA6CisgICAgICAg
IChXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQpOgorCiAyMDIwLTA5LTE1ICBTYW0g
V2VpbmlnICA8d2VpbmlnQGFwcGxlLmNvbT4KIAogICAgICAgICBSZW1vdmUgcnVudGltZSBzZXR0
aW5nIGZvciBlbmFibGluZy9kaXNhYmxpbmcgdGhlIGZldGNoIEFQSQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi93dGYvUGxhdGZvcm0uaCBiL1NvdXJjZS9XVEYvd3RmL1BsYXRmb3JtLmgKaW5kZXgg
MmQwM2I0MzgyZDYwZWQ0NmQxNjI5NWVlMTRlYmQ3NTNlMmEwMWE2NC4uODJlNGY0NGNiZWQxMTdm
ZmU4ODliYzY5MWY1NzE1NTEwMTE3MjFjMiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvUGxh
dGZvcm0uaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9QbGF0Zm9ybS5oCkBAIC0yMDcsMyArMjA3LDcg
QEAKICNkZWZpbmUgVVNFX0FDQ0VTU0lCSUxJVFlfQ09OVEVYVF9NRU5VUyAxCiAjZW5kaWYKIAor
I2lmICFkZWZpbmVkKFVTRV9CT0dVU19GTEFHX0ZPUl9DTEVBTl9CVUlMRCkKKyNkZWZpbmUgVVNF
X0JPR1VTX0ZMQUdfRk9SX0NMRUFOX0JVSUxEIDEKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0
CmluZGV4IDIwZjhjNDEyYWEyMzM3NTU1YjM3ZDU5NDFlMThiMmVhZGZkMzdiZWYuLjU5Zjc5MmE5
NDg3ZmE5OGI4MTY1OWJhMTIxYTIyMGNjMmMxMDQ5MzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBA
IC0xMjEsNyArMTIxLDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVT
CiAgICAgIiR7V0VCQ09SRV9ESVJ9L2xvYWRlci9pY29uIgogICAgICIke1dFQkNPUkVfRElSfS9t
YXRobWwiCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BhZ2UiCi0gICAgIiR7V0VCQ09SRV9ESVJ9L3Bh
Z2UvYW5pbWF0aW9uIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlL2NzcCIKICAgICAiJHtXRUJD
T1JFX0RJUn0vcGFnZS9zY3JvbGxpbmciCiAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtIgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZSBiL1NvdXJjZS9XZWJDb3Jl
L0hlYWRlcnMuY21ha2UKaW5kZXggYTU1YTE4ZDMyMDQ4ZTc2ZTY1MWUwMDYwNWY4MGIwNWEzMjdh
MTFlZS4uY2I0YTlkZTkyNzdhZmU5Yjc0NGVjZmU1NDNkMDVjZGFhNTlhYTUzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvSGVhZGVycy5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9IZWFk
ZXJzLmNtYWtlCkBAIC04ODksOSArODg5LDYgQEAgc2V0KFdlYkNvcmVfUFJJVkFURV9GUkFNRVdP
UktfSEVBREVSUwogICAgIHBhZ2UvV2hlZWxFdmVudFRlc3RNb25pdG9yLmgKICAgICBwYWdlL1dp
bmRvd0ZlYXR1cmVzLmgKIAotICAgIHBhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaAotICAg
IHBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaAotCiAgICAgcGFnZS9jc3Av
Q29udGVudFNlY3VyaXR5UG9saWN5LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xp
Y3lDbGllbnQuaAogICAgIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeUhhc2guaApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3Vy
Y2VzLnR4dAppbmRleCAxZGY1NDg1NWIwZGNkNGMyNmE0Zjc2YjM1NDJmYTIxNDZjZmJhOWQ4Li4z
ODgyN2M0M2MxYzUxZWUyOGU4Njk3ZjljZGQ3YjFmYmE2OGZiZWYwIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApA
QCAtNDQxLDYgKzQ0MSw3IEBAIGFuaW1hdGlvbi9BbmltYXRpb25FdmVudEJhc2UuY3BwCiBhbmlt
YXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5jcHAKIGFuaW1hdGlvbi9BbmltYXRpb25UaW1l
bGluZS5jcHAKIGFuaW1hdGlvbi9DU1NBbmltYXRpb24uY3BwCithbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCiBhbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5jcHAKIGFuaW1hdGlvbi9E
ZWNsYXJhdGl2ZUFuaW1hdGlvbi5jcHAKIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmNwcApA
QCAtMTY3NSwxMiArMTY3Niw2IEBAIHBhZ2UvV2hlZWxFdmVudFRlc3RNb25pdG9yLmNwcAogcGFn
ZS9XaW5kb3dGZWF0dXJlcy5jcHAKIHBhZ2UvV2luZG93Rm9jdXNBbGxvd2VkSW5kaWNhdG9yLmNw
cAogcGFnZS9Xb3JrZXJOYXZpZ2F0b3IuY3BwCi1wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmNwcAotcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAKLXBhZ2UvYW5p
bWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAotcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcAotcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCi1wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5jcHAKIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0
eVBvbGljeS5jcHAKIHBhZ2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeUNsaWVudC5jcHAKIHBh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeURpcmVjdGl2ZS5jcHAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9X
ZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagppbmRleCA2NjU1OThmNjM1
MDRkODM1ZDRkZGE3M2UyNjdlNjIyOWQwNzEzM2QyLi4yOGU5ZjI5MWJmMzA5OWQ2YzI1M2JmZWZl
YmYwZWQyZGYxOWIzZGFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXBy
b2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yNzYsNyArMjc2LDYgQEAKIAkJMEYxMTc4MTgyMkUzQzQ3
RjAwOEJENTcwIC8qIEZyYW1lSWRlbnRpZmllci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMTc4MTYyMkUzQzQ3RTAwOEJENTcwIC8qIEZyYW1lSWRl
bnRpZmllci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGMTFBNTRGMEYzOTIzMzEwMEMzNzg4NCAvKiBSZW5kZXJTZWxlY3Rpb25JbmZvLmggaW4g
SGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjExQTU0RTBGMzky
MzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGMTMxNjNFMTZFRDBDQzgwMDM1Q0MwNCAv
KiBQbGF0Zm9ybUNBRmlsdGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEYxMzE2M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJz
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEYx
NURBOEEwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1REE4OTBG
M0FBRUU3MDAwMENFNDcgLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCAqLzsgfTsK
IAkJMEYxNUVENUMxQjdFQzdDNTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjE1RUQ1QTFCN0VDN0M1MDBF
RERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQkwRjE3NzQ4MDEzNzhCNzcyMDA5REE3NkEgLyogU2Nyb2xsQW5p
bWF0b3JJT1MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGMTc3NDdFMTM3OEI3NzEwMDlEQTc2QSAvKiBTY3JvbGxBbmltYXRvcklPUy5oICovOyB9Owog
CQkwRjFBMEMzODIyOUE0ODE4MDBEMzdBREIgLyogVmVsb2NpdHlEYXRhLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjFBMEMzNjIyOUE0ODE4MDBEMzdB
REIgLyogVmVsb2NpdHlEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKQEAgLTkxNiwxMSArOTE1LDYgQEAKIAkJMzE2REU3MDIxRTgzQUUxRDAwODRD
MjYxIC8qIFJUQ0RhdGFDaGFubmVsU3RhdGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkRFNzAxMUU4M0FFMUQwMDg0QzI2MSAvKiBSVENEYXRhQ2hh
bm5lbFN0YXRlLmggKi87IH07CiAJCTMxNkZFMDcyMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tl
eWZyYW1lUnVsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzE2RkUwNkUwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5ZnJhbWVSdWxlLmggKi87IH07
CiAJCTMxNkZFMDc0MEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lc1J1bGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMDcwMEU2Q0NC
RUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lc1J1bGUuaCAqLzsgfTsKLQkJMzE2RkUxMTIwRTZF
MURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRp
b25CYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsK
LQkJMzE2RkUxMTQwRTZFMURBNzAwQkY2MDg4IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBBMEU2
RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMzE2RkUxMTYwRTZFMURBNzAwQkY2
MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMzE2RkUxMEMwRTZFMURBNzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFu
aW1hdGlvbi5oICovOyB9OwotCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRB
bmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDMxNkZFMTBFMEU2RTFEQTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5oICovOyB9Owot
CQkzMTZGRTExQTBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTEwMEU2RTFEQTcw
MEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5oICovOyB9OwogCQkzMTc0MUFBRDE2NjM2NjA5
MDA4QTVCN0UgLyogU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTc0MUFBQjE2NjM1RTQ1MDA4QTVCN0UgLyogU2lt
dWxhdGVkQ2xpY2tPcHRpb25zLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJMzE3RDNGRjMyMTU1OTlGNDAwMzRFM0I5IC8qIFBvaW50ZXJFdmVudC5o
IGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3RDNGRjIy
MTU1OTlFMzAwMzRFM0I5IC8qIFBvaW50ZXJFdmVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTMxODE1QTMxMUY5QTZDOEYwMEZDQkY4OSAvKiBJ
bWFnZUJpdG1hcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMzFEMjZCQkYxRjg2RDE4OTAwOEZGMjU1IC8qIEltYWdlQml0bWFwLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxNTgsNiArMjE1Miw3IEBA
CiAJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzFFMkM0MjQyMUM5
MzUxRDAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVjdFBoYXNlLmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzFFQURDRDgyMjA4N0U3MjAwNjVBNDVG
IC8qIFBvaW50ZXJJRC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNzFFQURDRDYyMjA4N0U2RDAwNjVBNDVGIC8qIFBvaW50ZXJJRC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUZDRURDMjAyQjM4QTkw
MEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAvKiBBbmltYXRpb25F
ZmZlY3QuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owor
CQk3MUYwNUY4MDI1MTI0NDJFMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRjA1RjdFMjUxMjQ0
MEMwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzMzMjIzRUM4QjAwMEYxMkZGNyAv
KiBTVkdQcm9wZXJ0eS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNTVFRTUzNjMyMjNCMkEyNDAwRkJBOTQ0IC8qIFNWR1Byb3BlcnR5LmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNzIxNDQzMzQyMjNFQzkx
NjAwRjEyRkY3IC8qIFNWR1Byb3BlcnR5T3duZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDU1RUU1MzYwMjIzQjJBMjEwMEZCQTk0NCAvKiBTVkdQcm9w
ZXJ0eU93bmVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJNzIyODNGMEUyMzBCMjY4QzAwRjVEODI4IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MkMxOEEzRjIz
MEIwNEI3MDA2ODQ3QzcgLyogSW1hZ2VQYWludGluZ09wdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjE5NCw3ICsyMTg5LDYgQEAKIAkJ
NzdENTEwMUMxRUQ3MjJCRjAwREE0Qzg3IC8qIEpTQ3JlZGVudGlhbHNDb250YWluZXIuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc3RDUxMDFCMUVENzIy
QjUwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVyLmggKi87IH07CiAJCTc3RDUxMDI1
MUVENzRCNTgwMERBNEM4NyAvKiBKU05hdmlnYXRvckNyZWRlbnRpYWxzLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAyNDFFRDc0QjU1MDBEQTRD
ODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oICovOyB9OwogCQk3N0VGNjJGNDEyRjlEQjc0
MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0VGNjJGMjEyRjlEQjc0MDBDNzdCRDIg
LyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmggKi87IH07Ci0JCTc4RDAyQkM2MTU0QTE4
REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENT
U1Byb3BlcnR5QW5pbWF0aW9uLmggKi87IH07CiAJCTc5QUM5MjE5MTA5OTQ1QzgwMDIxMjY2RSAv
KiBKU0NvbXBvc2l0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDc5QUM5MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZl
bnQuaCAqLzsgfTsKIAkJNzlGMkY1QTIxMDkxOTM5QTAwMEQ4N0NCIC8qIENvbXBvc2l0aW9uRXZl
bnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc5RjJG
NTlGMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlvbkV2ZW50LmggKi87IH07CiAJCTdBMDlD
RUYxMUYwMjA2OUIwMEU5M0JEQiAvKiBGaWxlTW9uaXRvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gN0EwOUNFRUMxRjAxQ0M5MzAwRTkzQkRCIC8qIEZp
bGVNb25pdG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKQEAgLTU4NjYsNyArNTg2MCw2IEBACiAJCTBGMTFBNTRFMEYzOTIzMzEwMEMzNzg4NCAvKiBS
ZW5kZXJTZWxlY3Rpb25JbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJl
bmRlclNlbGVjdGlvbkluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxMzE2
M0QxNkVEMENDODAwMzVDQzA0IC8qIFBsYXRmb3JtQ0FGaWx0ZXJzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBsYXRmb3JtQ0FGaWx0ZXJzLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGMTMxNjNGMTZFRDBDREUwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVy
c0NvY29hLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRoID0gUGxhdGZv
cm1DQUZpbHRlcnNDb2NvYS5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMEYxNURB
ODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGMTVFRDU5MUI3RUM3QzUwMEVE
REZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBXaWxsQ2hhbmdlRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTVFRDVBMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBXaWxsQ2hhbmdlRGF0YS5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjE2QkVEOTIzMDRGMDUzMDBCNEExNjcgLyogR1BVQmFzZWRDYW52YXNS
ZW5kZXJpbmdDb250ZXh0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEdQVUJhc2VkQ2FudmFzUmVu
ZGVyaW5nQ29udGV4dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC03MjE1LDE2
ICs3MjA4LDYgQEAKIAkJMzE2RkUwNzAwRTZDQ0JFRTAwQkY2MDg4IC8qIEpTQ1NTS2V5ZnJhbWVz
UnVsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU0NTU0tleWZyYW1lc1J1
bGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2RkUwOTEwRTZDQ0Q3RjAwQkY2
MDg4IC8qIENTU0tleWZyYW1lUnVsZS5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gQ1NTS2V5
ZnJhbWVSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMzE2RkUwOTIwRTZD
Q0Q3RjAwQkY2MDg4IC8qIENTU0tleWZyYW1lc1J1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0
aCA9IENTU0tleWZyYW1lc1J1bGUuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkz
MTZGRTEwNzBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBbmltYXRpb25CYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDgwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwOTBFNkUxREE3MDBCRjYwODggLyog
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKLQkJMzE2RkUxMEEwRTZFMURBNzAwQkY2MDg4IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJv
bGxlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwQjBFNkUxREE3MDBC
RjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07Ci0JCTMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29tcG9zaXRlQW5pbWF0aW9uLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTBEMEU2RTFEQTcwMEJGNjA4OCAv
KiBJbXBsaWNpdEFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbXBsaWNpdEFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTMxNkZFMTBFMEU2RTFEQTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbXBsaWNpdEFuaW1hdGlvbi5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVB
bmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gS2V5ZnJh
bWVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTExMDBF
NkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gS2V5ZnJhbWVBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9u
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBTaW11bGF0ZWRDbGlja09wdGlvbnMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMzE3RDNGRUYyMTU1OTlFMTAwMzRFM0I5IC8qIFBvaW50ZXJFdmVu
dC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSB0
ZXh0OyBwYXRoID0gUG9pbnRlckV2ZW50LmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
IAkJMzE3RDNGRjEyMTU1OTlFMjAwMzRFM0I5IC8qIFBvaW50ZXJFdmVudC5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBQb2ludGVyRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTg4Myw2ICs5ODY2LDggQEAKIAkJNzFFRkNFRDcyMDJCMzg4RDAwRDdDNDExIC8qIEFuaW1h
dGlvbkVmZmVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBbmltYXRpb25F
ZmZlY3QuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFFRkNFREEyMDJCMzg4RjAw
RDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5j
cHA7IHBhdGggPSBBbmltYXRpb25FZmZlY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQk3MUVGQ0VERTIwMkIzOUM3MDBEN0M0MTEgLyogSlNBbmltYXRpb25FZmZlY3RDdXN0b20u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNBbmltYXRpb25FZmZl
Y3RDdXN0b20uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQk3MUYwNUY3RTI1MTI0
NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gQ1NTUHJvcGVydHlBbmltYXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNzFGMDVGN0YyNTEyNDQwRDAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0
aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzFGOTM2RjcxREQ0
Rjk5QjAwOTIyQ0M3IC8qIHRyYWNrcy1zdXBwb3J0LmpzICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5q
YXZhc2NyaXB0OyBwYXRoID0gInRyYWNrcy1zdXBwb3J0LmpzIjsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFGRjg1MTgyMkEzRjgxRjAwNUQ1OTU5IC8qIE5hdmlnYXRvck1heFRvdWNo
UG9pbnRzLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBOYXZpZ2F0b3JNYXhUb3VjaFBvaW50
cy5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcyMTQ0MzQ1MjI0MEM4QkEwMEYx
MkZGNyAvKiBTVkdBbmltYXRlZFZhbHVlUHJvcGVydHkuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU1ZHQW5p
bWF0ZWRWYWx1ZVByb3BlcnR5Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC05OTkx
LDggKzk5NzYsNiBAQAogCQk3N0Q1MTAyNDFFRDc0QjU1MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JD
cmVkZW50aWFscy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU05hdmlnYXRv
ckNyZWRlbnRpYWxzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYxMTJG
OURCNzQwMEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VT
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzdFRjYyRjIxMkY5REI3NDAwQzc3
QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKLQkJNzhEMDJCQzMxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5
QW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENTU1By
b3BlcnR5QW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJNzhEMDJC
QzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5QUM5MjE2MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0
aW9uRXZlbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSlNDb21w
b3NpdGlvbkV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNzlBQzkyMTcx
MDk5NDVDODAwMjEyNjZFIC8qIEpTQ29tcG9zaXRpb25FdmVudC5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBKU0NvbXBvc2l0aW9uRXZlbnQuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzlGMkY1OUUxMDkxOTM5QTAwMEQ4N0NCIC8qIENvbXBvc2l0aW9uRXZlbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcG9zaXRpb25FdmVu
dC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0xODcxMiwyNiArMTg2OTUsNiBA
QAogCQkJcGF0aCA9IHdvcmtlcnM7CiAJCQlzb3VyY2VUcmVlID0gIjxncm91cD4iOwogCQl9Owot
CQkzMTZGRTEwNjBFNkUxRDg0MDBCRjYwODggLyogYW5pbWF0aW9uICovID0gewotCQkJaXNhID0g
UEJYR3JvdXA7Ci0JCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNzBFNkUxREE3MDBCRjYwODgg
LyogQW5pbWF0aW9uQmFzZS5jcHAgKi8sCi0JCQkJMzE2RkUxMDgwRTZFMURBNzAwQkY2MDg4IC8q
IEFuaW1hdGlvbkJhc2UuaCAqLywKLQkJCQkzMTZGRTEwQjBFNkUxREE3MDBCRjYwODggLyogQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcCAqLywKLQkJCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyog
Q29tcG9zaXRlQW5pbWF0aW9uLmggKi8sCi0JCQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2MDg4IC8q
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovLAotCQkJCTMxNkZFMTBBMEU2RTFEQTcwMEJG
NjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmggKi8sCi0JCQkJMEYxNURBODkwRjNBQUVF
NzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggKi8sCi0JCQkJNzhE
MDJCQzMxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCAqLywKLQkJ
CQk3OEQwMkJDNDE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLywK
LQkJCQkzMTZGRTEwRDBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICov
LAotCQkJCTMxNkZFMTBFMEU2RTFEQTcwMEJGNjA4OCAvKiBJbXBsaWNpdEFuaW1hdGlvbi5oICov
LAotCQkJCTMxNkZFMTBGMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1hdGlvbi5jcHAg
Ki8sCi0JCQkJMzE2RkUxMTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmgg
Ki8sCi0JCQkpOwotCQkJcGF0aCA9IGFuaW1hdGlvbjsKLQkJCXNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7Ci0JCX07CiAJCTMzM0Y3MDNEMEZCNDlDMTYwMDhFMTJBNiAvKiBub3RpZmljYXRpb25zICov
ID0gewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKQEAgLTIxNDMxLDcgKzIx
Mzk0LDYgQEAKIAkJNjVCRjAyMTgwOTc0ODA2MzAwQzQzMTk2IC8qIHBhZ2UgKi8gPSB7CiAJCQlp
c2EgPSBQQlhHcm91cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTMxNkZFMTA2MEU2RTFEODQwMEJG
NjA4OCAvKiBhbmltYXRpb24gKi8sCiAJCQkJNUQ1OTc1QjUxOTYzNjJCRTAwRDAwODc4IC8qIGNv
Y29hICovLAogCQkJCUNFMTdBRDE0MUM1ODUyMkYwMDVGNDc5OSAvKiBjc3AgKi8sCiAJCQkJMThB
NkNENkYwRDhGMjAyNTAwMURDM0NFIC8qIGlvcyAqLywKQEAgLTIxODc0LDYgKzIxODM2LDggQEAK
IAkJCQk3MUMyOUUyRTIwM0NFNzZCMDA4RjM2RDIgLyogQ1NTQW5pbWF0aW9uLmNwcCAqLywKIAkJ
CQk3MUMyOUUzMDIwM0NFNzZCMDA4RjM2RDIgLyogQ1NTQW5pbWF0aW9uLmggKi8sCiAJCQkJNzFD
MjlFMzEyMDNDRTc2QzAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5pZGwgKi8sCisJCQkJNzFGMDVG
N0YyNTEyNDQwRDAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcCAqLywKKwkJCQk3
MUYwNUY3RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLywKIAkJ
CQk3MTMxNzEzMjFGQkU3OEM1MDBGNzU4REUgLyogQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudC5o
ICovLAogCQkJCTcxMjNDMTg3MjA0NzM5QkIwMDc4OTM5MiAvKiBDU1NUcmFuc2l0aW9uLmNwcCAq
LywKIAkJCQk3MTIzQzE4NjIwNDczOUJBMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlvbi5oICovLApA
QCAtMzAzMTUsNyArMzAyNzksNiBAQAogCQkJCTMxQTc5NUM3MTg4OEJDQjIwMDM4MkY5MCAvKiBB
TkdMRUluc3RhbmNlZEFycmF5cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNDkwNzA3RTcxMjE5QzA0
MzAwRDkwRTUxIC8qIEFOR0xFV2ViS2l0QnJpZGdlLmggaW4gSGVhZGVycyAqLywKIAkJCQk0OUU5
MTJBQjBFRkFDOTA2MDA5RDBDQUYgLyogQW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKLQkJCQkz
MTZGRTExMjBFNkUxREE3MDBCRjYwODggLyogQW5pbWF0aW9uQmFzZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNzFFRkNFREMyMDJCMzhBOTAwRDdDNDExIC8qIEFuaW1hdGlvbkVmZmVjdC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJNzFFMkM0MjYyMUM5MzUyODAwMjRGOEM4IC8qIEFuaW1hdGlvbkVmZmVj
dFBoYXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQkzMTk4NDgwMTFBMUQ4MTdCMDBBMTMzMTggLyog
QW5pbWF0aW9uRXZlbnQuaCBpbiBIZWFkZXJzICovLApAQCAtMzA2OTgsNyArMzA2NjEsNiBAQAog
CQkJCUMyRjRFNzhDMUU0NUMzRUYwMDZENzEwNSAvKiBDb21wbGV4VGV4dENvbnRyb2xsZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCUU0QkE1MDkwMUJDRkJEOTUwMEUzNEVGNyAvKiBDb21wb3NlZFRy
ZWVBbmNlc3Rvckl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDRGQTE4NTFCQ0E2QjVB
MDA5MUI2RUYgLyogQ29tcG9zZWRUcmVlSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLAotCQkJCTMx
NkZFMTE2MEU2RTFEQTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTkzMzA5REREMDk5RTY0OTIwMDU2RTU4MSAvKiBDb21wb3NpdGVFZGl0Q29tbWFu
ZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEyNDdFMzcxRkVBNUY4NjAwOEMwOENFIC8qIENvbXBv
c2l0ZU9wZXJhdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzExMTI0M0UyMTZGQTcxMTAwRUI3
QjY3IC8qIENvbXBvc2l0ZU9wZXJhdGlvbk9yQXV0by5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMDgz
OCw4ICszMDgwMCw2IEBACiAJCQkJN0M5QUNBQTgxRjNDQ0VCNDAwRjNBQTA5IC8qIENyeXB0b1Jz
YUhhc2hlZEtleUFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0M5QUNBQTQxRjNDQ0U2
OTAwRjNBQTA5IC8qIENyeXB0b1JzYUtleUFsZ29yaXRobS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
NzFDMjlFMzIyMDNDRTc4MTAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzE2RkUxMTQwRTZFMURBNzAwQkY2MDg4IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIu
aCBpbiBIZWFkZXJzICovLAotCQkJCTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmlt
YXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQ0FFOUY5MTAxNDY0
NDFGMDAwQzI0NUIwIC8qIENTU0FzcGVjdFJhdGlvVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTk0REU1QzgyMUQ3RjNBMTQwMDE2NEYyQSAvKiBDU1NBdFJ1bGVJRC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRkJENkFGODgxNUVGMjVDOTAwOEI3MTEwIC8qIENTU0Jhc2ljU2hhcGVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTMwOTA4LDcgKzMwODY4LDcgQEAKIAkJCQlBODBFNkNFNjBBMTk4OUNBMDA3
RkI4QzUgLyogQ1NTUHJpbWl0aXZlVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCUUxRUQ4QUMz
MENDNDlCRTAwMEJGQzU1NyAvKiBDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBODBFNkNGRjBBMTk4OUNBMDA3RkI4QzUgLyogQ1NTUHJvcGVydHkuaCBpbiBI
ZWFkZXJzICovLAotCQkJCTc4RDAyQkM2MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFu
aW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCisJCQkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8q
IENTU1Byb3BlcnR5QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTMxNzEzNDFGQkU3
OERCMDBGNzU4REUgLyogQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJNjU2NTgwRjQwOUQxMkIyMDAwMEU2MUQ3IC8qIENTU1Byb3BlcnR5TmFtZXMuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTk0NkQzNzQ2MUQ2RDAxRDQwMDc3MDg0RiAvKiBDU1NQcm9wZXJ0eVBh
cnNlci5oIGluIEhlYWRlcnMgKi8sCkBAIC0zMTczMiw3ICszMTY5Miw2IEBACiAJCQkJNTVCQkQ0
MjkyNERCNTYwNDAwQkI2RTBDIC8qIEltYWdlVXRpbGl0aWVzLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyNkY3NTZCMzFCM0I2NkY3MDAwNURENzkgLyogSW1tdXRhYmxlTkZBLmggaW4gSGVhZGVycyAq
LywKIAkJCQkyNkY3NTZCNTFCM0I2OEYyMDAwNURENzkgLyogSW1tdXRhYmxlTkZBTm9kZUJ1aWxk
ZXIuaCBpbiBIZWFkZXJzICovLAotCQkJCTMxNkZFMTE4MEU2RTFEQTcwMEJGNjA4OCAvKiBJbXBs
aWNpdEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkU5NjFDNTUxOEFEMzM4QzAwRDA3
REM1IC8qIEluYmFuZERhdGFUZXh0VHJhY2suaCBpbiBIZWFkZXJzICovLAogCQkJCTA3ODYzM0U5
MjNGRjM0N0IwMDg3QUUyMSAvKiBJbmJhbmRHZW5lcmljQ3VlLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwNzA2QTBEOTI0MDgzMEE3MDBFOTM4MTggLyogSW5iYW5kR2VuZXJpY0N1ZUlkZW50aWZpZXIu
aCBpbiBIZWFkZXJzICovLApAQCAtMzI3MDksNyArMzI2NjgsNiBAQAogCQkJCTUxN0E2M0M2MUI3
NDMxOTIwMEU3RENEQyAvKiBLZXllZEVuY29kZXJDRi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTUx
M0IzRDcxMTRCMTY2NjAwMUM0MjlCIC8qIEtleUV2ZW50Q29jb2EuaCBpbiBIZWFkZXJzICovLAog
CQkJCTI2NTU0MTM5MTQ4OTgxMUMwMDBERkM1RCAvKiBLZXlFdmVudENvZGVzSU9TLmggaW4gSGVh
ZGVycyAqLywKLQkJCQkzMTZGRTExQTBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM5MUZFQTVGODYwMDhDMDhDRSAvKiBLZXlm
cmFtZUFuaW1hdGlvbk9wdGlvbnMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxNTU2Q0I0MUY5RjA5
QkEwMEU3OEQwOCAvKiBLZXlmcmFtZUVmZmVjdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEyNDdF
M0ExRkVBNUY4NjAwOEMwOENFIC8qIEtleWZyYW1lRWZmZWN0T3B0aW9ucy5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJsZS5pZGwg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0YWJsZS5pZGwKaW5kZXggMTQ2NDcxMDAw
NjUxNjhmODI5ZmI2YTI0YWE2ODMwODFmM2FlNzAwMS4uNGZhOGNjNjI1OTA4ODUzYzU2MjJlY2Fl
M2RiYWE0YjI2MWRhNWRlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGFibGUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRhYmxlLmlk
bApAQCAtMjQsOSArMjQsNyBAQAogICovCiAKIC8vIGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93
ZWItYW5pbWF0aW9ucy0xLyN0aGUtYW5pbWF0YWJsZS1pbnRlcmZhY2UtbWl4aW4KLVsKLSAgICBF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMKLV0gaW50ZXJmYWNlIG1peGluIEFuaW1hdGFi
bGUgeworaW50ZXJmYWNlIG1peGluIEFuaW1hdGFibGUgewogICAgIFtNYXlUaHJvd0V4Y2VwdGlv
biwgQ2FsbFdpdGg9R2xvYmFsT2JqZWN0XSBXZWJBbmltYXRpb24gYW5pbWF0ZShvYmplY3Q/IGtl
eWZyYW1lcywgb3B0aW9uYWwgKHVucmVzdHJpY3RlZCBkb3VibGUgb3IgS2V5ZnJhbWVBbmltYXRp
b25PcHRpb25zKSBvcHRpb25zKTsKICAgICBzZXF1ZW5jZTxXZWJBbmltYXRpb24+IGdldEFuaW1h
dGlvbnMob3B0aW9uYWwgR2V0QW5pbWF0aW9uc09wdGlvbnMgb3B0aW9ucyk7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uRWZmZWN0LmlkbAppbmRleCBkYmRmMWZlMmM2
NGI0YzM2YzU5NDk4Njc5NjVlOTM0MjVhMWM4NzA3Li5mZGE0MTFhMjgyZmEyNzAyOWEzYzUxMjMy
ODdiYjcwOGU3Y2FhMjU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5p
bWF0aW9uRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9u
RWZmZWN0LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBFbmFibGVkQXRSdW50
aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3csCiAgICAgQ3VzdG9tVG9KU09i
amVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uRWZmZWN0IHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbCBiL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbAppbmRleCBiOTY5MWI0ODUz
NjQ2MjAyMmZhZDVkZWYwNGE3YTUwMjg4YWUyM2M5Li5lNzlmOGNmMGE1Yzk5ZmYzNWUxZTBlODMy
YzhmMGRlY2U1YTM1ZDE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5p
bWF0aW9uUGxheWJhY2tFdmVudC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCkBAIC0yNCw3ICsyNCw2IEBACiAgKi8KIAogWwotICAg
IEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKIF0g
aW50ZXJmYWNlIEFuaW1hdGlvblBsYXliYWNrRXZlbnQgOiBFdmVudCB7CiAgICAgY29uc3RydWN0
b3IoRE9NU3RyaW5nIHR5cGUsIG9wdGlvbmFsIEFuaW1hdGlvblBsYXliYWNrRXZlbnRJbml0IGV2
ZW50SW5pdERpY3QpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvblBsYXliYWNrRXZlbnRJbml0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Bbmlt
YXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwKaW5kZXggODg3MTJkOTJmMmUyNzA3MGU4MjFkYjQ3
ZjM2M2IxNzllY2I3NGExYy4uN2FhMWJiYWNjYzgxODQ5NTEzZTMxOTBiZmM0MzI0MWJiMjYwN2Nj
YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNr
RXZlbnRJbml0LmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxh
eWJhY2tFdmVudEluaXQuaWRsCkBAIC0yMyw5ICsyMyw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLVsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMKLV0gZGljdGlvbmFyeSBB
bmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CitkaWN0aW9uYXJ5IEFuaW1h
dGlvblBsYXliYWNrRXZlbnRJbml0IDogRXZlbnRJbml0IHsKICAgICBkb3VibGU/IGN1cnJlbnRU
aW1lID0gbnVsbDsKICAgICBkb3VibGU/IHRpbWVsaW5lVGltZSA9IG51bGw7CiB9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVsaW5lLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKaW5kZXggMDRmYTk1
OWRiNWQ1NWE2NTM1YjRiOWJkYjJmZGRlZjYxY2UzOWQ1NS4uZDViZWYxMGU5Zjk1MjE0M2VmYzg1
YTQ3YWI1MTY5YTlkNDIwNmM5NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0FuaW1hdGlvblRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5p
bWF0aW9uVGltZWxpbmUuaWRsCkBAIC0yNCw3ICsyNCw2IEBACiAgKi8KIAogWwotICAgIEVuYWJs
ZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucywKICAgICBFeHBvcnRNYWNybz1XRUJDT1JFX0VYUE9S
VCwKICAgICBDdXN0b21Ub0pTT2JqZWN0CiBdIGludGVyZmFjZSBBbmltYXRpb25UaW1lbGluZSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbCBi
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NBbmltYXRpb24uaWRsCmluZGV4IDFlNWI4ODRh
OWE2N2NhNTI5MTc2ZTM5ZWY2ODI5NWFmOGY2MTVjYjQuLmJhM2U2MmE1NDBlZmY3Yzk2ZjliZTk2
Yjk4NGE3MWNkYjlhN2VhNjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NBbmltYXRp
b24uaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVmIFVTVlN0cmluZyBDU1NPTVN0cmluZzsK
IAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uLAog
ICAgIEV4cG9zZWQ9V2luZG93CiBdIGludGVyZmFjZSBDU1NBbmltYXRpb24gOiBXZWJBbmltYXRp
b24gewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBDU1NPTVN0cmluZyBhbmltYXRpb25OYW1lOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNzgxNWFhMGQwOWQxYTJjY2I5Y2I5Mzg3YWMyNmUwOWY3ZGUyNmZhNQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1h
dGlvbi5jcHAKQEAgLTAsMCArMSwxODcwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA3LCAy
MDA4LCAyMDA5LCAyMDEzLCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMiwgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVy
aWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhl
IG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0
cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3Rz
IGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlv
ciB3cml0dGVuIHBlcm1pc3Npb24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNT
IE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERB
VEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1h
dGlvbi5oIgorCisjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCisjaW5j
bHVkZSAiQ1NTQ3Jvc3NmYWRlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVl
LmgiCisjaW5jbHVkZSAiQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0lt
YWdlVmFsdWUuaCIKKyNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgorI2luY2x1ZGUgIkNT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgi
CisjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgi
CisjaW5jbHVkZSAiQ2xpcFBhdGhPcGVyYXRpb24uaCIKKyNpbmNsdWRlICJDb2xvckJsZW5kaW5n
LmgiCisjaW5jbHVkZSAiRmxvYXRDb252ZXJzaW9uLmgiCisjaW5jbHVkZSAiRm9udENhc2NhZGUu
aCIKKyNpbmNsdWRlICJGb250U2VsZWN0aW9uQWxnb3JpdGhtLmgiCisjaW5jbHVkZSAiRm9udFRh
Z2dlZFNldHRpbmdzLmgiCisjaW5jbHVkZSAiR2FwTGVuZ3RoLmgiCisjaW5jbHVkZSAiSWRlbnRp
dHlUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAi
TWF0cml4M0RUcmFuc2Zvcm1PcGVyYXRpb24uaCIKKyNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1P
cGVyYXRpb24uaCIKKyNpbmNsdWRlICJSZW5kZXJCb3guaCIKKyNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgorI2luY2x1ZGUgIlN0eWxlQ2FjaGVkSW1hZ2UuaCIKKyNpbmNsdWRlICJTdHlsZUdlbmVy
YXRlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgorI2luY2x1
ZGUgIlN0eWxlUmVzb2x2ZXIuaCIKKyNpbmNsdWRlIDxhbGdvcml0aG0+CisjaW5jbHVkZSA8bWVt
b3J5PgorI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL05ldmVyRGVz
dHJveWVkLmg+CisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bv
aW50ZXJDb21wYXJpc29uLmg+CisjaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9UZXh0U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGlj
IGlubGluZSBpbnQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBp
bnQgZnJvbSwgaW50IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIGJsZW5kKGZy
b20sIHRvLCBwcm9ncmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIGJsZW5kRnVuYyhj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgZG91YmxlIGZyb20sIGRvdWJsZSB0bywg
ZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3Mp
OworfQorCitzdGF0aWMgaW5saW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sK
KyAgICByZXR1cm4gbmFycm93UHJlY2lzaW9uVG9GbG9hdChmcm9tICsgKHRvIC0gZnJvbSkgKiBw
cm9ncmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVz
cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgR2FwTGVuZ3RoJiBmcm9tLCBjb25zdCBHYXBMZW5ndGgm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIChmcm9tLmlzTm9ybWFsKCkgfHwg
dG8uaXNOb3JtYWwoKSkgPyB0byA6IGJsZW5kKGZyb20ubGVuZ3RoKCksIHRvLmxlbmd0aCgpLCBw
cm9ncmVzcyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgTGVuZ3RoU2l6ZSBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwg
Y29uc3QgTGVuZ3RoU2l6ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4geyBi
bGVuZEZ1bmMoYW5pbSwgZnJvbS53aWR0aCwgdG8ud2lkdGgsIHByb2dyZXNzKSwgYmxlbmRGdW5j
KGFuaW0sIGZyb20uaGVpZ2h0LCB0by5oZWlnaHQsIHByb2dyZXNzKSB9OworfQorCitzdGF0aWMg
aW5saW5lIFNoYWRvd1N0eWxlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBTaGFkb3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0bywgZG91YmxlIHByb2dy
ZXNzKQoreworICAgIGlmIChmcm9tID09IHRvKQorICAgICAgICByZXR1cm4gdG87CisKKyAgICBk
b3VibGUgZnJvbVZhbCA9IGZyb20gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOworICAg
IGRvdWJsZSB0b1ZhbCA9IHRvID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKKyAgICBk
b3VibGUgcmVzdWx0ID0gYmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7
CisgICAgcmV0dXJuIHJlc3VsdCA+IDAgPyBTaGFkb3dTdHlsZTo6Tm9ybWFsIDogU2hhZG93U3R5
bGU6Okluc2V0OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRh
PiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3Qg
U2hhZG93RGF0YSogZnJvbSwgY29uc3QgU2hhZG93RGF0YSogdG8sIGRvdWJsZSBwcm9ncmVzcykK
K3sKKyAgICBBU1NFUlQoZnJvbSAmJiB0byk7CisgICAgaWYgKGZyb20tPnN0eWxlKCkgIT0gdG8t
PnN0eWxlKCkpCisgICAgICAgIHJldHVybiBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCp0byk7CisK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPihibGVuZChmcm9tLT5sb2NhdGlvbigp
LCB0by0+bG9jYXRpb24oKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5yYWRpdXMo
KSwgdG8tPnJhZGl1cygpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kKGZyb20tPnNwcmVhZCgp
LCB0by0+c3ByZWFkKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20t
PnN0eWxlKCksIHRvLT5zdHlsZSgpLCBwcm9ncmVzcyksCisgICAgICAgIGZyb20tPmlzV2Via2l0
Qm94U2hhZG93KCksCisgICAgICAgIGJsZW5kKGZyb20tPmNvbG9yKCksIHRvLT5jb2xvcigpLCBw
cm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW1hdGlvbiwgY29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRv
dWJsZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoYW5pbWF0aW9uLT50cmFuc2Zvcm1GdW5jdGlvbkxp
c3RzTWF0Y2goKSkKKyAgICAgICAgcmV0dXJuIHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMo
ZnJvbSwgcHJvZ3Jlc3MpOworICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBv
bGF0aW9uKGZyb20sIHByb2dyZXNzLCBpczxSZW5kZXJCb3g+KGFuaW1hdGlvbi0+cmVuZGVyZXIo
KSkgPyBkb3duY2FzdDxSZW5kZXJCb3g+KCphbmltYXRpb24tPnJlbmRlcmVyKCkpLmJvcmRlckJv
eFJlY3QoKS5zaXplKCkgOiBMYXlvdXRTaXplKCkpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0
cjxDbGlwUGF0aE9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBDbGlwUGF0aE9wZXJhdGlvbiogZnJvbSwgQ2xpcFBhdGhPcGVyYXRpb24qIHRvLCBk
b3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0bykKKyAgICAgICAgcmV0dXJu
IHRvOworCisgICAgLy8gT3RoZXIgY2xpcC1wYXRoIG9wZXJhdGlvbnMgdGhhbiBCYXNpY1NoYXBl
cyBjYW4gbm90IGJlIGFuaW1hdGVkLgorICAgIGlmIChmcm9tLT50eXBlKCkgIT0gQ2xpcFBhdGhP
cGVyYXRpb246OlNoYXBlIHx8IHRvLT50eXBlKCkgIT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBl
KQorICAgICAgICByZXR1cm4gdG87CisKKyAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUg
PSBkb3duY2FzdDxTaGFwZUNsaXBQYXRoT3BlcmF0aW9uPigqZnJvbSkuYmFzaWNTaGFwZSgpOwor
ICAgIGNvbnN0IEJhc2ljU2hhcGUmIHRvU2hhcGUgPSBkb3duY2FzdDxTaGFwZUNsaXBQYXRoT3Bl
cmF0aW9uPigqdG8pLmJhc2ljU2hhcGUoKTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5k
KHRvU2hhcGUpKQorICAgICAgICByZXR1cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVDbGlwUGF0
aE9wZXJhdGlvbjo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcykpOwor
fQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFNoYXBlVmFsdWUqIGZyb20sIFNoYXBlVmFsdWUqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8ICF0bykKKyAgICAgICAgcmV0
dXJuIHRvOworCisgICAgaWYgKGZyb20tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFw
ZSB8fCB0by0+dHlwZSgpICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlKQorICAgICAgICByZXR1
cm4gdG87CisKKyAgICBpZiAoZnJvbS0+Y3NzQm94KCkgIT0gdG8tPmNzc0JveCgpKQorICAgICAg
ICByZXR1cm4gdG87CisKKyAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSAqZnJvbS0+
c2hhcGUoKTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gKnRvLT5zaGFwZSgpOwor
CisgICAgaWYgKCFmcm9tU2hhcGUuY2FuQmxlbmQodG9TaGFwZSkpCisgICAgICAgIHJldHVybiB0
bzsKKworICAgIHJldHVybiBTaGFwZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hh
cGUsIHByb2dyZXNzKSwgdG8tPmNzc0JveCgpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8
RmlsdGVyT3BlcmF0aW9uPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIEZpbHRlck9wZXJhdGlvbiogZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24qIHRvT3AsIGRvdWJs
ZSBwcm9ncmVzcywgYm9vbCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKK3sKKyAgICBBU1NF
UlQodG9PcCk7CisgICAgcmV0dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5k
VG9QYXNzdGhyb3VnaCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVu
ZEZpbHRlck9wZXJhdGlvbnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7CisgICAg
c2l6ZV90IGZyb21TaXplID0gZnJvbS5vcGVyYXRpb25zKCkuc2l6ZSgpOworICAgIHNpemVfdCB0
b1NpemUgPSB0by5vcGVyYXRpb25zKCkuc2l6ZSgpOworICAgIHNpemVfdCBzaXplID0gc3RkOjpt
YXgoZnJvbVNpemUsIHRvU2l6ZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBmcm9t
U2l6ZSkgPyBmcm9tLm9wZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7CisgICAgICAgIFJlZlB0cjxG
aWx0ZXJPcGVyYXRpb24+IHRvT3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClbaV0u
Z2V0KCkgOiAwOworICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0
b09wID8gYmxlbmRGdW5jKGFuaW0sIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3Mp
IDogKGZyb21PcCA/IGJsZW5kRnVuYyhhbmltLCAwLCBmcm9tT3AuZ2V0KCksIHByb2dyZXNzLCB0
cnVlKSA6IDApOworICAgICAgICBpZiAoYmxlbmRlZE9wKQorICAgICAgICAgICAgcmVzdWx0Lm9w
ZXJhdGlvbnMoKS5hcHBlbmQoYmxlbmRlZE9wKTsKKyAgICAgICAgZWxzZSB7CisgICAgICAgICAg
ICBhdXRvIGlkZW50aXR5T3AgPSBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBpZiAocHJvZ3Jlc3MgPiAwLjUpCisgICAgICAgICAgICAgICAgcmVzdWx0
Lm9wZXJhdGlvbnMoKS5hcHBlbmQodG9PcCA/IHRvT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsK
KyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFw
cGVuZChmcm9tT3AgPyBmcm9tT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKKyAgICAgICAgfQor
ICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJh
dGlvbnMgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNv
bnN0IEZpbHRlck9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBk
b3VibGUgcHJvZ3Jlc3MsIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5Rmls
dGVyKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OworCisgICAgLy8gSWYgd2UgaGF2
ZSBhIGZpbHRlciBmdW5jdGlvbiBsaXN0LCB1c2UgdGhhdCB0byBkbyBhIHBlci1mdW5jdGlvbiBh
bmltYXRpb24uCisgICAgCisgICAgYm9vbCBsaXN0c01hdGNoID0gZmFsc2U7CisgICAgc3dpdGNo
IChwcm9wZXJ0eUlEKSB7CisgICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKKyAgICAgICAgbGlz
dHNNYXRjaCA9IGFuaW0tPmZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVh
azsKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZHJvcEZpbHRlcjoKKyAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmJhY2tkcm9wRmls
dGVyRnVuY3Rpb25MaXN0c01hdGNoKCk7CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmlt
LT5jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyAgICBk
ZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgCisgICAgaWYgKGxpc3RzTWF0Y2gp
CisgICAgICAgIHJlc3VsdCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmltLCBmcm9tLCB0bywg
cHJvZ3Jlc3MpOworICAgIGVsc2UgeworICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZ1bmN0aW9u
IGxpc3RzIGRvbid0IG1hdGNoLCB3ZSBjb3VsZCB0cnkgdG8gY3Jvc3MtZmFkZSwgYnV0IGRvbid0
IHlldCBoYXZlIGEgd2F5IHRvIHJlcHJlc2VudCB0aGF0IGluIENTUy4KKyAgICAgICAgLy8gRm9y
IG5vdyB3ZSdsbCBqdXN0IGZhaWwgdG8gYW5pbWF0ZS4KKyAgICAgICAgcmVzdWx0ID0gdG87Cisg
ICAgfQorCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5
bGVJbWFnZT4gYmxlbmRGaWx0ZXIoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgQ2FjaGVkSW1hZ2UqIGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25z
dCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEFTU0VSVChp
bWFnZSk7CisgICAgRmlsdGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRlck9w
ZXJhdGlvbnMoYW5pbSwgZnJvbSwgdG8sIHByb2dyZXNzKTsKKworICAgIGF1dG8gaW1hZ2VWYWx1
ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqaW1hZ2UpOworICAgIGF1dG8gZmlsdGVyVmFsdWUg
PSBDb21wdXRlZFN0eWxlRXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcihhbmltLT5jdXJyZW50U3R5
bGUoKSwgZmlsdGVyUmVzdWx0LCBEb05vdEFkanVzdFBpeGVsVmFsdWVzKTsKKworICAgIGF1dG8g
cmVzdWx0ID0gQ1NTRmlsdGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2VWYWx1ZSks
IFdURk1vdmUoZmlsdGVyVmFsdWUpKTsKKyAgICByZXN1bHQuZ2V0KCkuc2V0RmlsdGVyT3BlcmF0
aW9ucyhmaWx0ZXJSZXN1bHQpOworICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVh
dGUoV1RGTW92ZShyZXN1bHQpKTsKK30KKworc3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBWaXNpYmlsaXR5IGZy
b20sIFZpc2liaWxpdHkgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBBbnkgbm9uLXpl
cm8gcmVzdWx0IG1lYW5zIHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUgdmlzaWJsZS4gT25s
eSBhdCAwIGRvIHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUKKyAgICAvLyBpbnZpc2libGUu
IFRoZSBpbnZpc2libGUgdmFsdWUgd2UgdXNlIChWaXNpYmlsaXR5OjpIaWRkZW4gdnMuIFZpc2li
aWxpdHk6OkNvbGxhcHNlKSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpZWQgZnJvbS90byB2YWx1ZXMu
CisgICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6
IDAuOworICAgIGRvdWJsZSB0b1ZhbCA9IHRvID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6
IDAuOworICAgIGlmIChmcm9tVmFsID09IHRvVmFsKQorICAgICAgICByZXR1cm4gdG87CisgICAg
ZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3Mp
OworICAgIHJldHVybiByZXN1bHQgPiAwLiA/IFZpc2liaWxpdHk6OlZpc2libGUgOiAodG8gIT0g
VmlzaWJpbGl0eTo6VmlzaWJsZSA/IHRvIDogZnJvbSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVGV4
dFVuZGVybGluZU9mZnNldCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4dFVuZGVy
bGluZU9mZnNldCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbS5pc0xlbmd0
aCgpICYmIHRvLmlzTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zmc2V0
OjpjcmVhdGVXaXRoTGVuZ3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRv
Lmxlbmd0aFZhbHVlKCksIHByb2dyZXNzKSk7CisgICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZz
ZXQ6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25U
aGlja25lc3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IGNvbnN0IFRleHREZWNvcmF0aW9uVGhpY2tuZXNzJiBmcm9tLCBjb25zdCBUZXh0RGVjb3JhdGlv
blRoaWNrbmVzcyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbS5pc0xlbmd0
aCgpICYmIHRvLmlzTGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNr
bmVzczo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgp
LCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0RGVjb3JhdGlv
blRoaWNrbmVzczo6Y3JlYXRlV2l0aEF1dG8oKTsKK30KKworc3RhdGljIGlubGluZSBMZW5ndGhC
b3ggYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0
IExlbmd0aEJveCYgZnJvbSwgY29uc3QgTGVuZ3RoQm94JiB0bywgZG91YmxlIHByb2dyZXNzKQor
eworICAgIExlbmd0aEJveCByZXN1bHQoYmxlbmRGdW5jKGFuaW0sIGZyb20udG9wKCksIHRvLnRv
cCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJv
bS5yaWdodCgpLCB0by5yaWdodCgpLCBwcm9ncmVzcyksCisgICAgICAgICAgICAgICAgICAgICBi
bGVuZEZ1bmMoYW5pbSwgZnJvbS5ib3R0b20oKSwgdG8uYm90dG9tKCksIHByb2dyZXNzKSwKKyAg
ICAgICAgICAgICAgICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlZnQoKSwgdG8ubGVmdCgp
LCBwcm9ncmVzcykpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgU1ZH
TGVuZ3RoVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBj
b25zdCBTVkdMZW5ndGhWYWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJuIFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tLCB0
bywgbmFycm93UHJlY2lzaW9uVG9GbG9hdChwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5saW5l
IFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+JiBmcm9tLCBjb25zdCBWZWN0
b3I8U1ZHTGVuZ3RoVmFsdWU+JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHNpemVfdCBm
cm9tTGVuZ3RoID0gZnJvbS5zaXplKCk7CisgICAgc2l6ZV90IHRvTGVuZ3RoID0gdG8uc2l6ZSgp
OworICAgIGlmICghZnJvbUxlbmd0aCkKKyAgICAgICAgcmV0dXJuICFwcm9ncmVzcyA/IGZyb20g
OiB0bzsKKyAgICBpZiAoIXRvTGVuZ3RoKQorICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPT0gMSA/
IGZyb20gOiB0bzsKKyAgICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsKKyAgICBp
ZiAoZnJvbUxlbmd0aCAhPSB0b0xlbmd0aCkgeworICAgICAgICBpZiAoIXJlbWFpbmRlcihzdGQ6
Om1heChmcm9tTGVuZ3RoLCB0b0xlbmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRvTGVuZ3Ro
KSkpCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xl
bmd0aCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJlc3VsdExlbmd0aCA9IGZyb21MZW5n
dGggKiB0b0xlbmd0aDsKKyAgICB9CisgICAgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiByZXN1bHQo
cmVzdWx0TGVuZ3RoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdExlbmd0aDsg
KytpKQorICAgICAgICByZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbVtpICUg
ZnJvbUxlbmd0aF0sIHRvW2kgJSB0b0xlbmd0aF0sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJv
Z3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxT
dHlsZUltYWdlPiBjcm9zc2ZhZGVCbGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgU3R5bGVDYWNoZWRJbWFnZSogZnJvbVN0eWxlSW1hZ2UsIFN0eWxlQ2FjaGVkSW1hZ2UqIHRv
U3R5bGVJbWFnZSwgZG91YmxlIHByb2dyZXNzKQoreworICAgIC8vIElmIHByb2dyZXNzIGlzIGF0
IG9uZSBvZiB0aGUgZXh0cmVtZXMsIHdlIHdhbnQgZ2V0Q29tcHV0ZWRTdHlsZSB0byBzaG93IHRo
ZSBpbWFnZSwKKyAgICAvLyBub3QgYSBjb21wbGV0ZWQgY3Jvc3MtZmFkZSwgc28gd2UgaGFuZCBi
YWNrIG9uZSBvZiB0aGUgZXhpc3RpbmcgaW1hZ2VzLgorICAgIGlmICghcHJvZ3Jlc3MpCisgICAg
ICAgIHJldHVybiBmcm9tU3R5bGVJbWFnZTsKKyAgICBpZiAocHJvZ3Jlc3MgPT0gMSkKKyAgICAg
ICAgcmV0dXJuIHRvU3R5bGVJbWFnZTsKKyAgICBpZiAoIWZyb21TdHlsZUltYWdlLT5jYWNoZWRJ
bWFnZSgpIHx8ICF0b1N0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpCisgICAgICAgIHJldHVybiB0
b1N0eWxlSW1hZ2U7CisKKyAgICBhdXRvIGZyb21JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6
Y3JlYXRlKCpmcm9tU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSk7CisgICAgYXV0byB0b0ltYWdl
VmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKnRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2Uo
KSk7CisgICAgYXV0byBwZXJjZW50YWdlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
KHByb2dyZXNzLCBDU1NVbml0VHlwZTo6Q1NTX05VTUJFUik7CisKKyAgICBhdXRvIGNyb3NzZmFk
ZVZhbHVlID0gQ1NTQ3Jvc3NmYWRlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGZyb21JbWFnZVZhbHVl
KSwgV1RGTW92ZSh0b0ltYWdlVmFsdWUpLCBXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpOworICAg
IHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1
ZSkpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgU3R5bGVJbWFnZSogZnJvbSwgU3R5
bGVJbWFnZSogdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoIWZyb20gfHwgIXRvKQor
ICAgICAgICByZXR1cm4gdG87CisKKyAgICBmcm9tID0gZnJvbS0+c2VsZWN0ZWRJbWFnZSgpOwor
ICAgIHRvID0gdG8tPnNlbGVjdGVkSW1hZ2UoKTsKKworICAgIGlmICghZnJvbSB8fCAhdG8pCisg
ICAgICAgIHJldHVybiB0bzsgICAgCisKKyAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28gZ2Vu
ZXJhdGVkIGltYWdlcy4gQ3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgorICAgIGlmIChp
czxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4o
KnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVkID0g
ZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKKyAgICAg
ICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdl
bmVyYXRlZEltYWdlPigqdG8pLmltYWdlVmFsdWUoKTsKKworICAgICAgICBpZiAoaXM8Q1NTRmls
dGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
dG9HZW5lcmF0ZWQpKSB7CisgICAgICAgICAgICAvLyBBbmltYXRpb24gb2YgZ2VuZXJhdGVkIGlt
YWdlcyBqdXN0IHBvc3NpYmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1YWwuCisgICAgICAgICAg
ICAvLyBPdGhlcndpc2UgZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5pbWF0aW9uLgorICAgICAg
ICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRl
ckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpOworICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VW
YWx1ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRl
ZCk7CisgICAgICAgICAgICBpZiAoZnJvbUZpbHRlci5lcXVhbElucHV0SW1hZ2VzKHRvRmlsdGVy
KSAmJiBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGJs
ZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0
ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwor
ICAgICAgICB9CisKKyAgICAgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJh
dGVkKSAmJiBpczxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7CisgICAgICAgICAg
ICBDU1NDcm9zc2ZhZGVWYWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFk
ZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0
b0Nyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCk7Cisg
ICAgICAgICAgICBpZiAoZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0SW1hZ2VzKHRvQ3Jvc3NmYWRl
KSkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0gdG9Dcm9zc2Zh
ZGUuYmxlbmQoZnJvbUNyb3NzZmFkZSwgcHJvZ3Jlc3MpKQorICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKCpjcm9zc2ZhZGVCbGVuZCk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9y
IGFuaW1hdGlvbiBiZXR3ZWVuIHR3byAqZ3JhZGllbnQoKSBmdW5jdGlvbnMuCisgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NTYKKyAgICB9IGVs
c2UgaWYgKGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUNhY2hlZElt
YWdlPigqdG8pKSB7CisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0
ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwor
ICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkpIHsKKyAg
ICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NG
aWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIGlmIChmcm9tRmls
dGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKS5jYWNo
ZWRJbWFnZSgpID09IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmls
dGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Cisg
ICAgICAgIH0KKyAgICAgICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gY3Jv
c3MtZmFkZSBhbmQgaW1hZ2Ugc291cmNlLgorICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVDYWNoZWRJ
bWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKKyAgICAgICAg
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVy
YXRlZEltYWdlPigqdG8pLmltYWdlVmFsdWUoKTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlcklt
YWdlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1
ZSYgdG9GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCk7
CisgICAgICAgICAgICBpZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHls
ZUNhY2hlZEltYWdlPigqZnJvbSkuY2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5jYWNoZWRJbWFn
ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCB0b0ZpbHRlci5j
YWNoZWRJbWFnZSgpLCBGaWx0ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlv
bnMoKSwgcHJvZ3Jlc3MpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJw
b2xhdGlvbiBiZXR3ZWVuIGltYWdlIHNvdXJjZSBhbmQgY3Jvc3MtZmFkZS4KKyAgICB9CisKKyAg
ICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hlZCBhbmQgZ2Vu
ZXJhdGVkIGltYWdlcy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NzgyOTMKKyAgICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0
eWxlQ2FjaGVkSW1hZ2U+KCp0bykpCisgICAgICAgIHJldHVybiBjcm9zc2ZhZGVCbGVuZChhbmlt
LCBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPihmcm9tKSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJ
bWFnZT4odG8pLCBwcm9ncmVzcyk7CisKKyAgICByZXR1cm4gdG87Cit9CisKK3N0YXRpYyBpbmxp
bmUgTmluZVBpZWNlSW1hZ2UgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIGNvbnN0IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJbWFn
ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoIWZyb20uaGFzSW1hZ2UoKSB8fCAh
dG8uaGFzSW1hZ2UoKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgLy8gRklYTUUgKDc0MTEy
KTogU3VwcG9ydCB0cmFuc2l0aW9uaW5nIGJldHdlZW4gTmluZVBpZWNlSW1hZ2VzIHRoYXQgZGlm
ZmVyIGJ5IG1vcmUgdGhhbiBpbWFnZSBjb250ZW50LgorCisgICAgaWYgKGZyb20uaW1hZ2VTbGlj
ZXMoKSAhPSB0by5pbWFnZVNsaWNlcygpIHx8IGZyb20uYm9yZGVyU2xpY2VzKCkgIT0gdG8uYm9y
ZGVyU2xpY2VzKCkgfHwgZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRzZXQoKSB8fCBmcm9tLmZpbGwo
KSAhPSB0by5maWxsKCkgfHwgZnJvbS5ob3Jpem9udGFsUnVsZSgpICE9IHRvLmhvcml6b250YWxS
dWxlKCkgfHwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0aWNhbFJ1bGUoKSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gYW5pbS0+cmVuZGVyZXIo
KSkgeworICAgICAgICBpZiAoZnJvbS5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkg
IT0gdG8uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAxLjApKQorICAgICAgICAgICAgcmV0
dXJuIHRvOworICAgIH0KKworICAgIHJldHVybiBOaW5lUGllY2VJbWFnZShibGVuZEZ1bmMoYW5p
bSwgZnJvbS5pbWFnZSgpLCB0by5pbWFnZSgpLCBwcm9ncmVzcyksCisgICAgICAgIGZyb20uaW1h
Z2VTbGljZXMoKSwgZnJvbS5maWxsKCksIGZyb20uYm9yZGVyU2xpY2VzKCksIGZyb20ub3V0c2V0
KCksIGZyb20uaG9yaXpvbnRhbFJ1bGUoKSwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSk7Cit9CisKKyNp
ZiBFTkFCTEUoVkFSSUFUSU9OX0ZPTlRTKQorCitzdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25T
ZXR0aW5ncyBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
Y29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0
dGluZ3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20uc2l6ZSgpICE9IHRv
LnNpemUoKSkKKyAgICAgICAgcmV0dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOworICAgIEZv
bnRWYXJpYXRpb25TZXR0aW5ncyByZXN1bHQ7CisgICAgdW5zaWduZWQgc2l6ZSA9IGZyb20uc2l6
ZSgpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKKyAgICAgICAg
YXV0byYgZnJvbUl0ZW0gPSBmcm9tLmF0KGkpOworICAgICAgICBhdXRvJiB0b0l0ZW0gPSB0by5h
dChpKTsKKyAgICAgICAgaWYgKGZyb21JdGVtLnRhZygpICE9IHRvSXRlbS50YWcoKSkKKyAgICAg
ICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKKyAgICAgICAgZmxvYXQgaW50
ZXJwb2xhdGVkID0gYmxlbmRGdW5jKGFuaW0sIGZyb21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1
ZSgpLCBwcm9ncmVzcyk7CisgICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50YWcoKSwg
aW50ZXJwb2xhdGVkIH0pOworICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjZW5kaWYK
Kworc3RhdGljIGlubGluZSBGb250U2VsZWN0aW9uVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZvbnRTZWxlY3Rpb25WYWx1ZSBmcm9tLCBGb250
U2VsZWN0aW9uVmFsdWUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gRm9udFNl
bGVjdGlvblZhbHVlKGJsZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSksIHN0
YXRpY19jYXN0PGZsb2F0Pih0byksIHByb2dyZXNzKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgT3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmcm9tLCBPcHRp
b25hbDxGb250U2VsZWN0aW9uVmFsdWU+IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0
dXJuIEZvbnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+
KGZyb20udmFsdWUoKSksIHN0YXRpY19jYXN0PGZsb2F0Pih0by52YWx1ZSgpKSwgcHJvZ3Jlc3Mp
KTsKK30KKworY2xhc3MgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01B
S0VfTk9OQ09QWUFCTEUoQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSk7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZShDU1NQcm9wZXJ0eUlEIHByb3ApCisgICAgICAgIDogbV9wcm9wKHByb3Ap
CisgICAgeworICAgIH0KKyAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KCkgPSBkZWZhdWx0OworCisgICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CisgICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSopIGNvbnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5
bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSkgY29uc3QgPSAwOworICAgIAorI2lmICFM
T0dfRElTQUJMRUQKKyAgICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3Vi
bGUpIGNvbnN0ID0gMDsKKyNlbmRpZgorCisgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNv
bnN0IHsgcmV0dXJuIG1fcHJvcDsgfQorCisgICAgdmlydHVhbCBib29sIGFuaW1hdGlvbklzQWNj
ZWxlcmF0ZWQoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorCitwcml2YXRlOgorICAgIENTU1By
b3BlcnR5SUQgbV9wcm9wOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFw
cGVyR2V0dGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAg
ICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMo
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAg
IHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgfQorCisg
ICAgVCB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
Y29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAor
ICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBi
bGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2
YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVl
KHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgVCAoUmVuZGVyU3R5
bGU6OiptX2dldHRlcikoKSBjb25zdDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xh
c3MgUHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8VD4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVu
ZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAg
ICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVy
R2V0dGVyPFQ+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1f
Z2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgKFJl
bmRlclN0eWxlOjoqbV9zZXR0ZXIpKFQpOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+Citj
bGFzcyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdl
dHRlcjxUKj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFJl
ZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUKiAoUmVuZGVyU3R5
bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8
VD4mJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPihwcm9wLCBnZXR0ZXIp
CisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBk
c3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlciko
KSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3Mp
KTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVy
KShSZWZQdHI8VD4mJik7Cit9OworCitjbGFzcyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIgOiBwdWJs
aWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlJRCBwcm9wLCBjb25zdCBMZW5ndGgmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKExlbmd0aCYmKSkKKyAgICAgICAgOiBQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAs
IG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBjYW5JbnRlcnBvbGF0
ZShjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICByZXR1cm4gIShhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKSAmJiAhKGItPipQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpOworICAgIH0KKwor
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25z
dCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IExlbmd0aCY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5ndGgmJik7Cit9OworCit0ZW1w
bGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIgOiBw
dWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFQmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFQmJikpCisgICAgICAgIDogUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wLCBnZXR0ZXIpCisgICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxl
KiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQorICAgIHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUJiYpOwor
fTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGggOiBwdWJsaWMgUmVmQ291bnRlZFBy
b3BlcnR5V3JhcHBlcjxDbGlwUGF0aE9wZXJhdGlvbj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENTU1Byb3BlcnR5
SUQgcHJvcCwgQ2xpcFBhdGhPcGVyYXRpb24qIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25z
dCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4m
JikpCisgICAgICAgIDogUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxDbGlwUGF0aE9wZXJhdGlv
bj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxz
KGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUs
IGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KKyAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51
bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCisgICAgICAg
IGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8
ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENsaXBQYXRoT3BlcmF0
aW9uKiBjbGlwUGF0aEEgPSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBDbGlwUGF0aE9wZXJh
dGlvbiogY2xpcFBhdGhCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAgICAgaWYgKGNsaXBQYXRo
QSA9PSBjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFj
bGlwUGF0aEEgfHwgIWNsaXBQYXRoQikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAg
ICAgcmV0dXJuICpjbGlwUGF0aEEgPT0gKmNsaXBQYXRoQjsKKyAgICB9Cit9OworCisjaWYgRU5B
QkxFKFZBUklBVElPTl9GT05UUykKK2NsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRWYXJpYXRpb25T
ZXR0aW5ncyA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZhcmlhdGlvblNldHRpbmdzPiB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFw
cGVyRm9udFZhcmlhdGlvblNldHRpbmdzKENTU1Byb3BlcnR5SUQgcHJvcCwgRm9udFZhcmlhdGlv
blNldHRpbmdzIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6OipzZXR0ZXIpKEZvbnRWYXJpYXRpb25TZXR0aW5ncykpCisgICAgICAgIDogUHJvcGVydHlX
cmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5ncz4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBz
dHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4K
KyAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUg
bnVsbCwgcmV0dXJuIHRydWUuCisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGlu
Z3NBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRp
bmdzJiB2YXJpYXRpb25TZXR0aW5nc0IgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAgICByZXR1
cm4gdmFyaWF0aW9uU2V0dGluZ3NBID09IHZhcmlhdGlvblNldHRpbmdzQjsKKyAgICB9Cit9Owor
I2VuZGlmCisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQ
cm9wZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwg
U2hhcGVWYWx1ZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnNldHRlcikoUmVmUHRyPFNoYXBlVmFsdWU+JiYpKQorICAgICAgICA6IFJlZkNvdW50
ZWRQcm9wZXJ0eVdyYXBwZXI8U2hhcGVWYWx1ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAg
eworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIC8vIElmIHRoZSBz
dHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4K
KyAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUg
bnVsbCwgcmV0dXJuIHRydWUuCisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIFNoYXBlVmFsdWUqIHNoYXBlQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIFNoYXBlVmFsdWUqIHNoYXBlQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChz
aGFwZUEgPT0gc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
c2hhcGVBIHx8ICFzaGFwZUIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIHJl
dHVybiAqc2hhcGVBID09ICpzaGFwZUI7CisgICAgfQorfTsKKworY2xhc3MgU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1h
Z2U+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBTdHlsZUlt
YWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgU3R5bGVJbWFnZSogKFJlbmRl
clN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVm
UHRyPFN0eWxlSW1hZ2U+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8
U3R5bGVJbWFnZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJv
b2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIFN0eWxlSW1hZ2UqIGltYWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIHJldHVy
biBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsKKyAgICB9Cit9OworCitj
bGFzcyBQcm9wZXJ0eVdyYXBwZXJDb2xvciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgQ29sb3ImPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgUHJvcGVydHlXcmFwcGVyQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYg
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
Q29sb3ImPihwcm9wLCBnZXR0ZXIpCisgICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsK
KyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAg
ICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgQ29sb3ImPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAgIH0KKworcHJv
dGVjdGVkOgorICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7
Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkgOiBwdWJsaWMg
UHJvcGVydHlXcmFwcGVyPGZsb2F0PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5KCkKKyAgICAgICAg
OiBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3BhY2l0eSwgJlJlbmRlclN0eWxl
OjpvcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldE9wYWNpdHkpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBkc3QtPnNldE9wYWNpdHkoYmxlbmRGdW5jKGFuaW0sIGEtPm9wYWNpdHkoKSwgYi0+b3BhY2l0
eSgpLCBwcm9ncmVzcykpOworICAgIH0KK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckFjY2Vs
ZXJhdGVkVHJhbnNmb3JtIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1P
cGVyYXRpb25zJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtKCkKKyAgICAgICAgOiBQcm9wZXJ0
eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5VHJhbnNmb3Jt
LCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92
ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBkc3QtPnNldFRyYW5zZm9ybShibGVuZEZ1bmMoYW5pbSwgYS0+
dHJhbnNmb3JtKCksIGItPnRyYW5zZm9ybSgpLCBwcm9ncmVzcykpOworICAgIH0KK307CisKK2Ns
YXNzIFByb3BlcnR5V3JhcHBlckZpbHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3Qg
RmlsdGVyT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBj
b25zdCBGaWx0ZXJPcGVyYXRpb25zJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikpCisgICAg
ICAgIDogUHJvcGVydHlXcmFwcGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPihwcm9wZXJ0eUlE
LCBnZXR0ZXIsIHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9vbCBhbmltYXRpb25Jc0Fj
Y2VsZXJhdGVkKCkgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBwcm9wZXJ0
eSgpID09IENTU1Byb3BlcnR5RmlsdGVyCisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAg
ICAgICAgICAgIHx8IHByb3BlcnR5KCkgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRl
cgorI2VuZGlmCisgICAgICAgICAgICA7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFu
aW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPjo6
bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzLCBwcm9wZXJ0eSgpKSk7CisgICAgfQorfTsK
Kworc3RhdGljIGlubGluZSBzaXplX3Qgc2hhZG93TGlzdExlbmd0aChjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3cpCit7CisgICAgc2l6ZV90IGNvdW50OworICAgIGZvciAoY291bnQgPSAwOyBzaGFk
b3c7IHNoYWRvdyA9IHNoYWRvdy0+bmV4dCgpKQorICAgICAgICArK2NvdW50OworICAgIHJldHVy
biBjb3VudDsKK30KKworc3RhdGljIGlubGluZSBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dGb3JC
bGVuZGluZyhjb25zdCBTaGFkb3dEYXRhKiBzcmNTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIG90
aGVyU2hhZG93KQoreworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZh
dWx0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCBm
YWxzZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxTaGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAs
IFNoYWRvd1N0eWxlOjpJbnNldCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAg
ICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdFdlYktpdEJveFNoYWRv
d0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgQ29s
b3I6OnRyYW5zcGFyZW50QmxhY2spOworICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dE
YXRhPiBkZWZhdWx0SW5zZXRXZWJLaXRCb3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAs
IFNoYWRvd1N0eWxlOjpJbnNldCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOworCisg
ICAgaWYgKHNyY1NoYWRvdykKKyAgICAgICAgcmV0dXJuIHNyY1NoYWRvdzsKKworICAgIGlmIChv
dGhlclNoYWRvdy0+c3R5bGUoKSA9PSBTaGFkb3dTdHlsZTo6SW5zZXQpCisgICAgICAgIHJldHVy
biBvdGhlclNoYWRvdy0+aXNXZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0SW5zZXRXZWJLaXRC
b3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRJbnNldFNoYWRvd0RhdGEuZ2V0KCk7CisKKyAg
ICByZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdFdlYktp
dEJveFNoYWRvd0RhdGEuZ2V0KCkgOiAmZGVmYXVsdFNoYWRvd0RhdGEuZ2V0KCk7Cit9CisKK2Ns
YXNzIFByb3BlcnR5V3JhcHBlclNoYWRvdyA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9w
ZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBTaGFkb3dEYXRhKiAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4sIGJvb2wpKQorICAgICAgICA6IEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisg
ICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAg
ICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAg
ICAgd2hpbGUgKHRydWUpIHsKKyAgICAgICAgICAgIC8vIGVuZCBvZiBib3RoIGxpc3RzCisgICAg
ICAgICAgICBpZiAoIXNoYWRvd0EgJiYgIXNoYWRvd0IpCisgICAgICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICAgICAgICAgIC8vIGVuZCBvZiBqdXN0IG9uZSBvZiB0aGUgbGlzdHMKKyAg
ICAgICAgICAgIGlmICghc2hhZG93QSB8fCAhc2hhZG93QikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgICAgIGlmICgqc2hhZG93QSAhPSAqc2hhZG93QikKKyAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgICAgIHNoYWRvd0EgPSBzaGFkb3dB
LT5uZXh0KCk7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93Qi0+bmV4dCgpOworICAgICAg
ICB9CisKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0Eg
PSAoYS0+Km1fZ2V0dGVyKSgpOworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCID0g
KGItPiptX2dldHRlcikoKTsKKworICAgICAgICBpbnQgZnJvbUxlbmd0aCA9IHNoYWRvd0xpc3RM
ZW5ndGgoc2hhZG93QSk7CisgICAgICAgIGludCB0b0xlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgo
c2hhZG93Qik7CisKKyAgICAgICAgaWYgKGZyb21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21M
ZW5ndGggPD0gMSAmJiB0b0xlbmd0aCA8PSAxKSkgeworICAgICAgICAgICAgKGRzdC0+Km1fc2V0
dGVyKShibGVuZFNpbXBsZU9yTWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFk
b3dBLCBzaGFkb3dCKSwgZmFsc2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisK
KyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhhbmlt
LCBwcm9ncmVzcywgc2hhZG93QSwgc2hhZG93QiwgZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBmYWxz
ZSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
UmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRl
ciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8
ICIgIGJsZW5kaW5nIFNoYWRvd0RhdGEgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9CisjZW5kaWYKKworcHJpdmF0ZToK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFk
b3dMaXN0cyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJv
Z3Jlc3MsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRv
d0IpIGNvbnN0CisgICAgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3
U2hhZG93RGF0YTsKKyAgICAgICAgU2hhZG93RGF0YSogbGFzdFNoYWRvdyA9IDA7CisKKyAgICAg
ICAgd2hpbGUgKHNoYWRvd0EgfHwgc2hhZG93QikgeworICAgICAgICAgICAgY29uc3QgU2hhZG93
RGF0YSogc3JjU2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93QSwgc2hhZG93Qik7Cisg
ICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBkc3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGlu
ZyhzaGFkb3dCLCBzaGFkb3dBKTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRv
d0RhdGE+IGJsZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFk
b3csIHByb2dyZXNzKTsKKyAgICAgICAgICAgIFNoYWRvd0RhdGEqIGJsZW5kZWRTaGFkb3dQdHIg
PSBibGVuZGVkU2hhZG93LmdldCgpOworCisgICAgICAgICAgICBpZiAoIWxhc3RTaGFkb3cpCisg
ICAgICAgICAgICAgICAgbmV3U2hhZG93RGF0YSA9IFdURk1vdmUoYmxlbmRlZFNoYWRvdyk7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbGFzdFNoYWRvdy0+c2V0TmV4dChXVEZN
b3ZlKGJsZW5kZWRTaGFkb3cpKTsKKworICAgICAgICAgICAgbGFzdFNoYWRvdyA9IGJsZW5kZWRT
aGFkb3dQdHI7CisKKyAgICAgICAgICAgIHNoYWRvd0EgPSBzaGFkb3dBID8gc2hhZG93QS0+bmV4
dCgpIDogMDsKKyAgICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCID8gc2hhZG93Qi0+bmV4dCgp
IDogMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOworICAgIH0K
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21hdGNoZWRTaGFkb3dM
aXN0cyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJvZ3Jl
c3MsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0Is
IGludCBmcm9tTGVuZ3RoLCBpbnQgdG9MZW5ndGgpIGNvbnN0CisgICAgeworICAgICAgICAvLyBU
aGUgc2hhZG93cyBpbiBTaGFkb3dEYXRhIGFyZSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlciwgc28g
d2hlbiBhbmltYXRpbmcgbWlzbWF0Y2hlZCBsaXN0cywKKyAgICAgICAgLy8gcmV2ZXJzZSB0aGVt
IGFuZCBtYXRjaCBmcm9tIHRoZSBlbmQuCisgICAgICAgIFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRh
KiwgND4gZnJvbVNoYWRvd3MoZnJvbUxlbmd0aCk7CisgICAgICAgIGZvciAoaW50IGkgPSBmcm9t
TGVuZ3RoIC0gMTsgaSA+PSAwOyAtLWkpIHsKKyAgICAgICAgICAgIGZyb21TaGFkb3dzW2ldID0g
c2hhZG93QTsKKyAgICAgICAgICAgIHNoYWRvd0EgPSBzaGFkb3dBLT5uZXh0KCk7CisgICAgICAg
IH0KKworICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93RGF0YSosIDQ+IHRvU2hhZG93cyh0b0xl
bmd0aCk7CisgICAgICAgIGZvciAoaW50IGkgPSB0b0xlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7
CisgICAgICAgICAgICB0b1NoYWRvd3NbaV0gPSBzaGFkb3dCOworICAgICAgICAgICAgc2hhZG93
QiA9IHNoYWRvd0ItPm5leHQoKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiBuZXdTaGFkb3dEYXRhOworCisgICAgICAgIGludCBtYXhMZW5ndGggPSBz
dGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xlbmd0aCk7CisgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbWF4TGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGZyb21T
aGFkb3cgPSBpIDwgZnJvbUxlbmd0aCA/IGZyb21TaGFkb3dzW2ldIDogMDsKKyAgICAgICAgICAg
IGNvbnN0IFNoYWRvd0RhdGEqIHRvU2hhZG93ID0gaSA8IHRvTGVuZ3RoID8gdG9TaGFkb3dzW2ld
IDogMDsKKworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0gc2hhZG93
Rm9yQmxlbmRpbmcoZnJvbVNoYWRvdywgdG9TaGFkb3cpOworICAgICAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcodG9TaGFkb3csIGZyb21TaGFk
b3cpOworCisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNo
YWRvdyA9IGJsZW5kRnVuYyhhbmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOwor
ICAgICAgICAgICAgLy8gSW5zZXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCB0byBwcmVzZXJ2
ZSB0aGUgb3JkZXIuCisgICAgICAgICAgICBibGVuZGVkU2hhZG93LT5zZXROZXh0KFdURk1vdmUo
bmV3U2hhZG93RGF0YSkpOworICAgICAgICAgICAgbmV3U2hhZG93RGF0YSA9IFdURk1vdmUoYmxl
bmRlZFNoYWRvdyk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsK
KyAgICB9CisKKyAgICBjb25zdCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OiptX2dldHRlciko
KSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4sIGJvb2wpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyTWF5YmVJ
bnZhbGlkQ29sb3IgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyTWF5
YmVJbnZhbGlkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0
eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3Qg
Q29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisg
ICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0
IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0g
YikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUo
YSk7CisgICAgICAgIENvbG9yIHRvQ29sb3IgPSB2YWx1ZShiKTsKKworICAgICAgICBpZiAoIWZy
b21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0
dXJuIHRydWU7CisKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAg
ICAgZnJvbUNvbG9yID0gYS0+Y29sb3IoKTsKKyAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQo
KSkKKyAgICAgICAgICAgIHRvQ29sb3IgPSBiLT5jb2xvcigpOworCisgICAgICAgIHJldHVybiBm
cm9tQ29sb3IgPT0gdG9Db2xvcjsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQorICAgIHsKKyAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoYSk7CisgICAg
ICAgIENvbG9yIHRvQ29sb3IgPSB2YWx1ZShiKTsKKworICAgICAgICBpZiAoIWZyb21Db2xvci5p
c1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIGZyb21Db2xvciA9
IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAg
ICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1
bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAgIH0KKworICAgIENv
bG9yIHZhbHVlKGNvbnN0IFJlbmRlclN0eWxlKiBhKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIChhLT4qbV9nZXR0ZXIpKCk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZv
aWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBj
b25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisg
ICAgeworICAgICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCisgICAgICAgIExPR19XSVRI
X1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0
eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZh
bHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50
ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIp
KCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3Im
KTsKK307CisKKworZW51bSBNYXliZUludmFsaWRDb2xvclRhZyB7IE1heWJlSW52YWxpZENvbG9y
IH07CitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciA6IHB1YmxpYyBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQ
cm9wZXJ0eUlEIHByb3AsIGNvbnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29u
c3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLCBjb25zdCBDb2xv
ciYgKFJlbmRlclN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5
bGU6Oip2aXNpdGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQorICAgICAgICA6IEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UocHJvcCkKKyAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQ
cm9wZXJ0eVdyYXBwZXJDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQorICAgICAgICAsIG1f
dmlzaXRlZFdyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJDb2xvcj4ocHJvcCwgdmlz
aXRlZEdldHRlciwgdmlzaXRlZFNldHRlcikpCisgICAgeworICAgIH0KKyAgICBQcm9wZXJ0eVdy
YXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIE1heWJlSW52YWxp
ZENvbG9yVGFnLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2
b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
dmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAg
ICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3I+KHByb3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAg
ICB9CisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fd3JhcHBlci0+
ZXF1YWxzKGEsIGIpICYmIG1fdmlzaXRlZFdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICB9Cisg
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIG1fd3JhcHBl
ci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgIH0KKworI2lmICFM
T0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgbV93cmFwcGVyLT5sb2dCbGVuZChhLCBi
LCByZXN1bHQsIHByb2dyZXNzKTsKKyAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
c3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fd3JhcHBlcjsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV92aXNp
dGVkV3JhcHBlcjsKK307CisKKy8vIFdyYXBwZXIgYmFzZSBjbGFzcyBmb3IgYW4gYW5pbWF0YWJs
ZSBwcm9wZXJ0eSBpbiBhIEZpbGxMYXllcgorY2xhc3MgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5KQorICAgICAgICA6IG1fcHJvcGVydHkocHJvcGVydHkpCisgICAgeworICAgIH0KKyAg
ICB2aXJ0dWFsIH5GaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgPSBkZWZh
dWx0OworCisgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydHk7IH0KKworICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiwgY29u
c3QgRmlsbExheWVyKikgY29uc3QgPSAwOworICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwg
Y29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyNlbmRp
ZgorcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7Cit9OworCit0ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1
YmxpYyBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXIpOworcHVibGljOgorICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkg
Y29uc3QpCisgICAgICAgIDogRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wZXJ0eSkKKyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAg
IGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgfQorCisgICAgVCB2YWx1ZShjb25zdCBGaWxsTGF5ZXIqIGxheWVyKSBjb25zdAorICAgIHsK
KyAgICAgICAgcmV0dXJuIChsYXllci0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0df
RElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRl
eHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAt
PiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAgIH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAg
VCAoRmlsbExheWVyOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KK2NsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgVCYgKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
RmlsbExheWVyOjoqc2V0dGVyKShUKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+KHByb3BlcnR5LCBnZXR0ZXIpCisgICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEs
IGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgKGItPipGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgcHJvZ3Jl
c3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25z
dCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIq
IGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6cHJvcGVy
dHkoKSkKKyAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGEpCisgICAgICAgICAgICA8PCAiIHRvICIgPDwgRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYikKKyAgICAgICAg
ICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+Ojp2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgor
ICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShUKTsKK307CisKK2NsYXNzIEZpbGxMYXll
clBvc2l0aW9uUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgRmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgTGVuZ3RoJiAoRmlsbExheWVyOjoqbGVuZ3RoR2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChGaWxsTGF5ZXI6OipsZW5ndGhTZXR0ZXIpKExlbmd0aCksIEVkZ2UgKEZpbGxM
YXllcjo6Km9yaWdpbkdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqb3JpZ2luU2V0
dGVyKShFZGdlKSwgRWRnZSBmYXJFZGdlKQorICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wZXJ0eSwgbGVuZ3RoR2V0dGVyKQorICAgICAg
ICAsIG1fbGVuZ3RoU2V0dGVyKGxlbmd0aFNldHRlcikKKyAgICAgICAgLCBtX29yaWdpbkdldHRl
cihvcmlnaW5HZXR0ZXIpCisgICAgICAgICwgbV9vcmlnaW5TZXR0ZXIob3JpZ2luU2V0dGVyKQor
ICAgICAgICAsIG1fZmFyRWRnZShmYXJFZGdlKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVx
dWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
KyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
ICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOworICAgICAgICBMZW5ndGggdG9MZW5ndGgg
PSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBFZGdlIGZyb21FZGdlID0gKGEtPiptX29yaWdp
bkdldHRlcikoKTsKKyAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3JpZ2luR2V0dGVyKSgp
OworICAgICAgICAKKyAgICAgICAgcmV0dXJuIGZyb21MZW5ndGggPT0gdG9MZW5ndGggJiYgZnJv
bUVkZ2UgPT0gdG9FZGdlOworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3Ro
IHRvTGVuZ3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVu
Z3RoJj46Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChh
LT4qbV9vcmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdp
bkdldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChmcm9tRWRnZSAhPSB0b0VkZ2UpIHsK
KyAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJpZ2h0L2JvdHRvbSBpbnRvIGEgY2FsYyBleHBy
ZXNzaW9uLAorICAgICAgICAgICAgaWYgKGZyb21FZGdlID09IG1fZmFyRWRnZSkKKyAgICAgICAg
ICAgICAgICBmcm9tTGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGZyb21M
ZW5ndGgpOworICAgICAgICAgICAgZWxzZSBpZiAodG9FZGdlID09IG1fZmFyRWRnZSkgeworICAg
ICAgICAgICAgICAgIHRvTGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKHRv
TGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAoZHN0LT4qbV9vcmlnaW5TZXR0ZXIpKGZyb21FZGdl
KTsgLy8gTm93IHdlIGhhdmUgYSBjYWxjKDEwMCUgLSBsKSwgaXQncyByZWxhdGl2ZSB0byB0aGUg
bGVmdC90b3AgZWRnZS4KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIChkc3Qt
PiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBw
cm9ncmVzcykpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxM
YXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRv
ICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3Bl
Y3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOworICAg
IH0KKyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9sZW5ndGhT
ZXR0ZXIpKExlbmd0aCk7CisgICAgRWRnZSAoRmlsbExheWVyOjoqbV9vcmlnaW5HZXR0ZXIpKCkg
Y29uc3Q7CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9vcmlnaW5TZXR0ZXIpKEVkZ2UpOworICAg
IEVkZ2UgbV9mYXJFZGdlOworfTsKKwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxs
TGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgVCogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVy
Ojoqc2V0dGVyKShSZWZQdHI8VD4mJikpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQqPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRl
cikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIChiLT4qRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCisj
aWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnByb3BlcnR5KCkpCisgICAgICAgICAgICA8PCAi
IGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShhKQor
ICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxU
Kj46OnZhbHVlKGIpCisgICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0
TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlm
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoUmVmUHRyPFQ+
JiYpOworfTsKKworY2xhc3MgRmlsbExheWVyU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlciA6IHB1
YmxpYyBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+IHsKKyAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJTdHlsZUlt
YWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlSW1hZ2UqIChG
aWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoUmVm
UHRyPFN0eWxlSW1hZ2U+JiYpKQorICAgICAgICA6IEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXI8U3R5bGVJbWFnZT4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXll
ciogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0ZXIp
KCk7CisgICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAg
ICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsKKyAgICB9
CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIq
IHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShB
bmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJv
cGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8
ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJv
Z3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKK307CisK
K2NsYXNzIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgdHlwZWRlZiBjb25zdCBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVyc0dldHRlciko
KSBjb25zdDsKKyAgICB0eXBlZGVmIEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzQWNj
ZXNzb3IpKCk7CisKKyAgICBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcGVydHksIExheWVyc0dldHRlciBnZXR0ZXIsIExheWVyc0FjY2Vzc29yIGFjY2Vzc29yKQor
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisgICAgICAg
ICwgbV9sYXllcnNHZXR0ZXIoZ2V0dGVyKQorICAgICAgICAsIG1fbGF5ZXJzQWNjZXNzb3IoYWNj
ZXNzb3IpCisgICAgeworICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7CisgICAgICAgIGNhc2Ug
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5
V2Via2l0TWFza1Bvc2l0aW9uWDoKKyAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFw
cGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVy
dHksICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WFBvc2l0aW9uLCAmRmls
bExheWVyOjpiYWNrZ3JvdW5kWE9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFhPcmln
aW4sIEVkZ2U6OlJpZ2h0KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENTU1By
b3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtp
dE1hc2tQb3NpdGlvblk6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9
IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAm
RmlsbExheWVyOjp5UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXll
cjo6YmFja2dyb3VuZFlPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRZT3JpZ2luLCBF
ZGdlOjpCb3R0b20pOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91
bmRTaXplOgorICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6CisgICAgICAg
ICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUHJv
cGVydHlXcmFwcGVyPExlbmd0aFNpemU+Pihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6c2l6ZUxlbmd0
aCwgJkZpbGxMYXllcjo6c2V0U2l6ZUxlbmd0aCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKKyAgICAgICAgICAgIG1fZmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVy
dHlXcmFwcGVyPihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldElt
YWdlKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAg
ICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICgh
YSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBhdXRvKiBmcm9t
TGF5ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogdG9MYXllciA9
ICYoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOworCisgICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYg
dG9MYXllcikgeworICAgICAgICAgICAgaWYgKCFtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+
ZXF1YWxzKGZyb21MYXllciwgdG9MYXllcikpCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgICAgICBmcm9tTGF5ZXIgPSBmcm9tTGF5ZXItPm5leHQoKTsKKyAgICAgICAg
ICAgIHRvTGF5ZXIgPSB0b0xheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgYXV0byogYUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAg
ICAgIGF1dG8qIGJMYXllciA9ICYoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOworICAgICAgICBhdXRv
KiBkc3RMYXllciA9ICYoZHN0LT4qbV9sYXllcnNBY2Nlc3NvcikoKTsKKworICAgICAgICB3aGls
ZSAoYUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgeworICAgICAgICAgICAgbV9maWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdExheWVyLCBhTGF5ZXIsIGJMYXllciwg
cHJvZ3Jlc3MpOworICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7CisgICAgICAg
ICAgICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKKyAgICAgICAgICAgIGRzdExheWVyID0gZHN0
TGF5ZXItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAg
ICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHls
ZSogdG8sIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0
dGVyKSgpOworICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNHZXR0ZXIpKCk7
CisgICAgICAgIGF1dG8qIGRzdExheWVyID0gJihyZXN1bHQtPiptX2xheWVyc0dldHRlcikoKTsK
KworICAgICAgICB3aGlsZSAoYUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgeworICAgICAg
ICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXItPmxvZ0JsZW5kKGRzdExheWVyLCBhTGF5
ZXIsIGJMYXllciwgcHJvZ3Jlc3MpOworICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0
KCk7CisgICAgICAgICAgICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKKyAgICAgICAgICAgIGRz
dExheWVyID0gZHN0TGF5ZXItPm5leHQoKTsKKyAgICAgICAgfQorICAgIH0KKyNlbmRpZgorCitw
cml2YXRlOgorICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlPiBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlcjsKKworICAgIExheWVyc0dldHRl
ciBtX2xheWVyc0dldHRlcjsKKyAgICBMYXllcnNBY2Nlc3NvciBtX2xheWVyc0FjY2Vzc29yOwor
fTsKKworY2xhc3MgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBW
ZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IGxvbmdoYW5kV3JhcHBlcnMpCisg
ICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKKyAgICAgICAg
LCBtX3Byb3BlcnR5V3JhcHBlcnMoV1RGTW92ZShsb25naGFuZFdyYXBwZXJzKSkKKyAgICB7Cisg
ICAgfQorCisgICAgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9
PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBt
X3Byb3BlcnR5V3JhcHBlcnMpIHsKKyAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1YWxzKGEs
IGIpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQor
ICAgIHsKKyAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQor
ICAgICAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Cisg
ICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogZHN0LCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBmb3IgKGF1dG8mIHdy
YXBwZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCisgICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVu
ZChhLCBiLCBkc3QsIHByb2dyZXNzKTsKKyAgICB9CisjZW5kaWYKKworICAgIGNvbnN0IFZlY3Rv
cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4mIHByb3BlcnR5V3JhcHBlcnMoKSBjb25z
dCB7IHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnM7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IG1fcHJvcGVydHlXcmFwcGVyczsKK307CisK
K2NsYXNzIFByb3BlcnR5V3JhcHBlckZsZXggOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJv
cGVydHlXcmFwcGVyRmxleCgpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZShDU1NQcm9wZXJ0eUZsZXgpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAg
ICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAg
ICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHJl
dHVybiBhLT5mbGV4QmFzaXMoKSA9PSBiLT5mbGV4QmFzaXMoKSAmJiBhLT5mbGV4R3JvdygpID09
IGItPmZsZXhHcm93KCkgJiYgYS0+ZmxleFNocmluaygpID09IGItPmZsZXhTaHJpbmsoKTsKKyAg
ICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
ZHN0LT5zZXRGbGV4QmFzaXMoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhCYXNpcygpLCBiLT5mbGV4
QmFzaXMoKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAgZHN0LT5zZXRGbGV4R3JvdyhibGVuZEZ1bmMo
YW5pbSwgYS0+ZmxleEdyb3coKSwgYi0+ZmxleEdyb3coKSwgcHJvZ3Jlc3MpKTsKKyAgICAgICAg
ZHN0LT5zZXRGbGV4U2hyaW5rKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4U2hyaW5rKCksIGItPmZs
ZXhTaHJpbmsoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAg
dm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29u
c3QgUmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCisgICAgeworICAg
ICAgICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCisgICAgICAgIExPR19XSVRIX1NUUkVBTShB
bmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgZmxleCBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRp
ZgorfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQgOiBwdWJsaWMgQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlJRCBwcm9wLCBTVkdQ
YWludFR5cGUgKFJlbmRlclN0eWxlOjoqcGFpbnRUeXBlR2V0dGVyKSgpIGNvbnN0LCBDb2xvciAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShjb25zdCBDb2xvciYpKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Uo
cHJvcCkKKyAgICAgICAgLCBtX3BhaW50VHlwZUdldHRlcihwYWludFR5cGVHZXR0ZXIpCisgICAg
ICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7
CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJl
bmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikK
KyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIp
KCkgIT0gKGItPiptX3BhaW50VHlwZUdldHRlcikoKSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgYW5pbWF0aW9ucyBiZXR3ZWVuIFNWR1Bh
aW50cyB0aGF0IGFyZSBwdXJlIENvbG9yIHZhbHVlcy4KKyAgICAgICAgLy8gRm9yIGV2ZXJ5dGhp
bmcgZWxzZSB3ZSBtdXN0IHJldHVybiB0cnVlIGZvciB0aGlzIG1ldGhvZCwgb3RoZXJ3aXNlCisg
ICAgICAgIC8vIHdlIHdpbGwgdHJ5IHRvIGFuaW1hdGUgYmV0d2VlbiB2YWx1ZXMgZm9yZXZlci4K
KyAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgPT0gU1ZHUGFpbnRUeXBlOjpS
R0JDb2xvcikgeworICAgICAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlciko
KTsKKyAgICAgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisgICAg
ICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQor
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgICAgICBpZiAoIWZyb21Db2xv
ci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKKyAgICAg
ICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICAgICAgdG9Db2xvciA9
IENvbG9yKCk7CisKKyAgICAgICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xvcjsKKyAg
ICAgICAgfQorICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNz
KSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0
ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcgorICAgICAgICAgICAgfHwgKGItPiptX3Bh
aW50VHlwZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7Cisg
ICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOworCisgICAgICAgIGlmICgh
ZnJvbUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAg
ZnJvbUNvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJs
ZW5kRnVuYyhhbmltLCBmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7CisgICAgfQorCisj
aWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBj
b25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAg
ICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNW
R1BhaW50IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJz
KHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgU1ZHUGFpbnRUeXBl
IChSZW5kZXJTdHlsZTo6Km1fcGFpbnRUeXBlR2V0dGVyKSgpIGNvbnN0OworICAgIENvbG9yIChS
ZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoq
bV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250
U3R5bGUgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1
ZT4+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0
eVdyYXBwZXJGb250U3R5bGUoKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxG
b250U2VsZWN0aW9uVmFsdWU+PihDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgJlJlbmRlclN0eWxlOjpm
b250SXRhbGljLCAmUmVuZGVyU3R5bGU6OnNldEZvbnRJdGFsaWMpCisgICAgeworICAgIH0KKwor
ICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJl
bmRlclN0eWxlKiB0bykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBmcm9t
LT5mb250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250RGVzY3JpcHRp
b24oKS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0by0+Zm9udERl
c2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQ7CisgICAg
fQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVy
U3R5bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBhdXRvIGRpc2NyZXRlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKKworICAgICAgICBh
dXRvIGJsZW5kZWRTdHlsZUF4aXMgPSBGb250U3R5bGVBeGlzOjpzbG50OworICAgICAgICBpZiAo
ZGlzY3JldGUpCisgICAgICAgICAgICBibGVuZGVkU3R5bGVBeGlzID0gKHByb2dyZXNzIDwgMC41
ID8gZnJvbSA6IHRvKS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpOworCisgICAg
ICAgIGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1
dG8gdG9Gb250SXRhbGljID0gdG8tPmZvbnRJdGFsaWMoKTsKKyAgICAgICAgYXV0byBibGVuZGVk
Rm9udEl0YWxpYyA9IHByb2dyZXNzIDwgMC41ID8gZnJvbUZvbnRJdGFsaWMgOiB0b0ZvbnRJdGFs
aWM7CisgICAgICAgIGlmICghZGlzY3JldGUpCisgICAgICAgICAgICBibGVuZGVkRm9udEl0YWxp
YyA9IGJsZW5kRnVuYyhhbmltLCBmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBwcm9ncmVz
cyk7CisKKyAgICAgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9yID0gZHN0LT5m
b250Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0g
ZHN0LT5mb250RGVzY3JpcHRpb24oKTsKKyAgICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKGJs
ZW5kZWRGb250SXRhbGljKTsKKyAgICAgICAgZGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhi
bGVuZGVkU3R5bGVBeGlzKTsKKyAgICAgICAgZHN0LT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92
ZShkZXNjcmlwdGlvbikpOworICAgICAgICBkc3QtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJl
bnRGb250U2VsZWN0b3IpOworICAgIH0KK307CisKK2NsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9u
V3JhcHBlck1hcCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYgc2luZ2xldG9uKCkKKyAgICB7
CisgICAgICAgIC8vIEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3
ZSBzaG91bGQgcmVmIGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlciBpcyBkZXN0cm95ZWQ/CisgICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3ll
ZDxDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA+IG1hcDsKKyAgICAgICAgcmV0dXJuIG1h
cDsKKyAgICB9CisKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyRm9y
UHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQorICAgIHsKKyAgICAgICAgaWYgKHBy
b3BlcnR5SUQgPCBmaXJzdENTU1Byb3BlcnR5IHx8IHByb3BlcnR5SUQgPiBsYXN0Q1NTUHJvcGVy
dHkpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICB1bnNpZ25lZCB3cmFw
cGVySW5kZXggPSBpbmRleEZyb21Qcm9wZXJ0eUlEKHByb3BlcnR5SUQpOworICAgICAgICBpZiAo
d3JhcHBlckluZGV4ID09IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXgpCisgICAgICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW3dy
YXBwZXJJbmRleF0uZ2V0KCk7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSogd3JhcHBlckZvckluZGV4KHVuc2lnbmVkIGluZGV4KQorICAgIHsKKyAgICAgICAgQVNT
RVJUKGluZGV4IDwgbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKSk7CisgICAgICAgIHJldHVybiBt
X3Byb3BlcnR5V3JhcHBlcnNbaW5kZXhdLmdldCgpOworICAgIH0KKworICAgIHVuc2lnbmVkIHNp
emUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCk7Cisg
ICAgfQorCitwcml2YXRlOgorICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpOwor
ICAgIH5DU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKSA9IGRlbGV0ZTsKKworICAgIHVu
c2lnbmVkIGNoYXImIGluZGV4RnJvbVByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlE
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUb0lkTWFwW3Byb3BlcnR5SUQgLSBm
aXJzdENTU1Byb3BlcnR5XTsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+PiBtX3Byb3BlcnR5V3JhcHBlcnM7CisgICAgdW5z
aWduZWQgY2hhciBtX3Byb3BlcnR5VG9JZE1hcFtudW1DU1NQcm9wZXJ0aWVzXTsKKworICAgIHN0
YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXggPSBV
Q0hBUl9NQVg7CisKKyAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxDU1NQcm9w
ZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA+OworfTsKKworQ1NTUHJvcGVydHlBbmltYXRpb25XcmFw
cGVyTWFwOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKQoreworICAgIC8vIGJ1aWxk
IHRoZSBsaXN0IG9mIHByb3BlcnR5IHdyYXBwZXJzIHRvIGRvIHRoZSBjb21wYXJpc29ucyBhbmQg
YmxlbmRzCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogYW5pbWF0YWJsZUxvbmdo
YW5kUHJvcGVydHlXcmFwcGVyc1tdID0geworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TGVmdCwgJlJlbmRlclN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNl
dExlZnQpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Umln
aHQsICZSZW5kZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQpLAorICAgICAg
ICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VG9wLCAmUmVuZGVyU3R5bGU6
OnRvcCwgJlJlbmRlclN0eWxlOjpzZXRUb3ApLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5Qm90dG9tLCAmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJlbmRlclN0
eWxlOjpzZXRCb3R0b20pLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlXaWR0aCwgJlJlbmRlclN0eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0
aCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5XaWR0
aCwgJlJlbmRlclN0eWxlOjptaW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNaW5XaWR0aCksCisg
ICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhXaWR0aCwgJlJl
bmRlclN0eWxlOjptYXhXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNYXhXaWR0aCksCisKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUhlaWdodCwgJlJlbmRlclN0
eWxlOjpoZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0SGVpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjptaW5I
ZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TWluSGVpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heEhlaWdodCwgJlJlbmRlclN0eWxlOjptYXhIZWln
aHQsICZSZW5kZXJTdHlsZTo6c2V0TWF4SGVpZ2h0KSwKKworICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyRmxleCgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5Qm9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRXaWR0aCwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyUmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoKSwKKyAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwg
JlJlbmRlclN0eWxlOjpib3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BX
aWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9y
ZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjptYXJnaW5MZWZ0LCAm
UmVuZGVyU3R5bGU6OnNldE1hcmdpbkxlZnQpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQs
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luUmlnaHQpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5TWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6Om1hcmdpblRvcCwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Ub3ApLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6Om1hcmdpbkJvdHRv
bSwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20pLAorICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6cGFkZGlu
Z0xlZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQpLAorICAgICAgICBuZXcgTGVuZ3Ro
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnBh
ZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQpLAorICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3ApLAorICAgICAgICBuZXcg
TGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0
eWxlOjpwYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20pLAorCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0
eUNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRD
YXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ2FyZXRDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRWaXNpdGVkTGlua0NhcmV0Q29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yLCAmUmVuZGVyU3R5bGU6
OmNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5r
Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2xvciksCisKKyAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rQmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQmFja2dyb3Vu
ZENvbG9yKSwKKworICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUJhY2tncm91bmRJbWFnZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVu
ZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorICAgICAgICBuZXcgU3R5bGVJbWFn
ZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6
Omxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNldExpc3RTdHlsZUltYWdlKSwKKyAgICAg
ICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1h
Z2UsICZSZW5kZXJTdHlsZTo6bWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tJbWFnZSks
CisKKyAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZVNvdXJjZSksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJv
cGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlLCAmUmVu
ZGVyU3R5bGU6OmJvcmRlckltYWdlU2xpY2VzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdl
U2xpY2VzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3Ro
Qm94PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1h
Z2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVdpZHRoKSwKKyAgICAgICAgbmV3
IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRl
ckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlckltYWdlT3V0c2V0KSwKKworICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0
eWxlOjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlU291
cmNlKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBOaW5lUGllY2VJbWFnZSY+
KENTU1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFn
ZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2UpLAorCisgICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgJlJlbmRl
clN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRM
YXllcnMpLAorICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRQb3NpdGlvblksICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXll
cnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxl
OjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMp
LAorICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtp
dEJhY2tncm91bmRTaXplLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJT
dHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YLCAmUmVuZGVyU3R5
bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFza0xheWVycyksCisgICAgICAg
IG5ldyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0
aW9uWSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tM
YXllcnMpLAorICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tTaXplLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6
ZW5zdXJlTWFza0xheWVycyksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlGb250U2l6ZSwgJlJlbmRlclN0eWxlOjpjb21wdXRlZEZvbnRTaXplLCAmUmVu
ZGVyU3R5bGU6OnNldEZvbnRTaXplKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNp
Z25lZCBzaG9ydD4oQ1NTUHJvcGVydHlDb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29s
dW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVXaWR0aCksCisgICAgICAg
IG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPEdhcExlbmd0aD4oQ1NTUHJvcGVydHlD
b2x1bW5HYXAsICZSZW5kZXJTdHlsZTo6Y29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNldENvbHVt
bkdhcCksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPEdhcExlbmd0
aD4oQ1NTUHJvcGVydHlSb3dHYXAsICZSZW5kZXJTdHlsZTo6cm93R2FwLCAmUmVuZGVyU3R5bGU6
OnNldFJvd0dhcCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+
KENTU1Byb3BlcnR5Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZSZW5k
ZXJTdHlsZTo6c2V0Q29sdW1uQ291bnQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtbldpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldENvbHVtbldpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgJlJlbmRl
clN0eWxlOjpob3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRIb3Jpem9u
dGFsQm9yZGVyU3BhY2luZyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENT
U1Byb3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnZlcnRp
Y2FsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlaSW5kZXgsICZS
ZW5kZXJTdHlsZTo6c3BlY2lmaWVkWkluZGV4LCAmUmVuZGVyU3R5bGU6OnNldFNwZWNpZmllZFpJ
bmRleCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5T3Jw
aGFucywgJlJlbmRlclN0eWxlOjpvcnBoYW5zLCAmUmVuZGVyU3R5bGU6OnNldE9ycGhhbnMpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdpZG93cywgJlJl
bmRlclN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0V2lkb3dzKSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsICZSZW5kZXJTdHls
ZTo6c3BlY2lmaWVkTGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lSGVpZ2h0KSwKKyAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0
LCAmUmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZU9m
ZnNldCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0
bGluZVdpZHRoLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRP
dXRsaW5lV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eUxldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZywgJlJlbmRlclN0
eWxlOjpzZXRMZXR0ZXJTcGFjaW5nKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVu
ZGVyU3R5bGU6OnNldFdvcmRTcGFjaW5nKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eVRleHRJbmRlbnQsICZSZW5kZXJTdHlsZTo6dGV4dEluZGVudCwgJlJl
bmRlclN0eWxlOjpzZXRUZXh0SW5kZW50KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZl
LCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpw
ZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmVPcmlnaW5YKSwK
KyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZl
T3JpZ2luWSwgJlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6
c2V0UGVyc3BlY3RpdmVPcmlnaW5ZKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3Jp
Z2luWCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5YKSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJT
dHlsZTo6dHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5Z
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlUcmFuc2Zv
cm1PcmlnaW5aLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6
c2V0VHJhbnNmb3JtT3JpZ2luWiksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlX
cmFwcGVyPExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRl
clN0eWxlOjpib3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcExl
ZnRSYWRpdXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5n
dGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJv
cmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFJpZ2h0UmFkaXVz
KSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4o
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJv
dHRvbUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyks
CisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+KENT
U1Byb3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90
dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMp
LAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFZpc2liaWxpdHk+KENTU1Byb3BlcnR5Vmlz
aWJpbGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZpc2li
aWxpdHkpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpv
b20sICZSZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRlclN0eWxlOjpzZXRab29tV2l0aG91dFJldHVy
blZhbHVlKSwKKworICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5n
dGhCb3g+KENTU1Byb3BlcnR5Q2xpcCwgJlJlbmRlclN0eWxlOjpjbGlwLCAmUmVuZGVyU3R5bGU6
OnNldENsaXApLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNp
dHkoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtKCks
CisgICAgICAgIAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5
RmlsdGVyLCAmUmVuZGVyU3R5bGU6OmZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRGaWx0ZXIpLAor
I2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJG
aWx0ZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciwgJlJlbmRlclN0eWxlOjpiYWNr
ZHJvcEZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZHJvcEZpbHRlciksCisjZW5kaWYKKyAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0
ZXIsICZSZW5kZXJTdHlsZTo6YXBwbGVDb2xvckZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRBcHBs
ZUNvbG9yRmlsdGVyKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NT
UHJvcGVydHlDbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpz
ZXRDbGlwUGF0aCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3Bl
cnR5U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxl
OjpzZXRTaGFwZU91dHNpZGUpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5U2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6c2hhcGVNYXJnaW4sICZSZW5kZXJT
dHlsZTo6c2V0U2hhcGVNYXJnaW4pLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eVNoYXBlSW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2hhcGVJbWFn
ZVRocmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUltYWdlVGhyZXNob2xkKSwKKworICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlD
b2x1bW5SdWxlQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1
bGVDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6
dmlzaXRlZExpbmtDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtD
b2x1bW5SdWxlQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVj
dGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsIE1heWJlSW52YWxpZENv
bG9yLCAmUmVuZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0
U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IpLAorICAgICAgICBuZXcg
UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0
RmlsbENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExp
bmtUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xv
ciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6
Ym9yZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRDb2xvciwgJlJlbmRl
clN0eWxlOjp2aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNp
dGVkTGlua0JvcmRlckxlZnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNp
dGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIE1heWJlSW52YWxp
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Qm9yZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yKSwKKyAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9y
ZGVyVG9wQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0
ZWRMaW5rQm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJU
b3BDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xv
cihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRl
clN0eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21D
b2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IpLAorICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3Is
IE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0
eWxlOjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtPdXRsaW5lQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtPdXRsaW5lQ29sb3IpLAorCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlCb3hTaGFkb3csICZSZW5kZXJT
dHlsZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyksCisgICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csICZSZW5k
ZXJTdHlsZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyksCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlUZXh0U2hhZG93LCAmUmVuZGVy
U3R5bGU6OnRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0VGV4dFNoYWRvdyksCisKKyAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5RmlsbCwgJlJlbmRlclN0
eWxlOjpmaWxsUGFpbnRUeXBlLCAmUmVuZGVyU3R5bGU6OmZpbGxQYWludENvbG9yLCAmUmVuZGVy
U3R5bGU6OnNldEZpbGxQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlGaWxsT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpmaWxsT3BhY2l0eSwg
JlJlbmRlclN0eWxlOjpzZXRGaWxsT3BhY2l0eSksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlclNWR1BhaW50KENTU1Byb3BlcnR5U3Ryb2tlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50
VHlwZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQYWludENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFN0
cm9rZVBhaW50Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQ
cm9wZXJ0eVN0cm9rZU9wYWNpdHksICZSZW5kZXJTdHlsZTo6c3Ryb2tlT3BhY2l0eSwgJlJlbmRl
clN0eWxlOjpzZXRTdHJva2VPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxW
ZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+PihDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheSwgJlJlbmRl
clN0eWxlOjpzdHJva2VEYXNoQXJyYXksICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaEFycmF5
KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdHJva2VN
aXRlcmxpbWl0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU1pdGVyTGltaXQsICZSZW5kZXJTdHlsZTo6
c2V0U3Ryb2tlTWl0ZXJMaW1pdCksCisKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eUN4LCAmUmVuZGVyU3R5bGU6OmN4LCAmUmVuZGVyU3R5bGU6OnNldEN4KSwK
KyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUN5LCAmUmVuZGVy
U3R5bGU6OmN5LCAmUmVuZGVyU3R5bGU6OnNldEN5KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVIsICZSZW5kZXJTdHlsZTo6ciwgJlJlbmRlclN0eWxlOjpz
ZXRSKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJ4LCAm
UmVuZGVyU3R5bGU6OnJ4LCAmUmVuZGVyU3R5bGU6OnNldFJ4KSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJ5LCAmUmVuZGVyU3R5bGU6OnJ5LCAmUmVuZGVy
U3R5bGU6OnNldFJ5KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eVN0cm9rZURhc2hvZmZzZXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaE9mZnNldCwgJlJl
bmRlclN0eWxlOjpzZXRTdHJva2VEYXNoT2Zmc2V0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVdp
ZHRoLCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVgsICZSZW5kZXJTdHlsZTo6eCwgJlJlbmRlclN0eWxl
OjpzZXRYKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVks
ICZSZW5kZXJTdHlsZTo6eSwgJlJlbmRlclN0eWxlOjpzZXRZKSwKKworICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxl
OjpmbG9vZE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RPcGFjaXR5KSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Rmxvb2RDb2xv
ciwgJlJlbmRlclN0eWxlOjpmbG9vZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEZsb29kQ29sb3Ip
LAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3RvcE9w
YWNpdHksICZSZW5kZXJTdHlsZTo6c3RvcE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0U3RvcE9w
YWNpdHkpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NT
UHJvcGVydHlTdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6
OnNldFN0b3BDb2xvciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxp
ZENvbG9yKENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvciwgJlJlbmRlclN0eWxlOjpsaWdodGluZ0Nv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldExpZ2h0aW5nQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFsdWU+KENTU1Byb3BlcnR5QmFzZWxpbmVTaGlmdCwgJlJl
bmRlclN0eWxlOjpiYXNlbGluZVNoaWZ0VmFsdWUsICZSZW5kZXJTdHlsZTo6c2V0QmFzZWxpbmVT
aGlmdFZhbHVlKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4o
Q1NTUHJvcGVydHlLZXJuaW5nLCAmUmVuZGVyU3R5bGU6Omtlcm5pbmcsICZSZW5kZXJTdHlsZTo6
c2V0S2VybmluZyksCisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUZvbnRWYXJpYXRp
b25TZXR0aW5ncywgJlJlbmRlclN0eWxlOjpmb250VmFyaWF0aW9uU2V0dGluZ3MsICZSZW5kZXJT
dHlsZTo6c2V0Rm9udFZhcmlhdGlvblNldHRpbmdzKSwKKyNlbmRpZgorICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAm
UmVuZGVyU3R5bGU6OmZvbnRXZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0Rm9udFdlaWdodCksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0
eUZvbnRTdHJldGNoLCAmUmVuZGVyU3R5bGU6OmZvbnRTdHJldGNoLCAmUmVuZGVyU3R5bGU6OnNl
dEZvbnRTdHJldGNoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSgpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHREZWNvcmF0aW9uVGhpY2tuZXNzPihDU1NQ
cm9wZXJ0eVRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnRleHREZWNvcmF0
aW9uVGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSwK
KyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0VW5kZXJsaW5lT2Zmc2V0PihDU1NQcm9w
ZXJ0eVRleHRVbmRlcmxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZU9mZnNl
dCwgJlJlbmRlclN0eWxlOjpzZXRUZXh0VW5kZXJsaW5lT2Zmc2V0KSwKKyAgICB9OworICAgIGNv
bnN0IHVuc2lnbmVkIGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCA9IFdURl9BUlJB
WV9MRU5HVEgoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVycyk7CisKKyAgICBzdGF0
aWMgY29uc3QgQ1NTUHJvcGVydHlJRCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc1tdID0g
eworICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmQsIC8vIGZvciBiYWNrZ3JvdW5kLWNvbG9y
LCBiYWNrZ3JvdW5kLXBvc2l0aW9uLCBiYWNrZ3JvdW5kLWltYWdlCisgICAgICAgIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUZvbnQsIC8vIGZvciBm
b250LXNpemUsIGZvbnQtd2VpZ2h0CisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFzaywgLy8g
Zm9yIG1hc2stcG9zaXRpb24KKyAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24s
CisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyVG9wLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0LCBD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0LAorICAgICAgICBD
U1NQcm9wZXJ0eUJvcmRlckNvbG9yLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1cywK
KyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aCwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3Jk
ZXIsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UsCisgICAgICAgIENTU1Byb3BlcnR5
Qm9yZGVyU3BhY2luZywKKyAgICAgICAgQ1NTUHJvcGVydHlMaXN0U3R5bGUsIC8vIGZvciBsaXN0
LXN0eWxlLWltYWdlCisgICAgICAgIENTU1Byb3BlcnR5TWFyZ2luLAorICAgICAgICBDU1NQcm9w
ZXJ0eU91dGxpbmUsCisgICAgICAgIENTU1Byb3BlcnR5UGFkZGluZywKKyAgICAgICAgQ1NTUHJv
cGVydHlXZWJraXRUZXh0U3Ryb2tlLAorICAgICAgICBDU1NQcm9wZXJ0eUNvbHVtblJ1bGUsCisg
ICAgICAgIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLAorICAgICAgICBDU1NQcm9wZXJ0
eVRyYW5zZm9ybU9yaWdpbgorICAgIH07CisgICAgY29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZVNo
b3J0aGFuZFByb3BlcnRpZXNDb3VudCA9IFdURl9BUlJBWV9MRU5HVEgoYW5pbWF0YWJsZVNob3J0
aGFuZFByb3BlcnRpZXMpOworCisgICAgLy8gVE9ETzoKKyAgICAvLworICAgIC8vICBDU1NQcm9w
ZXJ0eVZlcnRpY2FsQWxpZ24KKyAgICAvLworICAgIC8vIENvbXBvdW5kIHByb3BlcnRpZXMgdGhh
dCBoYXZlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgYW5pbWF0YWJsZToKKyAgICAvLworICAg
IC8vICBDU1NQcm9wZXJ0eUNvbHVtbnMKKyAgICAvLyAgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZs
ZWN0CisKKyAgICAvLyBNYWtlIHN1cmUgdW51c2VkIHNsb3RzIGhhdmUgYSB2YWx1ZQorICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQorICAgICAgICBtX3Byb3Bl
cnR5VG9JZE1hcFtpXSA9IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXg7CisKKyAgICBDT01Q
SUxFX0FTU0VSVChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBhbmltYXRhYmxl
U2hvcnRoYW5kUHJvcGVydGllc0NvdW50IDwgVUNIQVJfTUFYLCBudW1iZXJPZkFuaW1hdGFibGVQ
cm9wZXJ0aWVzTXVzdEJlTGVzc1RoYW5VQ2hhck1heCk7CisgICAgbV9wcm9wZXJ0eVdyYXBwZXJz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50
ICsgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCk7CisKKyAgICAvLyBGaXJzdCB3
ZSBwdXQgdGhlIG5vbi1zaG9ydGhhbmQgcHJvcGVydHkgd3JhcHBlcnMgaW50byB0aGUgbWFwLCBz
byB0aGUgc2hvcnRoYW5kLWJ1aWxkaW5nCisgICAgLy8gY29kZSBjYW4gZmluZCB0aGVtLgorCisg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXND
b3VudDsgKytpKSB7CisgICAgICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBw
ZXIgPSBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzW2ldOworICAgICAgICBtX3By
b3BlcnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlPih3cmFwcGVyKSk7CisgICAgICAgIGluZGV4RnJvbVByb3BlcnR5
SUQod3JhcHBlci0+cHJvcGVydHkoKSkgPSBpOworICAgIH0KKworICAgIGZvciAoc2l6ZV90IGkg
PSAwOyBpIDwgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudDsgKytpKSB7CisgICAg
ICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0
aWVzW2ldOworICAgICAgICBhdXRvIHNob3J0aGFuZCA9IHNob3J0aGFuZEZvclByb3BlcnR5KHBy
b3BlcnR5SUQpOworICAgICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
Kj4gbG9uZ2hhbmRXcmFwcGVyczsKKyAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KHNob3J0aGFuZC5sZW5ndGgoKSk7CisgICAgICAgIGZvciAoYXV0byBsb25n
aGFuZCA6IHNob3J0aGFuZCkgeworICAgICAgICAgICAgdW5zaWduZWQgd3JhcHBlckluZGV4ID0g
aW5kZXhGcm9tUHJvcGVydHlJRChsb25naGFuZCk7CisgICAgICAgICAgICBpZiAod3JhcHBlcklu
ZGV4ID09IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXgpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRl
eF0pOworICAgICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobV9wcm9w
ZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAg
bV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFNob3J0aGFuZFBy
b3BlcnR5V3JhcHBlcj4ocHJvcGVydHlJRCwgV1RGTW92ZShsb25naGFuZFdyYXBwZXJzKSkpOwor
ICAgICAgICBpbmRleEZyb21Qcm9wZXJ0eUlEKHByb3BlcnR5SUQpID0gYW5pbWF0YWJsZUxvbmdo
YW5kUHJvcGVydGllc0NvdW50ICsgaTsKKyAgICB9Cit9CisKK3N0YXRpYyBib29sIGdhdGhlckVu
Y2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0
aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYg
cHJvcGVydHlTZXQpCit7CisgICAgaWYgKCF3cmFwcGVyLT5pc1Nob3J0aGFuZFdyYXBwZXIoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKiBz
aG9ydGhhbmRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKj4o
d3JhcHBlcik7CisgICAgYm9vbCBjb250YWluZWQgPSBmYWxzZTsKKyAgICBmb3IgKGF1dG8mIGN1
cnJXcmFwcGVyIDogc2hvcnRoYW5kV3JhcHBlci0+cHJvcGVydHlXcmFwcGVycygpKSB7CisgICAg
ICAgIGlmIChnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKHByb3BlcnR5LCBjdXJy
V3JhcHBlciwgcHJvcGVydHlTZXQpIHx8IGN1cnJXcmFwcGVyLT5wcm9wZXJ0eSgpID09IHByb3Bl
cnR5KQorICAgICAgICAgICAgY29udGFpbmVkID0gdHJ1ZTsKKyAgICB9CisKKyAgICBpZiAoY29u
dGFpbmVkKQorICAgICAgICBwcm9wZXJ0eVNldC5hZGQod3JhcHBlci0+cHJvcGVydHkoKSk7CisK
KyAgICByZXR1cm4gY29udGFpbmVkOworfQorCisvLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCB0
byBzdGFydCBhbmltYXRpb24gdGltZXJzCit2b2lkIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVu
ZFByb3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgQ1NTUHJv
cGVydHlJRCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBBU1NFUlQocHJvcCAh
PSBDU1NQcm9wZXJ0eUludmFsaWQpOworCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCku
d3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIGlmICh3cmFwcGVyKSB7CisgICAgICAgIHdy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworI2lmICFMT0dfRElTQUJM
RUQKKyAgICAgICAgd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisjZW5k
aWYKKyAgICB9Cit9CisKK2Jvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmlt
YXRhYmxlKENTU1Byb3BlcnR5SUQgcHJvcCkKK3sKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlBbmlt
YXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Cit9
CisKK2Jvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2Vs
ZXJhdGVkKENTU1Byb3BlcnR5SUQgcHJvcCkKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0
b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7CisgICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFw
cGVyLT5hbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgOiBmYWxzZTsKK30KKworLy8gTm90ZTogdGhp
cyBpcyBpbmVmZmljaWVudC4gSXQncyBvbmx5IGNhbGxlZCBmcm9tIHBhdXNlVHJhbnNpdGlvbkF0
VGltZSgpLgorSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5p
bWF0YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
KQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYgbWFwID0gQ1NTUHJvcGVy
dHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKKworICAgIEhhc2hTZXQ8Q1NTUHJv
cGVydHlJRD4gZm91bmRQcm9wZXJ0aWVzOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBt
YXAuc2l6ZSgpOyArK2kpCisgICAgICAgIGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRp
ZXMocHJvcGVydHksIG1hcC53cmFwcGVyRm9ySW5kZXgoaSksIGZvdW5kUHJvcGVydGllcyk7CisK
KyAgICByZXR1cm4gZm91bmRQcm9wZXJ0aWVzOworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0
aW9uOjpwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCit7CisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xl
dG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIGlmICh3cmFwcGVyKQorICAgICAg
ICByZXR1cm4gd3JhcHBlci0+ZXF1YWxzKGEsIGIpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1By
b3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
KQoreworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShw
cm9wKTsKKyAgICBpZiAod3JhcHBlcikKKyAgICAgICAgcmV0dXJuIHdyYXBwZXItPmNhbkludGVy
cG9sYXRlKGEsIGIpOworICAgIHJldHVybiBmYWxzZTsKK30KKworQ1NTUHJvcGVydHlJRCBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6Z2V0UHJvcGVydHlBdEluZGV4KGludCBpLCBPcHRpb25hbDxib29s
PiYgaXNTaG9ydGhhbmQpCit7CisgICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBt
YXAgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOworCisgICAg
aWYgKGkgPCAwIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSA+PSBtYXAuc2l6ZSgpKQorICAg
ICAgICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOworCisgICAgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSogd3JhcHBlciA9IG1hcC53cmFwcGVyRm9ySW5kZXgoaSk7CisgICAgaXNTaG9y
dGhhbmQgPSB3cmFwcGVyLT5pc1Nob3J0aGFuZFdyYXBwZXIoKTsKKyAgICByZXR1cm4gd3JhcHBl
ci0+cHJvcGVydHkoKTsKK30KKworaW50IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXROdW1Qcm9w
ZXJ0aWVzKCkKK3sKKyAgICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpz
aW5nbGV0b24oKS5zaXplKCk7Cit9CisKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uY2RlMmM4NzU4MzIzODBjNTNmNTBh
NTVmMGVkNDRlZjZkODQ0NDE5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCisgKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCisjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4K
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
OworY2xhc3MgUmVuZGVyU3R5bGU7CisKK2NsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBpc1Byb3BlcnR5QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlE
KTsKKyAgICBzdGF0aWMgYm9vbCBhbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChDU1NQ
cm9wZXJ0eUlEKTsKKyAgICBzdGF0aWMgYm9vbCBwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJ
RCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKTsKKyAgICBzdGF0
aWMgYm9vbCBjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7CisgICAgc3RhdGljIENTU1Byb3Bl
cnR5SUQgZ2V0UHJvcGVydHlBdEluZGV4KGludCwgT3B0aW9uYWw8Ym9vbD4mIGlzU2hvcnRoYW5k
KTsKKyAgICBzdGF0aWMgaW50IGdldE51bVByb3BlcnRpZXMoKTsKKworICAgIHN0YXRpYyBIYXNo
U2V0PENTU1Byb3BlcnR5SUQ+IGFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHko
Q1NTUHJvcGVydHlJRCk7CisKKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB3ZSBuZWVkIHRvIHN0YXJ0
IHNvZnR3YXJlIGFuaW1hdGlvbiB0aW1lcnMKKyAgICBzdGF0aWMgdm9pZCBibGVuZFByb3BlcnRp
ZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIENTU1Byb3BlcnR5SUQsIFJlbmRl
clN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwg
ZG91YmxlIHByb2dyZXNzKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9uLmlkbCBiL1NvdXJjZS9X
ZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0aW9uLmlkbAppbmRleCAxOTRjNmFmMWI1YWRmZDA2
ZDI3Y2ZjMDQwYzRjYzE5N2ZjMjM2NzJmLi4zMTkwNWFiZGY0MDU1Y2EzMTM3OWQyYTM5YjA1OWYx
YzYwYTA5MWU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNp
dGlvbi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uaWRs
CkBAIC0yNiw3ICsyNiw2IEBACiB0eXBlZGVmIFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwot
ICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uLAogICAgIEV4
cG9zZWQ9V2luZG93CiBdIGludGVyZmFjZSBDU1NUcmFuc2l0aW9uIDogV2ViQW5pbWF0aW9uIHsK
ICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgdHJhbnNpdGlvblByb3BlcnR5Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbAppbmRl
eCA0ZjMxMzM3YmZjMTJlYjJjYzRmMDU1NTJiMzRmODc4ZTRmMmIxMzU1Li5lOGVlNGU0OWUyMDJl
N2U3ZGQ1MzdjZTQ2MDJhMWY5ODJmZWUzNjVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vRG9jdW1lbnRBbmltYXRpb25zLmlkbApAQCAtMjQsOCArMjQsNiBAQAogICovCiAKIC8v
IGh0dHBzOi8vZHJhZnRzLmNzc3dnLm9yZy93ZWItYW5pbWF0aW9ucy0xLyNleHRlbnNpb25zLXRv
LXRoZS1kb2N1bWVudC1pbnRlcmZhY2UKLVsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1h
dGlvbnMKLV0gcGFydGlhbCBpbnRlcmZhY2UgRG9jdW1lbnQgeworcGFydGlhbCBpbnRlcmZhY2Ug
RG9jdW1lbnQgewogICAgIHJlYWRvbmx5IGF0dHJpYnV0ZSBEb2N1bWVudFRpbWVsaW5lIHRpbWVs
aW5lOwogfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudE9y
U2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3Vt
ZW50T3JTaGFkb3dSb290QW5pbWF0aW9ucy5pZGwKaW5kZXggNzdhMjBkMGFjZDUwYThhNTM0YzFk
N2Q0N2FlMjA1MjU1NWI4MjUxYy4uOWRmZDE4NjViZmRhYTkwYzFlZDBkYTE1YzQxYTRhNzhlZGU1
M2M1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50T3JTaGFk
b3dSb290QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3Vt
ZW50T3JTaGFkb3dSb290QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAqLwogCiAv
LyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5zaW9ucy10
by10aGUtZG9jdW1lbnRvcnNoYWRvd3Jvb3QtaW50ZXJmYWNlLW1peGluCi1bCi0gICAgRW5hYmxl
ZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIG1peGluIERvY3Vt
ZW50T3JTaGFkb3dSb290IHsKK3BhcnRpYWwgaW50ZXJmYWNlIG1peGluIERvY3VtZW50T3JTaGFk
b3dSb290IHsKICAgICBzZXF1ZW5jZTxXZWJBbmltYXRpb24+IGdldEFuaW1hdGlvbnMoKTsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKaW5kZXgg
YjA4NmIyYTQ2YjliM2ZjZDU1MTYyNTk1ZmY5M2JmOTFiYTdjZWNiMS4uNWE5YTQxMTI1NDQyNTVk
MTEwM2MxYTNkZGMwNTQxY2EwZWU5ZGZhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5p
bWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudFRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAgICBF
bmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5kb3csCiBdIGlu
dGVyZmFjZSBEb2N1bWVudFRpbWVsaW5lIDogQW5pbWF0aW9uVGltZWxpbmUgewogICAgIFtDYWxs
V2l0aD1Eb2N1bWVudF0gY29uc3RydWN0b3Iob3B0aW9uYWwgRG9jdW1lbnRUaW1lbGluZU9wdGlv
bnMgb3B0aW9ucyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vS2V5ZnJh
bWVFZmZlY3QuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0Lmlk
bAppbmRleCAzOTg3ZThiZTYzZDFkNzJiNzk5MzYwYmY3OWI5Mzg5MDQ5ZmM2MmNjLi5mMGYzMmIw
YjA5NDQzNjFmYjViMTc5ZDUzYWQ1OWUzNGI3YTY2MGNmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9LZXlmcmFtZUVmZmVjdC5pZGwKQEAgLTI2LDcgKzI2LDYgQEAKIHR5cGVkZWYgVVNW
U3RyaW5nIENTU09NU3RyaW5nOwogCiBbCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRp
b25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEpTR2VuZXJhdGVUb05hdGl2ZU9iamVjdCwK
IF0gaW50ZXJmYWNlIEtleWZyYW1lRWZmZWN0IDogQW5pbWF0aW9uRWZmZWN0IHsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsIGIvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5pZGwKaW5kZXggZWQzYjM4ZGZlM2VjM2ZhODQy
MDA4MDAxMzUwNDUzZmVkOGJiYWVhOS4uMzQ3NzgxNWFmOWYwMjEzOTE1MzEyNzIwMzRlOGRhMDBm
ZjIxMWQwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlv
bi5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL1dlYkFuaW1hdGlvbi5pZGwKQEAg
LTM4LDcgKzM4LDYgQEAgZW51bSBBbmltYXRpb25SZXBsYWNlU3RhdGUgewogCiBbCiAgICAgQWN0
aXZlRE9NT2JqZWN0LAotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucywKICAgICBJ
bnRlcmZhY2VOYW1lPUFuaW1hdGlvbiwKICAgICBDdXN0b21Ub0pTT2JqZWN0LAogICAgIEV4cG9y
dE1hY3JvPVdFQkNPUkVfRVhQT1JUCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vV2ViQW5pbWF0aW9uVHlwZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmlt
YXRpb25UeXBlcy5oCmluZGV4IDNiMDgxZDMyZmQ1MjM3NmM3MjQ5ZjQ0YTQ1YjNmZmM5YTZkNGE1
NzYuLmJkYjg2OTg1MGY2YjEyNzcwYjdlODBiOTQzYWNiYWNkNTYwZjE5NmMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oCkBAIC01MCw2ICs1MCwxMSBA
QCBzdHJ1Y3QgV2ViQW5pbWF0aW9uc01hcmthYmxlRG91YmxlVHJhaXRzIHsKICAgICB9CiB9Owog
CitlbnVtIGNsYXNzIEFuaW1hdGlvbkltcGFjdCB7CisgICAgUmVxdWlyZXNSZWNvbXBvc2l0ZSAg
ICAgPSAxIDw8IDAsCisgICAgRm9yY2VzU3RhY2tpbmdDb250ZXh0ICAgPSAxIDw8IDEKK307CisK
IHVzaW5nIE1hcmthYmxlRG91YmxlID0gTWFya2FibGU8ZG91YmxlLCBXZWJBbmltYXRpb25zTWFy
a2FibGVEb3VibGVUcmFpdHM+OwogCiB1c2luZyBBbmltYXRpb25Db2xsZWN0aW9uID0gTGlzdEhh
c2hTZXQ8UmVmUHRyPFdlYkFuaW1hdGlvbj4+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
Y3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCBhM2YxMzM4YjM2MGFjMGQ4MDVh
ZWIzMTk2YTQ4MTBkNWQ5Yzc0YmVmLi4zNjliMWJkNmMwNmQwYzY0ZWM2MjA5NmRmZmNhMzhiYTM4
YTJhOThmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURl
Y2xhcmF0aW9uLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5
bGVEZWNsYXJhdGlvbi5oIgogCiAjaW5jbHVkZSAiQmFzaWNTaGFwZUZ1bmN0aW9ucy5oIgotI2lu
Y2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NBc3BlY3RSYXRp
b1ZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTQmFzaWNTaGFwZXMuaCIKICNpbmNsdWRlICJDU1NCb3Jk
ZXJJbWFnZS5oIgpAQCAtNDAsNiArMzksNyBAQAogI2luY2x1ZGUgIkNTU0xpbmVCb3hDb250YWlu
VmFsdWUuaCIKICNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgogI2luY2x1ZGUgIkNTU1By
aW1pdGl2ZVZhbHVlTWFwcGluZ3MuaCIKKyNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5o
IgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eVBh
cnNlci5oIgogI2luY2x1ZGUgIkNTU1JlZmxlY3RWYWx1ZS5oIgpAQCAtMjI0NiwxMSArMjI0Niw4
IEBAIHN0YXRpYyBpbmxpbmUgY29uc3QgUmVuZGVyU3R5bGUqIGNvbXB1dGVSZW5kZXJTdHlsZUZv
clByb3BlcnR5KEVsZW1lbnQmIGVsZW1lbnQsCiB7CiAgICAgYXV0byogcmVuZGVyZXIgPSBlbGVt
ZW50LnJlbmRlcmVyKCk7CiAKLSAgICBpZiAocmVuZGVyZXIgJiYgcmVuZGVyZXItPmlzQ29tcG9z
aXRlZCgpICYmIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnN1cHBvcnRzQWNjZWxlcmF0ZWRBbmlt
YXRpb25PZlByb3BlcnR5KHByb3BlcnR5SUQpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRpbWVsaW5l
ID0gZWxlbWVudC5kb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKLSAgICAgICAgICAgIG93
bmVkU3R5bGUgPSB0aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7
Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+bGVnYWN5
QW5pbWF0aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKCpyZW5kZXJlcik7CisgICAgaWYg
KHJlbmRlcmVyICYmIHJlbmRlcmVyLT5pc0NvbXBvc2l0ZWQoKSAmJiBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkpIHsKKyAg
ICAgICAgb3duZWRTdHlsZSA9IHJlbmRlcmVyLT5hbmltYXRlZFN0eWxlKCk7CiAgICAgICAgIGlm
IChwc2V1ZG9FbGVtZW50U3BlY2lmaWVyICE9IFBzZXVkb0lkOjpOb25lICYmICFlbGVtZW50Lmlz
UHNldWRvRWxlbWVudCgpKSB7CiAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBjYWNoZWQgcHNl
dWRvIHN0eWxlIHdpbGwgb25seSBleGlzdCBpZiB0aGUgYW5pbWF0aW9uIGhhcyBiZWVuIHJ1biBh
dCBsZWFzdCBvbmNlLgogICAgICAgICAgICAgcmV0dXJuIG93bmVkU3R5bGUtPmdldENhY2hlZFBz
ZXVkb1N0eWxlKHBzZXVkb0VsZW1lbnRTcGVjaWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZG9tL0RvY3VtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAK
aW5kZXggOTA5NmYyNjQ2NzkxMzBhNzg0YTUxYTlhZGM4YmFkZWJlYzdjN2FjNC4uMjk0MGM1OGJm
MTc4YzUyMGE2MDllYjFiNzM3NzM4ZWI2NjlmZGMwNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL0RvY3VtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3Bw
CkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiQXR0ci5oIgogI2luY2x1ZGUgIkJlZm9yZVVu
bG9hZEV2ZW50LmgiCiAjaW5jbHVkZSAiQ0RBVEFTZWN0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1
ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCkBA
IC0xOTYyLDcgKzE5NjEsNiBAQCB2b2lkIERvY3VtZW50OjpyZXNvbHZlU3R5bGUoUmVzb2x2ZVN0
eWxlVHlwZSB0eXBlKQogICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKFN0eWxlUmVjYWxjU3Rh
cnQsIFN0eWxlUmVjYWxjRW5kKTsKIAogICAgIFJlbmRlclZpZXc6OlJlcGFpbnRSZWdpb25BY2N1
bXVsYXRvciByZXBhaW50UmVnaW9uQWNjdW11bGF0b3IocmVuZGVyVmlldygpKTsKLSAgICBBbmlt
YXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmbV9mcmFtZS0+bGVnYWN5QW5p
bWF0aW9uKCkpOwogCiAgICAgLy8gRklYTUU6IERvIHRoaXMgdXBkYXRlIHBlciB0cmVlIHNjb3Bl
LgogICAgIHsKQEAgLTI0MjIsMTkgKzI0MjAsMTMgQEAgdm9pZCBEb2N1bWVudDo6ZGlkQmVjb21l
Q3VycmVudERvY3VtZW50SW5GcmFtZSgpCiAgICAgLy8gYmUgb3V0IG9mIHN5bmMgaWYgdGhlIERP
TSBzdXNwZW5zaW9uIHN0YXRlIGNoYW5nZWQgd2hpbGUgdGhlIGRvY3VtZW50IHdhcyBub3QgaW4g
dGhlIGZyYW1lIChwb3NzaWJseSBpbiB0aGUKICAgICAvLyBiYWNrL2ZvcndhcmQgY2FjaGUsIG9y
IHNpbXBseSBuZXdseSBjcmVhdGVkKS4KICAgICBpZiAobV9mcmFtZS0+YWN0aXZlRE9NT2JqZWN0
c0FuZEFuaW1hdGlvbnNTdXNwZW5kZWQoKSkgewotICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCi0gICAgICAg
ICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnN1c3Bl
bmRBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0Nv
bnRyb2xsZXIpCisgICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnN1c3BlbmRBbmlt
YXRpb25zKCk7CiAgICAgICAgIHN1c3BlbmRTY2hlZHVsZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5z
aW9uOjpQYWdlV2lsbEJlU3VzcGVuZGVkKTsKICAgICB9IGVsc2UgewogICAgICAgICByZXN1bWVT
Y2hlZHVsZWRUYXNrcyhSZWFzb25Gb3JTdXNwZW5zaW9uOjpQYWdlV2lsbEJlU3VzcGVuZGVkKTsK
LSAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90
aW1lbGluZXNDb250cm9sbGVyKQotICAgICAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxl
ci0+cmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIG1fZnJh
bWUtPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCh0aGlzKTsK
KyAgICAgICAgaWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKKyAgICAgICAgICAgIG1fdGltZWxp
bmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgIH0KIH0KIApAQCAtMjUyOCw5
ICsyNTIwLDYgQEAgdm9pZCBEb2N1bWVudDo6d2lsbEJlUmVtb3ZlZEZyb21GcmFtZSgpCiAgICAg
aWYgKG1faGFzUHJlcGFyZWRGb3JEZXN0cnVjdGlvbikKICAgICAgICAgcmV0dXJuOwogCi0gICAg
aWYgKG1fZnJhbWUpCi0gICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLmRldGFjaEZy
b21Eb2N1bWVudCh0aGlzKTsKLQogI2lmIFVTRShMSUJXRUJSVEMpCiAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIGJlIG1vdmVkIHRvIE1vZHVsZXMvbWVkaWFzdHJlYW0uCiAgICAgaWYgKExpYldl
YlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKSkgewpAQCAtMzA2Niw4ICszMDU1LDYgQEAg
dm9pZCBEb2N1bWVudDo6aW1wbGljaXRDbG9zZSgpCiAgICAgICAgIGlmIChhdXRvKiBkb2N1bWVu
dExvYWRlciA9IGxvYWRlcigpKQogICAgICAgICAgICAgZG9jdW1lbnRMb2FkZXItPnN0YXJ0SWNv
bkxvYWRpbmcoKTsKIAotICAgICAgICBmLT5sZWdhY3lBbmltYXRpb24oKS5zdGFydEFuaW1hdGlv
bnNJZk5vdFN1c3BlbmRlZCh0aGlzKTsKLQogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0
IGJlIGRpc3BhdGNoaW5nIHBlbmRpbmcgZXZlbnRzIGdsb2JhbGx5IG9uIGFsbCBEb2N1bWVudHMg
aGVyZS4KICAgICAgICAgLy8gRm9yIG5vdywgb25seSBkbyB0aGlzIHdoZW4gdGhlcmUgaXMgYSBG
cmFtZSwgb3RoZXJ3aXNlIHRoaXMgY291bGQgY2F1c2UgSlMgcmVlbnRyYW5jeQogICAgICAgICAv
LyBiZWxvdyBTVkcgZm9udCBwYXJzaW5nLCBmb3IgZXhhbXBsZS4gPGh0dHBzOi8vd2Via2l0Lm9y
Zy9iLzEzNjI2OT4KQEAgLTU0NTQsMTEgKzU0NDEsOCBAQCB2b2lkIERvY3VtZW50OjpyZXN1bWUo
UmVhc29uRm9yU3VzcGVuc2lvbiByZWFzb24pCiAKICAgICBBU1NFUlQobV9mcmFtZSk7CiAKLSAg
ICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKG1fdGltZWxpbmVzQ29u
dHJvbGxlcikKLSAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+cmVzdW1lQW5pbWF0
aW9ucygpOyAgCi0gICAgfSBlbHNlCi0gICAgICAgIG1fZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigp
LnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudCh0aGlzKTsKKyAgICBpZiAobV90aW1lbGluZXND
b250cm9sbGVyKQorICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlv
bnMoKTsKIAogICAgIHJlc3VtZVNjaGVkdWxlZFRhc2tzKHJlYXNvbik7CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9FbGVt
ZW50LmNwcAppbmRleCA4Zjg2ZmY0MWE2NjQ2ODJjMmZjNjg3ZTNlYmE2ODNjNTNmYzYzODZhLi5j
NWIzMzE2Y2NmNjQyMTZmMjkxZTZiYTU2YWI4NzA4MTMwZjcxNDY4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1l
bnQuY3BwCkBAIC0yOSw3ICsyOSw2IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2lu
Y2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJBdHRyaWJ1dGVDaGFuZ2VJbnZhbGlkYXRpb24uaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTUGFyc2Vy
LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCiAjaW5jbHVkZSAiQ2hyb21lQ2xpZW50LmgiCkBAIC0x
MTksNiArMTE4LDcgQEAKICNpbmNsdWRlICJUb3VjaEFjdGlvbi5oIgogI2luY2x1ZGUgIlZvaWRD
YWxsYmFjay5oIgogI2luY2x1ZGUgIldlYkFuaW1hdGlvbi5oIgorI2luY2x1ZGUgIldlYkFuaW1h
dGlvblR5cGVzLmgiCiAjaW5jbHVkZSAiV2hlZWxFdmVudC5oIgogI2luY2x1ZGUgIlhMaW5rTmFt
ZXMuaCIKICNpbmNsdWRlICJYTUxOU05hbWVzLmgiCkBAIC0yMjg4LDkgKzIyODgsNiBAQCB2b2lk
IEVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUgcmVtb3ZhbFR5cGUsIENv
bnRhaW5lck5vZGUmIG9sZFBhcgogICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50KCku
ZXhpc3RpbmdUaW1lbGluZSgpKQogICAgICAgICB0aW1lbGluZS0+ZWxlbWVudFdhc1JlbW92ZWQo
KnRoaXMpOwogCi0gICAgaWYgKGZyYW1lKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9u
KCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICNpZiBFTkFCTEUoV0hFRUxfRVZFTlRfTEFU
Q0hJTkcpCiAgICAgaWYgKGZyYW1lICYmIGZyYW1lLT5wYWdlKCkpIHsKICAgICAgICAgaWYgKGF1
dG8qIHNjcm9sbExhdGNoaW5nQ29udHJvbGxlciA9IGZyYW1lLT5wYWdlKCktPnNjcm9sbExhdGNo
aW5nQ29udHJvbGxlcklmRXhpc3RzKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20v
UHNldWRvRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vUHNldWRvRWxlbWVudC5jcHAK
aW5kZXggMTVkODFjMTA2ZDgwOTM1M2YyMWJlN2VjODQ4M2RkODhiNzYyOGIzNy4uZGFkMTU2NmNj
MDZhM2QxNGQ2YmNiN2M1MDc2ZWNjMThiNmM3YTc2NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qc2V1ZG9F
bGVtZW50LmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2luY2x1
ZGUgIlBzZXVkb0VsZW1lbnQuaCIKIAotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKICNpbmNsdWRlICJDb250ZW50RGF0YS5oIgogI2luY2x1ZGUgIkRvY3VtZW50VGltZWxpbmUu
aCIKICNpbmNsdWRlICJJbnNwZWN0b3JJbnN0cnVtZW50YXRpb24uaCIKQEAgLTkzLDkgKzkyLDYg
QEAgdm9pZCBQc2V1ZG9FbGVtZW50OjpjbGVhckhvc3RFbGVtZW50KCkKICAgICBpZiAoYXV0byog
dGltZWxpbmUgPSBkb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxp
bmUtPmVsZW1lbnRXYXNSZW1vdmVkKCp0aGlzKTsKICAgICAKLSAgICBpZiAoYXV0byogZnJhbWUg
PSBkb2N1bWVudCgpLmZyYW1lKCkpCi0gICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5j
YW5jZWxBbmltYXRpb25zKCp0aGlzKTsKLQogICAgIG1faG9zdEVsZW1lbnQgPSBudWxscHRyOwog
fQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKaW5kZXggY2FkZmI5NjliMmE0YTRjZjliNTgx
OGQ3MzQ0NjZiYTM0YmViNjI4My4uMDZmZTFjYjIwZWFmZGVkYmI4ZTFjNjdkNmNiY2JjNjhiZmZm
ZTAwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290LmlkbApAQCAtMzQsMyArMzQsNCBAQAogCiBT
aGFkb3dSb290IGluY2x1ZGVzIERvY3VtZW50T3JTaGFkb3dSb290OwogU2hhZG93Um9vdCBpbmNs
dWRlcyBJbm5lckhUTUw7CisKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2hpc3RvcnkvQ2Fj
aGVkRnJhbWUuY3BwIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKaW5k
ZXggNDY5ODU3NGQzMjUwNWU2ZjljNWMzYTFjYmFjYWJmZWIyZDBkNDFkYy4uOGRlMjZlMWJjMTUz
M2ZkMGIzZjA3NGYwNmIxZjM0ZDNlODBiODk4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aGlzdG9yeS9DYWNoZWRGcmFtZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaGlzdG9yeS9DYWNo
ZWRGcmFtZS5jcHAKQEAgLTI3LDcgKzI3LDYgQEAKICNpbmNsdWRlICJDYWNoZWRGcmFtZS5oIgog
CiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKICNpbmNsdWRlICJDYWNoZWRGcmFtZVBsYXRmb3JtRGF0YS5oIgogI2luY2x1
ZGUgIkNhY2hlZFBhZ2UuaCIKICNpbmNsdWRlICJET01XaW5kb3cuaCIKQEAgLTI3Myw4ICsyNzIs
NiBAQCB2b2lkIENhY2hlZEZyYW1lOjpkZXN0cm95KCkKIAogICAgIEZyYW1lOjpjbGVhclRpbWVy
cyhtX3ZpZXcuZ2V0KCksIG1fZG9jdW1lbnQuZ2V0KCkpOwogCi0gICAgbV92aWV3LT5mcmFtZSgp
LmxlZ2FjeUFuaW1hdGlvbigpLmRldGFjaEZyb21Eb2N1bWVudChtX2RvY3VtZW50LmdldCgpKTsK
LQogICAgIC8vIEZJWE1FOiBXaHkgZG8gd2UgbmVlZCB0byBjYWxsIHJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzIGhlcmU/IFdoZW4gdGhlIGRvY3VtZW50IGlzIGluIGJhY2svZm9yd2FyZCBjYWNoZSwg
dGhpcyBtZXRob2Qgd29uJ3Qgd29yawogICAgIC8vIGZ1bGx5IGFueXdheSwgYmVjYXVzZSB0aGUg
ZG9jdW1lbnQgd29uJ3QgYmUgYWJsZSB0byBhY2Nlc3MgaXRzIERPTVdpbmRvdyBvYmplY3QgKGR1
ZSB0byBiZWluZyBmcmFtZWxlc3MpLgogICAgIG1fZG9jdW1lbnQtPnJlbW92ZUFsbEV2ZW50TGlz
dGVuZXJzKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCmluZGV4IDNjNWFlNDU4NTRjNzJiZGY2ZmI3MzY1
ZWY1ZjI3ZmFhNmZkYmU1ZWMuLmJkMzQ5N2MxYTIyMDAxNTY1NmUwMDIwNDVlNGU2MTc3YzM5Mzk4
YjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvRnJhbWUuY3BwCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXBw
bHlTdHlsZUNvbW1hbmQuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5jbHVk
ZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlci5oIgogI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNoZWRDU1NTdHlsZVNoZWV0Lmgi
CkBAIC0xNTYsNyArMTU1LDYgQEAgRnJhbWU6OkZyYW1lKFBhZ2UmIHBhZ2UsIEhUTUxGcmFtZU93
bmVyRWxlbWVudCogb3duZXJFbGVtZW50LCBVbmlxdWVSZWY8RnJhbWVMb2EKICAgICAsIG1fbmF2
aWdhdGlvblNjaGVkdWxlcihtYWtlVW5pcXVlUmVmPE5hdmlnYXRpb25TY2hlZHVsZXI+KCp0aGlz
KSkKICAgICAsIG1fb3duZXJFbGVtZW50KG93bmVyRWxlbWVudCkKICAgICAsIG1fc2NyaXB0KG1h
a2VVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4oKnRoaXMpKQotICAgICwgbV9hbmltYXRpb25D
b250cm9sbGVyKG1ha2VVbmlxdWVSZWY8Q1NTQW5pbWF0aW9uQ29udHJvbGxlcj4oKnRoaXMpKQog
ICAgICwgbV9wYWdlWm9vbUZhY3RvcihwYXJlbnRQYWdlWm9vbUZhY3Rvcih0aGlzKSkKICAgICAs
IG1fdGV4dFpvb21GYWN0b3IocGFyZW50VGV4dFpvb21GYWN0b3IodGhpcykpCiAgICAgLCBtX2V2
ZW50SGFuZGxlcihtYWtlVW5pcXVlUmVmPEV2ZW50SGFuZGxlcj4oKnRoaXMpKQpAQCAtNzM3LDEx
ICs3MzUsOCBAQCB2b2lkIEZyYW1lOjpjbGVhclRpbWVycyhGcmFtZVZpZXcgKnZpZXcsIERvY3Vt
ZW50ICpkb2N1bWVudCkKIHsKICAgICBpZiAodmlldykgewogICAgICAgICB2aWV3LT5sYXlvdXRD
b250ZXh0KCkudW5zY2hlZHVsZUxheW91dCgpOwotICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpIHsKLSAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC0+dGlt
ZWxpbmVzQ29udHJvbGxlcigpKQotICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFu
aW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICB2aWV3LT5mcmFtZSgpLmxl
Z2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwor
ICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQtPnRpbWVsaW5lc0NvbnRyb2xs
ZXIoKSkKKyAgICAgICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICAg
ICAgdmlldy0+ZnJhbWUoKS5ldmVudEhhbmRsZXIoKS5zdG9wQXV0b3Njcm9sbFRpbWVyKCk7CiAg
ICAgfQogfQpAQCAtMTAyOSwxMSArMTAyNCw4IEBAIHZvaWQgRnJhbWU6OnJlc3VtZUFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zKCkKIAogICAgIC8vIEZyYW1lOjpjbGVhclRpbWVycygpIHN1
c3BlbmRlZCBhbmltYXRpb25zIGFuZCBwZW5kaW5nIHJlbGF5b3V0cy4KIAotICAgIGlmIChSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gbV9kb2Mt
PnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgIHRpbWVsaW5lcy0+cmVzdW1lQW5p
bWF0aW9ucygpOwotICAgIH0gZWxzZQotICAgICAgICBsZWdhY3lBbmltYXRpb24oKS5yZXN1bWVB
bmltYXRpb25zRm9yRG9jdW1lbnQobV9kb2MuZ2V0KCkpOworICAgIGlmIChhdXRvKiB0aW1lbGlu
ZXMgPSBtX2RvYy0+dGltZWxpbmVzQ29udHJvbGxlcigpKQorICAgICAgICB0aW1lbGluZXMtPnJl
c3VtZUFuaW1hdGlvbnMoKTsKICAgICBpZiAobV92aWV3KQogICAgICAgICBtX3ZpZXctPmxheW91
dENvbnRleHQoKS5zY2hlZHVsZUxheW91dCgpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5oCmluZGV4IDY4ZmRj
MTE1NWQ5MTNlZWNmMjU3MDZhZDk4ODliNTAyMWZhYmYyYzQuLjUwYzY1ZjVlNWIwNzUzYzFlNmQz
MDdiMjEzYjUyMDBjNDUwYWEzMGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWUuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKQEAgLTY2LDcgKzY2LDYgQEAg
Y2xhc3MgVGV4dFN0cmVhbTsKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1jbGFzcyBDU1NBbmlt
YXRpb25Db250cm9sbGVyOwogY2xhc3MgQ29sb3I7CiBjbGFzcyBET01XaW5kb3c7CiBjbGFzcyBE
b2N1bWVudDsKQEAgLTE3NCw4ICsxNzMsNiBAQCBwdWJsaWM6CiAgICAgRnJhbWVTZWxlY3Rpb24m
IHNlbGVjdGlvbigpIHsgcmV0dXJuIGRvY3VtZW50KCktPnNlbGVjdGlvbigpOyB9CiAgICAgY29u
c3QgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbigpIGNvbnN0IHsgcmV0dXJuIGRvY3VtZW50KCkt
PnNlbGVjdGlvbigpOyB9CiAgICAgRnJhbWVUcmVlJiB0cmVlKCkgY29uc3Q7Ci0gICAgQ1NTQW5p
bWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0aW9uKCkgeyByZXR1cm4gbV9hbmltYXRpb25D
b250cm9sbGVyOyB9Ci0gICAgY29uc3QgQ1NTQW5pbWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5p
bWF0aW9uKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9CiAgICAgU2Ny
aXB0Q29udHJvbGxlciYgc2NyaXB0KCkgeyByZXR1cm4gbV9zY3JpcHQ7IH0KICAgICBjb25zdCBT
Y3JpcHRDb250cm9sbGVyJiBzY3JpcHQoKSBjb25zdCB7IHJldHVybiBtX3NjcmlwdDsgfQogCkBA
IC0zNDUsNyArMzQyLDYgQEAgcHJpdmF0ZToKICAgICBSZWZQdHI8RG9jdW1lbnQ+IG1fZG9jOwog
CiAgICAgVW5pcXVlUmVmPFNjcmlwdENvbnRyb2xsZXI+IG1fc2NyaXB0OwotICAgIFVuaXF1ZVJl
ZjxDU1NBbmltYXRpb25Db250cm9sbGVyPiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7CiAKICNpZiBF
TkFCTEUoREFUQV9ERVRFQ1RJT04pCiAgICAgUmV0YWluUHRyPE5TQXJyYXk+IG1fZGF0YURldGVj
dGlvblJlc3VsdHM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlldy5jcHAKaW5kZXggNzViOWUyYmZjOWVh
ZTNlMzViZWUxOGZlYmQ0OTFmNDBmMzY3YzYxNi4uZDQ5MjQxZWYwODhiODM3NjI1NjA5ZDJjNjVh
YmYyODM0ZGE0MTg2NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcApAQCAtMzAsNyArMzAs
NiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENh
Y2hlLmgiCiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCi0jaW5jbHVkZSAiQ1NT
QW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVk
ZSAiQ2FjaGVkUmVzb3VyY2VMb2FkZXIuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTU4Niw4
ICs1ODUsNiBAQCB2b2lkIEZyYW1lVmlldzo6ZGlkRGVzdHJveVJlbmRlclRyZWUoKQogCiAgICAg
QVNTRVJUKCFtX3ZpZXdwb3J0Q29uc3RyYWluZWRPYmplY3RzIHx8IG1fdmlld3BvcnRDb25zdHJh
aW5lZE9iamVjdHMtPmNvbXB1dGVzRW1wdHkoKSk7CiAgICAgQVNTRVJUKCFtX3Nsb3dSZXBhaW50
T2JqZWN0cyB8fCBtX3Nsb3dSZXBhaW50T2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKTsKLQotICAg
IEFTU0VSVCghZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5oYXNBbmltYXRpb25zKCkpOwogfQog
CiB2b2lkIEZyYW1lVmlldzo6c2V0Q29udGVudHNTaXplKGNvbnN0IEludFNpemUmIHNpemUpCkBA
IC00NDE3LDggKzQ0MTQsNiBAQCB2b2lkIEZyYW1lVmlldzo6dXBkYXRlTGF5b3V0QW5kU3R5bGVJ
Zk5lZWRlZFJlY3Vyc2l2ZSgpCiAgICAgLy8gU3R5bGUgdXBkYXRlcyBjYW4gdHJpZ2dlciBzY3Jp
cHQsIHdoaWNoIGNhbiBjYXVzZSB0aGlzIEZyYW1lVmlldyB0byBiZSBkZXN0cm95ZWQuCiAgICAg
UmVmPEZyYW1lVmlldz4gcHJvdGVjdGVkVGhpcygqdGhpcyk7CiAKLSAgICBBbmltYXRpb25VcGRh
dGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKSk7
Ci0KICAgICB1c2luZyBEZXNjZW5kYW50c0RlcXVlID0gRGVxdWU8UmVmPEZyYW1lVmlldz4sIDE2
PjsKICAgICBhdXRvIG5leHRSZW5kZXJlZERlc2NlbmRhbnQgPSBbdGhpc10gKERlc2NlbmRhbnRz
RGVxdWUmIGRlc2NlbmRhbnRzRGVxdWUpIC0+IFJlZlB0cjxGcmFtZVZpZXc+IHsKICAgICAgICAg
aWYgKGRlc2NlbmRhbnRzRGVxdWUuaXNFbXB0eSgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
RnJhbWVWaWV3TGF5b3V0Q29udGV4dC5jcHAKaW5kZXggMGM4YmU3OTQ5NTFiNzhlMTliNzU5Mjg4
NWJiZjgzNWViMWM5NTNiMS4uOWZhNTE3MGZhMTUxNWYzYWZiNjdjZjMxMDdkOThjZmI5NWViMmQ1
MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3Bw
CkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiRnJhbWVW
aWV3TGF5b3V0Q29udGV4dC5oIgogCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5o
IgogI2luY2x1ZGUgIkRlYnVnUGFnZU92ZXJsYXlzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIK
ICNpbmNsdWRlICJGcmFtZVZpZXcuaCIKQEAgLTIwNCw3ICsyMDMsNiBAQCB2b2lkIEZyYW1lVmll
d0xheW91dENvbnRleHQ6OmxheW91dCgpCiAgICAgTGF5b3V0U2NvcGUgbGF5b3V0U2NvcGUoKnRo
aXMpOwogICAgIFRyYWNlU2NvcGUgdHJhY2luZ1Njb3BlKExheW91dFN0YXJ0LCBMYXlvdXRFbmQp
OwogICAgIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbjo6d2lsbExheW91dCh2aWV3KCkuZnJhbWUo
KSk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJnZpZXco
KS5mcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpKTsKICAgICBXZWFrUHRyPFJlbmRlckVsZW1lbnQ+
IGxheW91dFJvb3Q7CiAgICAgCiAgICAgbV9sYXlvdXRUaW1lci5zdG9wKCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1BhZ2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9QYWdl
LmNwcAppbmRleCBhMGE3N2QyODgzNjQ4MjFjNTEwYjJkNTEyYmE3MGU3MjljMjFiNmQ1Li5mOTIz
YmE4OTI5OWMwMDhlMTBmMGQyOGVlODBhM2YzZjk3YmFhOTg2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1BhZ2UuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAK
QEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5jbHVk
ZSAiQmFja0ZvcndhcmRDbGllbnQuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVT
dG9yYWdlUHJvdmlkZXIuaCIKICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2lu
Y2x1ZGUgIkNocm9tZS5oIgpAQCAtMTY0OCw5ICsxNjQ3LDYgQEAgdm9pZCBQYWdlOjpoYW5kbGVM
b3dNb2RlUG93ZXJDaGFuZ2UoYm9vbCBpc0xvd1Bvd2VyTW9kZUVuYWJsZWQpCiAgICAgbV90aHJv
dHRsaW5nUmVhc29ucyA9IG1fdGhyb3R0bGluZ1JlYXNvbnMgXiBUaHJvdHRsaW5nUmVhc29uOjpM
b3dQb3dlck1vZGU7CiAgICAgcmVuZGVyaW5nVXBkYXRlU2NoZWR1bGVyKCkuYWRqdXN0UmVuZGVy
aW5nVXBkYXRlRnJlcXVlbmN5KCk7CiAKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQot
ICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS51cGRhdGVUaHJvdHRsaW5nU3Rh
dGUoKTsKLQogICAgIHVwZGF0ZURPTVRpbWVyQWxpZ25tZW50SW50ZXJ2YWwoKTsKIH0KIApAQCAt
MjE4NSwxMyArMjE4MSwxMCBAQCB2b2lkIFBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKGJvb2wg
aXNWaXNpYmxlKQogICAgICAgICAgICAgdmlldy0+c2hvdygpOwogCiAgICAgICAgIGlmIChtX3Nl
dHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkgewotICAg
ICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICAgICAgZm9y
RWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkK
LSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+cmVzdW1lQW5pbWF0aW9ucygpOwot
ICAgICAgICAgICAgICAgIH0pOwotICAgICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAg
bWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9ucygpOworICAgICAg
ICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKKyAgICAgICAg
ICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxl
cigpKQorICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFuaW1hdGlvbnMoKTsK
KyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAKICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtd
IChEb2N1bWVudCYgZG9jdW1lbnQpIHsKQEAgLTIyMDksMTMgKzIyMDIsMTAgQEAgdm9pZCBQYWdl
OjpzZXRJc1Zpc2libGVJbnRlcm5hbChib29sIGlzVmlzaWJsZSkKIAogICAgIGlmICghaXNWaXNp
YmxlKSB7CiAgICAgICAgIGlmIChtX3NldHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3Vz
cGVuc2lvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1l
bnQpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3VtZW50
LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5l
cy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgICAg
IH0gZWxzZQotICAgICAgICAgICAgICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnN1
c3BlbmRBbmltYXRpb25zKCk7CisgICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3Vt
ZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBk
b2N1bWVudC50aW1lbGluZXNDb250cm9sbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHRpbWVs
aW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICB9CiAK
ICAgICAgICAgZm9yRWFjaERvY3VtZW50KFtdIChEb2N1bWVudCYgZG9jdW1lbnQpIHsKQEAgLTI1
NjAsMjEgKzI1NTAsMTQgQEAgdm9pZCBQYWdlOjpyZXNldFNlZW5NZWRpYUVuZ2luZXMoKQogdm9p
ZCBQYWdlOjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCgpCiB7
CiAgICAgaWYgKCFpc1Zpc2libGUoKSkgewotICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCkpIHsKLSAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERvY3VtZW50JiBkb2N1bWVu
dCkgewotICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1l
bGluZXNDb250cm9sbGVyKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3Mt
PmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQotICAgICAgICAgICAg
ICAgICAgICAgICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnJlc3VtZUFu
aW1hdGlvbnMoKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9KTsKLSAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgIGlmIChtX3NldHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0
aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKLSAgICAgICAgICAgICAgICBtYWluRnJhbWUoKS5sZWdh
Y3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICAgICAgZWxzZQotICAg
ICAgICAgICAgICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlv
bnMoKTsKLSAgICAgICAgfQorICAgICAgICBmb3JFYWNoRG9jdW1lbnQoWyZdIChEb2N1bWVudCYg
ZG9jdW1lbnQpIHsKKyAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50
aW1lbGluZXNDb250cm9sbGVyKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAobV9zZXR0aW5ncy0+
aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCisgICAgICAgICAgICAg
ICAgICAgIHRpbWVsaW5lcy0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+cmVzdW1lQW5pbWF0aW9ucygpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9KTsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BhZ2UvUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgKaW5kZXggMDg0M2VkNzYwY2RlYzczYTljYjFh
ZmY3ZGEyOWNjYTQwMjRhNmE0My4uZTY0YjJlNjE5YjFhZDQwMWVjZTk4YzdlYTg0MDllZjVhOTk2
YWFmYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgK
QEAgLTcwLDEyICs3MCw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldElzU2VjdXJlQ29udGV4dEF0
dHJpYnV0ZUVuYWJsZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1NlY3VyZUNvbnRleHRBdHRyaWJ1
dGVFbmFibGVkID0gaXNFbmFibGVkOyB9CiAgICAgYm9vbCBpc1NlY3VyZUNvbnRleHRBdHRyaWJ1
dGVFbmFibGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc1NlY3VyZUNvbnRleHRBdHRyaWJ1dGVFbmFi
bGVkOyB9CiAKLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGJvb2wgYXJlRW5hYmxl
ZCkgeyBtX2FyZVdlYkFuaW1hdGlvbnNFbmFibGVkID0gYXJlRW5hYmxlZDsgfQotICAgIGJvb2wg
d2ViQW5pbWF0aW9uc0VuYWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZVdlYkFuaW1hdGlvbnNF
bmFibGVkOyB9Ci0KLSAgICB2b2lkIHNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoYm9vbCBpc0VuYWJsZWQpIHsgbV9pc1dlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQgPSBpc0VuYWJsZWQ7IH0KLSAgICBib29sIHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FyZVdlYkFuaW1hdGlvbnNFbmFibGVkICYmIG1faXNX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOyB9Ci0KICAgICB2b2lkIHNldFdlYkFu
aW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChib29sIGFyZUVuYWJsZWQpIHsgbV9h
cmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQgPSBhcmVFbmFibGVkOyB9
CiAgICAgYm9vbCB3ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoKSBjb25z
dCB7IHJldHVybiBtX2FyZVdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDsg
fQogCkBAIC0zMDAsOCArMjk0LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1faXNNZW51SXRlbUVs
ZW1lbnRFbmFibGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNEaXJlY3RvcnlVcGxvYWRFbmFi
bGVkIHsgZmFsc2UgfTsKICAgICBib29sIG1faXNDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQg
eyBmYWxzZSB9OwotICAgIGJvb2wgbV9hcmVXZWJBbmltYXRpb25zRW5hYmxlZCB7IHRydWUgfTsK
LSAgICBib29sIG1faXNXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIHsgdHJ1ZSB9
OwogICAgIGJvb2wgbV9hcmVXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9hcmVXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0Vu
YWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0ltYWdlQml0bWFwRW5hYmxlZCB7IHRydWUg
fTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlvbkJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAK
ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGVkYWU3NDM1OTc3ZmE5MjUwZWMxMGMxNzM5
NDE1ZGU0Y2Q0ZjU1M2EuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw3ODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywg
MjAwOCwgMjAwOSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5v
ciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVu
ZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3
YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJB
UyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICog
RElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQW5pbWF0aW9uQmFzZS5oIgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUg
IkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgi
Ci0jaW5jbHVkZSAiRG9jdW1lbnQuaCIKLSNpbmNsdWRlICJGbG9hdENvbnZlcnNpb24uaCIKLSNp
bmNsdWRlICJHZW9tZXRyeVV0aWxpdGllcy5oIgotI2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNs
dWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgIlJl
bmRlclZpZXcuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8d3RmL1JlZi5oPgot
Ci1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLUFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvbkJhc2UoY29u
c3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1h
dGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uKQotICAgIDogbV9lbGVtZW50KCZlbGVtZW50KQotICAg
ICwgbV9jb21wb3NpdGVBbmltYXRpb24oJmNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAsIG1fYW5p
bWF0aW9uKGNvbnN0X2Nhc3Q8QW5pbWF0aW9uJj4oYW5pbWF0aW9uKSkKLXsKLSAgICAvLyBDb21w
dXRlIHRoZSB0b3RhbCBkdXJhdGlvbgotICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291
bnQoKSA+IDApCi0gICAgICAgIG1fdG90YWxEdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpICogbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCk7Ci19Ci0KLUFuaW1hdGlvbkJhc2U6
On5BbmltYXRpb25CYXNlKCkgPSBkZWZhdWx0OwotCi1jb25zdCBSZW5kZXJTdHlsZSYgQW5pbWF0
aW9uQmFzZTo6Y3VycmVudFN0eWxlKCkgY29uc3QKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIg
PSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZXR1cm4gcmVuZGVyZXItPnN0eWxlKCk7Ci0g
ICAgcmV0dXJuIHVuYW5pbWF0ZWRTdHlsZSgpOwotfQotCi1SZW5kZXJFbGVtZW50KiBBbmltYXRp
b25CYXNlOjpyZW5kZXJlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZWxlbWVudCA/IG1fZWxl
bWVudC0+cmVuZGVyZXIoKSA6IG51bGxwdHI7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6Y2xl
YXIoKQotewotICAgIGVuZEFuaW1hdGlvbigpOwotICAgIG1fZWxlbWVudCA9IG51bGxwdHI7Ci0g
ICAgbV9jb21wb3NpdGVBbmltYXRpb24gPSBudWxscHRyOwotfQotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OnNldE5lZWRzU3R5bGVSZWNhbGMoRWxlbWVudCogZWxlbWVudCkKLXsKLSAgICBpZiAoIWVs
ZW1lbnQgfHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkK
LSAgICAgICAgcmV0dXJuOwotCi0gICAgQVNTRVJUKGVsZW1lbnQtPmRvY3VtZW50KCkuYmFja0Zv
cndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0g
ICAgZWxlbWVudC0+aW52YWxpZGF0ZVN0eWxlKCk7Ci19Ci0KLWRvdWJsZSBBbmltYXRpb25CYXNl
OjpkdXJhdGlvbigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigp
OwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OnBsYXlTdGF0ZVBsYXlpbmcoKSBjb25zdAotewot
ICAgIHJldHVybiBtX2FuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0gQW5pbWF0aW9uUGxheVN0YXRl
OjpQbGF5aW5nOwotfQotCi1ib29sIEFuaW1hdGlvbkJhc2U6OmFuaW1hdGlvbnNNYXRjaChjb25z
dCBBbmltYXRpb24mIGFuaW1hdGlvbikgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hbmltYXRpb24t
PmFuaW1hdGlvbnNNYXRjaChhbmltYXRpb24pOwotfQotCi0jaWYgIUxPR19ESVNBQkxFRAotc3Rh
dGljIGNvbnN0IGNoYXIqIG5hbWVGb3JTdGF0ZShBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0
ZSBzdGF0ZSkKLXsKLSAgICBzd2l0Y2ggKHN0YXRlKSB7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNl
OjpBbmltYXRpb25TdGF0ZTo6TmV3OiByZXR1cm4gIk5ldyI7Ci0gICAgY2FzZSBBbmltYXRpb25C
YXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXI6IHJldHVybiAiU3RhcnRXYWl0VGlt
ZXIiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0
eWxlQXZhaWxhYmxlOiByZXR1cm4gIlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZTogcmV0dXJu
ICJTdGFydFdhaXRSZXNwb25zZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25T
dGF0ZTo6TG9vcGluZzogcmV0dXJuICJMb29waW5nIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlOjpFbmRpbmc6IHJldHVybiAiRW5kaW5nIjsKLSAgICBjYXNlIEFuaW1h
dGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc6IHJldHVybiAiUGF1c2VkTmV3IjsK
LSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0VGltZXI6
IHJldHVybiAiUGF1c2VkV2FpdFRpbWVyIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU6IHJldHVybiAiUGF1c2VkV2FpdFN0
eWxlQXZhaWxhYmxlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRXYWl0UmVzcG9uc2U6IHJldHVybiAiUGF1c2VkV2FpdFJlc3BvbnNlIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW46IHJldHVybiAiUGF1c2Vk
UnVuIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlOjpEb25lOiByZXR1
cm4gIkRvbmUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OkZpbGxp
bmdGb3J3YXJkczogcmV0dXJuICJGaWxsaW5nRm9yd2FyZHMiOwotICAgIH0KLSAgICByZXR1cm4g
IiI7Ci19Ci0jZW5kaWYKLQotI2lmICFFUlJPUl9ESVNBQkxFRAotc3RhdGljIGNvbnN0IGNoYXIq
IG5hbWVGb3JTdGF0ZUlucHV0KEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQgaW5w
dXQpCi17Ci0gICAgc3dpdGNoIChpbnB1dCkgewotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5p
bWF0aW9uU3RhdGVJbnB1dDo6TWFrZU5ldzogcmV0dXJuICJNYWtlTmV3IjsKLSAgICBjYXNlIEFu
aW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uOiByZXR1cm4g
IlN0YXJ0QW5pbWF0aW9uIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRl
SW5wdXQ6OlJlc3RhcnRBbmltYXRpb246IHJldHVybiAiUmVzdGFydEFuaW1hdGlvbiI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQ6
IHJldHVybiAiU3RhcnRUaW1lckZpcmVkIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlOiByZXR1cm4gIlN0eWxlQXZhaWxhYmxlIjsK
LSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNl
dDogcmV0dXJuICJTdGFydFRpbWVTZXQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0
aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQ6IHJldHVybiAiTG9vcFRpbWVyRmlyZWQiOwot
ICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJl
ZDogcmV0dXJuICJFbmRUaW1lckZpcmVkIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1h
dGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGU6IHJldHVybiAiUGF1c2VPdmVycmlkZSI7Ci0g
ICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN1bWVPdmVycmlk
ZTogcmV0dXJuICJSZXN1bWVPdmVycmlkZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmlt
YXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nOiByZXR1cm4gIlBsYXlTdGF0ZVJ1bm5p
bmciOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0
YXRlUGF1c2VkOiByZXR1cm4gIlBsYXlTdGF0ZVBhdXNlZCI7Ci0gICAgY2FzZSBBbmltYXRpb25C
YXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRBbmltYXRpb246IHJldHVybiAiRW5kQW5pbWF0
aW9uIjsKLSAgICB9Ci0gICAgcmV0dXJuICIiOwotfQotI2VuZGlmCi0KLXZvaWQgQW5pbWF0aW9u
QmFzZTo6dXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQgaW5wdXQsIGRvdWJs
ZSBwYXJhbSkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICAvLyBJZiB3ZSBnZXQgQW5pbWF0aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1h
dGlvbiB0aGVuIHdlIGZvcmNlIGEgbmV3IGFuaW1hdGlvbiwgcmVnYXJkbGVzcyBvZiBzdGF0ZS4K
LSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TWFrZU5ldykgewotICAgICAg
ICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVB
dmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKCp0aGlzKTsKLSAg
ICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXciLCB0aGlz
LCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICBtX2FuaW1hdGlvblN0
YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgbV9zdGFydFRpbWUgPSBXVEY6Om51
bGxvcHQ7Ci0gICAgICAgIG1fcGF1c2VUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICBtX3Jl
cXVlc3RlZFN0YXJ0VGltZSA9IDA7Ci0gICAgICAgIG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uID0g
V1RGOjpudWxsb3B0OwotICAgICAgICBlbmRBbmltYXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwot
ICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5p
bWF0aW9uKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRl
OjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0
aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUoKnRoaXMpOwotICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICBtX3N0
YXJ0VGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxv
cHQ7Ci0gICAgICAgIG1fcmVxdWVzdGVkU3RhcnRUaW1lID0gMDsKLSAgICAgICAgbV9uZXh0SXRl
cmF0aW9uRHVyYXRpb24gPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIGVuZEFuaW1hdGlvbigpOwot
Ci0gICAgICAgIGlmICghcGF1c2VkKCkpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUo
QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIC0xKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRBbmlt
YXRpb24pIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6
OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRp
b24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JT
dHlsZSgqdGhpcyk7Ci0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUg
JXMgLT4gRG9uZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RG9uZTsKLSAgICAgICAgZW5k
QW5pbWF0aW9uKCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0g
QW5pbWF0aW9uU3RhdGVJbnB1dDo6UGF1c2VPdmVycmlkZSkgewotICAgICAgICBpZiAobV9hbmlt
YXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2UpIHsKLSAgICAg
ICAgICAgIC8vIElmIHdlIGFyZSBpbiBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2Us
IHRoZSBhbmltYXRpb24gd2lsbCBnZXQgY2FuY2VsZWQgYmVmb3JlIAotICAgICAgICAgICAgLy8g
d2UgZ2V0IGEgcmVzcG9uc2UsIHNvIG1vdmUgdG8gdGhlIG5leHQgc3RhdGUuCi0gICAgICAgICAg
ICBlbmRBbmltYXRpb24oKTsKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRp
b25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpKTsK
LSAgICAgICAgfQotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgaWYgKGlucHV0ID09IEFu
aW1hdGlvblN0YXRlSW5wdXQ6OlJlc3VtZU92ZXJyaWRlKSB7Ci0gICAgICAgIGlmIChtX2FuaW1h
dGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpMb29waW5nIHx8IG1fYW5pbWF0aW9uU3RhdGUg
PT0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZykgewotICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFu
aW1hdGlvbgotICAgICAgICAgICAgc3RhcnRBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm47Ci0gICAgfQotCi0gICAgLy8gRXhlY3V0ZSBzdGF0ZSBtYWNoaW5lCi0gICAgc3dpdGNoICht
X2FuaW1hdGlvblN0YXRlKSB7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6Ok5ldzoKLSAg
ICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1h
dGlvbiB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nIHx8
IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAg
ICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiB8
fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nKSB7Ci0gICAg
ICAgICAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRp
bWUoKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IFN0YXJ0V2FpdFRpbWVyIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3Rh
dGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6
OlN0YXJ0V2FpdFRpbWVyOwotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAv
LyBXZSBhcmUgcGF1c2luZyBiZWZvcmUgd2UgZXZlbiBzdGFydGVkLgotICAgICAgICAgICAgICAg
IExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gQW5pbWF0aW9uU3RhdGU6
OlBhdXNlZE5ldyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXc7
Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpT
dGFydFdhaXRUaW1lcjoKLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0YXJ0VGltZXJGaXJlZCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChwYXJh
bSA+PSAwKTsKLSAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1lciBoYXMgZmlyZWQsIHRlbGwg
dGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQgdG8gcmVzcG9uZCB3aXRoIHN0
YXJ0IHRpbWUKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0
YXRlICVzIC0+IFN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlICh0aW1lIGlzICVmKSIsIHRoaXMsIG5h
bWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAgICAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGU7
Ci0gICAgICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xs
ZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwotCi0gICAgICAgICAg
ICAgICAgLy8gVHJpZ2dlciBhIHJlbmRlciBzbyB3ZSBjYW4gc3RhcnQgdGhlIGFuaW1hdGlvbgot
ICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAgICAgICAgICAgICAgICAgIG1fY29t
cG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRWxlbWVudENoYW5nZVRv
RGlzcGF0Y2goKm1fZWxlbWVudCk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgIEFTU0VSVCghcGF1c2VkKCkpOwotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHdhaXRpbmcg
Zm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJlIGFuZCB3ZSBnb3QgYSBwYXVzZS4gQ2FuY2VsIHRo
ZSB0aW1lciwgcGF1c2UgYW5kIHdhaXQKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25z
LCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkV2FpdFRpbWVyIiwgdGhpcywgbmFtZUZv
clN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0
YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRUaW1lcjsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRT
dHlsZUF2YWlsYWJsZToKLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQ
bGF5U3RhdGVQYXVzZWQpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3Rh
dGVJbnB1dDo6U3R5bGVBdmFpbGFibGUpIHsKLSAgICAgICAgICAgICAgICAvLyBTdGFydCB0aW1l
ciBoYXMgZmlyZWQsIHRlbGwgdGhlIGFuaW1hdGlvbiB0byBzdGFydCBhbmQgd2FpdCBmb3IgaXQg
dG8gcmVzcG9uZCB3aXRoIHN0YXJ0IHRpbWUKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IFN0YXJ0V2FpdFJlc3BvbnNlICh0aW1lIGlzICVm
KSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAgICAg
ICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVz
cG9uc2U7Ci0KLSAgICAgICAgICAgICAgICBvdmVycmlkZUFuaW1hdGlvbnMoKTsKLQotICAgICAg
ICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAgICAgICBpZiAob3Zl
cnJpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIFdlIHdvbid0IHRyeSB0byBzdGFy
dCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIGlmIHdlIGFyZSBvdmVycmlkZGVuIGFuZAotICAgICAg
ICAgICAgICAgICAgICAvLyBqdXN0IG1vdmUgb24gdG8gdGhlIG5leHQgc3RhdGUuCi0gICAgICAg
ICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3Rh
cnRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwot
ICAgICAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkpOwotICAg
ICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGRvdWJsZSB0aW1lT2Zm
c2V0ID0gMDsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGZvciAnYW5pbWF0
aW9uLWRlbGF5JyBpcyBuZWdhdGl2ZSB0aGVuIHRoZSBhbmltYXRpb24gYXBwZWFycyB0byBoYXZl
IHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlv
bi0+ZGVsYXkoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAgICB0aW1lT2Zmc2V0ID0gLW1f
YW5pbWF0aW9uLT5kZWxheSgpOwotICAgICAgICAgICAgICAgICAgICBib29sIHN0YXJ0ZWQgPSBz
dGFydEFuaW1hdGlvbih0aW1lT2Zmc2V0KTsKLQotICAgICAgICAgICAgICAgICAgICBtX2NvbXBv
c2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZFRvQW5pbWF0aW9uc1dhaXRp
bmdGb3JTdGFydFRpbWVSZXNwb25zZSgqdGhpcywgc3RhcnRlZCk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7Ci0gICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSdyZSB3YWl0aW5nIGZvciB0aGUg
c3R5bGUgdG8gYmUgYXZhaWxhYmxlIGFuZCB3ZSBnb3QgYSBwYXVzZS4gUGF1c2UgYW5kIHdhaXQK
LSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
OwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gUGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0
aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25z
ZToKLSAgICAgICAgICAgIEFTU0VSVChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFy
dFRpbWVTZXQgfHwgaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2Vk
KTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0
VGltZVNldCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+IC0wLjAwMSk7IC8vIFNv
bWV0aW1lcyBDb3JlIEFuaW1hdGlvbiBnaXZlcyB1cyBhIGJlZ2luVGltZSBzbGlnaHRseSBpbnRv
IHRoZSBmdXR1cmUuCi0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRp
b25TdGF0ZSAlcyAtPiBTdGFydFRpbWVTZXQgKHRpbWUgaXMgJWYpIiwgdGhpcywgbmFtZUZvclN0
YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBo
YXZlIGEgc3RhcnQgdGltZSwgc2V0IGl0LCB1bmxlc3MgdGhlIHN0YXJ0VGltZSBpcyBhbHJlYWR5
IHNldAotICAgICAgICAgICAgICAgIGlmICghbV9zdGFydFRpbWUpIHsKLSAgICAgICAgICAgICAg
ICAgICAgbV9zdGFydFRpbWUgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgdGhl
IHZhbHVlIGZvciAnYW5pbWF0aW9uLWRlbGF5JyBpcyBuZWdhdGl2ZSB0aGVuIHRoZSBhbmltYXRp
b24gYXBwZWFycyB0byBoYXZlIHN0YXJ0ZWQgaW4gdGhlIHBhc3QuCi0gICAgICAgICAgICAgICAg
ICAgIGlmIChtX2FuaW1hdGlvbi0+ZGVsYXkoKSA8IDApCi0gICAgICAgICAgICAgICAgICAgICAg
ICBtX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lLnZhbHVlKCkgKyBtX2FuaW1hdGlvbi0+ZGVsYXko
KTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBOb3cgdGhhdCB3ZSBr
bm93IHRoZSBzdGFydCB0aW1lLCBmaXJlIHRoZSBzdGFydCBldmVudC4KLSAgICAgICAgICAgICAg
ICBvbkFuaW1hdGlvblN0YXJ0KDApOyAvLyBUaGUgZWxhcHNlZFRpbWUgaXMgMC4KLQotICAgICAg
ICAgICAgICAgIC8vIERlY2lkZSB3aGV0aGVyIHRvIGdvIGludG8gbG9vcGluZyBvciBlbmRpbmcg
c3RhdGUKLSAgICAgICAgICAgICAgICBnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgpOwotCi0g
ICAgICAgICAgICAgICAgLy8gRGlzcGF0Y2ggdXBkYXRlU3R5bGVJZk5lZWRlZCBzbyB3ZSBjYW4g
c3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpCi0gICAg
ICAgICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVy
KCkuYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fZWxlbWVudCk7Ci0gICAgICAgICAgICB9
IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHdhaXRpbmcg
Zm9yIGEgc3RhcnQgcmVzcG9uc2UuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0LiBXaGVu
IAotICAgICAgICAgICAgICAgIC8vIHdlIHVucGF1c2UsIHdlIHdpbGwgYWN0IGFzIHRob3VnaCB0
aGUgc3RhcnQgdGltZXIganVzdCBmaXJlZAotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0g
YmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgcGF1c2VBbmltYXRp
b24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsK
LSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+
IFBhdXNlZFdhaXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRl
KSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRXYWl0UmVzcG9uc2U7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZzoKLSAgICAgICAgICAgIEFTU0VSVChp
bnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZCB8fCBpbnB1dCA9PSBB
bmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwotCi0gICAgICAgICAgICBpZiAo
aW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQpIHsKLSAgICAgICAg
ICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlv
bnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBMb29wVGltZXJGaXJlZCAodGltZSBpcyAlZiki
LCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLQotICAgICAg
ICAgICAgICAgIC8vIExvb3AgdGltZXIgZmlyZWQsIGxvb3AgYWdhaW4gb3IgZW5kLgotICAgICAg
ICAgICAgICAgIG9uQW5pbWF0aW9uSXRlcmF0aW9uKHBhcmFtKTsKLQotICAgICAgICAgICAgICAg
IC8vIERlY2lkZSB3aGV0aGVyIHRvIGdvIGludG8gbG9vcGluZyBvciBlbmRpbmcgc3RhdGUKLSAg
ICAgICAgICAgICAgICBnb0ludG9FbmRpbmdPckxvb3BpbmdTdGF0ZSgpOwotICAgICAgICAgICAg
fSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2luZyB3aGlsZSBydW5uaW5n
LiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdAotICAgICAgICAgICAgICAgIG1fcGF1c2VU
aW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgcGF1c2VB
bmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGltZS52YWx1ZU9y
KDApKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRl
ICVzIC0+IFBhdXNlZFJ1biIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7
Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVz
ZWRSdW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBB
bmltYXRpb25TdGF0ZTo6RW5kaW5nOgotI2lmICFFUlJPUl9ESVNBQkxFRAotICAgICAgICAgICAg
aWYgKGlucHV0ICE9IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQgJiYgaW5wdXQg
IT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKQotICAgICAgICAgICAgICAg
IExPR19FUlJPUigiU3RhdGUgaXMgQW5pbWF0aW9uU3RhdGU6OkVuZGluZywgYnV0IGlucHV0IGlz
IG5vdCBBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkIG9yIEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZC4gSXQgaXMgJXMuIiwgbmFtZUZvclN0YXRlSW5wdXQoaW5w
dXQpKTsKLSNlbmRpZgotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OkVuZFRpbWVyRmlyZWQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQocGFyYW0gPj0gMCk7
Ci0gICAgICAgICAgICAgICAgLy8gRW5kIHRpbWVyIGZpcmVkLCBmaW5pc2ggdXAKLSAgICAgICAg
ICAgICAgICBvbkFuaW1hdGlvbkVuZChwYXJhbSk7Ci0KLSAgICAgICAgICAgICAgICBMT0coQW5p
bWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IERvbmUgKHRpbWUgaXMgJWYpIiwgdGhp
cywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAgICAgICAg
ICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpEb25lOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIGlmIChtX2VsZW1lbnQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRmlsbGluZ0Zv
cndhcmRzIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6RmlsbGlu
Z0ZvcndhcmRzOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICAg
ICAgICAgIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRpb25zKCk7Ci0KLSAgICAgICAgICAgICAgICAg
ICAgLy8gRmlyZSBvZmYgYW5vdGhlciBzdHlsZSBjaGFuZ2Ugc28gd2UgY2FuIHNldCB0aGUgZmlu
YWwgdmFsdWUKLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCku
YWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goKm1fZWxlbWVudCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2lu
ZyB3aGlsZSBydW5uaW5nLiBDYW5jZWwgdGhlIGFuaW1hdGlvbiBhbmQgd2FpdAotICAgICAgICAg
ICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAgICAg
ICAgICAgICAgcGF1c2VBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVw
IEFuaW1hdGlvblN0YXRlICVzIC0+IFBhdXNlZFJ1biIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2Fu
aW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWRSdW47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAvLyB8dGhp
c3wgbWF5IGJlIGRlbGV0ZWQgaGVyZQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2Ug
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRUaW1lcjoKLSAgICAgICAgICAgIEFTU0VSVChpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nKTsKLSAgICAgICAgICAg
IEFTU0VSVChwYXVzZWQoKSk7Ci0gICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVzCi0gICAg
ICAgICAgICBtX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkgKyBiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKSAtIG1fcGF1c2VUaW1lLnZhbHVlT3IoMCk7Ci0gICAgICAgICAgICBt
X3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLQotICAgICAgICAgICAgLy8gd2Ugd2VyZSB3YWl0
aW5nIGZvciB0aGUgc3RhcnQgdGltZXIgdG8gZmlyZSwgZ28gYmFjayBhbmQgd2FpdCBhZ2Fpbgot
ICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBOZXci
LCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgbV9h
bmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgICAgICB1cGRhdGVT
dGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb24sIDApOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzoK
LSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOgotICAgICAg
ICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0U3R5bGVBdmFpbGFibGU6Ci0gICAgICAg
IGNhc2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjoKLSAgICAgICAgICAgIC8vIFdlIHRyZWF0
IHRoZXNlIHR3byBjYXNlcyB0aGUgc2FtZS4gVGhlIG9ubHkgZGlmZmVyZW5jZSBpcyB0aGF0LCB3
aGVuIHdlIGFyZSBpbgotICAgICAgICAgICAgLy8gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRS
ZXNwb25zZSwgd2UgZG9uJ3QgeWV0IGhhdmUgYSB2YWxpZCBzdGFydFRpbWUsIHNvIHdlIHNlbmQg
MCB0byBzdGFydEFuaW1hdGlvbi4KLSAgICAgICAgICAgIC8vIFdoZW4gdGhlIEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCBjb21lcyBpbiBhbmQgd2Ugd2VyZSBpbiBBbmltYXRpb25T
dGF0ZTo6UGF1c2VkUnVuLCB3ZSB3aWxsIG5vdGljZQotICAgICAgICAgICAgLy8gdGhhdCB3ZSBo
YXZlIGFscmVhZHkgc2V0IHRoZSBzdGFydFRpbWUgYW5kIHdpbGwgaWdub3JlIGl0LgotICAgICAg
ICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNl
ZCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVSdW5uaW5nIHx8IGlu
cHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCB8fCBpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSk7Ci0gICAgICAgICAgICBBU1NFUlQocGF1
c2VkKCkpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
UGxheVN0YXRlUnVubmluZykgewotICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRl
ID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWROZXcpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2Ugd2VyZSBwYXVzZWQgYmVmb3JlIHdlIGV2ZW4gc3RhcnRlZCwgYW5kIG5vdyB3ZSdyZSBzdXBw
b3NlZAotICAgICAgICAgICAgICAgICAgICAvLyB0byBzdGFydCwgc28ganVtcCBiYWNrIHRvIHRo
ZSBOZXcgc3RhdGUgYW5kIHJlc2V0LgotICAgICAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9u
cywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IEFuaW1hdGlvblN0YXRlOjpOZXciLCB0aGlzLCBu
YW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgICAgICBtX2Fu
aW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgICAgICAgICAgICAg
bV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShpbnB1dCwgcGFyYW0pOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBVcGRhdGUgdGhlIHRpbWVzCi0g
ICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlBh
dXNlZFJ1bikKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFydFRpbWUgPSBtX3N0YXJ0VGltZS52
YWx1ZU9yKDApICsgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3BhdXNlVGltZS52YWx1
ZU9yKDApOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgbV9zdGFy
dFRpbWUgPSAwOwotCi0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7
Ci0KLSAgICAgICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlKSB7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhB
bmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0U3R5bGVBdmFpbGFi
bGUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAg
IC8vIFdlIHdlcmUgZWl0aGVyIHJ1bm5pbmcgb3Igd2FpdGluZyBmb3IgYSBiZWdpbiB0aW1lIHJl
c3BvbnNlIGZyb20gdGhlIGFuaW1hdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgLy8gRWl0aGVy
IHdheSB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIGFuaW1hdGlvbiAocG9zc2libHkgd2l0aCBhbiBv
ZmZzZXQgaWYgd2UKLSAgICAgICAgICAgICAgICAgICAgLy8gaGFkIGFscmVhZHkgYmVlbiBydW5u
aW5nKSBhbmQgd2FpdCBmb3IgaXQgdG8gc3RhcnQuCi0gICAgICAgICAgICAgICAgICAgIExPRyhB
bmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0UmVzcG9uc2UiLCB0
aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgICAg
ICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOwot
Ci0gICAgICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRoZSBhbmltYXRpb24KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKG92ZXJyaWRkZW4oKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8g
V2Ugd29uJ3QgdHJ5IHRvIHN0YXJ0IGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgaWYgd2UgYXJlIG92
ZXJyaWRkZW4gYW5kCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBqdXN0IG1vdmUgb24gdG8g
dGhlIG5leHQgc3RhdGUuCi0gICAgICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hp
bmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0
ZVRpbWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2lzQWNjZWxlcmF0ZWQgPSB0cnVl
OwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAg
Ym9vbCBzdGFydGVkID0gc3RhcnRBbmltYXRpb24oYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkg
LSBtX3N0YXJ0VGltZS52YWx1ZU9yKDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1fY29t
cG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFydGVkKTsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHN0YXJ0ZWQ7Ci0gICAgICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVTZXQpIHsKLSAgICAgICAgICAgICAgICBBU1NFUlQobV9hbmltYXRp
b25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFJlc3BvbnNlKTsKLSAgICAgICAg
ICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2VkIGJ1dCB3ZSBnb3QgdGhl
IGNhbGxiYWNrIHRoYXQgbm90aWZpZXMgdXMgdGhhdCBhbiBhY2NlbGVyYXRlZCBhbmltYXRpb24g
c3RhcnRlZC4KLSAgICAgICAgICAgICAgICAvLyBXZSBpZ25vcmUgdGhlIHN0YXJ0IHRpbWUgYW5k
IGp1c3QgbW92ZSBpbnRvIHRoZSBwYXVzZWQtcnVuIHN0YXRlLgotICAgICAgICAgICAgICAgIExP
RyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkUnVuICh0aW1lIGlz
ICVmKSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotICAg
ICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVu
OwotICAgICAgICAgICAgICAgIEFTU0VSVCghbV9zdGFydFRpbWUpOwotICAgICAgICAgICAgICAg
IG1fc3RhcnRUaW1lID0gcGFyYW07Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBtX3Bh
dXNlVGltZS52YWx1ZU9yKDApICsgcGFyYW07Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIEFTU0VSVChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1h
dGlvblN0YXRlOjpQYXVzZWROZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlKTsKLQotICAgICAgICAgICAgaWYgKGlucHV0ID09
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCkKLSAgICAgICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6
OlN0eWxlQXZhaWxhYmxlKTsKLQotICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNlZCBidXQgd2Ug
Z290IHRoZSBjYWxsYmFjayB0aGF0IG5vdGlmaWVzIHVzIHRoYXQgc3R5bGUgaGFzIGJlZW4gdXBk
YXRlZC4KLSAgICAgICAgICAgIC8vIFdlIG1vdmUgdG8gdGhlIEFuaW1hdGlvblN0YXRlOjpQYXVz
ZWRXYWl0UmVzcG9uc2Ugc3RhdGUKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkV2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRl
KG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkV2FpdFJlc3BvbnNlOwotICAgICAgICAgICAgb3ZlcnJpZGVBbmlt
YXRpb25zKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0
ZTo6RmlsbGluZ0ZvcndhcmRzOgotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpEb25lOgot
ICAgICAgICAgICAgLy8gV2UncmUgZG9uZS4gU3RheSBpbiB0aGlzIHN0YXRlIHVudGlsIHdlIGFy
ZSBkZWxldGVkCi0gICAgICAgICAgICBicmVhazsKLSAgICB9Ci19Ci0KLXZvaWQgQW5pbWF0aW9u
QmFzZTo6ZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCkKLXsKLSAgICBpZiAoIW1fY29tcG9z
aXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBJZiB3ZSBhcmUgd2FpdGlu
ZyBmb3IgdGhlIGRlbGF5IHRpbWUgdG8gZXhwaXJlIGFuZCBpdCBoYXMsIGdvIHRvIHRoZSBuZXh0
IHN0YXRlCi0gICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0
V2FpdFRpbWVyICYmIG1fYW5pbWF0aW9uU3RhdGUgIT0gQW5pbWF0aW9uU3RhdGU6Okxvb3Bpbmcg
JiYgbV9hbmltYXRpb25TdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6RW5kaW5nKQotICAgICAgICBy
ZXR1cm47Ci0KLSAgICAvLyBXZSBoYXZlIHRvIG1ha2Ugc3VyZSB0byBrZWVwIGEgcmVmIHRvIHRo
ZSB0aGlzIHBvaW50ZXIsIGJlY2F1c2UgaXQgY291bGQgZ2V0IGRlc3Ryb3llZAotICAgIC8vIGR1
cmluZyBhbiBhbmltYXRpb24gY2FsbGJhY2sgdGhhdCBtaWdodCBnZXQgY2FsbGVkLiBTaW5jZSB0
aGUgb3duZXIgaXMgYSBDb21wb3NpdGVBbmltYXRpb24KLSAgICAvLyBhbmQgaXQgcmVmIGNvdW50
cyB0aGlzIG9iamVjdCwgd2Ugd2lsbCBrZWVwIGEgcmVmIHRvIHRoYXQgaW5zdGVhZC4gVGhhdCB3
YXkgdGhlIEFuaW1hdGlvbkJhc2UKLSAgICAvLyBjYW4gc3RpbGwgYWNjZXNzIHRoZSByZXNvdXJj
ZXMgb2YgaXRzIENvbXBvc2l0ZUFuaW1hdGlvbiBhcyBuZWVkZWQuCi0gICAgUmVmPEFuaW1hdGlv
bkJhc2U+IHByb3RlY3RlZFRoaXMoKnRoaXMpOwotICAgIFJlZjxDb21wb3NpdGVBbmltYXRpb24+
IHByb3RlY3RDb21wb3NpdGVBbmltYXRpb24oKm1fY29tcG9zaXRlQW5pbWF0aW9uKTsKLSAgICAK
LSAgICAvLyBDaGVjayBmb3Igc3RhcnQgdGltZW91dAotICAgIGlmIChtX2FuaW1hdGlvblN0YXRl
ID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcikgewotICAgICAgICBpZiAoYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3JlcXVlc3RlZFN0YXJ0VGltZSA+PSBtX2FuaW1hdGlv
bi0+ZGVsYXkoKSkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpTdGFydFRpbWVyRmlyZWQsIDApOwotICAgICAgICByZXR1cm47Ci0gICAgfQotCi0g
ICAgZG91YmxlIGVsYXBzZWREdXJhdGlvbiA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0g
bV9zdGFydFRpbWUudmFsdWVPcigwKTsKLQotICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGVuc3Vy
ZSB0aGF0IGVsYXBzZWREdXJhdGlvbiBpcyBuZXZlciA8IDAuIElmIGl0IGlzLCB0aGlzIHN1Z2dl
c3RzIHRoYXQKLSAgICAvLyB3ZSBoYWQgYSByZWNhbGNTdHlsZSgpIG91dHNpZGUgb2YgYmVnaW5B
bmltYXRpb25VcGRhdGUoKS9lbmRBbmltYXRpb25VcGRhdGUoKS4KLSAgICAvLyBBbHNvIGNoZWNr
IGluIGdldFRpbWVUb05leHRFdmVudCgpLgotICAgIGVsYXBzZWREdXJhdGlvbiA9IHN0ZDo6bWF4
KGVsYXBzZWREdXJhdGlvbiwgMC4wKTsKLSAgICAKLSAgICAvLyBDaGVjayBmb3IgZW5kIHRpbWVv
dXQKLSAgICBpZiAobV90b3RhbER1cmF0aW9uICYmIGVsYXBzZWREdXJhdGlvbiA+PSBtX3RvdGFs
RHVyYXRpb24udmFsdWUoKSkgewotICAgICAgICAvLyBXZSBtYXkgc3RpbGwgYmUgaW4gQW5pbWF0
aW9uU3RhdGU6Okxvb3BpbmcgaWYgd2UndmUgbWFuYWdlZCB0byBza2lwIGEKLSAgICAgICAgLy8g
d2hvbGUgaXRlcmF0aW9uLCBpbiB3aGljaCBjYXNlIHdlIHNob3VsZCBqdW1wIHRvIHRoZSBlbmQg
c3RhdGUuCi0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4g
RW5kaW5nIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpFbmRpbmc7Ci0KLSAgICAgICAgLy8g
RmlyZSBhbiBlbmQgZXZlbnQKLSAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQsIG1fdG90YWxEdXJhdGlvbi52YWx1ZSgpKTsKLSAgICB9
IGVsc2UgewotICAgICAgICAvLyBDaGVjayBmb3IgaXRlcmF0aW9uIHRpbWVvdXQKLSAgICAgICAg
aWYgKCFtX25leHRJdGVyYXRpb25EdXJhdGlvbikgewotICAgICAgICAgICAgLy8gSGFzbid0IGJl
ZW4gc2V0IHlldCwgc2V0IGl0Ci0gICAgICAgICAgICBkb3VibGUgZHVyYXRpb25MZWZ0ID0gbV9h
bmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9kKGVsYXBzZWREdXJhdGlvbiwgbV9hbmltYXRpb24t
PmR1cmF0aW9uKCkpOwotICAgICAgICAgICAgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSBlbGFw
c2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IGlmIChlbGFwc2VkRHVyYXRpb24gPj0gbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24pIHsKLSAgICAg
ICAgICAgIC8vIFNldCB0byB0aGUgbmV4dCBpdGVyYXRpb24KLSAgICAgICAgICAgIGRvdWJsZSBw
cmV2aW91cyA9IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uLnZhbHVlKCk7Ci0gICAgICAgICAgICBk
b3VibGUgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9kKGVsYXBz
ZWREdXJhdGlvbiwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpOwotICAgICAgICAgICAgbV9uZXh0
SXRlcmF0aW9uRHVyYXRpb24gPSBlbGFwc2VkRHVyYXRpb24gKyBkdXJhdGlvbkxlZnQ7Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIFNlbmQgdGhlIGV2ZW50Ci0gICAgICAgICAgICB1cGRh
dGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6TG9vcFRpbWVyRmlyZWQsIHByZXZp
b3VzKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjp1cGRhdGVQ
bGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlIHBsYXlTdGF0ZSkKLXsKLSAgICBpZiAoIW1fY29t
cG9zaXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBXaGVuIHdlIGdldCBo
ZXJlLCB3ZSBjYW4gaGF2ZSBvbmUgb2YgNCBkZXNpcmVkIHN0YXRlczogcnVubmluZywgcGF1c2Vk
LCBzdXNwZW5kZWQsIHBhdXNlZCAmIHN1c3BlbmRlZC4KLSAgICAvLyBUaGUgc3RhdGUgbWFjaGlu
ZSBjYW4gYmUgaW4gb25lIG9mIHR3byBzdGF0ZXM6IHJ1bm5pbmcsIHBhdXNlZC4KLSAgICAvLyBT
ZXQgdGhlIHN0YXRlIG1hY2hpbmUgdG8gdGhlIGRlc2lyZWQgc3RhdGUuCi0gICAgYm9vbCBwYXVz
ZSA9IHBsYXlTdGF0ZSA9PSBBbmltYXRpb25QbGF5U3RhdGU6OlBhdXNlZCB8fCBtX2NvbXBvc2l0
ZUFuaW1hdGlvbi0+aXNTdXNwZW5kZWQoKTsKLQotICAgIGlmIChwYXVzZSA9PSBwYXVzZWQoKSAm
JiAhaXNOZXcoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlU3RhdGVNYWNoaW5lKHBh
dXNlID8gIEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCA6IEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcsIC0xKTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4g
QW5pbWF0aW9uQmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKQotewotICAgIC8vIFJldHVybnMgdGhl
IHRpbWUgYXQgd2hpY2ggbmV4dCBzZXJ2aWNlIGlzIHJlcXVpcmVkLiBXVEY6Om51bGxvcHQgbWVh
bnMgbm8gc2VydmljZSBpcyByZXF1aXJlZC4gMCBtZWFucwotICAgIC8vIHNlcnZpY2UgaXMgcmVx
dWlyZWQgbm93LCBhbmQgPiAwIG1lYW5zIHNlcnZpY2UgaXMgcmVxdWlyZWQgdGhhdCBtYW55IHNl
Y29uZHMgaW4gdGhlIGZ1dHVyZS4KLSAgICBpZiAocGF1c2VkKCkgfHwgaXNOZXcoKSB8fCBwb3N0
QWN0aXZlKCkgfHwgZmlsbGluZ0ZvcndhcmRzKCkpCi0gICAgICAgIHJldHVybiBXVEY6Om51bGxv
cHQ7Ci0gICAgCi0gICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFRpbWVyKSB7Ci0gICAgICAgIGRvdWJsZSB0aW1lRnJvbU5vdyA9IG1fYW5pbWF0aW9u
LT5kZWxheSgpIC0gKGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9yZXF1ZXN0ZWRTdGFy
dFRpbWUpOwotICAgICAgICByZXR1cm4gc3RkOjptYXgoU2Vjb25kcyB7IHRpbWVGcm9tTm93IH0s
IDBfcyk7Ci0gICAgfQotICAgIAotICAgIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwot
ICAgICAgICAKLSAgICAvLyBJbiBhbGwgb3RoZXIgY2FzZXMsIHdlIG5lZWQgc2VydmljZSByaWdo
dCBhd2F5LgotICAgIHJldHVybiAwX3M7Ci19Ci0KLS8vIENvbXB1dGUgdGhlIGZyYWN0aW9uYWwg
dGltZSwgdGFraW5nIGludG8gYWNjb3VudCBkaXJlY3Rpb24uCi0vLyBUaGVyZSBpcyBubyBuZWVk
IHRvIHdvcnJ5IGFib3V0IGl0ZXJhdGlvbnMsIHdlIGFzc3VtZSB0aGF0IHdlIHdvdWxkIGhhdmUK
LS8vIHNob3J0IGNpcmN1aXRlZCBhYm92ZSBpZiB3ZSB3ZXJlIGRvbmUuCi0KLWRvdWJsZSBBbmlt
YXRpb25CYXNlOjpmcmFjdGlvbmFsVGltZShkb3VibGUgc2NhbGUsIGRvdWJsZSBlbGFwc2VkVGlt
ZSwgZG91YmxlIG9mZnNldCkgY29uc3QKLXsKLSAgICBkb3VibGUgZnJhY3Rpb25hbFRpbWUgPSBt
X2FuaW1hdGlvbi0+ZHVyYXRpb24oKSA/IChlbGFwc2VkVGltZSAvIG1fYW5pbWF0aW9uLT5kdXJh
dGlvbigpKSA6IDE7Ci0gICAgLy8gRklYTUU6IHN0YXJ0VGltZSBjYW4gYmUgYmVmb3JlIHRoZSBj
dXJyZW50IGFuaW1hdGlvbiAiZnJhbWUiIHRpbWUuIFRoaXMgaXMgdG8gc3luYyB3aXRoIHRoZSBm
cmFtZSB0aW1lCi0gICAgLy8gY29uY2VwdCBpbiBBbmltYXRpb25UaW1lQ29udHJvbGxlci4gU28g
d2UgbmVlZCB0byBzb21laG93IHN5bmMgdGhlIHR3by4gVW50aWwgdGhlbiwgdGhlIHBvc3NpYmxl
Ci0gICAgLy8gZXJyb3IgaXMgc21hbGwgYW5kIHdpbGwgcHJvYmFibHkgbm90IGJlIG5vdGljZWFi
bGUuIFVudGlsIHdlIGZpeCB0aGlzLCByZW1vdmUgdGhlIGFzc2VydC4KLSAgICAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTIwMzcKLSAgICAvLyBBU1NFUlQoZnJh
Y3Rpb25hbFRpbWUgPj0gMCk7Ci0gICAgaWYgKGZyYWN0aW9uYWxUaW1lIDwgMCkKLSAgICAgICAg
ZnJhY3Rpb25hbFRpbWUgPSAwOwotCi0gICAgaW50IGludGVncmFsVGltZSA9IHN0YXRpY19jYXN0
PGludD4oZnJhY3Rpb25hbFRpbWUpOwotICAgIGNvbnN0IGludCBpbnRlZ3JhbEl0ZXJhdGlvbkNv
dW50ID0gc3RhdGljX2Nhc3Q8aW50PihtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSk7Ci0g
ICAgY29uc3QgYm9vbCBpdGVyYXRpb25Db3VudEhhc0ZyYWN0aW9uYWwgPSBtX2FuaW1hdGlvbi0+
aXRlcmF0aW9uQ291bnQoKSAtIGludGVncmFsSXRlcmF0aW9uQ291bnQ7Ci0gICAgaWYgKG1fYW5p
bWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0aW9uQ291bnRJbmZp
bml0ZSAmJiAhaXRlcmF0aW9uQ291bnRIYXNGcmFjdGlvbmFsKQotICAgICAgICBpbnRlZ3JhbFRp
bWUgPSBzdGQ6Om1pbihpbnRlZ3JhbFRpbWUsIGludGVncmFsSXRlcmF0aW9uQ291bnQgLSAxKTsK
LQotICAgIGZyYWN0aW9uYWxUaW1lIC09IGludGVncmFsVGltZTsKLQotICAgIGlmICgoKG1fYW5p
bWF0aW9uLT5kaXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVy
bmF0ZSkgJiYgKGludGVncmFsVGltZSAmIDEpKQotICAgICAgICB8fCAoKG1fYW5pbWF0aW9uLT5k
aXJlY3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvbkFsdGVybmF0ZVJldmVy
c2UpICYmICEoaW50ZWdyYWxUaW1lICYgMSkpCi0gICAgICAgIHx8IG1fYW5pbWF0aW9uLT5kaXJl
Y3Rpb24oKSA9PSBBbmltYXRpb246OkFuaW1hdGlvbkRpcmVjdGlvblJldmVyc2UpCi0gICAgICAg
IGZyYWN0aW9uYWxUaW1lID0gMSAtIGZyYWN0aW9uYWxUaW1lOwotCi0gICAgaWYgKHNjYWxlICE9
IDEgfHwgb2Zmc2V0KQotICAgICAgICBmcmFjdGlvbmFsVGltZSA9IChmcmFjdGlvbmFsVGltZSAt
IG9mZnNldCkgKiBzY2FsZTsKLQotICAgIHJldHVybiBmcmFjdGlvbmFsVGltZTsKLX0KLQotZG91
YmxlIEFuaW1hdGlvbkJhc2U6OnByb2dyZXNzKGRvdWJsZSBzY2FsZSwgZG91YmxlIG9mZnNldCwg
Y29uc3QgVGltaW5nRnVuY3Rpb24qIHRpbWluZ0Z1bmN0aW9uKSBjb25zdAotewotICAgIGlmIChw
cmVBY3RpdmUoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAocG9zdEFjdGl2ZSgpKQot
ICAgICAgICByZXR1cm4gMTsKLQotICAgIGRvdWJsZSBlbGFwc2VkVGltZSA9IGdldEVsYXBzZWRU
aW1lKCk7Ci0KLSAgICBkb3VibGUgZHVyYXRpb24gPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKTsK
LSAgICBpZiAobV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgPiAwKQotICAgICAgICBkdXJh
dGlvbiAqPSBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKTsKLQotICAgIGlmIChmaWxsaW5n
Rm9yd2FyZHMoKSkKLSAgICAgICAgZWxhcHNlZFRpbWUgPSBkdXJhdGlvbjsKLQotICAgIGRvdWJs
ZSBmcmFjdGlvbmFsVGltZSA9IHRoaXMtPmZyYWN0aW9uYWxUaW1lKHNjYWxlLCBlbGFwc2VkVGlt
ZSwgb2Zmc2V0KTsKLQotICAgIGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDAg
JiYgZWxhcHNlZFRpbWUgPj0gZHVyYXRpb24pIHsKLSAgICAgICAgaWYgKFdURjo6aXNJbnRlZ3Jh
bChmcmFjdGlvbmFsVGltZSkpCi0gICAgICAgICAgICByZXR1cm4gZnJhY3Rpb25hbFRpbWU7Ci0g
ICAgfQotCi0gICAgaWYgKCF0aW1pbmdGdW5jdGlvbikKLSAgICAgICAgdGltaW5nRnVuY3Rpb24g
PSBtX2FuaW1hdGlvbi0+dGltaW5nRnVuY3Rpb24oKTsKLQotICAgIHJldHVybiB0aW1pbmdGdW5j
dGlvbi0+dHJhbnNmb3JtVGltZShmcmFjdGlvbmFsVGltZSwgbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkpOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmdldFRpbWVUb05leHRFdmVudChTZWNvbmRz
JiB0aW1lLCBib29sJiBpc0xvb3BpbmcpIGNvbnN0Ci17Ci0gICAgLy8gRGVjaWRlIHdoZW4gdGhl
IGVuZCBvciBsb29wIGV2ZW50IG5lZWRzIHRvIGZpcmUKLSAgICBjb25zdCBkb3VibGUgZWxhcHNl
ZER1cmF0aW9uID0gc3RkOjptYXgoYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0
VGltZS52YWx1ZU9yKDApLCAwLjApOwotICAgIGRvdWJsZSBkdXJhdGlvbkxlZnQgPSAwOwotICAg
IGRvdWJsZSBuZXh0SXRlcmF0aW9uVGltZSA9IG1fdG90YWxEdXJhdGlvbi52YWx1ZU9yKDApOwot
Ci0gICAgaWYgKCFtX3RvdGFsRHVyYXRpb24gfHwgZWxhcHNlZER1cmF0aW9uIDwgbV90b3RhbER1
cmF0aW9uLnZhbHVlKCkpIHsKLSAgICAgICAgZHVyYXRpb25MZWZ0ID0gbV9hbmltYXRpb24tPmR1
cmF0aW9uKCkgPiAwID8gKG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpIC0gZm1vZChlbGFwc2VkRHVy
YXRpb24sIG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpKSkgOiAwOwotICAgICAgICBuZXh0SXRlcmF0
aW9uVGltZSA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKLSAgICB9Ci0gICAgCi0g
ICAgaWYgKCFtX3RvdGFsRHVyYXRpb24gfHwgbmV4dEl0ZXJhdGlvblRpbWUgPCBtX3RvdGFsRHVy
YXRpb24udmFsdWUoKSkgewotICAgICAgICAvLyBXZSBhcmUgbm90IGF0IHRoZSBlbmQgeWV0Ci0g
ICAgICAgIEFTU0VSVChuZXh0SXRlcmF0aW9uVGltZSA+IDApOwotICAgICAgICBpc0xvb3Bpbmcg
PSB0cnVlOwotICAgIH0gZWxzZSB7Ci0gICAgICAgIC8vIFdlIGFyZSBhdCB0aGUgZW5kCi0gICAg
ICAgIGlzTG9vcGluZyA9IGZhbHNlOwotICAgIH0KLSAgICAKLSAgICB0aW1lID0gU2Vjb25kcyB7
IGR1cmF0aW9uTGVmdCB9OwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OmdvSW50b0VuZGluZ09y
TG9vcGluZ1N0YXRlKCkKLXsKLSAgICBTZWNvbmRzIHQ7Ci0gICAgYm9vbCBpc0xvb3Bpbmc7Ci0g
ICAgZ2V0VGltZVRvTmV4dEV2ZW50KHQsIGlzTG9vcGluZyk7Ci0gICAgTE9HKEFuaW1hdGlvbnMs
ICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiAlcyIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1h
dGlvblN0YXRlKSwgaXNMb29waW5nID8gIkxvb3BpbmciIDogIkVuZGluZyIpOwotICAgIG1fYW5p
bWF0aW9uU3RhdGUgPSBpc0xvb3BpbmcgPyBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyA6IEFuaW1h
dGlvblN0YXRlOjpFbmRpbmc7Ci19Ci0gIAotdm9pZCBBbmltYXRpb25CYXNlOjpmcmVlemVBdFRp
bWUoZG91YmxlIHQpCi17Ci0gICAgaWYgKCFtX2NvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgaWYgKCFtX3N0YXJ0VGltZSkgewotICAgICAgICAvLyBJZiB3ZSBoYXZl
bid0IHN0YXJ0ZWQgeWV0LCBtYWtlIGl0IGFzIGlmIHdlIHN0YXJ0ZWQuCi0gICAgICAgIExPRyhB
bmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0UmVzcG9uc2UiLCB0
aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICBtX2FuaW1hdGlv
blN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOwotICAgICAgICBvbkFu
aW1hdGlvblN0YXJ0UmVzcG9uc2UoTW9ub3RvbmljVGltZTo6bm93KCkpOwotICAgIH0KLQotICAg
IEFTU0VSVChtX3N0YXJ0VGltZSk7IC8vIElmIG1fc3RhcnRUaW1lIGlzIHplcm8sIHdlIGhhdmVu
J3Qgc3RhcnRlZCB5ZXQsIHNvIHdlJ2xsIGdldCBhIGJhZCBwYXVzZSB0aW1lLgotICAgIGlmICh0
IDw9IG1fYW5pbWF0aW9uLT5kZWxheSgpKQotICAgICAgICBtX3BhdXNlVGltZSA9IG1fc3RhcnRU
aW1lLnZhbHVlT3IoMCk7Ci0gICAgZWxzZQotICAgICAgICBtX3BhdXNlVGltZSA9IG1fc3RhcnRU
aW1lLnZhbHVlT3IoMCkgKyB0IC0gbV9hbmltYXRpb24tPmRlbGF5KCk7Ci0KLSAgICBpZiAoYXV0
byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+c3VzcGVu
ZEFuaW1hdGlvbnMoTW9ub3RvbmljVGltZTo6ZnJvbVJhd1NlY29uZHMobV9wYXVzZVRpbWUudmFs
dWUoKSkpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFzZTo6YmVnaW5BbmltYXRpb25VcGRhdGVU
aW1lKCkgY29uc3QKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICAgICBy
ZXR1cm4gMDsKLQotICAgIHJldHVybiBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29u
dHJvbGxlcigpLmJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpLnNlY29uZHNTaW5jZUVwb2NoKCku
c2Vjb25kcygpOwotfQotCi1kb3VibGUgQW5pbWF0aW9uQmFzZTo6Z2V0RWxhcHNlZFRpbWUoKSBj
b25zdAotewotICAgIGlmIChwYXVzZWQoKSkgewotICAgICAgICBkb3VibGUgZGVsYXlPZmZzZXQg
PSAoIW1fc3RhcnRUaW1lICYmIG1fYW5pbWF0aW9uLT5kZWxheSgpIDwgMCkgPyBtX2FuaW1hdGlv
bi0+ZGVsYXkoKSA6IDA7Ci0gICAgICAgIHJldHVybiBtX3BhdXNlVGltZS52YWx1ZU9yKDApIC0g
bV9zdGFydFRpbWUudmFsdWVPcigwKSAtIGRlbGF5T2Zmc2V0OwotICAgIH0KLQotICAgIGlmICgh
bV9zdGFydFRpbWUpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgaWYgKHBvc3RBY3RpdmUoKSB8
fCBmaWxsaW5nRm9yd2FyZHMoKSkKLSAgICAgICAgcmV0dXJuIG1fdG90YWxEdXJhdGlvbi52YWx1
ZU9yKDApOwotCi0gICAgcmV0dXJuIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpIC0gbV9zdGFy
dFRpbWUudmFsdWVPcigwKTsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpzZXRFbGFwc2VkVGlt
ZShkb3VibGUgdGltZSkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi0g
ICAgVU5VU0VEX1BBUkFNKHRpbWUpOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OnBsYXkoKQot
ewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLX0KLQotdm9pZCBBbmltYXRp
b25CYXNlOjpwYXVzZSgpCi17Ci0gICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAot
fQotCi1zdGF0aWMgYm9vbCBjb250YWluc1JvdGF0aW9uKGNvbnN0IFZlY3RvcjxSZWZQdHI8VHJh
bnNmb3JtT3BlcmF0aW9uPj4mIG9wZXJhdGlvbnMpCi17Ci0gICAgZm9yIChjb25zdCBhdXRvJiBv
cGVyYXRpb24gOiBvcGVyYXRpb25zKSB7Ci0gICAgICAgIGlmIChvcGVyYXRpb24tPnR5cGUoKSA9
PSBUcmFuc2Zvcm1PcGVyYXRpb246OlJPVEFURSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwot
ICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6Y29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChjb25zdCBGbG9hdFJlY3QmIHJlbmRl
cmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGUsIExheW91dFJlY3QmIGJvdW5kcykgY29u
c3QKLXsKLSAgICBGbG9hdFJlY3QgZmxvYXRCb3VuZHMgPSBib3VuZHM7Ci0gICAgRmxvYXRQb2lu
dCB0cmFuc2Zvcm1PcmlnaW47Ci0gICAgCi0gICAgYm9vbCBhcHBseVRyYW5zZm9ybU9yaWdpbiA9
IGNvbnRhaW5zUm90YXRpb24oc3R5bGUudHJhbnNmb3JtKCkub3BlcmF0aW9ucygpKSB8fCBzdHls
ZS50cmFuc2Zvcm0oKS5hZmZlY3RlZEJ5VHJhbnNmb3JtT3JpZ2luKCk7Ci0gICAgaWYgKGFwcGx5
VHJhbnNmb3JtT3JpZ2luKSB7Ci0gICAgICAgIHRyYW5zZm9ybU9yaWdpbiA9IHJlbmRlcmVyQm94
LmxvY2F0aW9uKCkgKyBmbG9hdFBvaW50Rm9yTGVuZ3RoUG9pbnQoc3R5bGUudHJhbnNmb3JtT3Jp
Z2luWFkoKSwgcmVuZGVyZXJCb3guc2l6ZSgpKTsKLSAgICAgICAgLy8gSWdub3JlIHRyYW5zZm9y
bU9yaWdpblogYmVjYXVzZSB3ZSdsbCBiYWlsIGlmIHdlIGVuY291bnRlciBhbnkgM0QgdHJhbnNm
b3Jtcy4KLSAgICAgICAgZmxvYXRCb3VuZHMubW92ZUJ5KC10cmFuc2Zvcm1PcmlnaW4pOwotICAg
IH0KLQotICAgIGZvciAoY29uc3QgYXV0byYgb3BlcmF0aW9uIDogc3R5bGUudHJhbnNmb3JtKCku
b3BlcmF0aW9ucygpKSB7Ci0gICAgICAgIGlmIChvcGVyYXRpb24tPnR5cGUoKSA9PSBUcmFuc2Zv
cm1PcGVyYXRpb246OlJPVEFURSkgewotICAgICAgICAgICAgLy8gRm9yIG5vdywganVzdCB0cmVh
dCB0aGlzIGFzIGEgZnVsbCByb3RhdGlvbi4gVGhpcyBjb3VsZCB0YWtlIGFuZ2xlIGludG8gYWNj
b3VudCB0byByZWR1Y2UgaW5mbGF0aW9uLgotICAgICAgICAgICAgZmxvYXRCb3VuZHMgPSBib3Vu
ZHNPZlJvdGF0aW5nUmVjdChmbG9hdEJvdW5kcyk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCB0cmFuc2Zvcm07Ci0gICAgICAgICAgICBvcGVyYXRp
b24tPmFwcGx5KHRyYW5zZm9ybSwgcmVuZGVyZXJCb3guc2l6ZSgpKTsKLSAgICAgICAgICAgIGlm
ICghdHJhbnNmb3JtLmlzQWZmaW5lKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBpZiAob3BlcmF0aW9uLT50eXBlKCkgPT0gVHJhbnNmb3JtT3BlcmF0aW9u
OjpNQVRSSVggfHwgb3BlcmF0aW9uLT50eXBlKCkgPT0gVHJhbnNmb3JtT3BlcmF0aW9uOjpNQVRS
SVhfM0QpIHsKLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeDo6RGVjb21wb3Nl
ZDJUeXBlIHRvRGVjb21wOwotICAgICAgICAgICAgICAgIHRyYW5zZm9ybS5kZWNvbXBvc2UyKHRv
RGVjb21wKTsKLSAgICAgICAgICAgICAgICAvLyBBbnkgcm90YXRpb24gcHJldmVudHMgdXMgZnJv
bSB1c2luZyBhIHNpbXBsZSBzdGFydC9lbmQgcmVjdCB1bmlvbi4KLSAgICAgICAgICAgICAgICBp
ZiAodG9EZWNvbXAuYW5nbGUpCi0gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgZmxvYXRCb3VuZHMgPSB0cmFuc2Zvcm0ubWFwUmVj
dChmbG9hdEJvdW5kcyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoYXBwbHlUcmFuc2Zv
cm1PcmlnaW4pCi0gICAgICAgIGZsb2F0Qm91bmRzLm1vdmVCeSh0cmFuc2Zvcm1PcmlnaW4pOwot
Ci0gICAgYm91bmRzID0gTGF5b3V0UmVjdChmbG9hdEJvdW5kcyk7Ci0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6Y29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0
cml4KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAotewotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IHRyYW5zZm9ybTsKLSAgICBzdHlsZS5hcHBseVRyYW5zZm9ybSh0cmFuc2Zvcm0sIHJlbmRlcmVy
Qm94LCBSZW5kZXJTdHlsZTo6SW5jbHVkZVRyYW5zZm9ybU9yaWdpbik7Ci0gICAgaWYgKCF0cmFu
c2Zvcm0uaXNBZmZpbmUoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgVHJhbnNmb3Jt
YXRpb25NYXRyaXg6OkRlY29tcG9zZWQyVHlwZSBmcm9tRGVjb21wOwotICAgIHRyYW5zZm9ybS5k
ZWNvbXBvc2UyKGZyb21EZWNvbXApOwotICAgIC8vIEFueSByb3RhdGlvbiBwcmV2ZW50cyB1cyBm
cm9tIHVzaW5nIGEgc2ltcGxlIHN0YXJ0L2VuZCByZWN0IHVuaW9uLgotICAgIGlmIChmcm9tRGVj
b21wLmFuZ2xlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBib3VuZHMgPSBMYXlvdXRS
ZWN0KHRyYW5zZm9ybS5tYXBSZWN0KGJvdW5kcykpOwotICAgIHJldHVybiB0cnVlOwotCi19Ci0K
LX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0FuaW1hdGlvbkJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0FuaW1hdGlvbkJhc2UuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggN2JjNDIwNGVk
Nzk2YWU1MjFhYThiMWM4ZTQ3Mjg5MjQwMjQ1NGE4MS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Bbmlt
YXRpb25CYXNlLmgKKysrIC9kZXYvbnVsbApAQCAtMSwyNjkgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2lu
Y2x1ZGUgIkFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQu
aCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGVD
b25zdGFudHMuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDb21wb3NpdGVBbmlt
YXRpb247Ci1jbGFzcyBFbGVtZW50OwotY2xhc3MgRmxvYXRSZWN0OwotY2xhc3MgTGF5b3V0UmVj
dDsKLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLWNsYXNzIFRpbWlu
Z0Z1bmN0aW9uOwotCi1lbnVtIGNsYXNzIEFuaW1hdGVDaGFuZ2UgewotICAgIFN0eWxlQmxlbmRl
ZCAgICAgICAgICAgID0gMSA8PCAwLCAvLyBTdHlsZSB3YXMgY2hhbmdlZC4KLSAgICBTdGF0ZUNo
YW5nZSAgICAgICAgICAgICA9IDEgPDwgMSwgLy8gQW5pbWF0aW9uIHN0YXRlKCkgY2hhbmdlZC4K
LSAgICBSdW5uaW5nU3RhdGVDaGFuZ2UgICAgICA9IDEgPDwgMiwgLy8gQW5pbWF0aW9uICJydW5u
aW5nIG9yIHBhdXNlZCIgY2hhbmdlZC4KLX07Ci0KLWVudW0gY2xhc3MgQW5pbWF0aW9uSW1wYWN0
IHsKLSAgICBSZXF1aXJlc1JlY29tcG9zaXRlICAgICA9IDEgPDwgMCwKLSAgICBGb3JjZXNTdGFj
a2luZ0NvbnRleHQgICA9IDEgPDwgMQotfTsKLQotY2xhc3MgQW5pbWF0aW9uQmFzZSA6IHB1Ymxp
YyBSZWZDb3VudGVkPEFuaW1hdGlvbkJhc2U+Ci0gICAgLCBwdWJsaWMgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCB7Ci0gICAgZnJpZW5kIGNsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbjsKLSAgICBm
cmllbmQgY2xhc3MgQ1NTUHJvcGVydHlBbmltYXRpb247Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgQW5pbWF0aW9uQmFzZShjb25zdCBBbmltYXRpb24mIHRyYW5z
aXRpb24sIEVsZW1lbnQmLCBDb21wb3NpdGVBbmltYXRpb24mKTsKLSAgICB2aXJ0dWFsIH5Bbmlt
YXRpb25CYXNlKCk7Ci0KLSAgICBFbGVtZW50KiBlbGVtZW50KCkgY29uc3QgeyByZXR1cm4gbV9l
bGVtZW50LmdldCgpOyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIGN1cnJlbnRTdHlsZSgpIGNv
bnN0IG92ZXJyaWRlOwotICAgIFJlbmRlckVsZW1lbnQqIHJlbmRlcmVyKCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7Ci0KLSAgICBkb3VibGUgZHVyYXRpb24oKSBj
b25zdDsKLQotICAgIC8vIEFuaW1hdGlvbnMgYW5kIFRyYW5zaXRpb25zIGdvIHRocm91Z2ggdGhl
IHN0YXRlcyBiZWxvdy4gV2hlbiBlbnRlcmluZyB0aGUgU1RBUlRFRCBzdGF0ZQotICAgIC8vIHRo
ZSBhbmltYXRpb24gaXMgc3RhcnRlZC4gVGhpcyBtYXkgb3IgbWF5IG5vdCByZXF1aXJlIGRlZmVy
cmVkIHJlc3BvbnNlIGZyb20gdGhlIGFuaW1hdG9yLgotICAgIC8vIElmIHNvLCB3ZSBzdGF5IGlu
IHRoaXMgc3RhdGUgdW50aWwgdGhhdCByZXNwb25zZSBpcyByZWNlaXZlZCAoYW5kIGl0IHJldHVy
bnMgdGhlIHN0YXJ0IHRpbWUpLgotICAgIC8vIE90aGVyd2lzZSwgd2UgdXNlIHRoZSBjdXJyZW50
IHRpbWUgYXMgdGhlIHN0YXJ0IHRpbWUgYW5kIGdvIGltbWVkaWF0ZWx5IHRvIEFuaW1hdGlvblN0
YXRlOjpMb29waW5nCi0gICAgLy8gb3IgQW5pbWF0aW9uU3RhdGU6OkVuZGluZy4KLSAgICBlbnVt
IGNsYXNzIEFuaW1hdGlvblN0YXRlIDogdWludDhfdCB7Ci0gICAgICAgIE5ldywgICAgICAgICAg
ICAgICAgICAgICAgICAvLyBhbmltYXRpb24ganVzdCBjcmVhdGVkLCBhbmltYXRpb24gbm90IHJ1
bm5pbmcgeWV0Ci0gICAgICAgIFN0YXJ0V2FpdFRpbWVyLCAgICAgICAgICAgICAvLyBzdGFydCB0
aW1lciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCi0gICAgICAgIFN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlLCAgICAvLyB3YWl0aW5nIGZvciBzdHlsZSBzZXR1cCBzbyB3ZSBjYW4gc3RhcnQgYW5p
bWF0aW9ucwotICAgICAgICBTdGFydFdhaXRSZXNwb25zZSwgICAgICAgICAgLy8gYW5pbWF0aW9u
IHN0YXJ0ZWQsIHdhaXRpbmcgZm9yIHJlc3BvbnNlCi0gICAgICAgIExvb3BpbmcsICAgICAgICAg
ICAgICAgICAgICAvLyByZXNwb25zZSByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcsIGxvb3Ag
dGltZXIgcnVubmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBFbmRpbmcsICAgICAgICAg
ICAgICAgICAgICAgLy8gcmVjZWl2ZWQsIGFuaW1hdGlvbiBydW5uaW5nLCBlbmQgdGltZXIgcnVu
bmluZywgd2FpdGluZyBmb3IgZmlyZQotICAgICAgICBQYXVzZWROZXcsICAgICAgICAgICAgICAg
ICAgLy8gaW4gcGF1c2UgbW9kZSB3aGVuIGFuaW1hdGlvbiB3YXMgY3JlYXRlZAotICAgICAgICBQ
YXVzZWRXYWl0VGltZXIsICAgICAgICAgICAgLy8gaW4gcGF1c2UgbW9kZSB3aGVuIGFuaW1hdGlv
biBzdGFydGVkCi0gICAgICAgIFBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZSwgICAvLyBpbiBwYXVz
ZSBtb2RlIHdoZW4gd2FpdGluZyBmb3Igc3R5bGUgc2V0dXAKLSAgICAgICAgUGF1c2VkV2FpdFJl
c3BvbnNlLCAgICAgICAgIC8vIGFuaW1hdGlvbiBwYXVzZWQgd2hlbiBpbiBTVEFSVElORyBzdGF0
ZQotICAgICAgICBQYXVzZWRSdW4sICAgICAgICAgICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNl
ZCB3aGVuIGluIExPT1BJTkcgb3IgRU5ESU5HIHN0YXRlCi0gICAgICAgIERvbmUsICAgICAgICAg
ICAgICAgICAgICAgICAvLyBlbmQgdGltZXIgZmlyZWQsIGFuaW1hdGlvbiBmaW5pc2hlZCBhbmQg
cmVtb3ZlZAotICAgICAgICBGaWxsaW5nRm9yd2FyZHMgICAgICAgICAgICAgLy8gYW5pbWF0aW9u
IGhhcyBlbmRlZCBhbmQgaXMgcmV0YWluaW5nIGl0cyBmaW5hbCB2YWx1ZQotICAgIH07Ci0KLSAg
ICBlbnVtIGNsYXNzIEFuaW1hdGlvblN0YXRlSW5wdXQgOiB1aW50OF90IHsKLSAgICAgICAgTWFr
ZU5ldywgICAgICAgICAgIC8vIHJlc2V0IGJhY2sgdG8gbmV3IGZyb20gYW55IHN0YXRlCi0gICAg
ICAgIFN0YXJ0QW5pbWF0aW9uLCAgICAvLyBhbmltYXRpb24gcmVxdWVzdHMgYSBzdGFydAotICAg
ICAgICBSZXN0YXJ0QW5pbWF0aW9uLCAgLy8gZm9yY2UgYSByZXN0YXJ0IGZyb20gYW55IHN0YXRl
Ci0gICAgICAgIFN0YXJ0VGltZXJGaXJlZCwgICAvLyBzdGFydCB0aW1lciBmaXJlZAotICAgICAg
ICBTdHlsZUF2YWlsYWJsZSwgICAgLy8gc3R5bGUgaXMgc2V0dXAsIHJlYWR5IHRvIHN0YXJ0IGFu
aW1hdGluZwotICAgICAgICBTdGFydFRpbWVTZXQsICAgICAgLy8gbV9zdGFydFRpbWUgd2FzIHNl
dAotICAgICAgICBMb29wVGltZXJGaXJlZCwgICAgLy8gbG9vcCB0aW1lciBmaXJlZAotICAgICAg
ICBFbmRUaW1lckZpcmVkLCAgICAgLy8gZW5kIHRpbWVyIGZpcmVkCi0gICAgICAgIFBhdXNlT3Zl
cnJpZGUsICAgICAvLyBwYXVzZSBhbiBhbmltYXRpb24gZHVlIHRvIG92ZXJyaWRlCi0gICAgICAg
IFJlc3VtZU92ZXJyaWRlLCAgICAvLyByZXN1bWUgYW4gb3ZlcnJpZGRlbiBhbmltYXRpb24KLSAg
ICAgICAgUGxheVN0YXRlUnVubmluZywgIC8vIHBsYXkgc3RhdGUgcGF1c2VkIC0+IHJ1bm5pbmcK
LSAgICAgICAgUGxheVN0YXRlUGF1c2VkLCAgIC8vIHBsYXkgc3RhdGUgcnVubmluZyAtPiBwYXVz
ZWQKLSAgICAgICAgRW5kQW5pbWF0aW9uICAgICAgIC8vIGZvcmNlIGFuIGVuZCBmcm9tIGFueSBz
dGF0ZQotICAgIH07Ci0KLSAgICAvLyBDYWxsZWQgd2hlbiBhbmltYXRpb24gaXMgaW4gQW5pbWF0
aW9uU3RhdGU6Ok5ldyB0byBzdGFydCBhbmltYXRpb24KLSAgICB2b2lkIHVwZGF0ZVN0YXRlTWFj
aGluZShBbmltYXRpb25TdGF0ZUlucHV0LCBkb3VibGUgcGFyYW0pOwotCi0gICAgLy8gQW5pbWF0
aW9uIGhhcyBhY3R1YWxseSBzdGFydGVkLCBhdCBwYXNzZWQgdGltZQotICAgIHZvaWQgb25Bbmlt
YXRpb25TdGFydFJlc3BvbnNlKE1vbm90b25pY1RpbWUgc3RhcnRUaW1lKQotICAgIHsKLSAgICAg
ICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwg
c3RhcnRUaW1lLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKTsKLSAgICB9Ci0KLSAgICAv
LyBDYWxsZWQgdG8gY2hhbmdlIHRvIG9yIGZyb20gcGF1c2VkIHN0YXRlCi0gICAgdm9pZCB1cGRh
dGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlKTsKLSAgICBib29sIHBsYXlTdGF0ZVBsYXlp
bmcoKSBjb25zdDsKLQotICAgIGJvb2wgd2FpdGluZ1RvU3RhcnQoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpOZXcgfHwgbV9hbmltYXRpb25TdGF0
ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0VGltZXIgfHwgbV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OyB9Ci0gICAgYm9vbCBwcmVBY3RpdmUoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3Rh
dGU6Ok5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRU
aW1lciB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHls
ZUF2YWlsYWJsZSB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdh
aXRSZXNwb25zZTsKLSAgICB9Ci0KLSAgICBib29sIHBvc3RBY3RpdmUoKSBjb25zdCB7IHJldHVy
biBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpEb25lOyB9Ci0gICAgYm9vbCBm
aWxsaW5nRm9yd2FyZHMoKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1h
dGlvblN0YXRlOjpGaWxsaW5nRm9yd2FyZHM7IH0KLSAgICBib29sIGFjdGl2ZSgpIGNvbnN0IHsg
cmV0dXJuICFwb3N0QWN0aXZlKCkgJiYgIXByZUFjdGl2ZSgpOyB9Ci0gICAgYm9vbCBydW5uaW5n
KCkgY29uc3QgeyByZXR1cm4gIWlzTmV3KCkgJiYgIXBvc3RBY3RpdmUoKTsgfQotICAgIGJvb2wg
cGF1c2VkKCkgY29uc3QgeyByZXR1cm4gbV9wYXVzZVRpbWUgfHwgbV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OyB9Ci0KLSAgICBzdGF0aWMgYm9vbCBpc1BhdXNl
ZFN0YXRlKEFuaW1hdGlvblN0YXRlIHN0YXRlKSB7IHJldHVybiBzdGF0ZSA+PSBBbmltYXRpb25T
dGF0ZTo6UGF1c2VkTmV3ICYmIHN0YXRlIDw9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW47IH0K
LSAgICBzdGF0aWMgYm9vbCBpc1J1bm5pbmdTdGF0ZShBbmltYXRpb25TdGF0ZSBzdGF0ZSkgeyBy
ZXR1cm4gc3RhdGUgPj0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZhaWxhYmxlICYm
IHN0YXRlIDwgQW5pbWF0aW9uU3RhdGU6OkRvbmU7IH0KLQotICAgIGJvb2wgaW5QYXVzZWRTdGF0
ZSgpIGNvbnN0IHsgcmV0dXJuIGlzUGF1c2VkU3RhdGUobV9hbmltYXRpb25TdGF0ZSk7IH0KLSAg
ICBib29sIGluUnVubmluZ1N0YXRlKCkgY29uc3QgeyByZXR1cm4gaXNSdW5uaW5nU3RhdGUobV9h
bmltYXRpb25TdGF0ZSk7IH0KLQotICAgIGJvb2wgaXNOZXcoKSBjb25zdCB7IHJldHVybiBtX2Fu
aW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpOZXcgfHwgbV9hbmltYXRpb25TdGF0ZSA9
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OyB9Ci0gICAgYm9vbCB3YWl0aW5nRm9yU3RhcnRU
aW1lKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
U3RhcnRXYWl0UmVzcG9uc2U7IH0KLSAgICBib29sIHdhaXRpbmdGb3JTdHlsZUF2YWlsYWJsZSgp
IGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0
V2FpdFN0eWxlQXZhaWxhYmxlOyB9Ci0KLSAgICBib29sIGlzQWNjZWxlcmF0ZWQoKSBjb25zdCB7
IHJldHVybiBtX2lzQWNjZWxlcmF0ZWQ7IH0KLQotICAgIHZpcnR1YWwgT3B0aW9uYWw8U2Vjb25k
cz4gdGltZVRvTmV4dFNlcnZpY2UoKTsKLQotICAgIGRvdWJsZSBwcm9ncmVzcyhkb3VibGUgc2Nh
bGUgPSAxLCBkb3VibGUgb2Zmc2V0ID0gMCwgY29uc3QgVGltaW5nRnVuY3Rpb24qID0gbnVsbHB0
cikgY29uc3Q7Ci0KLSAgICB2aXJ0dWFsIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+JiAvKmFuaW1hdGVkU3R5bGUqLykgPSAwOwotCi0gICAgdmlydHVh
bCBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29u
c3QgPSAwOwotCi0gICAgdmlydHVhbCBib29sIHNob3VsZEZpcmVFdmVudHMoKSBjb25zdCB7IHJl
dHVybiBmYWxzZTsgfQotCi0gICAgdm9pZCBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsK
LQotICAgIGJvb2wgYW5pbWF0aW9uc01hdGNoKGNvbnN0IEFuaW1hdGlvbiYpIGNvbnN0OwotCi0g
ICAgY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlv
bjsgfQotICAgIHZvaWQgc2V0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYgYW5pbWF0aW9uKSB7
IG1fYW5pbWF0aW9uID0gY29uc3RfY2FzdDxBbmltYXRpb24mPihhbmltYXRpb24pOyB9Ci0KLSAg
ICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGlzIGFuaW1hdGlvbiBpcyBvdmVycmlkZGVuLiBUaGlzIHdp
bGwgb25seSBiZSB0aGUgY2FzZSBmb3IKLSAgICAvLyBJbXBsaWNpdEFuaW1hdGlvbnMgYW5kIGlz
IHVzZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBmb3JjZQotICAgIC8v
IHNldCB0aGUgc3RhcnQgdGltZS4gSWYgYW4gYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4sIGl0IHdp
bGwgcHJvYmFibHkgbm90IGdldAotICAgIC8vIGJhY2sgdGhlIEFuaW1hdGlvblN0YXRlSW5wdXQ6
OlN0YXJ0VGltZVNldCBpbnB1dC4KLSAgICB2aXJ0dWFsIGJvb2wgb3ZlcnJpZGRlbigpIGNvbnN0
IHsgcmV0dXJuIGZhbHNlOyB9Ci0KLSAgICAvLyBEb2VzIHRoaXMgYW5pbWF0aW9uL3RyYW5zaXRp
b24gaW52b2x2ZSB0aGUgZ2l2ZW4gcHJvcGVydHk/Ci0gICAgdmlydHVhbCBib29sIGFmZmVjdHNQ
cm9wZXJ0eShDU1NQcm9wZXJ0eUlEIC8qcHJvcGVydHkqLykgY29uc3QgeyByZXR1cm4gZmFsc2U7
IH0KLQotICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
LCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChhY2NlbGVy
YXRlZE9ubHkgJiYgIW1faXNBY2NlbGVyYXRlZCkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBpZiAoIWFmZmVjdHNQcm9wZXJ0eShwcm9wZXJ0eSkpCi0gICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgcmV0dXJuIGluUnVubmluZ1N0YXRlKCkgfHwgaW5QYXVz
ZWRTdGF0ZSgpOwotICAgIH0KLQotICAgIGJvb2wgdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNo
KCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2g7
IH0KLSAgICBib29sIGZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpIGNvbnN0IG92ZXJyaWRlIHsg
cmV0dXJuIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0jaWYgRU5BQkxFKEZJTFRFUlNf
TEVWRUxfMikKLSAgICBib29sIGJhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCkgY29u
c3Qgb3ZlcnJpZGUgeyByZXR1cm4gbV9iYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsg
fQotI2VuZGlmCi0gICAgYm9vbCBjb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpIGNvbnN0
IG92ZXJyaWRlIHsgcmV0dXJuIG1fY29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7IH0KLQot
ICAgIC8vIEZyZWV6ZSB0aGUgYW5pbWF0aW9uOyB1c2VkIGJ5IER1bXBSZW5kZXJUcmVlLgotICAg
IHZvaWQgZnJlZXplQXRUaW1lKGRvdWJsZSB0KTsKLQotICAgIC8vIFBsYXkgYW5kIHBhdXNlIEFQ
SQotICAgIHZvaWQgcGxheSgpOwotICAgIHZvaWQgcGF1c2UoKTsKLSAgICAKLSAgICBkb3VibGUg
YmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgY29uc3Q7Ci0gICAgCi0gICAgZG91YmxlIGdldEVs
YXBzZWRUaW1lKCkgY29uc3Q7Ci0gICAgLy8gU2V0dGluZyB0aGUgZWxhcHNlZCB0aW1lIHdpbGwg
YWRqdXN0IHRoZSBzdGFydCB0aW1lIGFuZCBwb3NzaWJseSBwYXVzZSB0aW1lLgotICAgIHZvaWQg
c2V0RWxhcHNlZFRpbWUoZG91YmxlKTsKLSAgICAKLSAgICB2b2lkIHN0eWxlQXZhaWxhYmxlKCkg
Ci0gICAgewotICAgICAgICBBU1NFUlQod2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkpOwotICAg
ICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFi
bGUsIC0xKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2aXJ0dWFsIHZvaWQgb3ZlcnJpZGVB
bmltYXRpb25zKCkgeyB9Ci0gICAgdmlydHVhbCB2b2lkIHJlc3VtZU92ZXJyaWRkZW5BbmltYXRp
b25zKCkgeyB9Ci0KLSAgICBDb21wb3NpdGVBbmltYXRpb24qIGNvbXBvc2l0ZUFuaW1hdGlvbigp
IHsgcmV0dXJuIG1fY29tcG9zaXRlQW5pbWF0aW9uOyB9Ci0KLSAgICAvLyBUaGVzZSBhcmUgY2Fs
bGVkIHdoZW4gdGhlIGNvcnJlc3BvbmRpbmcgdGltZXIgZmlyZXMgc28gc3ViY2xhc3NlcyBjYW4g
ZG8gYW55IGV4dHJhIHdvcmsKLSAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25TdGFydChkb3Vi
bGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRpb25JdGVy
YXRpb24oZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgdmlydHVhbCB2b2lkIG9uQW5p
bWF0aW9uRW5kKGRvdWJsZSAvKmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIAotICAgIC8vIHRpbWVP
ZmZzZXQgaXMgYW4gb2Zmc2V0IGZyb20gdGhlIGN1cnJlbnQgdGltZSB3aGVuIHRoZSBhbmltYXRp
b24gc2hvdWxkIHN0YXJ0LiBOZWdhdGl2ZSB2YWx1ZXMgYXJlIE9LLgotICAgIC8vIFJldHVybiB2
YWx1ZSBpbmRpY2F0ZXMgd2hldGhlciB0byBleHBlY3QgYW4gYXN5bmNocm9ub3VzIG5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQoKSBjYWxsYmFjay4KLSAgICB2aXJ0dWFsIGJvb2wgc3RhcnRBbmltYXRp
b24oZG91YmxlIC8qdGltZU9mZnNldCovKSB7IHJldHVybiBmYWxzZTsgfQotICAgIC8vIHRpbWVP
ZmZzZXQgaXMgdGhlIHRpbWUgYXQgd2hpY2ggdGhlIGFuaW1hdGlvbiBpcyBiZWluZyBwYXVzZWQu
Ci0gICAgdmlydHVhbCB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSAvKnRpbWVPZmZzZXQqLykg
eyB9Ci0gICAgdmlydHVhbCB2b2lkIGVuZEFuaW1hdGlvbihib29sIC8qZmlsbGluZ0ZvcndhcmRz
Ki8gPSBmYWxzZSkgeyB9Ci0KLSAgICB2aXJ0dWFsIGNvbnN0IFJlbmRlclN0eWxlJiB1bmFuaW1h
dGVkU3R5bGUoKSBjb25zdCA9IDA7Ci0KLSAgICB2b2lkIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0
YXRlKCk7Ci0KLSAgICBBbmltYXRpb25TdGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uU3RhdGU7IH0KLQotICAgIHN0YXRpYyB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoRWxl
bWVudCopOwotICAgIAotICAgIHZvaWQgZ2V0VGltZVRvTmV4dEV2ZW50KFNlY29uZHMmIHRpbWUs
IGJvb2wmIGlzTG9vcGluZykgY29uc3Q7Ci0KLSAgICBkb3VibGUgZnJhY3Rpb25hbFRpbWUoZG91
YmxlIHNjYWxlLCBkb3VibGUgZWxhcHNlZFRpbWUsIGRvdWJsZSBvZmZzZXQpIGNvbnN0OwotCi0g
ICAgLy8gVGhlc2UgcmV0dXJuIHRydWUgaWYgd2UgY2FuIGVhc2lseSBjb21wdXRlIGEgYm91bmRp
bmcgYm94IGJ5IGFwcGx5aW5nIHRoZSBzdHlsZSdzIHRyYW5zZm9ybSB0byB0aGUgYm91bmRzIHJl
Y3QuCi0gICAgYm9vbCBjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KGNv
bnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiwgTGF5b3V0UmVj
dCYgYm91bmRzKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1h
dHJpeChjb25zdCBGbG9hdFJlY3QmIHJlbmRlcmVyQm94LCBjb25zdCBSZW5kZXJTdHlsZSYsIExh
eW91dFJlY3QmIGJvdW5kcykgY29uc3Q7Ci0KLXByb3RlY3RlZDoKLSAgICBib29sIG1faXNBY2Nl
bGVyYXRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRj
aCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNl
IH07Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBib29sIG1fYmFja2Ryb3BGaWx0
ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxzZSB9OwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
UmVmUHRyPEVsZW1lbnQ+IG1fZWxlbWVudDsKLQotcHJvdGVjdGVkOgotICAgIENvbXBvc2l0ZUFu
aW1hdGlvbiogbV9jb21wb3NpdGVBbmltYXRpb247IC8vIElkZWFsbHkgdGhpcyB3b3VsZCBiZSBh
IHJlZmVyZW5jZSwgYnV0IGl0IGhhcyB0byBiZSBjbGVhcmVkIGlmIGFuIGFuaW1hdGlvbiBpcyBk
ZXN0cm95ZWQgaW5zaWRlIGFuIGV2ZW50IGNhbGxiYWNrLgotICAgIFJlZjxBbmltYXRpb24+IG1f
YW5pbWF0aW9uOwotCi0gICAgT3B0aW9uYWw8ZG91YmxlPiBtX3N0YXJ0VGltZTsKLSAgICBPcHRp
b25hbDxkb3VibGU+IG1fcGF1c2VUaW1lOwotICAgIGRvdWJsZSBtX3JlcXVlc3RlZFN0YXJ0VGlt
ZSB7IDAgfTsKLSAgICBPcHRpb25hbDxkb3VibGU+IG1fdG90YWxEdXJhdGlvbjsKLSAgICBPcHRp
b25hbDxkb3VibGU+IG1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uOwotCi0gICAgQW5pbWF0aW9uU3Rh
dGUgbV9hbmltYXRpb25TdGF0ZSB7IEFuaW1hdGlvblN0YXRlOjpOZXcgfTsKLSAgICBib29sIG1f
Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggeyBmYWxzZSB9OwotfTsKLQotfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24v
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAyYWM5ZGE3OGQzMjZjNTg0MTUyZjIzOWYyN2RlODM0MTJmNjE3NC4uMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDgw
NSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRo
ZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICog
ICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHBy
b2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZp
YyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0g
KiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENP
TlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQ
Uk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBV
U0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBD
QVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05U
UkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNF
IE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBU
SElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gg
REFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgiCi0jaW5jbHVkZSAi
QW5pbWF0aW9uRXZlbnQuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJv
cGVydHlQYXJzZXIuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKLSNpbmNsdWRl
ICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiRnJhbWUuaCIKLSNpbmNsdWRlICJGcmFtZVZpZXcu
aCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiUHNldWRvRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclZpZXcuaCIKLSNpbmNsdWRlICJUcmFuc2l0aW9uRXZlbnQuaCIKLSNpbmNs
dWRlICJXZWJLaXRBbmltYXRpb25FdmVudC5oIgotI2luY2x1ZGUgIldlYktpdFRyYW5zaXRpb25F
dmVudC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLS8vIEFsbG93IGEgbGl0dGxlIG1vcmUg
dGhhbiA2MGZwcyB0byBtYWtlIHN1cmUgd2UgY2FuIGF0IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJh
dGUuCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBhbmltYXRpb25UaW1lckRlbGF5IHsgMTVfbXMgfTsK
LS8vIEFsbG93IGEgbGl0dGxlIG1vcmUgdGhhbiAzMGZwcyB0byBtYWtlIHN1cmUgd2UgY2FuIGF0
IGxlYXN0IGhpdCB0aGF0IGZyYW1lIHJhdGUuCi1zdGF0aWMgY29uc3QgU2Vjb25kcyBhbmltYXRp
b25UaW1lclRocm90dGxlZERlbGF5IHsgMzBfbXMgfTsKLQotY2xhc3MgQW5pbWF0aW9uUHJpdmF0
ZVVwZGF0ZUJsb2NrIHsKLXB1YmxpYzoKLSAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2so
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAg
ICAgIDogbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgewot
ICAgICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuYmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLSAg
ICB9Ci0gICAgCi0gICAgfkFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jaygpCi0gICAgewotICAg
ICAgICBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgfQot
ICAgIAotICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBtX2FuaW1hdGlvbkNvbnRy
b2xsZXI7Ci19OwotCi1DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Q1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUoRnJhbWUmIGZyYW1lKQotICAgIDogbV9hbmltYXRpb25UaW1lcigq
dGhpcywgJkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVk
KQotICAgICwgbV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigqdGhpcywgJkNTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVk
KQotICAgICwgbV9mcmFtZShmcmFtZSkKLSAgICAsIG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3Vu
dCgwKQotICAgICwgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbihmYWxzZSkKLSAg
ICAsIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGZhbHNlKQotewotfQotCi1D
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6fkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2
YXRlKCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGV4cGxpY2l0bHkgY2xlYXIgdGhlIGNvbXBvc2l0
ZSBhbmltYXRpb25zIGhlcmUgYmVjYXVzZSB0aGUKLSAgICAvLyBkZXN0cnVjdG9yIG9mIENvbXBv
c2l0ZUFuaW1hdGlvbiB3aWxsIGNhbGwgbWVtYmVycyBvZiB0aGlzIGNsYXNzIGJhY2suCi0gICAg
bV9jb21wb3NpdGVBbmltYXRpb25zLmNsZWFyKCk7Ci19Ci0KLUNvbXBvc2l0ZUFuaW1hdGlvbiYg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihF
bGVtZW50JiBlbGVtZW50KQotewotICAgIGVsZW1lbnQuc2V0SGFzQ1NTQW5pbWF0aW9uKCk7Ci0K
LSAgICBhdXRvIHJlc3VsdCA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5lbnN1cmUoJmVsZW1lbnQs
IFsmXSB7Ci0gICAgICAgIHJldHVybiBDb21wb3NpdGVBbmltYXRpb246OmNyZWF0ZSgqdGhpcyk7
Ci0gICAgfSk7Ci0KLSAgICBpZiAoYW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KCZl
bGVtZW50LmRvY3VtZW50KCkpKQotICAgICAgICByZXN1bHQuaXRlcmF0b3ItPnZhbHVlLT5zdXNw
ZW5kQW5pbWF0aW9ucygpOwotCi0gICAgcmV0dXJuICpyZXN1bHQuaXRlcmF0b3ItPnZhbHVlOwot
fQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpjbGVhcihFbGVtZW50JiBl
bGVtZW50KQotewotICAgIEFTU0VSVChlbGVtZW50Lmhhc0NTU0FuaW1hdGlvbigpID09IG1fY29t
cG9zaXRlQW5pbWF0aW9ucy5jb250YWlucygmZWxlbWVudCkpOwotCi0gICAgaWYgKCFlbGVtZW50
Lmhhc0NTU0FuaW1hdGlvbigpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgZWxlbWVudC5j
bGVhckhhc0NTU0FuaW1hdGlvbigpOwotCi0gICAgYXV0byBpdCA9IG1fY29tcG9zaXRlQW5pbWF0
aW9ucy5maW5kKCZlbGVtZW50KTsKLSAgICBpZiAoaXQgPT0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmVuZCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBMT0coQW5pbWF0aW9ucywgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIGNsZWFyOiAlcCIsIHRoaXMsICZlbGVtZW50
KTsKLQotICAgIG1fZXZlbnRzVG9EaXNwYXRjaC5yZW1vdmVBbGxNYXRjaGluZyhbJl0gKGNvbnN0
IEV2ZW50VG9EaXNwYXRjaCYgaW5mbykgewotICAgICAgICByZXR1cm4gaW5mby5lbGVtZW50LnB0
cigpID09ICZlbGVtZW50OwotICAgIH0pOwotCi0gICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlzcGF0
Y2gucmVtb3ZlQWxsTWF0Y2hpbmcoWyZdKGF1dG8mIGN1cnJlbnRFbGVtZW50KSB7Ci0gICAgICAg
IHJldHVybiBjdXJyZW50RWxlbWVudC5wdHIoKSA9PSAmZWxlbWVudDsKLSAgICB9KTsKLSAgICAK
LSAgICAvLyBSZXR1cm4gZmFsc2UgaWYgd2UgZGlkbid0IGRvIGFueXRoaW5nIE9SIHdlIGFyZSBz
dXNwZW5kZWQgKHNvIHdlIGRvbid0IHRyeSB0bwotICAgIC8vIGRvIGEgaW52YWxpZGF0ZVN0eWxl
Rm9yU3VidHJlZSgpIHdoZW4gc3VzcGVuZGVkKS4KLSAgICAvLyBGSVhNRTogVGhlIGNvZGUgYmVs
b3cgZG9lcyB0aGUgb3Bwb3NpdGUgb2Ygd2hhdCB0aGUgY29tbWVudCBhYm92ZSBzYXlzIHJlZ2Fy
ZGluZyBzdXNwZW5kZWQgc3RhdGUuCi0gICAgYXV0byYgYW5pbWF0aW9uID0gKml0LT52YWx1ZTsK
LSAgICBib29sIHJlc3VsdCA9IGFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpOwotICAgIGFuaW1hdGlv
bi5jbGVhckVsZW1lbnQoKTsKLQotICAgIG1fY29tcG9zaXRlQW5pbWF0aW9ucy5yZW1vdmUoaXQp
OwotCi0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxsU2V0
Q2hhbmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQotewotICAgIEFuaW1hdGlvblByaXZh
dGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4g
dGltZVRvTmV4dFNlcnZpY2U7Ci0gICAgYm9vbCBjYWxsZWRTZXRDaGFuZ2VkID0gZmFsc2U7Ci0K
LSAgICBmb3IgKGF1dG8mIGNvbXBvc2l0ZUFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9u
cykgewotICAgICAgICBDb21wb3NpdGVBbmltYXRpb24mIGFuaW1hdGlvbiA9ICpjb21wb3NpdGVB
bmltYXRpb24udmFsdWU7Ci0gICAgICAgIGlmICghYW5pbWF0aW9uLmlzU3VzcGVuZGVkKCkgJiYg
YW5pbWF0aW9uLmhhc0FuaW1hdGlvbnMoKSkgewotICAgICAgICAgICAgT3B0aW9uYWw8U2Vjb25k
cz4gdCA9IGFuaW1hdGlvbi50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAgICAgICAgaWYgKHQg
JiYgKCF0aW1lVG9OZXh0U2VydmljZSB8fCB0LnZhbHVlKCkgPCB0aW1lVG9OZXh0U2VydmljZS52
YWx1ZSgpKSkKLSAgICAgICAgICAgICAgICB0aW1lVG9OZXh0U2VydmljZSA9IHQudmFsdWUoKTsK
LSAgICAgICAgICAgIGlmICh0aW1lVG9OZXh0U2VydmljZSAmJiB0aW1lVG9OZXh0U2VydmljZS52
YWx1ZSgpID09IDBfcykgewotICAgICAgICAgICAgICAgIGlmIChjYWxsU2V0Q2hhbmdlZCAhPSBD
YWxsU2V0Q2hhbmdlZCkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgCi0gICAgICAgICAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9ICpjb21wb3NpdGVBbmltYXRp
b24ua2V5OwotICAgICAgICAgICAgICAgIEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCkuYmFja0Zv
cndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0g
ICAgICAgICAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgICAgICAg
ICBjYWxsZWRTZXRDaGFuZ2VkID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAg
IH0KLQotICAgIGlmIChjYWxsZWRTZXRDaGFuZ2VkKQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50
KCktPnVwZGF0ZVN0eWxlSWZOZWVkZWQoKTsKLQotICAgIHJldHVybiB0aW1lVG9OZXh0U2Vydmlj
ZTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0
aW9uVGltZXJGb3JFbGVtZW50KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgT3B0aW9uYWw8U2Vj
b25kcz4gdGltZVRvTmV4dFNlcnZpY2U7Ci0KLSAgICBjb25zdCBDb21wb3NpdGVBbmltYXRpb24q
IGNvbXBvc2l0ZUFuaW1hdGlvbiA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQoJmVsZW1lbnQp
OwotICAgIGlmICghY29tcG9zaXRlQW5pbWF0aW9uLT5pc1N1c3BlbmRlZCgpICYmIGNvbXBvc2l0
ZUFuaW1hdGlvbi0+aGFzQW5pbWF0aW9ucygpKQotICAgICAgICB0aW1lVG9OZXh0U2VydmljZSA9
IGNvbXBvc2l0ZUFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKLQotICAgIGlmICghdGlt
ZVRvTmV4dFNlcnZpY2UpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX2FuaW1hdGlvblRp
bWVyLmlzQWN0aXZlKCkgJiYgKG1fYW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSB8fCBt
X2FuaW1hdGlvblRpbWVyLm5leHRGaXJlSW50ZXJ2YWwoKSA8PSB0aW1lVG9OZXh0U2VydmljZS52
YWx1ZSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9u
ZVNob3QodGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnVwZGF0ZUFuaW1hdGlvblRpbWVyKFNldENoYW5nZWQgY2FsbFNl
dENoYW5nZWQvKiA9IERvTm90Q2FsbFNldENoYW5nZWQqLykKLXsKLSAgICBPcHRpb25hbDxTZWNv
bmRzPiB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0ZUFuaW1hdGlvbnMoY2FsbFNldENoYW5nZWQp
OwotCi0gICAgTE9HKEFuaW1hdGlvbnMsICJ1cGRhdGVBbmltYXRpb25UaW1lcjogdGltZVRvTmV4
dFNlcnZpY2UgaXMgJS4yZiIsIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVlT3IoU2Vjb25kcyB7IC0x
IH0pLnZhbHVlKCkpOwotCi0gICAgLy8gSWYgd2UgZG9uJ3QgbmVlZCBzZXJ2aWNlLCB3ZSB3YW50
IHRvIG1ha2Ugc3VyZSB0aGUgdGltZXIgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcKLSAgICBpZiAoIXRp
bWVUb05leHRTZXJ2aWNlKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZl
KCkpCi0gICAgICAgICAgICBtX2FuaW1hdGlvblRpbWVyLnN0b3AoKTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIElmIHdlIHdhbnQgc2VydmljZSBpbW1lZGlhdGVseSwgd2Ugc3Rh
cnQgYSByZXBlYXRpbmcgdGltZXIgdG8gcmVkdWNlIHRoZSBvdmVyaGVhZCBvZiBzdGFydGluZwot
ICAgIGlmICghdGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSkgewotICAgICAgICBhdXRvKiBwYWdl
ID0gbV9mcmFtZS5wYWdlKCk7Ci0gICAgICAgIGJvb2wgc2hvdWxkVGhyb3R0bGUgPSBwYWdlICYm
IHBhZ2UtPmlzTG93UG93ZXJNb2RlRW5hYmxlZCgpOwotICAgICAgICBTZWNvbmRzIGRlbGF5ID0g
c2hvdWxkVGhyb3R0bGUgPyBhbmltYXRpb25UaW1lclRocm90dGxlZERlbGF5IDogYW5pbWF0aW9u
VGltZXJEZWxheTsKLQotICAgICAgICBpZiAoIW1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSB8
fCBtX2FuaW1hdGlvblRpbWVyLnJlcGVhdEludGVydmFsKCkgIT0gZGVsYXkpCi0gICAgICAgICAg
ICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0UmVwZWF0aW5nKGRlbGF5KTsKLSAgICAgICAgcmV0dXJu
OwotICAgIH0KLQotICAgIC8vIE90aGVyd2lzZSwgd2Ugd2FudCB0byBzdGFydCBhIG9uZS1zaG90
IHRpbWVyIHNvIHdlIGdldCBoZXJlIGFnYWluCi0gICAgbV9hbmltYXRpb25UaW1lci5zdGFydE9u
ZVNob3QodGltZVRvTmV4dFNlcnZpY2UudmFsdWUoKSk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQoKQot
ewotICAgIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwotfQotCi12b2lkIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlOjpmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKQotewotICAgIC8v
IFByb3RlY3QgdGhlIGZyYW1lIGZyb20gZ2V0dGluZyBkZXN0cm95ZWQgaW4gdGhlIGV2ZW50IGhh
bmRsZXIKLSAgICBSZWY8RnJhbWU+IHByb3RlY3RvcihtX2ZyYW1lKTsKLQotICAgIGJvb2wgdXBk
YXRlU3R5bGUgPSAhbV9ldmVudHNUb0Rpc3BhdGNoLmlzRW1wdHkoKSB8fCAhbV9lbGVtZW50Q2hh
bmdlc1RvRGlzcGF0Y2guaXNFbXB0eSgpOwotCi0gICAgLy8gZmlyZSBhbGwgdGhlIGV2ZW50cwot
ICAgIFZlY3RvcjxFdmVudFRvRGlzcGF0Y2g+IGV2ZW50c1RvRGlzcGF0Y2ggPSBXVEZNb3ZlKG1f
ZXZlbnRzVG9EaXNwYXRjaCk7Ci0gICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50c1RvRGlzcGF0
Y2gpIHsKLSAgICAgICAgRWxlbWVudCYgZWxlbWVudCA9IGV2ZW50LmVsZW1lbnQ7Ci0gICAgICAg
IGlmIChldmVudC5ldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLnRyYW5zaXRpb25lbmRFdmVudCkK
LSAgICAgICAgICAgIGVsZW1lbnQuZGlzcGF0Y2hFdmVudChUcmFuc2l0aW9uRXZlbnQ6OmNyZWF0
ZShldmVudC5ldmVudFR5cGUsIGV2ZW50Lm5hbWUsIGV2ZW50LmVsYXBzZWRUaW1lLCBQc2V1ZG9F
bGVtZW50Ojpwc2V1ZG9FbGVtZW50TmFtZUZvckV2ZW50cyhlbGVtZW50LnBzZXVkb0lkKCkpLCBX
VEY6Om51bGxvcHQsIG51bGxwdHIpKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgZWxlbWVu
dC5kaXNwYXRjaEV2ZW50KEFuaW1hdGlvbkV2ZW50OjpjcmVhdGUoZXZlbnQuZXZlbnRUeXBlLCBl
dmVudC5uYW1lLCBldmVudC5lbGFwc2VkVGltZSwgUHNldWRvRWxlbWVudDo6cHNldWRvRWxlbWVu
dE5hbWVGb3JFdmVudHMoZWxlbWVudC5wc2V1ZG9JZCgpKSwgV1RGOjpudWxsb3B0LCBudWxscHRy
KSk7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiBjaGFuZ2UgOiBtX2VsZW1lbnRDaGFuZ2VzVG9E
aXNwYXRjaCkKLSAgICAgICAgY2hhbmdlLT5pbnZhbGlkYXRlU3R5bGUoKTsKLQotICAgIG1fZWxl
bWVudENoYW5nZXNUb0Rpc3BhdGNoLmNsZWFyKCk7Ci0KLSAgICBpZiAodXBkYXRlU3R5bGUpCi0g
ICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotfQotCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydFVwZGF0ZVN0eWxlSWZOZWVk
ZWREaXNwYXRjaGVyKCkKLXsKLSAgICBpZiAoIW1fdXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNo
ZXIuaXNBY3RpdmUoKSkKLSAgICAgICAgbV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlci5z
dGFydE9uZVNob3QoMF9zKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YWRkRXZlbnRUb0Rpc3BhdGNoKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcm
IGV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0g
ICAgbV9ldmVudHNUb0Rpc3BhdGNoLmFwcGVuZCh7IGVsZW1lbnQsIGV2ZW50VHlwZSwgbmFtZSwg
ZWxhcHNlZFRpbWUgfSk7Ci0gICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigp
OwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRFbGVtZW50Q2hh
bmdlVG9EaXNwYXRjaChFbGVtZW50JiBlbGVtZW50KQotewotICAgIG1fZWxlbWVudENoYW5nZXNU
b0Rpc3BhdGNoLmFwcGVuZChlbGVtZW50KTsKLSAgICBBU1NFUlQobV9lbGVtZW50Q2hhbmdlc1Rv
RGlzcGF0Y2gubGFzdCgpLT5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERv
Y3VtZW50OjpOb3RJbkJhY2tGb3J3YXJkQ2FjaGUpOwotICAgIHN0YXJ0VXBkYXRlU3R5bGVJZk5l
ZWRlZERpc3BhdGNoZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6YW5pbWF0aW9uRnJhbWVDYWxsYmFja0ZpcmVkKCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRz
PiB0aW1lVG9OZXh0U2VydmljZSA9IHVwZGF0ZUFuaW1hdGlvbnMoQ2FsbFNldENoYW5nZWQpOwot
Ci0gICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlKQotICAgICAgICBtX2ZyYW1lLmRvY3VtZW50KCkt
PnZpZXcoKS0+c2NoZWR1bGVBbmltYXRpb24oKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uVGltZXJGaXJlZCgpCi17Ci0gICAgLy8gV2UgbmVlZCB0
byBrZWVwIHRoZSBmcmFtZSBhbGl2ZSwgc2luY2UgaXQgb3ducyB1cy4KLSAgICBSZWY8RnJhbWU+
IHByb3RlY3RvcihtX2ZyYW1lKTsKLQotICAgIC8vIFRoZSBhbmltYXRpb24gdGltZXIgbWlnaHQg
ZmlyZSBiZWZvcmUgdGhlIGxheW91dCB0aW1lciwgaW4KLSAgICAvLyB3aGljaCBjYXNlIHdlIG1p
Z2h0IGNyZWF0ZSBzb21lIGFuaW1hdGlvbnMgd2l0aCBpbmNvcnJlY3QKLSAgICAvLyB2YWx1ZXMg
aWYgd2UgZG9uJ3QgbGF5b3V0IGZpcnN0LgotICAgIGlmIChtX3JlcXVpcmVzTGF5b3V0KSB7Ci0g
ICAgICAgIGlmIChhdXRvKiBmcmFtZVZpZXcgPSBtX2ZyYW1lLmRvY3VtZW50KCktPnZpZXcoKSkg
ewotICAgICAgICAgICAgaWYgKGZyYW1lVmlldy0+bmVlZHNMYXlvdXQoKSkKLSAgICAgICAgICAg
ICAgICBmcmFtZVZpZXctPmZvcmNlTGF5b3V0KCk7Ci0gICAgICAgIH0KLSAgICAgICAgbV9yZXF1
aXJlc0xheW91dCA9IGZhbHNlOwotICAgIH0KLQotICAgIC8vIE1ha2Ugc3VyZSBhbmltYXRpb25V
cGRhdGVUaW1lIGlzIHVwZGF0ZWQsIHNvIHRoYXQgaXQgaXMgY3VycmVudCBldmVuIGlmIG5vCi0g
ICAgLy8gc3R5bGVDaGFuZ2UgaGFzIGhhcHBlbmVkIChlLmcuIGFjY2VsZXJhdGVkIGFuaW1hdGlv
bnMpCi0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsK
LQotICAgIC8vIFdoZW4gdGhlIHRpbWVyIGZpcmVzLCBhbGwgd2UgZG8gaXMgY2FsbCBzZXRDaGFu
Z2VkIG9uIGFsbCBET00gbm9kZXMgd2l0aCBydW5uaW5nIGFuaW1hdGlvbnMgYW5kIHRoZW4gZG8g
YW4gaW1tZWRpYXRlCi0gICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZC4gSXQgd2lsbCB0aGVuIGNh
bGwgYmFjayB0byB1cyB3aXRoIG5ldyBpbmZvcm1hdGlvbi4KLSAgICB1cGRhdGVBbmltYXRpb25U
aW1lcihDYWxsU2V0Q2hhbmdlZCk7Ci0KLSAgICAvLyBGaXJlIGV2ZW50cyByaWdodCBhd2F5LCB0
byBhdm9pZCBhIGZsYXNoIG9mIHVuYW5pbWF0ZWQgc3R5bGUgYWZ0ZXIgYW4gYW5pbWF0aW9uIGNv
bXBsZXRlcywgYW5kIGJlZm9yZQotICAgIC8vIHRoZSAnZW5kJyBldmVudCBmaXJlcy4KLSAgICBm
aXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZTo6aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiBy
ZW5kZXJlciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRl
cmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGF1dG8qIGFuaW1hdGlv
biA9IG1fY29tcG9zaXRlQW5pbWF0aW9ucy5nZXQocmVuZGVyZXIuZWxlbWVudCgpKTsKLSAgICBp
ZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBhbmltYXRp
b24tPmlzQW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGZhbHNlKTsKLX0KLQotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6aXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25P
blJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5
KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldChy
ZW5kZXJlci5lbGVtZW50KCkpOwotICAgIGlmICghYW5pbWF0aW9uKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbi0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0
eSwgdHJ1ZSk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnVwZGF0
ZVRocm90dGxpbmdTdGF0ZSgpCi17Ci0gICAgdXBkYXRlQW5pbWF0aW9uVGltZXIoKTsKLQotICAg
IGZvciAoYXV0byogY2hpbGRGcmFtZSA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hp
bGRGcmFtZTsgY2hpbGRGcmFtZSA9IGNoaWxkRnJhbWUtPnRyZWUoKS5uZXh0U2libGluZygpKQot
ICAgICAgICBjaGlsZEZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS51cGRhdGVUaHJvdHRsaW5nU3Rh
dGUoKTsKLX0KLQotU2Vjb25kcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0
aW9uSW50ZXJ2YWwoKSBjb25zdAotewotICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2
ZSgpKQotICAgICAgICByZXR1cm4gU2Vjb25kcyB7IElORklOSVRZIH07Ci0KLSAgICByZXR1cm4g
U2Vjb25kcyB7IG1fYW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSB9OwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5kQW5pbWF0aW9ucygpCi17Ci0g
ICAgaWYgKGlzU3VzcGVuZGVkKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIHN1c3BlbmRBbmlt
YXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1bWVudCgpKTsKLQotICAgIC8vIFRyYXZlcnNl
IHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNoaWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RD
aGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkLT5sZWdhY3lBbmltYXRpb24oKS5zdXNwZW5kQW5pbWF0aW9ucygpOwotCi0gICAg
bV9pc1N1c3BlbmRlZCA9IHRydWU7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU6OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIGlmICghaXNTdXNwZW5kZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotCi0gICAgcmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KG1fZnJhbWUu
ZG9jdW1lbnQoKSk7Ci0KLSAgICAvLyBUcmF2ZXJzZSBzdWJmcmFtZXMKLSAgICBmb3IgKEZyYW1l
KiBjaGlsZCA9IG1fZnJhbWUudHJlZSgpLmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hp
bGQtPnRyZWUoKS5uZXh0U2libGluZygpKQotICAgICAgICBjaGlsZC0+bGVnYWN5QW5pbWF0aW9u
KCkucmVzdW1lQW5pbWF0aW9ucygpOwotCi0gICAgbV9pc1N1c3BlbmRlZCA9IGZhbHNlOwotfQot
Ci1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25zQXJlU3VzcGVu
ZGVkRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBpc1N1c3Bl
bmRlZCgpIHx8IG1fc3VzcGVuZGVkRG9jdW1lbnRzLmNvbnRhaW5zKGRvY3VtZW50KTsKLX0KLQot
dm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZGV0YWNoRnJvbURvY3VtZW50KERv
Y3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBtX3N1c3BlbmRlZERvY3VtZW50cy5yZW1vdmUoZG9j
dW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdXNwZW5k
QW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAoYW5p
bWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgbV9zdXNwZW5kZWREb2N1bWVudHMuYWRkKGRvY3VtZW50KTsKLQotICAgIEFuaW1h
dGlvblByaXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBmb3IgKGF1
dG8mIGFuaW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBpZiAoJmFu
aW1hdGlvbi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBhbmltYXRp
b24udmFsdWUtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgfQotCi0gICAgdXBkYXRlQW5pbWF0
aW9uVGltZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVz
dW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBpZiAo
IWFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCkpCi0gICAgICAgIHJl
dHVybjsKLQotICAgIGRldGFjaEZyb21Eb2N1bWVudChkb2N1bWVudCk7Ci0KLSAgICBBbmltYXRp
b25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0gICAgZm9yIChhdXRv
JiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZhbmlt
YXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgYW5pbWF0aW9u
LnZhbHVlLT5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgfQotCi0gICAgdXBkYXRlQW5pbWF0aW9u
VGltZXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRB
bmltYXRpb25zSWZOb3RTdXNwZW5kZWQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmICgh
YW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KSB8fCBhbGxvd3NOZXdB
bmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSkKLSAgICAgICAgcmVzdW1lQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6c2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wgYWxsb3dlZCkKLXsK
LSAgICBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCA9IGFsbG93ZWQ7Ci19Ci0K
LWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlQW5pbWF0aW9uQXRUaW1l
KEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewot
ICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9z
aXRlQW5pbWF0aW9uKGVsZW1lbnQpOwotICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24ucGF1c2VB
bmltYXRpb25BdFRpbWUobmFtZSwgdCkpIHsKLSAgICAgICAgZWxlbWVudC5pbnZhbGlkYXRlU3R5
bGUoKTsKLSAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlcigpOwotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnBhdXNlVHJhbnNpdGlvbkF0VGltZShFbGVt
ZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBD
b21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiA9IGVuc3VyZUNvbXBvc2l0ZUFu
aW1hdGlvbihlbGVtZW50KTsKLSAgICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLnBhdXNlVHJhbnNp
dGlvbkF0VGltZShjc3NQcm9wZXJ0eUlEKHByb3BlcnR5KSwgdCkpIHsKLSAgICAgICAgZWxlbWVu
dC5pbnZhbGlkYXRlU3R5bGUoKTsKLSAgICAgICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVkRGlz
cGF0Y2hlcigpOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7Ci19Ci0KLU1vbm90b25pY1RpbWUgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJl
Z2luQW5pbWF0aW9uVXBkYXRlVGltZSgpCi17Ci0gICAgQVNTRVJUKG1fYmVnaW5BbmltYXRpb25V
cGRhdGVDb3VudCk7Ci0gICAgaWYgKCFtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSkKLSAgICAg
ICAgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKTsKLQot
ICAgIHJldHVybiBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZS52YWx1ZSgpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpiZWdpbkFuaW1hdGlvblVwZGF0ZSgpCi17
Ci0gICAgaWYgKCFtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQpCi0gICAgICAgIG1fYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lID0gV1RGOjpudWxsb3B0OwotICAgICsrbV9iZWdpbkFuaW1hdGlv
blVwZGF0ZUNvdW50OwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpl
bmRBbmltYXRpb25VcGRhdGUoKQotewotICAgIEFTU0VSVChtX2JlZ2luQW5pbWF0aW9uVXBkYXRl
Q291bnQgPiAwKTsKLSAgICBpZiAobV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50ID09IDEpIHsK
LSAgICAgICAgc3R5bGVBdmFpbGFibGUoKTsKLSAgICAgICAgaWYgKCFtX3dhaXRpbmdGb3JBc3lu
Y1N0YXJ0Tm90aWZpY2F0aW9uKQotICAgICAgICAgICAgc3RhcnRUaW1lUmVzcG9uc2UoYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkpOwotICAgIH0KLSAgICAtLW1fYmVnaW5BbmltYXRpb25VcGRh
dGVDb3VudDsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVjZWl2
ZWRTdGFydFRpbWVSZXNwb25zZShNb25vdG9uaWNUaW1lIHRpbWUpCi17Ci0gICAgTE9HKEFuaW1h
dGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSAlcCByZWNlaXZlZFN0YXJ0VGlt
ZVJlc3BvbnNlICVmIiwgdGhpcywgdGltZS5zZWNvbmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7
Ci0KLSAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci0gICAg
c3RhcnRUaW1lUmVzcG9uc2UodGltZSk7Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGVkU3R5bGVGb3JFbGVtZW50
KEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVB
bmltYXRpb25zLmdldCgmZWxlbWVudCk7Ci0gICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgQW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrIGFuaW1hdGlv
blVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGF1dG8gYW5pbWF0aW5nU3R5bGUgPSBhbmltYXRp
b24tPmdldEFuaW1hdGVkU3R5bGUoKTsKLSAgICBpZiAoIWFuaW1hdGluZ1N0eWxlKQotICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1cm4gYW5pbWF0aW5nU3R5bGU7Ci19Ci0K
LWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNvbXB1dGVFeHRlbnRPZkFuaW1h
dGlvbihFbGVtZW50JiBlbGVtZW50LCBMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAg
YXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmZWxlbWVudCk7Ci0g
ICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaWYgKCFhbmlt
YXRpb24tPmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0sIGZhbHNlKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gYW5pbWF0aW9uLT5jb21wdXRlRXh0
ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKTsKLX0KLQotdW5zaWduZWQgQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCog
ZG9jdW1lbnQpIGNvbnN0Ci17Ci0gICAgdW5zaWduZWQgY291bnQgPSAwOwotICAgIAotICAgIGZv
ciAoYXV0byYgYW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlm
ICgmYW5pbWF0aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGNv
dW50ICs9IGFuaW1hdGlvbi52YWx1ZS0+bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCk7Ci0gICAg
fQotCi0gICAgcmV0dXJuIGNvdW50OwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjphZGRUb0FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYgYW5p
bWF0aW9uKQotewotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5y
ZW1vdmUoJmFuaW1hdGlvbik7Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLmFkZCgm
YW5pbWF0aW9uKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cmVt
b3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoQW5pbWF0aW9uQmFzZSYgYW5pbWF0aW9u
VG9SZW1vdmUpCi17Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlLnJlbW92ZSgmYW5p
bWF0aW9uVG9SZW1vdmUpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
OjpzdHlsZUF2YWlsYWJsZSgpCi17Ci0gICAgLy8gR28gdGhyb3VnaCBsaXN0IG9mIHdhaXRlcnMg
YW5kIHNlbmQgdGhlbSBvbiB0aGVpciB3YXkKLSAgICBmb3IgKGNvbnN0IGF1dG8mIHdhaXRpbmdB
bmltYXRpb24gOiBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUpCi0gICAgICAgIHdhaXRpbmdB
bmltYXRpb24tPnN0eWxlQXZhaWxhYmxlKCk7Ci0KLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGUuY2xlYXIoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6
YWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2Um
IGFuaW1hdGlvbiwgYm9vbCB3aWxsR2V0UmVzcG9uc2UpCi17Ci0gICAgLy8gSWYgd2lsbEdldFJl
c3BvbnNlIGlzIHRydWUsIGl0IG1lYW5zIHRoaXMgYW5pbWF0aW9uIGlzIGFjdHVhbGx5IHdhaXRp
bmcgZm9yIGEgcmVzcG9uc2UKLSAgICAvLyAod2hpY2ggd2lsbCBjb21lIGluIGFzIGEgY2FsbCB0
byBub3RpZnlBbmltYXRpb25TdGFydGVkKCkpLgotICAgIC8vIEluIHRoYXQgY2FzZSB3ZSBkb24n
dCBuZWVkIHRvIGFkZCBpdCB0byB0aGlzIGxpc3QuIFdlIGp1c3Qgc2V0IGEgd2FpdGluZ0ZvckFS
ZXNwb25zZSBmbGFnIAotICAgIC8vIHdoaWNoIHNheXMgd2UgYXJlIHdhaXRpbmcgZm9yIHRoZSBy
ZXNwb25zZS4gSWYgd2lsbEdldFJlc3BvbnNlIGlzIGZhbHNlLCB0aGlzIGFuaW1hdGlvbiAKLSAg
ICAvLyBpcyBub3Qgd2FpdGluZyBmb3IgYSByZXNwb25zZSBmb3IgaXRzZWxmLCBidXQgcmF0aGVy
IGZvciBhIG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsIGZvciAKLSAgICAvLyBhbm90aGVyIGFuaW1h
dGlvbiB0byB3aGljaCBpdCB3aWxsIHN5bmMuCi0gICAgLy8KLSAgICAvLyBXaGVuIGVuZEFuaW1h
dGlvblVwZGF0ZSgpIGlzIGNhbGxlZCB3ZSBjaGVjayB0byBzZWUgaWYgdGhlIHdhaXRpbmdGb3JB
UmVzcG9uc2UgZmxhZyBpcwotICAgIC8vIHRydWUuIElmIHNvLCB3ZSBqdXN0IHJldHVybiBhbmQg
d2lsbCBkbyBvdXIgd29yayB3aGVuIHRoZSBmaXJzdCBub3RpZnlYWFhTdGFydGVkKCkgY2FsbAot
ICAgIC8vIGNvbWVzIGluLiBJZiBpdCBpcyBmYWxzZSwgd2Ugd2lsbCBub3QgYmUgZ2V0dGluZyBh
IG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsLCBzbyB3ZSB3aWxsCi0gICAgLy8gZG8gb3VyIHdvcmsg
cmlnaHQgYXdheS4gSW4gYm90aCBjYXNlcyB3ZSBjYWxsIHRoZSBvbkFuaW1hdGlvblN0YXJ0UmVz
cG9uc2UoKSBtZXRob2QKLSAgICAvLyBvbiBlYWNoIGFuaW1hdGlvbi4gSW4gdGhlIGZpcnN0IGNh
c2Ugd2Ugc2VuZCBpbiB0aGUgdGltZSB3ZSBnb3QgZnJvbSBub3RpZnlYWFhTdGFydGVkKCkuCi0g
ICAgLy8gSW4gdGhlIHNlY29uZCBjYXNlLCB3ZSBqdXN0IHBhc3MgaW4gdGhlIGJlZ2luQW5pbWF0
aW9uVXBkYXRlVGltZSgpLgotICAgIC8vCi0gICAgLy8gVGhpcyB3aWxsIHN5bmNocm9uaXplIGFs
bCBzb2Z0d2FyZSBhbmQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBzdGFydGVkIGluIHRoZSBzYW1l
IAotICAgIC8vIHVwZGF0ZVN0eWxlSWZOZWVkZWQgY3ljbGUuCi0gICAgLy8KLQotICAgIGlmICh3
aWxsR2V0UmVzcG9uc2UpCi0gICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRp
b24gPSB0cnVlOwotCi0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNl
LmFkZCgmYW5pbWF0aW9uKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0
aW9uQmFzZSYgYW5pbWF0aW9uVG9SZW1vdmUpCi17Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlLnJlbW92ZSgmYW5pbWF0aW9uVG9SZW1vdmUpOwotICAgIGlmICht
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuaXNFbXB0eSgpKQotICAgICAg
ICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFsc2U7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VGltZVJlc3BvbnNlKE1vbm90b25p
Y1RpbWUgdGltZSkKLXsKLSAgICAvLyBHbyB0aHJvdWdoIGxpc3Qgb2Ygd2FpdGVycyBhbmQgc2Vu
ZCB0aGVtIG9uIHRoZWlyIHdheQotCi0gICAgZm9yIChjb25zdCBhdXRvJiBhbmltYXRpb24gOiBt
X2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UpCi0gICAgICAgIGFuaW1hdGlv
bi0+b25BbmltYXRpb25TdGFydFJlc3BvbnNlKHRpbWUpOwotICAgIAotICAgIG1fYW5pbWF0aW9u
c1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5jbGVhcigpOwotICAgIG1fd2FpdGluZ0ZvckFz
eW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6YW5pbWF0aW9uV2lsbEJlUmVtb3ZlZChBbmltYXRpb25CYXNlJiBhbmlt
YXRpb24pCi17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZSAlcCBhbmltYXRpb25XaWxsQmVSZW1vdmVkOiAlcCIsIHRoaXMsICZhbmltYXRpb24pOwot
Ci0gICAgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoYW5pbWF0aW9uKTsKLSAg
ICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShhbmltYXRp
b24pOwotCi0gICAgYm9vbCBhbnlBbmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3RhcnQgPSBmYWxz
ZTsKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFy
dFRpbWVSZXNwb25zZSkgewotICAgICAgICBpZiAoYW5pbWF0aW9uLT53YWl0aW5nRm9yU3RhcnRU
aW1lKCkgJiYgYW5pbWF0aW9uLT5pc0FjY2VsZXJhdGVkKCkpIHsKLSAgICAgICAgICAgIGFueUFu
aW1hdGlvbnNXYWl0aW5nRm9yQXN5bmNTdGFydCA9IHRydWU7Ci0gICAgICAgICAgICBicmVhazsK
LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghYW55QW5pbWF0aW9uc1dhaXRpbmdGb3JBc3lu
Y1N0YXJ0KQotICAgICAgICBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uID0gZmFs
c2U7Ci19Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIo
RnJhbWUmIGZyYW1lKQotICAgIDogbV9kYXRhKG1ha2VVbmlxdWU8Q1NTQW5pbWF0aW9uQ29udHJv
bGxlclByaXZhdGU+KGZyYW1lKSkKLXsKLX0KLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6fkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXIoKSA9IGRlZmF1bHQ7Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlcjo6Y2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50KQotewotICAgIGlmICgh
bV9kYXRhLT5jbGVhcihlbGVtZW50KSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGVsZW1l
bnQuZG9jdW1lbnQoKS5yZW5kZXJUcmVlQmVpbmdEZXN0cm95ZWQoKSkKLSAgICAgICAgcmV0dXJu
OwotICAgIEFTU0VSVChlbGVtZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkg
PT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgZWxlbWVudC5pbnZhbGlk
YXRlU3R5bGUoKTsKLX0KLQotQW5pbWF0aW9uVXBkYXRlIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6
OnVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUmIG5l
d1N0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpCi17Ci0gICAgYm9vbCBoYXNPckhh
ZEFuaW1hdGlvbnMgPSAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc0FuaW1hdGlvbnNPclRyYW5z
aXRpb25zKCkpIHx8IG5ld1N0eWxlLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCk7Ci0gICAg
aWYgKCFoYXNPckhhZEFuaW1hdGlvbnMpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAo
ZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpICE9IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICAvLyBEb24n
dCBydW4gdHJhbnNpdGlvbnMgd2hlbiBwcmludGluZy4KLSAgICBpZiAoZWxlbWVudC5kb2N1bWVu
dCgpLnJlbmRlclZpZXcoKS0+cHJpbnRpbmcoKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAg
IC8vIEZldGNoIG91ciBjdXJyZW50IHNldCBvZiBpbXBsaWNpdCBhbmltYXRpb25zIGZyb20gYSBo
YXNodGFibGUuIFdlIHRoZW4gY29tcGFyZSB0aGVtCi0gICAgLy8gYWdhaW5zdCB0aGUgYW5pbWF0
aW9ucyBpbiB0aGUgc3R5bGUgYW5kIG1ha2Ugc3VyZSB3ZSdyZSBpbiBzeW5jLiBJZiBkZXN0aW5h
dGlvbiB2YWx1ZXMKLSAgICAvLyBoYXZlIGNoYW5nZWQsIHdlIHJlc2V0IHRoZSBhbmltYXRpb24u
IFdlIHRoZW4gZG8gYSBibGVuZCB0byBnZXQgbmV3IHZhbHVlcyBhbmQgd2UgcmV0dXJuCi0gICAg
Ly8gYSBuZXcgc3R5bGUuCi0KLSAgICBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1h
dGlvbiA9IG1fZGF0YS0+ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKGVsZW1lbnQpOwotICAgIGF1
dG8gdXBkYXRlID0gY29tcG9zaXRlQW5pbWF0aW9uLmFuaW1hdGUoZWxlbWVudCwgb2xkU3R5bGUs
IG5ld1N0eWxlKTsKLQotICAgIGF1dG8qIHJlbmRlcmVyID0gZWxlbWVudC5yZW5kZXJlcigpOwot
ICAgIGlmICgocmVuZGVyZXIgJiYgcmVuZGVyZXItPnBhcmVudCgpKSB8fCBuZXdTdHlsZS5hbmlt
YXRpb25zKCkgfHwgKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5hbmltYXRpb25zKCkpKSB7Ci0gICAg
ICAgIGF1dG8mIGZyYW1lVmlldyA9ICplbGVtZW50LmRvY3VtZW50KCkudmlldygpOwotICAgICAg
ICBpZiAoY29tcG9zaXRlQW5pbWF0aW9uLmhhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQo
KSkKLSAgICAgICAgICAgIG1fZGF0YS0+c2V0UmVxdWlyZXNMYXlvdXQoKTsKLSAgICAgICAgbV9k
YXRhLT51cGRhdGVBbmltYXRpb25UaW1lckZvckVsZW1lbnQoZWxlbWVudCk7Ci0gICAgICAgIGZy
YW1lVmlldy5zY2hlZHVsZUFuaW1hdGlvbigpOwotICAgIH0KLQotICAgIHJldHVybiB1cGRhdGU7
Ci19Ci0KLXN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyKQotewot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVzdWx0OwotCi0gICAgaWYgKHJlbmRl
cmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSAmJiByZW5kZXJlci5lbGVt
ZW50KCkpCi0gICAgICAgIHJlc3VsdCA9IG1fZGF0YS0+YW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQo
KnJlbmRlcmVyLmVsZW1lbnQoKSk7Ci0KLSAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgcmVzdWx0
ID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyLnN0eWxlKCkpOwotCi0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpjb21wdXRlRXh0ZW50
T2ZBbmltYXRpb24oUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIExheW91dFJlY3QmIGJvdW5kcykg
Y29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLmVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgaWYgKCFyZW5kZXJlci5zdHlsZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25z
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIG1fZGF0YS0+Y29tcHV0ZUV4
dGVudE9mQW5pbWF0aW9uKCpyZW5kZXJlci5lbGVtZW50KCksIGJvdW5kcyk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVt
ZW50JiByZW5kZXJlciwgTW9ub3RvbmljVGltZSBzdGFydFRpbWUpCi17Ci0gICAgTE9HKEFuaW1h
dGlvbnMsICJDU1NBbmltYXRpb25Db250cm9sbGVyICVwIG5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQg
b24gcmVuZGVyZXIgJXAsIHRpbWU9JWYiLCB0aGlzLCAmcmVuZGVyZXIsIHN0YXJ0VGltZS5zZWNv
bmRzU2luY2VFcG9jaCgpLnNlY29uZHMoKSk7Ci0gICAgVU5VU0VEX1BBUkFNKHJlbmRlcmVyKTsK
LQotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMpOwot
ICAgIG1fZGF0YS0+cmVjZWl2ZWRTdGFydFRpbWVSZXNwb25zZShzdGFydFRpbWUpOwotfQotCi1i
b29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IEF0b21TdHJpbmcmIG5hbWUsIGRvdWJsZSB0KQotewotICAgIEFuaW1h
dGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMpOwotICAgIHJldHVybiBt
X2RhdGEtPnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQsIG5hbWUsIHQpOwotfQotCi11bnNp
Z25lZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9j
dW1lbnQqIGRvY3VtZW50KSBjb25zdAotewotICAgIHJldHVybiBtX2RhdGEtPm51bWJlck9mQWN0
aXZlQW5pbWF0aW9ucyhkb2N1bWVudCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxl
cjo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYg
cHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlv
blVwZGF0ZUJsb2NrKHRoaXMpOwotICAgIHJldHVybiBtX2RhdGEtPnBhdXNlVHJhbnNpdGlvbkF0
VGltZShlbGVtZW50LCBwcm9wZXJ0eSwgdCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJl
ciwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLnN0
eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgIHJldHVybiBtX2RhdGEtPmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVy
ZXIsIHByb3BlcnR5KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjppc1J1bm5p
bmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5zdHls
ZSgpLmhhc0FuaW1hdGlvbnNPclRyYW5zaXRpb25zKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
LSAgICByZXR1cm4gbV9kYXRhLT5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVy
ZXIocmVuZGVyZXIsIHByb3BlcnR5KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVy
Ojppc1N1c3BlbmRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+aXNTdXNwZW5kZWQo
KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9ucygp
Ci17Ci0gICAgTE9HKEFuaW1hdGlvbnMsICJjb250cm9sbGVyIGlzIHN1c3BlbmRpbmcgYW5pbWF0
aW9ucyIpOwotICAgIG1fZGF0YS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLX0KLQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zKCkKLXsKLSAgICBMT0coQW5pbWF0
aW9ucywgImNvbnRyb2xsZXIgaXMgcmVzdW1pbmcgYW5pbWF0aW9ucyIpOwotICAgIG1fZGF0YS0+
cmVzdW1lQW5pbWF0aW9ucygpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmFs
bG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1f
ZGF0YS0+YWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlcjo6c2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVk
KGJvb2wgYWxsb3dlZCkKLXsKLSAgICBtX2RhdGEtPnNldEFsbG93c05ld0FuaW1hdGlvbnNXaGls
ZVN1c3BlbmRlZChhbGxvd2VkKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpz
ZXJ2aWNlQW5pbWF0aW9ucygpCi17Ci0gICAgbV9kYXRhLT5hbmltYXRpb25GcmFtZUNhbGxiYWNr
RmlyZWQoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyOjp1cGRhdGVUaHJvdHRs
aW5nU3RhdGUoKQotewotICAgIG1fZGF0YS0+dXBkYXRlVGhyb3R0bGluZ1N0YXRlKCk7Ci19Ci0K
LVNlY29uZHMgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25z
dAotewotICAgIHJldHVybiBtX2RhdGEtPmFuaW1hdGlvbkludGVydmFsKCk7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50
KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5hbmltYXRpb25zQXJl
U3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNv
bnRyb2xsZXI6OmRldGFjaEZyb21Eb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAg
cmV0dXJuIG1fZGF0YS0+ZGV0YWNoRnJvbURvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBD
U1NBbmltYXRpb25Db250cm9sbGVyOjpzdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KERvY3Vt
ZW50KiBkb2N1bWVudCkKLXsKLSAgICBMT0coQW5pbWF0aW9ucywgInN1c3BlbmRpbmcgYW5pbWF0
aW9ucyBmb3IgZG9jdW1lbnQgJXAiLCBkb2N1bWVudCk7Ci0gICAgbV9kYXRhLT5zdXNwZW5kQW5p
bWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjpyZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQot
ewotICAgIExPRyhBbmltYXRpb25zLCAicmVzdW1pbmcgYW5pbWF0aW9ucyBmb3IgZG9jdW1lbnQg
JXAiLCBkb2N1bWVudCk7Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRl
QmxvY2sodGhpcyk7Ci0gICAgbV9kYXRhLT5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9j
dW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnN0YXJ0QW5pbWF0aW9u
c0lmTm90U3VzcGVuZGVkKERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICBMT0coQW5pbWF0aW9u
cywgImFuaW1hdGlvbnMgbWF5IHN0YXJ0IGZvciBkb2N1bWVudCAlcCIsIGRvY3VtZW50KTsKLQot
ICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKHRoaXMpOwotICAg
IG1fZGF0YS0+c3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5kZWQoZG9jdW1lbnQpOwotfQotCi12
b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmJlZ2luQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAg
ICBtX2RhdGEtPmJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlcjo6ZW5kQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAgICBtX2RhdGEtPmVuZEFuaW1h
dGlvblVwZGF0ZSgpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnN1cHBvcnRz
QWNjZWxlcmF0ZWRBbmltYXRpb25PZlByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi17
Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNB
Y2NlbGVyYXRlZChwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6
aGFzQW5pbWF0aW9ucygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+aGFzQW5pbWF0aW9u
cygpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKZGVsZXRlZCBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IGVjZDYwNTg0NTM5OGFhOGU3NWE5YTUyNjVlMDBlZjY0ZDYyMjI4
MTAuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTIzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNl
LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkVsZW1lbnQuaCIK
LSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU7
Ci1jbGFzcyBEb2N1bWVudDsKLWNsYXNzIEZyYW1lOwotY2xhc3MgTGF5b3V0UmVjdDsKLWNsYXNz
IFJlbmRlckVsZW1lbnQ7Ci0KLXN0cnVjdCBBbmltYXRpb25VcGRhdGUgewotICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGU7Ci0gICAgT3B0aW9uU2V0PEFuaW1hdGlvbkltcGFj
dD4gaW1wYWN0OwotCi19OwotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyIHsKLSAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDU1NBbmltYXRp
b25Db250cm9sbGVyKEZyYW1lJik7Ci0gICAgfkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIoKTsKLQot
ICAgIHZvaWQgY2FuY2VsQW5pbWF0aW9ucyhFbGVtZW50Jik7Ci0gICAgQW5pbWF0aW9uVXBkYXRl
IHVwZGF0ZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlJiBuZXdTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUqIG9sZFN0eWxlKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcihSZW5kZXJFbGVtZW50Jik7Ci0KLSAgICAv
LyBJZiBwb3NzaWJsZSwgY29tcHV0ZSB0aGUgdmlzdWFsIGV4dGVudCBvZiBhbnkgdHJhbnNmb3Jt
IGFuaW1hdGlvbiBvbiB0aGUgZ2l2ZW4gcmVuZGVyZXIKLSAgICAvLyB1c2luZyB0aGUgZ2l2ZW4g
cmVjdCwgcmV0dXJuaW5nIHRoZSByZXN1bHQgaW4gdGhlIHJlY3QuIFJldHVybiBmYWxzZSBpZiB0
aGVyZSBpcyBzb21lCi0gICAgLy8gdHJhbnNmb3JtIGFuaW1hdGlvbiBidXQgd2Ugd2VyZSB1bmFi
bGUgdG8gY2hlYXBseSBjb21wdXRlIGl0cyBhZmZlY3Qgb24gdGhlIGV4dGVudC4KLSAgICBib29s
IGNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihSZW5kZXJFbGVtZW50JiwgTGF5b3V0UmVjdCYpIGNv
bnN0OwotCi0gICAgLy8gVGhpcyBpcyBjYWxsZWQgd2hlbiBhbiBhY2NlbGVyYXRlZCBhbmltYXRp
b24gb3IgdHJhbnNpdGlvbiBoYXMgYWN0dWFsbHkgc3RhcnRlZCB0byBhbmltYXRlLgotICAgIHZv
aWQgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZChSZW5kZXJFbGVtZW50JiwgTW9ub3RvbmljVGltZSBz
dGFydFRpbWUpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGlt
ZShFbGVtZW50JiwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpOyAvLyBUbyBiZSB1
c2VkIG9ubHkgZm9yIHRlc3RpbmcKLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlVHJhbnNp
dGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eSwgZG91YmxlIHQpOyAv
LyBUbyBiZSB1c2VkIG9ubHkgZm9yIHRlc3RpbmcKLSAgICBXRUJDT1JFX0VYUE9SVCB1bnNpZ25l
ZCBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsgLy8gVG8gYmUgdXNl
ZCBvbmx5IGZvciB0ZXN0aW5nCi0gICAgCi0gICAgLy8gIlJ1bm5pbmciIGhlcmUgbWVhbnMgdGhl
IGFuaW1hdGlvbiBpcyBydW5uaW5nIG9yIHBhdXNlZC4KLSAgICBib29sIGlzUnVubmluZ0FuaW1h
dGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1Byb3BlcnR5SUQpIGNvbnN0OwotICAg
IGJvb2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1l
bnQmLCBDU1NQcm9wZXJ0eUlEKSBjb25zdDsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgaXNT
dXNwZW5kZWQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN1c3BlbmRBbmltYXRp
b25zKCk7Ci0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0gICAg
dm9pZCBzZXJ2aWNlQW5pbWF0aW9ucygpOwotCi0gICAgdm9pZCB1cGRhdGVUaHJvdHRsaW5nU3Rh
dGUoKTsKLSAgICBXRUJDT1JFX0VYUE9SVCBTZWNvbmRzIGFuaW1hdGlvbkludGVydmFsKCkgY29u
c3Q7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1l
bnQoRG9jdW1lbnQqKTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZUFuaW1hdGlvbnNG
b3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYW5pbWF0aW9u
c0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCBkZXRhY2hGcm9t
RG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc0lmTm90U3VzcGVu
ZGVkKERvY3VtZW50Kik7Ci0KLSAgICB2b2lkIGJlZ2luQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAg
dm9pZCBlbmRBbmltYXRpb25VcGRhdGUoKTsKLQotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgYWxs
b3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkgY29uc3Q7Ci0gICAgV0VCQ09SRV9FWFBP
UlQgdm9pZCBzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCk7Ci0gICAg
Ci0gICAgc3RhdGljIGJvb2wgc3VwcG9ydHNBY2NlbGVyYXRlZEFuaW1hdGlvbk9mUHJvcGVydHko
Q1NTUHJvcGVydHlJRCk7Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdDsKLQotcHJp
dmF0ZToKLSAgICBjb25zdCBzdGQ6OnVuaXF1ZV9wdHI8Q1NTQW5pbWF0aW9uQ29udHJvbGxlclBy
aXZhdGU+IG1fZGF0YTsKLX07Ci0KLWNsYXNzIEFuaW1hdGlvblVwZGF0ZUJsb2NrIHsKLXB1Ymxp
YzoKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayhDU1NBbmltYXRpb25Db250cm9sbGVyKiBhbmlt
YXRpb25Db250cm9sbGVyKQotICAgICAgICA6IG1fYW5pbWF0aW9uQ29udHJvbGxlcihhbmltYXRp
b25Db250cm9sbGVyKQotICAgIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uQ29udHJvbGxlcikK
LSAgICAgICAgICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci0+YmVnaW5BbmltYXRpb25VcGRhdGUo
KTsKLSAgICB9Ci0gICAgCi0gICAgfkFuaW1hdGlvblVwZGF0ZUJsb2NrKCkKLSAgICB7Ci0gICAg
ICAgIGlmIChtX2FuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgICAgICAgICBtX2FuaW1hdGlvbkNv
bnRyb2xsZXItPmVuZEFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0KLSAgICAKLSAgICBDU1NBbmlt
YXRpb25Db250cm9sbGVyKiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7Ci19OwotCi19IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaApkZWxldGVkIGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggZDMyMDM3N2RlY2M5YzUzNGRlZWI3YjRlOTVjZTBlZDJkODVhZWRiMS4uMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCisrKyAvZGV2
L251bGwKQEAgLTEsMTUxICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDkgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
Ci0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVp
dGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0g
KiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUg
cHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNp
ZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkK
LSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9G
IFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAq
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNl
LmgiCi0jaW5jbHVkZSAiVGltZXIuaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1
ZGUgPHd0Zi9IYXNoU2V0Lmg+Ci0jaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLWNsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbjsKLWNsYXNzIERvY3VtZW50Owot
Y2xhc3MgRnJhbWU7Ci0KLWVudW0gU2V0Q2hhbmdlZCB7IERvTm90Q2FsbFNldENoYW5nZWQsIENh
bGxTZXRDaGFuZ2VkIH07Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlIHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBleHBsaWNpdCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZShGcmFtZSYpOwotICAgIH5DU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZSgpOwotCi0gICAgLy8gUmV0dXJucyB0aGUgdGltZSB1bnRpbCB0aGUgbmV4
dCBhbmltYXRpb24gbmVlZHMgdG8gYmUgc2VydmljZWQsIG9yIC0xIGlmIHRoZXJlIGFyZSBub25l
LgotICAgIE9wdGlvbmFsPFNlY29uZHM+IHVwZGF0ZUFuaW1hdGlvbnMoU2V0Q2hhbmdlZCBjYWxs
U2V0Q2hhbmdlZCA9IERvTm90Q2FsbFNldENoYW5nZWQpOwotICAgIHZvaWQgdXBkYXRlQW5pbWF0
aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hhbmdlZCA9IERvTm90Q2FsbFNldENoYW5nZWQp
OwotCi0gICAgQ29tcG9zaXRlQW5pbWF0aW9uJiBlbnN1cmVDb21wb3NpdGVBbmltYXRpb24oRWxl
bWVudCYpOwotICAgIGJvb2wgY2xlYXIoRWxlbWVudCYpOwotCi0gICAgdm9pZCB1cGRhdGVTdHls
ZUlmTmVlZGVkRGlzcGF0Y2hlckZpcmVkKCk7Ci0gICAgdm9pZCBzdGFydFVwZGF0ZVN0eWxlSWZO
ZWVkZWREaXNwYXRjaGVyKCk7Ci0gICAgdm9pZCBhZGRFdmVudFRvRGlzcGF0Y2goRWxlbWVudCYs
IGNvbnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUg
ZWxhcHNlZFRpbWUpOwotICAgIHZvaWQgYWRkRWxlbWVudENoYW5nZVRvRGlzcGF0Y2goRWxlbWVu
dCYpOwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25zKCkgY29uc3QgeyByZXR1cm4gIW1fY29tcG9z
aXRlQW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLQotICAgIGJvb2wgaXNTdXNwZW5kZWQoKSBjb25z
dCB7IHJldHVybiBtX2lzU3VzcGVuZGVkOyB9Ci0gICAgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucygp
OwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHZvaWQgYW5pbWF0aW9uRnJhbWVD
YWxsYmFja0ZpcmVkKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVRocm90dGxpbmdTdGF0ZSgpOwotICAg
IFNlY29uZHMgYW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdDsKLQotICAgIHZvaWQgc3VzcGVuZEFu
aW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgcmVzdW1lQW5pbWF0aW9u
c0ZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgYm9vbCBhbmltYXRpb25zQXJlU3VzcGVuZGVk
Rm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIHN0YXJ0QW5pbWF0aW9uc0lmTm90U3Vz
cGVuZGVkKERvY3VtZW50Kik7Ci0gICAgdm9pZCBkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1lbnQq
KTsKLQotICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50
JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgYm9vbCBpc1J1bm5pbmdBY2NlbGVyYXRlZEFu
aW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYsIENTU1Byb3BlcnR5SUQpIGNvbnN0Owot
Ci0gICAgYm9vbCBwYXVzZUFuaW1hdGlvbkF0VGltZShFbGVtZW50JiwgY29uc3QgQXRvbVN0cmlu
ZyYgbmFtZSwgZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1l
bnQmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7Ci0gICAgdW5zaWduZWQgbnVt
YmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KikgY29uc3Q7Ci0KLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGVGb3JFbGVtZW50KEVsZW1lbnQmKTsKLQot
ICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKEVsZW1lbnQmLCBMYXlvdXRSZWN0Jikg
Y29uc3Q7Ci0KLSAgICBNb25vdG9uaWNUaW1lIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgpOwot
ICAgIAotICAgIHZvaWQgYmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLSAgICB2b2lkIGVuZEFuaW1h
dGlvblVwZGF0ZSgpOwotICAgIHZvaWQgcmVjZWl2ZWRTdGFydFRpbWVSZXNwb25zZShNb25vdG9u
aWNUaW1lKTsKLSAgICAKLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShB
bmltYXRpb25CYXNlJik7Ci0gICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JT
dHlsZShBbmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIGFkZFRvQW5pbWF0aW9uc1dhaXRpbmdG
b3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25CYXNlJiwgYm9vbCB3aWxsR2V0UmVzcG9uc2Up
OwotICAgIHZvaWQgcmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9u
c2UoQW5pbWF0aW9uQmFzZSYpOwotCi0gICAgdm9pZCBhbmltYXRpb25XaWxsQmVSZW1vdmVkKEFu
aW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgdXBkYXRlQW5pbWF0aW9uVGltZXJGb3JFbGVtZW50
KEVsZW1lbnQmKTsKLQotICAgIGJvb2wgYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVk
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQ7IH0K
LSAgICB2b2lkIHNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sKTsKLQot
ICAgIHZvaWQgc2V0UmVxdWlyZXNMYXlvdXQoKSB7IG1fcmVxdWlyZXNMYXlvdXQgPSB0cnVlOyB9
Ci0KLXByaXZhdGU6Ci0gICAgdm9pZCBhbmltYXRpb25UaW1lckZpcmVkKCk7Ci0KLSAgICB2b2lk
IHN0eWxlQXZhaWxhYmxlKCk7Ci0gICAgdm9pZCBmaXJlRXZlbnRzQW5kVXBkYXRlU3R5bGUoKTsK
LSAgICB2b2lkIHN0YXJ0VGltZVJlc3BvbnNlKE1vbm90b25pY1RpbWUpOwotCi0gICAgSGFzaE1h
cDxSZWZQdHI8RWxlbWVudD4sIFJlZlB0cjxDb21wb3NpdGVBbmltYXRpb24+PiBtX2NvbXBvc2l0
ZUFuaW1hdGlvbnM7Ci0gICAgVGltZXIgbV9hbmltYXRpb25UaW1lcjsKLSAgICBUaW1lciBtX3Vw
ZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyOwotICAgIEZyYW1lJiBtX2ZyYW1lOwotCi0gICAg
c3RydWN0IEV2ZW50VG9EaXNwYXRjaCB7Ci0gICAgICAgIFJlZjxFbGVtZW50PiBlbGVtZW50Owot
ICAgICAgICBBdG9tU3RyaW5nIGV2ZW50VHlwZTsKLSAgICAgICAgU3RyaW5nIG5hbWU7Ci0gICAg
ICAgIGRvdWJsZSBlbGFwc2VkVGltZTsKLSAgICB9OwotICAgIFZlY3RvcjxFdmVudFRvRGlzcGF0
Y2g+IG1fZXZlbnRzVG9EaXNwYXRjaDsKLSAgICBWZWN0b3I8UmVmPEVsZW1lbnQ+PiBtX2VsZW1l
bnRDaGFuZ2VzVG9EaXNwYXRjaDsKLSAgICBIYXNoU2V0PERvY3VtZW50Kj4gbV9zdXNwZW5kZWRE
b2N1bWVudHM7Ci0KLSAgICBPcHRpb25hbDxNb25vdG9uaWNUaW1lPiBtX2JlZ2luQW5pbWF0aW9u
VXBkYXRlVGltZTsKLQotICAgIHVzaW5nIEFuaW1hdGlvbnNTZXQgPSBIYXNoU2V0PFJlZlB0cjxB
bmltYXRpb25CYXNlPj47Ci0gICAgQW5pbWF0aW9uc1NldCBtX2FuaW1hdGlvbnNXYWl0aW5nRm9y
U3R5bGU7Ci0gICAgQW5pbWF0aW9uc1NldCBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1l
UmVzcG9uc2U7Ci0KLSAgICBpbnQgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50OwotCi0gICAg
Ym9vbCBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uOwotICAgIGJvb2wgbV9pc1N1
c3BlbmRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3JlcXVpcmVzTGF5b3V0IHsgZmFsc2UgfTsK
LQotICAgIC8vIFVzZWQgdG8gZmxhZyB3aGV0aGVyIHdlIHNob3VsZCByZXZlcnQgdG8gcHJldmlv
dXMgYnVnZ3kKLSAgICAvLyBiZWhhdmlvciBvZiBhbGxvd2luZyBuZXcgdHJhbnNpdGlvbnMgYW5k
IGFuaW1hdGlvbnMgdG8KLSAgICAvLyBydW4gZXZlbiB3aGVuIHRoaXMgb2JqZWN0IGlzIHN1c3Bl
bmRlZC4KLSAgICBib29sIG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkOwotfTsK
LQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAxYmU3NTliMDgxNjA5YmY1MzMzNDBkMzBhMDI2MTQ3Mzc2NTA1MDA1Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBA
IC0xLDE4NzIgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNywgMjAwOCwgMjAwOSwg
MjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgot
ICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFw
cGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0
b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0g
KiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBw
ZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFO
RCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAot
ICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
T1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04g
QU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLQot
I2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5oIgotI2luY2x1ZGUgIkNTU0Ny
b3NzZmFkZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NTRmlsdGVySW1hZ2VWYWx1ZS5oIgotI2luY2x1
ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NJbWFnZVZhbHVlLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50LmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUg
IkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2FsY3VsYXRpb25WYWx1ZS5oIgotI2luY2x1ZGUg
IkNsaXBQYXRoT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ29sb3JCbGVuZGluZy5oIgotI2luY2x1
ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1ZGUgIkZvbnRDYXNjYWRlLmgiCi0jaW5jbHVk
ZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgotI2luY2x1ZGUgIkZvbnRUYWdnZWRTZXR0aW5n
cy5oIgotI2luY2x1ZGUgIkdhcExlbmd0aC5oIgotI2luY2x1ZGUgIklkZW50aXR5VHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUgIk1hdHJpeDNEVHJh
bnNmb3JtT3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiTWF0cml4VHJhbnNmb3JtT3BlcmF0aW9uLmgi
Ci0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKLSNpbmNs
dWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiU3R5bGVHZW5lcmF0ZWRJbWFnZS5o
IgotI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIKLSNpbmNsdWRlICJTdHlsZVJl
c29sdmVyLmgiCi0jaW5jbHVkZSA8YWxnb3JpdGhtPgotI2luY2x1ZGUgPG1lbW9yeT4KLSNpbmNs
dWRlIDx3dGYvTWF0aEV4dHJhcy5oPgotI2luY2x1ZGUgPHd0Zi9OZXZlckRlc3Ryb3llZC5oPgot
I2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgotI2luY2x1ZGUgPHd0Zi9Qb2ludGVyQ29tcGFy
aXNvbi5oPgotI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQv
VGV4dFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLXN0YXRpYyBpbmxpbmUgaW50
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgaW50IGZyb20sIGlu
dCB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOwotfQotCi1zdGF0aWMgaW5saW5lIGRvdWJsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3VibGUgdG8sIGRvdWJsZSBwcm9n
cmVzcykKLXsKLSAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHByb2dyZXNzKTsKLX0KLQotc3Rh
dGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJu
IG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZyb20pICogcHJvZ3Jlc3MpOwot
fQotCi1zdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENvbG9yJiB0bywgZG91YmxlIHBy
b2dyZXNzKQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOwotfQotCi1z
dGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3RoJiB0bywgZG91YmxlIHByb2dy
ZXNzKQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOwotfQotCi1zdGF0
aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0Ns
aWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2FwTGVuZ3RoJiB0bywgZG91Ymxl
IHByb2dyZXNzKQotewotICAgIHJldHVybiAoZnJvbS5pc05vcm1hbCgpIHx8IHRvLmlzTm9ybWFs
KCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5ndGgoKSwgcHJvZ3Jlc3MpOwot
fQotCi1zdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUmIGZyb20sIGNvbnN0IExlbmd0
aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIHsgYmxlbmRGdW5jKGFu
aW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJsZW5kRnVuYyhhbmltLCBmcm9t
LmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKLX0KLQotc3RhdGljIGlubGluZSBTaGFk
b3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
U2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAg
ICBpZiAoZnJvbSA9PSB0bykKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgZG91YmxlIGZyb21W
YWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKLSAgICBkb3VibGUgdG9W
YWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7Ci0gICAgZG91YmxlIHJlc3Vs
dCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3MpOwotICAgIHJldHVy
biByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNoYWRvd1N0eWxlOjpJbnNldDsK
LX0KLQotc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IFNoYWRvd0RhdGEq
IGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNT
RVJUKGZyb20gJiYgdG8pOwotICAgIGlmIChmcm9tLT5zdHlsZSgpICE9IHRvLT5zdHlsZSgpKQot
ICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigqdG8pOwotCi0gICAgcmV0dXJu
IG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9jYXRpb24oKSwgdG8tPmxvY2F0
aW9uKCksIHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmQoZnJvbS0+cmFkaXVzKCksIHRvLT5yYWRp
dXMoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChmcm9tLT5zcHJlYWQoKSwgdG8tPnNwcmVh
ZCgpLCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLT5zdHlsZSgpLCB0
by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBmcm9tLT5pc1dlYmtpdEJveFNoYWRvdygp
LAotICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29sb3IoKSwgcHJvZ3Jlc3MpKTsK
LX0KLQotc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNvbnN0IFRyYW5zZm9ybU9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkp
Ci0gICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVyYXRpb25zKGZyb20sIHByb2dy
ZXNzKTsKLSAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4SW50ZXJwb2xhdGlvbihmcm9t
LCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJlbmRlcmVyKCkpID8gZG93bmNh
c3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5ib3JkZXJCb3hSZWN0KCkuc2l6
ZSgpIDogTGF5b3V0U2l6ZSgpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8Q2xpcFBhdGhP
cGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgQ2xp
cFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9uKiB0bywgZG91YmxlIHByb2dy
ZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQotICAg
IC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFzaWNTaGFwZXMgY2FuIG5vdCBi
ZSBhbmltYXRlZC4KLSAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpT
aGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9uOjpTaGFwZSkKLSAgICAgICAg
cmV0dXJuIHRvOwotCi0gICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gZG93bmNhc3Q8
U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hhcGUoKTsKLSAgICBjb25zdCBC
YXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKnRv
KS5iYXNpY1NoYXBlKCk7Ci0KLSAgICBpZiAoIWZyb21TaGFwZS5jYW5CbGVuZCh0b1NoYXBlKSkK
LSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgcmV0dXJuIFNoYXBlQ2xpcFBhdGhPcGVyYXRpb246
OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGlj
IGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5Qmxl
bmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZhbHVlKiB0bywgZG91YmxlIHBy
b2dyZXNzKQotewotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJldHVybiB0bzsKLQot
ICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlwZTo6U2hhcGUgfHwgdG8tPnR5
cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKLSAgICAgICAgcmV0dXJuIHRvOwotCi0g
ICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkKLSAgICAgICAgcmV0dXJuIHRv
OwotCi0gICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0gKmZyb20tPnNoYXBlKCk7Ci0g
ICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hhcGUoKTsKLQotICAgIGlmICgh
ZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBy
ZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVz
cyksIHRvLT5jc3NCb3goKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPEZpbHRlck9wZXJh
dGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBGaWx0ZXJP
cGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09wLCBkb3VibGUgcHJvZ3Jlc3Ms
IGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCi17Ci0gICAgQVNTRVJUKHRvT3ApOwot
ICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNzLCBibGVuZFRvUGFzc3Rocm91
Z2gpOwotfQotCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGaWx0ZXJPcGVy
YXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sICBjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHBy
b2dyZXNzKQotewotICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0OwotICAgIHNpemVfdCBmcm9t
U2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKLSAgICBzaXplX3QgdG9TaXplID0gdG8u
b3BlcmF0aW9ucygpLnNpemUoKTsKLSAgICBzaXplX3Qgc2l6ZSA9IHN0ZDo6bWF4KGZyb21TaXpl
LCB0b1NpemUpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7Ci0gICAg
ICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChpIDwgZnJvbVNpemUpID8gZnJv
bS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwotICAgICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0
aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9ucygpW2ldLmdldCgpIDogMDsK
LSAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRlZE9wID0gdG9PcCA/IGJsZW5k
RnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHByb2dyZXNzKSA6IChmcm9tT3Ag
PyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9ncmVzcywgdHJ1ZSkgOiAwKTsK
LSAgICAgICAgaWYgKGJsZW5kZWRPcCkKLSAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25zKCku
YXBwZW5kKGJsZW5kZWRPcCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgYXV0byBpZGVu
dGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNyZWF0ZSgpOwotICAgICAgICAg
ICAgaWYgKHByb2dyZXNzID4gMC41KQotICAgICAgICAgICAgICAgIHJlc3VsdC5vcGVyYXRpb25z
KCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBlbmQoZnJvbU9w
ID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBGaWx0ZXJPcGVyYXRpb25zIGJsZW5k
RnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBGaWx0ZXJP
cGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0bywgZG91YmxlIHByb2dy
ZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9wZXJ0eUZpbHRlcikKLXsKLSAg
ICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKLQotICAgIC8vIElmIHdlIGhhdmUgYSBmaWx0ZXIg
ZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVuY3Rpb24gYW5pbWF0aW9uLgot
ICAgIAotICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOwotICAgIHN3aXRjaCAocHJvcGVydHlJ
RCkgewotICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBh
bmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0jaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BG
aWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNrZHJvcEZpbHRlckZ1bmN0aW9u
TGlzdHNNYXRjaCgpOwotICAgICAgICBicmVhazsKLSNlbmRpZgotICAgIGNhc2UgQ1NTUHJvcGVy
dHlBcHBsZUNvbG9yRmlsdGVyOgotICAgICAgICBsaXN0c01hdGNoID0gYW5pbS0+Y29sb3JGaWx0
ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKLSAgICAgICAgYnJlYWs7Ci0gICAgZGVmYXVsdDoKLSAg
ICAgICAgYnJlYWs7Ci0gICAgfQotICAgIAotICAgIGlmIChsaXN0c01hdGNoKQotICAgICAgICBy
ZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJvbSwgdG8sIHByb2dyZXNzKTsK
LSAgICBlbHNlIHsKLSAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBmdW5jdGlvbiBsaXN0cyBkb24n
dCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1dCBkb24ndCB5ZXQgaGF2ZSBh
IHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCi0gICAgICAgIC8vIEZvciBub3cgd2UnbGwg
anVzdCBmYWlsIHRvIGFuaW1hdGUuCi0gICAgICAgIHJlc3VsdCA9IHRvOwotICAgIH0KLQotICAg
IHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgUmVmUHRyPFN0eWxlSW1hZ2U+IGJs
ZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENhY2hlZElt
YWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJvbSwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBBU1NFUlQoaW1hZ2UpOwotICAg
IEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGFu
aW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7Ci0KLSAgICBhdXRvIGltYWdlVmFsdWUgPSBDU1NJbWFn
ZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKLSAgICBhdXRvIGZpbHRlclZhbHVlID0gQ29tcHV0ZWRT
dHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3VycmVudFN0eWxlKCksIGZpbHRl
clJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7Ci0KLSAgICBhdXRvIHJlc3VsdCA9IENT
U0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdlVmFsdWUpLCBXVEZNb3ZlKGZp
bHRlclZhbHVlKSk7Ci0gICAgcmVzdWx0LmdldCgpLnNldEZpbHRlck9wZXJhdGlvbnMoZmlsdGVy
UmVzdWx0KTsKLSAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUo
cmVzdWx0KSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVmlzaWJpbGl0eSBibGVuZEZ1bmMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJpbGl0eSBmcm9tLCBWaXNpYmls
aXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgLy8gQW55IG5vbi16ZXJvIHJlc3VsdCBt
ZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2libGUuIE9ubHkgYXQgMCBkbyB3
ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCi0gICAgLy8gaW52aXNpYmxlLiBUaGUgaW52aXNp
YmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZzLiBWaXNpYmlsaXR5OjpDb2xs
YXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8gdmFsdWVzLgotICAgIGRvdWJs
ZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8gMS4gOiAwLjsKLSAgICBk
b3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxlID8gMS4gOiAwLjsKLSAgICBp
ZiAoZnJvbVZhbCA9PSB0b1ZhbCkKLSAgICAgICAgcmV0dXJuIHRvOwotICAgIGRvdWJsZSByZXN1
bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHByb2dyZXNzKTsKLSAgICByZXR1
cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDogKHRvICE9IFZpc2liaWxpdHk6
OlZpc2libGUgPyB0byA6IGZyb20pOwotfQotCi1zdGF0aWMgaW5saW5lIFRleHRVbmRlcmxpbmVP
ZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNv
bnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGZyb20uaXNMZW5ndGgoKSAmJiB0by5p
c0xlbmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dFVuZGVybGluZU9mZnNldDo6Y3JlYXRlV2l0
aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOwotICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zmc2V0OjpjcmVhdGVX
aXRoQXV0bygpOwotfQotCi1zdGF0aWMgaW5saW5lIFRleHREZWNvcmF0aW9uVGhpY2tuZXNzIGJs
ZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBUZXh0
RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERlY29yYXRpb25UaGlja25lc3Mm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGZyb20uaXNMZW5ndGgoKSAmJiB0by5p
c0xlbmd0aCgpKQotICAgICAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6OmNyZWF0
ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3RoVmFsdWUoKSwgdG8ubGVuZ3Ro
VmFsdWUoKSwgcHJvZ3Jlc3MpKTsKLSAgICByZXR1cm4gVGV4dERlY29yYXRpb25UaGlja25lc3M6
OmNyZWF0ZVdpdGhBdXRvKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTGVuZ3RoQm94IGJsZW5kRnVu
Yyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBjb25zdCBMZW5ndGhCb3gm
IGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBMZW5n
dGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgpLCB0by50b3AoKSwgcHJvZ3Jl
c3MpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20ucmlnaHQoKSwg
dG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAotICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFu
aW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAg
ICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRvLmxlZnQoKSwgcHJvZ3Jlc3Mp
KTsKLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFNWR0xlbmd0aFZhbHVl
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgU1ZHTGVu
Z3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0bywgZG91YmxlIHByb2dyZXNz
KQotewotICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbSwgdG8sIG5hcnJvd1By
ZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKLX0KLQotc3RhdGljIGlubGluZSBWZWN0b3I8U1ZH
TGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
Y29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29uc3QgVmVjdG9yPFNWR0xlbmd0
aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBzaXplX3QgZnJvbUxlbmd0aCA9
IGZyb20uc2l6ZSgpOwotICAgIHNpemVfdCB0b0xlbmd0aCA9IHRvLnNpemUoKTsKLSAgICBpZiAo
IWZyb21MZW5ndGgpCi0gICAgICAgIHJldHVybiAhcHJvZ3Jlc3MgPyBmcm9tIDogdG87Ci0gICAg
aWYgKCF0b0xlbmd0aCkKLSAgICAgICAgcmV0dXJuIHByb2dyZXNzID09IDEgPyBmcm9tIDogdG87
Ci0gICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7Ci0gICAgaWYgKGZyb21MZW5n
dGggIT0gdG9MZW5ndGgpIHsKLSAgICAgICAgaWYgKCFyZW1haW5kZXIoc3RkOjptYXgoZnJvbUxl
bmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0b0xlbmd0aCkpKQotICAgICAg
ICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOwotICAg
ICAgICBlbHNlCi0gICAgICAgICAgICByZXN1bHRMZW5ndGggPSBmcm9tTGVuZ3RoICogdG9MZW5n
dGg7Ci0gICAgfQotICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4gcmVzdWx0KHJlc3VsdExlbmd0
aCk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRMZW5ndGg7ICsraSkKLSAgICAg
ICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZyb21baSAlIGZyb21MZW5ndGhd
LCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zsb2F0KHByb2dyZXNzKSk7Ci0g
ICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4g
Y3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIFN0eWxlQ2Fj
aGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZEltYWdlKiB0b1N0eWxlSW1hZ2Us
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICAvLyBJZiBwcm9ncmVzcyBpcyBhdCBvbmUgb2YgdGhl
IGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8gc2hvdyB0aGUgaW1hZ2UsCi0g
ICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdlIGhhbmQgYmFjayBvbmUgb2Yg
dGhlIGV4aXN0aW5nIGltYWdlcy4KLSAgICBpZiAoIXByb2dyZXNzKQotICAgICAgICByZXR1cm4g
ZnJvbVN0eWxlSW1hZ2U7Ci0gICAgaWYgKHByb2dyZXNzID09IDEpCi0gICAgICAgIHJldHVybiB0
b1N0eWxlSW1hZ2U7Ci0gICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSB8fCAh
dG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQotICAgICAgICByZXR1cm4gdG9TdHlsZUltYWdl
OwotCi0gICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFsdWU6OmNyZWF0ZSgqZnJv
bVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOwotICAgIGF1dG8gdG9JbWFnZVZhbHVlID0gQ1NT
SW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOwotICAgIGF1
dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShwcm9ncmVzcywg
Q1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOwotCi0gICAgYXV0byBjcm9zc2ZhZGVWYWx1ZSA9IENT
U0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1hZ2VWYWx1ZSksIFdURk1vdmUo
dG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUpKTsKLSAgICByZXR1cm4gU3R5
bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3NmYWRlVmFsdWUpKTsKLX0KLQot
c3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZyb20sIFN0eWxlSW1hZ2UqIHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0
dXJuIHRvOwotCi0gICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1hZ2UoKTsKLSAgICB0byA9IHRv
LT5zZWxlY3RlZEltYWdlKCk7Ci0KLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1
cm4gdG87ICAgIAotCi0gICAgLy8gQW5pbWF0aW9uIGJldHdlZW4gdHdvIGdlbmVyYXRlZCBpbWFn
ZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KLSAgICBpZiAoaXM8U3R5bGVHZW5l
cmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKLSAg
ICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVyYXRlZCA9IGRvd25jYXN0PFN0
eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIENTU0ltYWdl
R2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFn
ZT4oKnRvKS5pbWFnZVZhbHVlKCk7Ci0KLSAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFs
dWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2VuZXJhdGVk
KSkgewotICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVyYXRlZCBpbWFnZXMganVzdCBw
b3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgotICAgICAgICAgICAgLy8gT3RoZXJ3
aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4KLSAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmls
dGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwotICAgICAg
ICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0b0ZpbHRlcikgJiYgZnJvbUZp
bHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAgICAgICAgIHJldHVybiBibGVuZEZpbHRlcihh
bmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0ZXIuZmlsdGVyT3BlcmF0aW9u
cygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dyZXNzKTsKLSAgICAgICAgfQot
Ci0gICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCkgJiYgaXM8
Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgewotICAgICAgICAgICAgQ1NTQ3Jvc3Nm
YWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJv
bUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBDU1NDcm9zc2ZhZGVWYWx1ZSYgdG9Dcm9zc2ZhZGUg
PSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpOwotICAgICAgICAgICAg
aWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Nyb3NzZmFkZSkpIHsKLSAgICAg
ICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRvQ3Jvc3NmYWRlLmJsZW5kKGZy
b21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0eWxl
R2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQpOwotICAgICAgICAgICAgfQot
ICAgICAgICB9Ci0KLSAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGZvciBhbmltYXRpb24g
YmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgotICAgICAgICAvLyBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2Ci0gICAgfSBlbHNlIGlmIChpczxT
dHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKSkg
ewotICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVkID0gZG93bmNh
c3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKLSAgICAgICAgaWYg
KGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBD
U1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VW
YWx1ZT4oZnJvbUdlbmVyYXRlZCk7Ci0gICAgICAgICAgICBpZiAoZnJvbUZpbHRlci5jYWNoZWRJ
bWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0bykuY2FjaGVkSW1hZ2UoKSA9
PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5k
RmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJP
cGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwotICAgICAgICB9Ci0g
ICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVuIGNyb3NzLWZhZGUgYW5k
IGltYWdlIHNvdXJjZS4KLSAgICB9IGVsc2UgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9t
KSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Ci0gICAgICAgIENTU0ltYWdlR2Vu
ZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4o
KnRvKS5pbWFnZVZhbHVlKCk7Ci0gICAgICAgIGlmIChpczxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0
b0dlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIHRvRmlsdGVy
ID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpOwotICAgICAgICAg
ICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFn
ZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9GaWx0ZXIuY2FjaGVkSW1hZ2Uo
KSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dy
ZXNzKTsKLSAgICAgICAgfQotICAgICAgICAvLyBGSVhNRTogQWRkIGludGVycG9sYXRpb24gYmV0
d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCi0gICAgfQotCi0gICAgLy8gRklYTUU6
IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQgYW5kIGdlbmVyYXRlZCBpbWFn
ZXMuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4Mjkz
Ci0gICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUNhY2hlZElt
YWdlPigqdG8pKQotICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxlbmQoYW5pbSwgZG93bmNhc3Q8
U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KHRvKSwg
cHJvZ3Jlc3MpOwotCi0gICAgcmV0dXJuIHRvOwotfQotCi1zdGF0aWMgaW5saW5lIE5pbmVQaWVj
ZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBj
b25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBpZWNlSW1hZ2UmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKCFmcm9tLmhhc0ltYWdlKCkgfHwgIXRvLmhhc0ltYWdl
KCkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIC8vIEZJWE1FICg3NDExMik6IFN1cHBvcnQg
dHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0aGF0IGRpZmZlciBieSBtb3Jl
IHRoYW4gaW1hZ2UgY29udGVudC4KLQotICAgIGlmIChmcm9tLmltYWdlU2xpY2VzKCkgIT0gdG8u
aW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9IHRvLmJvcmRlclNsaWNlcygp
IHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJvbS5maWxsKCkgIT0gdG8uZmls
bCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jpem9udGFsUnVsZSgpIHx8IGZy
b20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkpCi0gICAgICAgIHJldHVybiB0
bzsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJlbmRlcmVyKCkpIHsKLSAgICAg
ICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVyLCAxLjApICE9IHRvLmltYWdl
KCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKLSAgICAgICAgICAgIHJldHVybiB0bzsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRGdW5jKGFuaW0sIGZyb20uaW1h
Z2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAotICAgICAgICBmcm9tLmltYWdlU2xpY2VzKCks
IGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9tLm91dHNldCgpLCBmcm9tLmhv
cml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwotfQotCi0jaWYgRU5BQkxFKFZB
UklBVElPTl9GT05UUykKLQotc3RhdGljIGlubGluZSBGb250VmFyaWF0aW9uU2V0dGluZ3MgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IEZvbnRW
YXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB0bywg
ZG91YmxlIHByb2dyZXNzKQotewotICAgIGlmIChmcm9tLnNpemUoKSAhPSB0by5zaXplKCkpCi0g
ICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsKLSAgICBGb250VmFyaWF0aW9u
U2V0dGluZ3MgcmVzdWx0OwotICAgIHVuc2lnbmVkIHNpemUgPSBmcm9tLnNpemUoKTsKLSAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Ci0gICAgICAgIGF1dG8mIGZyb21J
dGVtID0gZnJvbS5hdChpKTsKLSAgICAgICAgYXV0byYgdG9JdGVtID0gdG8uYXQoaSk7Ci0gICAg
ICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkpCi0gICAgICAgICAgICByZXR1
cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7Ci0gICAgICAgIGZsb2F0IGludGVycG9sYXRlZCA9
IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0ZW0udmFsdWUoKSwgcHJvZ3Jl
c3MpOwotICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0udGFnKCksIGludGVycG9sYXRl
ZCB9KTsKLSAgICB9Ci0gICAgcmV0dXJuIHJlc3VsdDsKLX0KLQotI2VuZGlmCi0KLXN0YXRpYyBp
bmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJvbSwgRm9udFNlbGVjdGlvblZh
bHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIEZvbnRTZWxlY3Rpb25WYWx1
ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20pLCBzdGF0aWNfY2FzdDxm
bG9hdD4odG8pLCBwcm9ncmVzcykpOwotfQotCi1zdGF0aWMgaW5saW5lIE9wdGlvbmFsPEZvbnRT
ZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJvbSwgT3B0aW9uYWw8Rm9udFNl
bGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHJldHVybiBGb250U2Vs
ZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0PGZsb2F0Pihmcm9tLnZhbHVl
KCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHByb2dyZXNzKSk7Ci19Ci0KLWNs
YXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOwotICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UoQ1NTUHJvcGVydHlJRCBwcm9wKQotICAgICAgICA6IG1fcHJvcChwcm9wKQotICAgIHsKLSAg
ICB9Ci0gICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0gZGVmYXVs
dDsKLQotICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBjb25zdCB7IHJldHVy
biBmYWxzZTsgfQotICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7Ci0gICAgdmlydHVhbCBib29sIGNhbklu
dGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqKSBjb25zdCB7
IHJldHVybiB0cnVlOyB9Ci0gICAgdmlydHVhbCB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
UmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKLSAgICAKLSNpZiAhTE9HX0RJU0FCTEVE
Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlKSBjb25zdCA9
IDA7Ci0jZW5kaWYKLQotICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX3Byb3A7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KLQotcHJpdmF0ZToKLSAgICBDU1NQcm9wZXJ0eUlEIG1f
cHJvcDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgUHJvcGVydHlXcmFwcGVy
R2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckdldHRlcihD
U1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0KQotICAg
ICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX2dl
dHRlcihnZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYg
KCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gKGEt
PiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgIH0KLQotICAgIFQgdmFsdWUo
Y29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gKGEtPipt
X2dldHRlcikoKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVu
ZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRl
clN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwg
IiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
LSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIFQgKFJlbmRlclN0eWxlOjoqbV9nZXR0
ZXIpKCkgY29uc3Q7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIFByb3BlcnR5
V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4gewotICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnNldHRlcikoVCkpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+KHBy
b3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQot
ICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVu
ZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBi
LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4q
bV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxUPjo6
bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dldHRlcikoKSwg
cHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChSZW5kZXJTdHlsZTo6
Km1fc2V0dGVyKShUKTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgUmVmQ291
bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQotICAg
ICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwgZ2V0dGVyKQotICAgICAgICAs
IG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBS
ZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29u
c3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFu
aW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQot
Ci1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoUmVmUHRyPFQ+
JiYpOwotfTsKLQotY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5
V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJv
cCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgm
Pjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKLSAgICB9Ci0KLSAgICB2b2lkIGJs
ZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBk
c3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6
bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAo
UmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+Ci1jbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAg
ICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi1wcm90ZWN0
ZWQ6Ci0gICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoVCYmKTsKLX07Ci0KLWNsYXNz
IFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBw
ZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQcm9wZXJ0eUlEIHByb3AsIENs
aXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+JiYpKQotICAgICAg
ICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+KHByb3AsIGdl
dHRlciwgc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewot
ICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3Ro
ZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4g
ZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgotICAgICAgICBpZiAoYSA9PSBi
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBh
dGhBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgQ2xpcFBhdGhPcGVyYXRpb24qIGNsaXBQ
YXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGlmIChjbGlwUGF0aEEgPT0gY2xpcFBh
dGhCKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghY2xpcFBhdGhBIHx8
ICFjbGlwUGF0aEIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAq
Y2xpcFBhdGhBID09ICpjbGlwUGF0aEI7Ci0gICAgfQotfTsKLQotI2lmIEVOQUJMRShWQVJJQVRJ
T05fRk9OVFMpCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MgOiBw
dWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0aW5ncz4gewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckZvbnRWYXJp
YXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRWYXJpYXRpb25TZXR0aW5ncyAo
UmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVy
KShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxGb250
VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRl
cnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgIC8v
IElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVy
biB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlvblNldHRpbmdzQSA9IChhLT4q
bV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0
aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgcmV0dXJuIHZhcmlhdGlv
blNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7Ci0gICAgfQotfTsKLSNlbmRpZgotCi1j
bGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFw
cGVyPFNoYXBlVmFsdWU+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoK
LSAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlEIHByb3AsIFNoYXBlVmFsdWUq
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlX
cmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRl
cnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCi0gICAgICAgIC8v
IElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVy
biB0cnVlLgotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0g
ICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBTaGFwZVZh
bHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBpZiAoc2hhcGVBID09IHNo
YXBlQikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIXNoYXBlQSB8fCAh
c2hhcGVCKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gKnNoYXBl
QSA9PSAqc2hhcGVCOwotICAgIH0KLX07Ci0KLWNsYXNzIFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgU3R5bGVJbWFnZVByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2UqIChSZW5kZXJTdHlsZTo6Kmdl
dHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTdHlsZUlt
YWdlPiYmKSkKLSAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+
KHByb3AsIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgIHJldHVybiB0cnVlOwotICAg
ICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBT
dHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBTdHlsZUltYWdl
KiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdU
b0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Ci0gICAgfQotfTsKLQotY2xhc3MgUHJvcGVydHlX
cmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj4g
ewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3Jh
cHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6
KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9y
JikpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj4ocHJvcCwg
Z2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IENv
bG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBDb2xv
ciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotY2xhc3Mg
UHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDogcHVibGljIFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFw
cGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5kZXJTdHlsZTo6b3BhY2l0eSwgJlJl
bmRlclN0eWxlOjpzZXRPcGFjaXR5KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGFuaW1hdGlv
bklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9Ci0KLSAgICB2
b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0
eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91
YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgZHN0LT5zZXRPcGFj
aXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGItPm9wYWNpdHkoKSwgcHJvZ3Jlc3Mp
KTsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9y
bSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyY+IHsK
LSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBw
ZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPGNvbnN0
IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgJlJlbmRlclN0eWxl
Ojp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFuaW0sIGEtPnRyYW5zZm9ybSgpLCBi
LT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdy
YXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGNvbnN0IEZpbHRlck9wZXJhdGlv
bnMmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVy
dHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCwgY29uc3QgRmlsdGVyT3Bl
cmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYpKQotICAgICAgICA6IFByb3BlcnR5
V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJvcGVydHlJRCwgZ2V0dGVyLCBzZXR0
ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNv
bnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gcHJvcGVydHkoKSA9PSBDU1NQcm9w
ZXJ0eUZpbHRlcgotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgICAgICB8fCBw
cm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIKLSNlbmRpZgotICAg
ICAgICAgICAgOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEs
IGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCAo
Yi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj46Om1fZ2V0
dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOwotICAgIH0KLX07Ci0KLXN0YXRpYyBpbmxp
bmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hhZG93RGF0YSogc2hhZG93KQotewot
ICAgIHNpemVfdCBjb3VudDsKLSAgICBmb3IgKGNvdW50ID0gMDsgc2hhZG93OyBzaGFkb3cgPSBz
aGFkb3ctPm5leHQoKSkKLSAgICAgICAgKytjb3VudDsKLSAgICByZXR1cm4gY291bnQ7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hhZG93Rm9yQmxlbmRpbmcoY29uc3Qg
U2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dEYXRhKiBvdGhlclNoYWRvdykKLXsK
LSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdFNoYWRvd0RhdGEo
TGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgZmFsc2UsIENvbG9yOjp0
cmFuc3BhcmVudEJsYWNrKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4g
ZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6
SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFjayk7Ci0gICAgc3RhdGljIE5ldmVy
RGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRCb3hTaGFkb3dEYXRhKExheW91dFBv
aW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVu
dEJsYWNrKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdElu
c2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6
SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLQotICAgIGlmIChzcmNTaGFk
b3cpCi0gICAgICAgIHJldHVybiBzcmNTaGFkb3c7Ci0KLSAgICBpZiAob3RoZXJTaGFkb3ctPnN0
eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQotICAgICAgICByZXR1cm4gb3RoZXJTaGFkb3ct
PmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YS5n
ZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgpOwotCi0gICAgcmV0dXJuIG90aGVy
U2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1bHRXZWJLaXRCb3hTaGFkb3dEYXRh
LmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOwotfQotCi1jbGFzcyBQcm9wZXJ0eVdy
YXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyU2hh
ZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoq
Z2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoc3RkOjp1bmlxdWVf
cHRyPFNoYWRvd0RhdGE+LCBib29sKSkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAo
IWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotCi0gICAgICAgIHdoaWxlICh0cnVl
KSB7Ci0gICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0cwotICAgICAgICAgICAgaWYgKCFz
aGFkb3dBICYmICFzaGFkb3dCKQotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAg
ICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxpc3RzCi0gICAgICAgICAgICBpZiAo
IXNoYWRvd0EgfHwgIXNoYWRvd0IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0IpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOwotICAg
ICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsKLSAgICAgICAgfQotCi0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRl
Ci0gICAgewotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBID0gKGEtPiptX2dldHRl
cikoKTsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QiA9IChiLT4qbV9nZXR0ZXIp
KCk7Ci0KLSAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3RoKHNoYWRvd0Ep
OwotICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0TGVuZ3RoKHNoYWRvd0IpOwotCi0g
ICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8IChmcm9tTGVuZ3RoIDw9IDEgJiYg
dG9MZW5ndGggPD0gMSkpIHsKLSAgICAgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRTaW1w
bGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywgc2hhZG93QSwgc2hhZG93Qiks
IGZhbHNlKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCi0gICAgICAgIChkc3Qt
PiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMoYW5pbSwgcHJvZ3Jlc3MsIHNo
YWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3RoKSwgZmFsc2UpOwotICAgIH0KLQot
I2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBT
aGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKHByb2dyZXNzKSk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgc3RkOjp1bmlx
dWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRjaGVkU2hhZG93TGlzdHMoY29uc3Qg
Q1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBT
aGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCKSBjb25zdAotICAg
IHsKLSAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IG5ld1NoYWRvd0RhdGE7Ci0g
ICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOwotCi0gICAgICAgIHdoaWxlIChzaGFk
b3dBIHx8IHNoYWRvd0IpIHsKLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRv
dyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRvd0IpOwotICAgICAgICAgICAgY29u
c3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93Qiwgc2hh
ZG93QSk7Ci0KLSAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZGVk
U2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywgZHN0U2hhZG93LCBwcm9ncmVzcyk7
Ci0gICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hhZG93UHRyID0gYmxlbmRlZFNoYWRv
dy5nZXQoKTsKLQotICAgICAgICAgICAgaWYgKCFsYXN0U2hhZG93KQotICAgICAgICAgICAgICAg
IG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwotICAgICAgICAgICAgZWxz
ZQotICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5leHQoV1RGTW92ZShibGVuZGVkU2hh
ZG93KSk7Ci0KLSAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBibGVuZGVkU2hhZG93UHRyOwotCi0g
ICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRvd0EtPm5leHQoKSA6IDA7Ci0gICAg
ICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0ItPm5leHQoKSA6IDA7Ci0gICAgICAg
IH0KLQotICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKLSAgICB9Ci0KLSAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlzdHMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91YmxlIHByb2dyZXNzLCBjb25zdCBTaGFk
b3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCLCBpbnQgZnJvbUxlbmd0
aCwgaW50IHRvTGVuZ3RoKSBjb25zdAotICAgIHsKLSAgICAgICAgLy8gVGhlIHNoYWRvd3MgaW4g
U2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3JkZXIsIHNvIHdoZW4gYW5pbWF0aW5n
IG1pc21hdGNoZWQgbGlzdHMsCi0gICAgICAgIC8vIHJldmVyc2UgdGhlbSBhbmQgbWF0Y2ggZnJv
bSB0aGUgZW5kLgotICAgICAgICBWZWN0b3I8Y29uc3QgU2hhZG93RGF0YSosIDQ+IGZyb21TaGFk
b3dzKGZyb21MZW5ndGgpOwotICAgICAgICBmb3IgKGludCBpID0gZnJvbUxlbmd0aCAtIDE7IGkg
Pj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICBmcm9tU2hhZG93c1tpXSA9IHNoYWRvd0E7Ci0gICAg
ICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAg
VmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRvd3ModG9MZW5ndGgpOwotICAgICAg
ICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7IC0taSkgewotICAgICAgICAgICAg
dG9TaGFkb3dzW2ldID0gc2hhZG93QjsKLSAgICAgICAgICAgIHNoYWRvd0IgPSBzaGFkb3dCLT5u
ZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4g
bmV3U2hhZG93RGF0YTsKLQotICAgICAgICBpbnQgbWF4TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxl
bmd0aCwgdG9MZW5ndGgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1heExlbmd0aDsg
KytpKSB7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBmcm9tU2hhZG93ID0gaSA8IGZy
b21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7Ci0gICAgICAgICAgICBjb25zdCBTaGFkb3dE
YXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hhZG93c1tpXSA6IDA7Ci0KLSAgICAg
ICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKGZy
b21TaGFkb3csIHRvU2hhZG93KTsKLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGRzdFNo
YWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBmcm9tU2hhZG93KTsKLQotICAgICAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kZWRTaGFkb3cgPSBibGVuZEZ1
bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsKLSAgICAgICAgICAgIC8v
IEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8gcHJlc2VydmUgdGhlIG9yZGVyLgot
ICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKG5ld1NoYWRvd0RhdGEp
KTsKLSAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFkb3cpOwot
ICAgICAgICB9Ci0KLSAgICAgICAgcmV0dXJuIG5ld1NoYWRvd0RhdGE7Ci0gICAgfQotCi0gICAg
Y29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAg
dm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+
LCBib29sKTsKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yIDog
cHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9y
KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlciko
KSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAg
ICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0
dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAgewotICAgIH0KLQot
ICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOwotICAgICAgICBD
b2xvciB0b0NvbG9yID0gdmFsdWUoYik7Ci0KLSAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxp
ZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0g
ICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGZyb21Db2xvciA9
IGEtPmNvbG9yKCk7Ci0gICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAg
ICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKLQotICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRv
Q29sb3I7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEpOwotICAgICAgICBDb2xvciB0b0Nv
bG9yID0gdmFsdWUoYik7Ci0KLSAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0
b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIWZy
b21Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICBmcm9tQ29sb3IgPSBhLT5jb2xvcigpOwot
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgdG9Db2xvciA9IGIt
PmNvbG9yKCk7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21D
b2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSAgICBDb2xvciB2YWx1ZShjb25z
dCBSZW5kZXJTdHlsZSogYSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYS0+Km1fZ2V0
dGVyKSgpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5
bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAg
Ly8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHByb3BlcnR5
KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8PCAiIGF0
ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNz
KSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6
Ci0gICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAg
IHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7Ci19OwotCi0KLWVu
dW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFsaWRDb2xvciB9OwotY2xhc3MgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9w
LCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwKLSAgICAgICAgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
dmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVy
dHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKLSAgICAgICAgLCBtX3Zpc2l0
ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIHZpc2l0ZWRH
ZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQotICAgIHsKLSAgICB9Ci0gICAgUHJvcGVydHlXcmFwcGVy
VmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXliZUludmFsaWRDb2xv
clRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksCi0gICAgICAgIGNvbnN0IENvbG9y
JiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHls
ZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCi0gICAgICAgIDogQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVlPFBy
b3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikpCi0g
ICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1heWJl
SW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKLSAgICB7
Ci0gICAgfQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3dyYXBw
ZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7Ci0gICAg
fQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwg
UmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxl
KiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBtX3dy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwotICAgICAgICBtX3Zpc2l0
ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSAgICB9Ci0KLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIG1fd3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7Ci0gICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxvZ0Js
ZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dyYXBw
ZXI7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1f
dmlzaXRlZFdyYXBwZXI7Ci19OwotCi0vLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFuaW1h
dGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKLWNsYXNzIEZpbGxMYXllckFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKLSAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQotICAgIHsKLSAgICB9
Ci0gICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgpID0g
ZGVmYXVsdDsKLQotICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnR5OyB9Ci0KLSAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllcios
IGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOwotCi0jaWYgIUxPR19ESVNB
QkxFRAotICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0j
ZW5kaWYKLXByaXZhdGU6Ci0gICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OwotfTsKLQotdGVt
cGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXIg
OiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0dGVy
KSgpIGNvbnN0KQotICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcGVydHkpCi0gICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwotICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgp
OwotICAgIH0KLQotICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QKLSAg
ICB7Ci0gICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKLSAgICB9Ci0KLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwg
Y29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgot
ICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotfTsKLQotdGVtcGxhdGUgPHR5
cGVuYW1lIFQ+Ci1jbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZv
aWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0
dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVy
KiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQo
Y29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExh
eWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnBy
b3BlcnR5KCkpCi0gICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQotICAgICAgICAgICAgPDwgIiB0byAiIDw8
IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCi0gICAg
ICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0lu
dGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0
dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi0KLXByb3RlY3Rl
ZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Ci19OwotCi1jbGFzcyBGaWxs
TGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OwotcHVibGljOgotICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRlciko
KSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdlIChG
aWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9yaWdp
blNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikKLSAg
ICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCi0gICAgICAgICwgbV9vcmlnaW5H
ZXR0ZXIob3JpZ2luR2V0dGVyKQotICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNldHRl
cikKLSAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKLSAgICB7Ci0gICAgfQotCi0gICAgYm9v
bCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0IG92
ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRy
dWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQot
ICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgTGVuZ3RoIHRvTGVu
Z3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj46
Om1fZ2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdldHRl
cikoKTsKLSAgICAgICAgCi0gICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3RoICYm
IGZyb21FZGdlID09IHRvRWRnZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5
ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlk
ZQotICAgIHsKLSAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7Ci0gICAgICAgIExl
bmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0
IExlbmd0aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIEVkZ2UgZnJvbUVkZ2Ug
PSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOwotICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4qbV9v
cmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9FZGdl
KSB7Ci0gICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNhbGMg
ZXhwcmVzc2lvbiwKLSAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCi0gICAg
ICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0aChm
cm9tTGVuZ3RoKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2UpIHsK
LSAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aCh0b0xlbmd0aCk7Ci0gICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShmcm9t
RWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUgdG8g
dGhlIGxlZnQvdG9wIGVkZ2UuCi0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLQotICAgICAgICAo
ZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xlbmd0
aCwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dC
bGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8
PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwg
IiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJS
ZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsK
LSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fbGVu
Z3RoU2V0dGVyKShMZW5ndGgpOwotICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0dGVy
KSgpIGNvbnN0OwotICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdlKTsK
LSAgICBFZGdlIG1fZmFyRWRnZTsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3Mg
RmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1
YmxpYzoKLSAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxM
YXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihz
ZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciogYSwg
Y29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAg
ewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0K
LQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciog
cmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHBy
b2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFu
aW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQotICAgICAgICAgICAg
PDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUo
YSkKLSAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8VCo+Ojp2YWx1ZShiKQotICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNl
bmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJlZlB0
cjxUPiYmKTsKLX07Ci0KLWNsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIg
OiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdlPiB7
Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgRmlsbExheWVyU3R5
bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUltYWdl
KiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0ZXIp
KFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVkUHJv
cGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKLSAgICB7
Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxs
TGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgIGlmIChhID09IGIpCi0gICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLQotICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVy
KSgpOwotICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAg
ICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7Ci0gICAg
fQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVy
KiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKHBy
b3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1ZShiKSA8
PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHBy
b2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlmCi19Owot
Ci1jbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNHZXR0ZXIp
KCkgY29uc3Q7Ci0gICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVyc0Fj
Y2Vzc29yKSgpOwotCi0gICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nlc3NvcikK
LSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQotICAgICAg
ICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX2xheWVyc0FjY2Vzc29yKGFj
Y2Vzc29yKQotICAgIHsKLSAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgewotICAgICAgICBjYXNl
IENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0
eVdlYmtpdE1hc2tQb3NpdGlvblg6Ci0gICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3Jh
cHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHByb3Bl
cnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlvbiwgJkZp
bGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRYT3Jp
Z2luLCBFZGdlOjpSaWdodCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUG9zaXRpb25ZOgotICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIg
PSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9wZXJ0eSwg
JkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZGaWxsTGF5
ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9yaWdpbiwg
RWRnZTo6Qm90dG9tKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFNpemU6Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZ3Jv
dW5kU2l6ZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgotICAgICAg
ICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNpemVMZW5n
dGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6Ci0gICAgICAgICAgICBtX2ZpbGxM
YXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFnZVByb3Bl
cnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVyOjpzZXRJ
bWFnZSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVy
U3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAo
IWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgYXV0byogZnJv
bUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAgIGF1dG8qIHRvTGF5ZXIg
PSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKLQotICAgICAgICB3aGlsZSAoZnJvbUxheWVyICYm
IHRvTGF5ZXIpIHsKLSAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIt
PmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLQotICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7Ci0gICAgICAg
ICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAg
ICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAgICAgYXV0
byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7Ci0KLSAgICAgICAgd2hp
bGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKLSAgICAgICAgICAgIG1fZmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBiTGF5ZXIs
IHByb2dyZXNzKTsKLSAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOwotICAgICAg
ICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7Ci0gICAgICAgICAgICBkc3RMYXllciA9IGRz
dExheWVyLT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0g
ICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0
IGZpbmFsCi0gICAgewotICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xheWVyc0dl
dHRlcikoKTsKLSAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0dGVyKSgp
OwotICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0ZXIpKCk7
Ci0KLSAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKLSAgICAg
ICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXllciwgYUxh
eWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKLSAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4
dCgpOwotICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7Ci0gICAgICAgICAgICBk
c3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQot
cHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7Ci0KLSAgICBMYXllcnNHZXR0
ZXIgbV9sYXllcnNHZXR0ZXI7Ci0gICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nlc3NvcjsK
LX07Ci0KLWNsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmltYXRpb25Q
cm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1Ymxp
YzoKLSAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBwZXJzKQot
ICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCi0gICAgICAg
ICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCi0gICAgewot
ICAgIH0KLQotICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJpZGUgeyBy
ZXR1cm4gdHJ1ZTsgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEg
PT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDog
bV9wcm9wZXJ0eVdyYXBwZXJzKSB7Ci0gICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVxdWFscyhh
LCBiKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUK
LSAgICB7Ci0gICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFwcGVycykK
LSAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwot
ICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIGRzdCwg
ZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgZm9yIChhdXRvJiB3
cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQotICAgICAgICAgICAgd3JhcHBlci0+bG9nQmxl
bmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7Ci0gICAgfQotI2VuZGlmCi0KLSAgICBjb25zdCBWZWN0
b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJzKCkgY29u
c3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9Ci0KLXByaXZhdGU6Ci0gICAgVmVjdG9y
PEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7Ci19Owot
Ci1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFBy
b3BlcnR5V3JhcHBlckZsZXgoKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UoQ1NTUHJvcGVydHlGbGV4KQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
ICAgIGlmICghYSB8fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBy
ZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdyb3coKSA9
PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5rKCk7Ci0g
ICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAg
IGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwgYi0+Zmxl
eEJhc2lzKCksIHByb2dyZXNzKSk7Ci0gICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxlbmRGdW5j
KGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7Ci0gICAgICAg
IGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygpLCBiLT5m
bGV4U2hyaW5rKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAg
IHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGNv
bnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAg
ICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAgICBMT0dfV0lUSF9TVFJFQU0o
QW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0U3RyZWFt
OjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5k
aWYKLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVi
bGljOgotICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJvcCwgU1ZH
UGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwgQ29sb3Ig
KFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRl
cikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KHByb3ApCi0gICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVyKQotICAg
ICAgICAsIG1fZ2V0dGVyKGdldHRlcikKLSAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCi0gICAg
ewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09IGIp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVy
KSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2VlbiBTVkdQ
YWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCi0gICAgICAgIC8vIEZvciBldmVyeXRo
aW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVyd2lzZQot
ICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZvcmV2ZXIu
Ci0gICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50VHlwZTo6
UkdCQ29sb3IpIHsKLSAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIp
KCk7Ci0gICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKLQotICAg
ICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkK
LSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLQotICAgICAgICAgICAgaWYgKCFmcm9tQ29s
b3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7Ci0gICAg
ICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgICAgIHRvQ29sb3Ig
PSBDb2xvcigpOwotCi0gICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7Ci0g
ICAgICAgIH0KLSAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChj
b25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0
dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKLSAgICAgICAgICAgIHx8IChiLT4qbV9w
YWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVyKSgpOwot
ICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKLQotICAgICAgICBpZiAo
IWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAg
cmV0dXJuOwotCi0gICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAg
IGZyb21Db2xvciA9IENvbG9yKCk7Ci0gICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0g
ICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShi
bGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOwotICAgIH0KLQot
I2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiwg
Y29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3QgZmluYWwKLSAgICB7Ci0gICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2luZy4KLSAg
ICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyBT
VkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vy
cyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgotCi1wcml2YXRlOgotICAgIFNWR1BhaW50VHlw
ZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKLSAgICBDb2xvciAo
UmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAgICB2b2lkIChSZW5kZXJTdHlsZTo6
Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOwotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyRm9u
dFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0aW9uVmFs
dWU+PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVy
dHlXcmFwcGVyRm9udFN0eWxlKCkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0aW9uYWw8
Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJTdHlsZTo6
Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQotICAgIHsKLSAgICB9Ci0K
LSAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBS
ZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICByZXR1cm4gZnJv
bS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERlc2NyaXB0
aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8tPmZvbnRE
ZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50OwotICAg
IH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7Ci0KLSAgICAgICAg
YXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKLSAgICAgICAgaWYg
KGRpc2NyZXRlKQotICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVzcyA8IDAu
NSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsKLQotICAg
ICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOwotICAgICAgICBh
dXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7Ci0gICAgICAgIGF1dG8gYmxlbmRl
ZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9Gb250SXRh
bGljOwotICAgICAgICBpZiAoIWRpc2NyZXRlKQotICAgICAgICAgICAgYmxlbmRlZEZvbnRJdGFs
aWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywgcHJvZ3Jl
c3MpOwotCi0gICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9IGRzdC0+
Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKLSAgICAgICAgYXV0byBkZXNjcmlwdGlvbiA9
IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEl0YWxpYyhi
bGVuZGVkRm9udEl0YWxpYyk7Ci0gICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHlsZUF4aXMo
YmxlbmRlZFN0eWxlQXhpcyk7Ci0gICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9uKFdURk1v
dmUoZGVzY3JpcHRpb24pKTsKLSAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0ZShjdXJy
ZW50Rm9udFNlbGVjdG9yKTsKLSAgICB9Ci19OwotCi1jbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlv
bldyYXBwZXJNYXAgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigpCi0gICAg
ewotICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4gTWF5YmUg
d2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPwotICAgICAgICBzdGF0aWMgTmV2ZXJEZXN0cm95
ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7Ci0gICAgICAgIHJldHVybiBt
YXA7Ci0gICAgfQotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlckZv
clByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKLSAgICB7Ci0gICAgICAgIGlmIChw
cm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENTU1Byb3Bl
cnR5KQotICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgdW5zaWduZWQgd3Jh
cHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKLSAgICAgICAgaWYg
KHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQotICAgICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVyc1t3
cmFwcGVySW5kZXhdLmdldCgpOwotICAgIH0KLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKLSAgICB7Ci0gICAgICAgIEFT
U0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOwotICAgICAgICByZXR1cm4g
bV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKLSAgICB9Ci0KLSAgICB1bnNpZ25lZCBz
aXplKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6ZSgpOwot
ICAgIH0KLQotcHJpdmF0ZToKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKTsK
LSAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7Ci0KLSAgICB1
bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJ
RCkKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0eUlEIC0g
Zmlyc3RDU1NQcm9wZXJ0eV07Ci0gICAgfQotCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwotICAgIHVu
c2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107Ci0KLSAgICBz
dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4ID0g
VUNIQVJfTUFYOwotCi0gICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8Q1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKLX07Ci0KLUNTU1Byb3BlcnR5QW5pbWF0aW9uV3Jh
cHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKLXsKLSAgICAvLyBidWls
ZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNvbnMgYW5k
IGJsZW5kcwotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFibGVMb25n
aGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0eWxlOjpz
ZXRMZWZ0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJp
Z2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwKLSAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRlclN0eWxl
Ojp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZSZW5kZXJT
dHlsZTo6c2V0Qm90dG9tKSwKLQotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENT
U1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0V2lk
dGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWluV2lk
dGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lkdGgpLAot
ICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lkdGgsICZS
ZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAotCi0gICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZSZW5kZXJT
dHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCi0gICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHlsZTo6bWlu
SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6bWF4SGVp
Z2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlckZsZXgoKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQ
cm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lkdGgsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCksCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9wV2lkdGgs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyVG9w
V2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUJv
cmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVy
U3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2luTGVmdCwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdpblJpZ2h0
LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJnaW5Ub3As
ICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJnaW5Cb3R0
b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKLSAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnBhZGRp
bmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKLSAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKLSAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5kZXJTdHls
ZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKLSAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZSZW5kZXJT
dHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9tKSwKLQot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVy
dHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0
Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRlclN0eWxl
Ojpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlu
a0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAotCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJhY2tncm91
bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVk
TGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JhY2tncm91
bmRDb2xvciksCi0KLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJl
bmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLSAgICAgICAgbmV3IFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxl
OjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSksCi0gICAg
ICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza0lt
YWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNrSW1hZ2Up
LAotCi0gICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5Qm9y
ZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJT
dHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGljZSwgJlJl
bmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFn
ZVNsaWNlcyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlcklt
YWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCi0gICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3Jk
ZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0
eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCi0KLSAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJT
dHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJbWFnZVNv
dXJjZSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNlSW1hZ2Um
PihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNrQm94SW1h
Z2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKLQotICAgICAgICBuZXcgRmlsbExh
eWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5k
TGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZS
ZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0gICAgICAgIG5ldyBGaWxsTGF5
ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5kZXJTdHls
ZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJz
KSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJr
aXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJz
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJlbmRlclN0
eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAotICAgICAg
ICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tQb3Np
dGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVNYXNr
TGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6
OmVuc3VyZU1hc2tMYXllcnMpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+
KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6ZSwgJlJl
bmRlclN0eWxlOjpzZXRGb250U2l6ZSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5z
aWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmNv
bHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAotICAgICAg
ICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1Byb3BlcnR5
Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1
bW5HYXApLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5n
dGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRlclN0eWxl
OjpzZXRSb3dHYXApLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVkIHNob3J0
PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50LCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5XaWR0aCwg
JlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcsICZSZW5k
ZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0SG9yaXpv
bnRhbEJvcmRlclNwYWNpbmcpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxlOjp2ZXJ0
aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJTcGFjaW5n
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5WkluZGV4LCAm
UmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVjaWZpZWRa
SW5kZXgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eU9y
cGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBoYW5zKSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRvd3MsICZS
ZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCi0gICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVuZGVyU3R5
bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdodCksCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGluZU9mZnNl
dCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91dGxpbmVP
ZmZzZXQpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU91
dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0
T3V0bGluZVdpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZSZW5kZXJT
dHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2luZywgJlJl
bmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRlbnQsICZS
ZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2
ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6
cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWCks
Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2
ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVyU3R5bGU6
OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9y
aWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCi0gICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAmUmVuZGVy
U3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2lu
WSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5VHJhbnNm
b3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVyU3R5bGU6
OnNldFRyYW5zZm9ybU9yaWdpblopLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5
V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BM
ZWZ0UmFkaXVzKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpi
b3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdodFJhZGl1
cyksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+
KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpib3JkZXJC
b3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRSYWRpdXMp
LAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJv
dHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0UmFkaXVz
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9wZXJ0eVZp
c2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpzZXRWaXNp
YmlsaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHla
b29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhvdXRSZXR1
cm5WYWx1ZSksCi0KLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVu
Z3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRlclN0eWxl
OjpzZXRDbGlwKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFj
aXR5KCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgp
LAotICAgICAgICAKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0
eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0RmlsdGVyKSwK
LSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
RmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6YmFj
a2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAotI2VuZGlmCi0g
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmls
dGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QXBw
bGVDb2xvckZpbHRlciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENT
U1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6
c2V0Q2xpcFBhdGgpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9w
ZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5kZXJTdHls
ZTo6c2V0U2hhcGVPdXRzaWRlKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAmUmVuZGVy
U3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNoYXBlSW1h
Z2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCksCi0KLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5
Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpjb2x1bW5S
dWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6
OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Q29sdW1uUnVsZUNvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZl
Y3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUludmFsaWRD
b2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VGV4
dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4
dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZpbGxDb2xv
ciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRGaWxsQ29s
b3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6
OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3IsICZSZW5k
ZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Vmlz
aXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlz
aXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXliZUludmFs
aWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJSaWdodENv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciksCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJv
cmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJUb3BD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVy
VG9wQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5k
ZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9t
Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwgJlJlbmRl
clN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGluZUNvbG9y
LCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZSZW5kZXJT
dHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0bGluZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAmUmVuZGVy
U3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAotICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93LCAmUmVu
ZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywgJlJlbmRl
clN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAotCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZSZW5kZXJT
dHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQYWlu
dFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRT
dHJva2VQYWludENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXksICZSZW5k
ZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURhc2hBcnJh
eSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3Ryb2tl
TWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVyU3R5bGU6
OnNldFN0cm9rZU1pdGVyTGltaXQpLAotCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBw
ZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpzZXRDeCks
Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwgJlJlbmRl
clN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJTdHlsZTo6
c2V0UiksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeCwg
JlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCi0gICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwgJlJlbmRl
clN0eWxlOjpzZXRSeSksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZzZXQsICZS
ZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzdHJva2VX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCi0gICAgICAgIG5ldyBMZW5ndGhQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5kZXJTdHls
ZTo6c2V0WCksCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlZ
LCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCi0KLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5kZXJTdHls
ZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCi0gICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZsb29kQ29s
b3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9vZENvbG9y
KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVN0b3BP
cGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldFN0b3BP
cGFjaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENT
U1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRTdG9wQ29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFs
aWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGlnaHRpbmdD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKLQotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hpZnQsICZS
ZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJhc2VsaW5l
U2hpZnRWYWx1ZSksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3RoVmFsdWU+
KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVyU3R5bGU6
OnNldEtlcm5pbmcpLAotI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250VmFyaWF0
aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAmUmVuZGVy
U3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCi0jZW5kaWYKLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdlaWdodCwg
JlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWlnaHQpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJvcGVy
dHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpz
ZXRGb250U3RyZXRjaCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5bGUoKSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVzcz4oQ1NT
UHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0RGVjb3Jh
dGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4oQ1NTUHJv
cGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxpbmVPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCi0gICAgfTsKLSAgICBj
b25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJS
QVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOwotCi0gICAgc3Rh
dGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNbXSA9
IHsKLSAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3VuZC1jb2xv
ciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQotICAgICAgICBDU1NQcm9w
ZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKLSAgICAgICAgQ1NTUHJvcGVydHlGb250LCAvLyBmb3Ig
Zm9udC1zaXplLCBmb250LXdlaWdodAotICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1hc2ssIC8v
IGZvciBtYXNrLXBvc2l0aW9uCi0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
LAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJSaWdodCwg
Q1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKLSAgICAgICAg
Q1NTUHJvcGVydHlCb3JkZXJDb2xvciwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJSYWRpdXMs
Ci0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAotICAgICAgICBDU1NQcm9wZXJ0
eUJvcmRlclNwYWNpbmcsCi0gICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBmb3IgbGlz
dC1zdHlsZS1pbWFnZQotICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKLSAgICAgICAgQ1NTUHJv
cGVydHlPdXRsaW5lLAotICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCi0gICAgICAgIENTU1By
b3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKLSAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5SdWxlLAot
ICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKLSAgICAgICAgQ1NTUHJvcGVy
dHlUcmFuc2Zvcm1PcmlnaW4KLSAgICB9OwotICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1hdGFibGVT
aG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVTaG9y
dGhhbmRQcm9wZXJ0aWVzKTsKLQotICAgIC8vIFRPRE86Ci0gICAgLy8KLSAgICAvLyAgQ1NTUHJv
cGVydHlWZXJ0aWNhbEFsaWduCi0gICAgLy8KLSAgICAvLyBDb21wb3VuZCBwcm9wZXJ0aWVzIHRo
YXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6Ci0gICAgLy8KLSAg
ICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCi0gICAgLy8gIENTU1Byb3BlcnR5V2Via2l0Qm94UmVm
bGVjdAotCi0gICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUKLSAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKLSAgICAgICAgbV9wcm9w
ZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OwotCi0gICAgQ09N
UElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5pbWF0YWJs
ZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmltYXRhYmxl
UHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOwotICAgIG1fcHJvcGVydHlXcmFwcGVy
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3Vu
dCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOwotCi0gICAgLy8gRmlyc3Qg
d2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhlIG1hcCwg
c28gdGhlIHNob3J0aGFuZC1idWlsZGluZwotICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhlbS4KLQot
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVz
Q291bnQ7ICsraSkgewotICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFw
cGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKLSAgICAgICAgbV9w
cm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOwotICAgICAgICBpbmRleEZyb21Qcm9wZXJ0
eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKLSAgICB9Ci0KLSAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkgewotICAg
ICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVy
dGllc1tpXTsKLSAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9wZXJ0eShw
cm9wZXJ0eUlEKTsKLSAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCi0gICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSo+IGxvbmdoYW5kV3JhcHBlcnM7Ci0gICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOwotICAgICAgICBmb3IgKGF1dG8gbG9u
Z2hhbmQgOiBzaG9ydGhhbmQpIHsKLSAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJbmRleCA9
IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOwotICAgICAgICAgICAgaWYgKHdyYXBwZXJJ
bmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5k
ZXhdKTsKLSAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKG1fcHJv
cGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKLSAgICAgICAgfQotCi0gICAgICAg
IG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9ydGhhbmRQ
cm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpKTsK
LSAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFibGVMb25n
aGFuZFByb3BlcnRpZXNDb3VudCArIGk7Ci0gICAgfQotfQotCi1zdGF0aWMgYm9vbCBnYXRoZXJF
bmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4m
IHByb3BlcnR5U2V0KQotewotICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciog
c2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcio+
KHdyYXBwZXIpOwotICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7Ci0gICAgZm9yIChhdXRvJiBj
dXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkgewotICAg
ICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0eSwgY3Vy
cldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9PSBwcm9w
ZXJ0eSkKLSAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7Ci0gICAgfQotCi0gICAgaWYgKGNv
bnRhaW5lZCkKLSAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5KCkpOwot
Ci0gICAgcmV0dXJuIGNvbnRhaW5lZDsKLX0KLQotLy8gUmV0dXJucyB0cnVlIGlmIHdlIG5lZWQg
dG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwotdm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Ymxl
bmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIENTU1By
b3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgQVNTRVJUKHByb3Ag
IT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKLQotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigp
LndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICBpZiAod3JhcHBlcikgewotICAgICAgICB3
cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKLSNpZiAhTE9HX0RJU0FC
TEVECi0gICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3MpOwotI2Vu
ZGlmCi0gICAgfQotfQotCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3BlcnR5QW5p
bWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCi17Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5QW5p
bWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwot
fQotCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2Nl
bGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xl
dG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwotICAgIHJldHVybiB3cmFwcGVyID8gd3Jh
cHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Ci19Ci0KLS8vIE5vdGU6IHRo
aXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5zaXRpb25B
dFRpbWUoKS4KLUhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFu
aW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0
eSkKLXsKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7Ci0KLSAgICBIYXNoU2V0PENTU1By
b3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
bWFwLnNpemUoKTsgKytpKQotICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0
aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRpZXMpOwot
Ci0gICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKLX0KLQotYm9vbCBDU1NQcm9wZXJ0eUFuaW1h
dGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQotewotICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKLSAgICBpZiAod3JhcHBlcikKLSAgICAg
ICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQot
Ym9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQ
cm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSog
YikKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0gQ1NTUHJv
cGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHko
cHJvcCk7Ci0gICAgaWYgKHdyYXBwZXIpCi0gICAgICAgIHJldHVybiB3cmFwcGVyLT5jYW5JbnRl
cnBvbGF0ZShhLCBiKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLUNTU1Byb3BlcnR5SUQgQ1NT
UHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9uYWw8Ym9v
bD4mIGlzU2hvcnRoYW5kKQotewotICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYg
bWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKLQotICAg
IGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUoKSkKLSAg
ICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKLQotICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOwotICAgIGlzU2hv
cnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7Ci0gICAgcmV0dXJuIHdyYXBw
ZXItPnByb3BlcnR5KCk7Ci19Ci0KLWludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVtUHJv
cGVydGllcygpCi17Ci0gICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6
c2luZ2xldG9uKCkuc2l6ZSgpOwotfQotCi19CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggY2RlMmM4NzU4MzIzODBjNTNmNTBhNTVmMGVkNDRlZjZkODQ0NDE5Yi4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEs
NTQgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6
Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1l
IG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29u
dHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJp
dmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3Jp
dHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1Q
TElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJ
TkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBP
UiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAot
ICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAq
LwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNs
dWRlIDx3dGYvSGFzaFNldC5oPgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQ7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotY2xhc3MgQ1NTUHJv
cGVydHlBbmltYXRpb24gewotcHVibGljOgotICAgIHN0YXRpYyBib29sIGlzUHJvcGVydHlBbmlt
YXRhYmxlKENTU1Byb3BlcnR5SUQpOwotICAgIHN0YXRpYyBib29sIGFuaW1hdGlvbk9mUHJvcGVy
dHlJc0FjY2VsZXJhdGVkKENTU1Byb3BlcnR5SUQpOwotICAgIHN0YXRpYyBib29sIHByb3BlcnRp
ZXNFcXVhbChDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVy
U3R5bGUqIGIpOwotICAgIHN0YXRpYyBib29sIGNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQoQ1NT
UHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKTsK
LSAgICBzdGF0aWMgQ1NTUHJvcGVydHlJRCBnZXRQcm9wZXJ0eUF0SW5kZXgoaW50LCBPcHRpb25h
bDxib29sPiYgaXNTaG9ydGhhbmQpOwotICAgIHN0YXRpYyBpbnQgZ2V0TnVtUHJvcGVydGllcygp
OwotCi0gICAgc3RhdGljIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gYW5pbWF0YWJsZVNob3J0aGFu
ZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKTsKLQotICAgIC8vIFJldHVybiB0cnVl
IGlmIHdlIG5lZWQgdG8gc3RhcnQgc29mdHdhcmUgYW5pbWF0aW9uIHRpbWVycwotICAgIHN0YXRp
YyB2b2lkIGJsZW5kUHJvcGVydGllcyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
Q1NTUHJvcGVydHlJRCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpOwotfTsKLQotfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBv
c2l0ZUFuaW1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDkzYzQ5YmNm
NmQ5MWY0ZGNkZjU0NjcxNGE1NDM2ODNlMTJkNDc5NzYuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29t
cG9zaXRlQW5pbWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDU4NCArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAq
Ci0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICog
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAo
IkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJl
IHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
IAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgIkNT
U0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmlt
YXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiSW1wbGlj
aXRBbmltYXRpb24uaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUg
IkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJSZW5kZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiUmVuZGVy
U3R5bGUuaCIKLSNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCi0jaW5jbHVkZSA8d3RmL05ldmVy
RGVzdHJveWVkLmg+Ci0jaW5jbHVkZSA8d3RmL3RleHQvQ1N0cmluZy5oPgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLUNvbXBvc2l0ZUFuaW1hdGlvbjo6Q29tcG9zaXRlQW5pbWF0aW9uKENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKQotICAgIDogbV9h
bmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNvbnRyb2xsZXIpCi17Ci0gICAgbV9zdXNwZW5k
ZWQgPSBtX2FuaW1hdGlvbkNvbnRyb2xsZXIuaXNTdXNwZW5kZWQoKSAmJiAhbV9hbmltYXRpb25D
b250cm9sbGVyLmFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZCgpOwotfQotCi1Db21w
b3NpdGVBbmltYXRpb246On5Db21wb3NpdGVBbmltYXRpb24oKQotewotICAgIC8vIFRvc3MgdGhl
IHJlZnMgdG8gYWxsIGFuaW1hdGlvbnMsIGJ1dCBtYWtlIHN1cmUgd2UgcmVtb3ZlIHRoZW0gZnJv
bQotICAgIC8vIGFueSB3YWl0aW5nIGxpc3RzIGZpcnN0LgotCi0gICAgY2xlYXJFbGVtZW50KCk7
Ci0gICAgbV90cmFuc2l0aW9ucy5jbGVhcigpOwotICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNs
ZWFyKCk7Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpjbGVhckVsZW1lbnQoKQotewot
ICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgLy8gQ2xlYXIgdGhl
IHJlbmRlcmVycyBmcm9tIGFsbCBydW5uaW5nIGFuaW1hdGlvbnMsIGluIGNhc2Ugd2UgYXJlIGlu
IHRoZSBtaWRkbGUgb2YKLSAgICAgICAgLy8gYW4gYW5pbWF0aW9uIGNhbGxiYWNrIChzZWUgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIyMDUyKQotICAgICAgICBmb3Ig
KGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAg
ICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJhbnNpdGlv
bik7Ci0gICAgICAgICAgICB0cmFuc2l0aW9uLT5jbGVhcigpOwotICAgICAgICB9Ci0gICAgfQot
ICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5
ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBh
bmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAg
YW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKmFuaW1hdGlvbik7
Ci0gICAgICAgICAgICBhbmltYXRpb24tPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVUcmFuc2l0aW9ucyhFbGVtZW50JiBlbGVt
ZW50LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYg
dGFyZ2V0U3R5bGUpCi17Ci0gICAgLy8gSWYgY3VycmVudFN0eWxlIGlzIG51bGwgb3IgdGhlcmUg
YXJlIG5vIG9sZCBvciBuZXcgdHJhbnNpdGlvbnMsIGp1c3Qgc2tpcCBpdAotICAgIGlmICghY3Vy
cmVudFN0eWxlIHx8ICghdGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKSAmJiBtX3RyYW5zaXRpb25z
LmlzRW1wdHkoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIE1hcmsgYWxsIGV4aXN0aW5n
IHRyYW5zaXRpb25zIGFzIG5vIGxvbmdlciBhY3RpdmUuIFdlIHdpbGwgbWFyayB0aGUgc3RpbGwg
YWN0aXZlIG9uZXMKLSAgICAvLyBpbiB0aGUgbmV4dCBsb29wIGFuZCB0aGVuIHRvc3MgdGhlIG9u
ZXMgdGhhdCBkaWRuJ3QgZ2V0IG1hcmtlZC4KLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBt
X3RyYW5zaXRpb25zLnZhbHVlcygpKQotICAgICAgICB0cmFuc2l0aW9uLT5zZXRBY3RpdmUoZmFs
c2UpOwotICAgICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1vZGlmaWVk
Q3VycmVudFN0eWxlOwotICAgIAotICAgIC8vIENoZWNrIHRvIHNlZSBpZiB3ZSBuZWVkIHRvIHVw
ZGF0ZSB0aGUgYWN0aXZlIHRyYW5zaXRpb25zCi0gICAgaWYgKHRhcmdldFN0eWxlLnRyYW5zaXRp
b25zKCkpIHsKLSAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0YXJnZXRTdHlsZS50cmFu
c2l0aW9ucygpLT5zaXplKCk7ICsraSkgewotICAgICAgICAgICAgYXV0byYgYW5pbWF0aW9uID0g
dGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwotICAgICAgICAgICAgYm9v
bCBpc0FjdGl2ZVRyYW5zaXRpb24gPSBhbmltYXRpb24uZHVyYXRpb24oKSB8fCBhbmltYXRpb24u
ZGVsYXkoKSA+IDA7Ci0KLSAgICAgICAgICAgIGF1dG8gbW9kZSA9IGFuaW1hdGlvbi5wcm9wZXJ0
eSgpLm1vZGU7Ci0gICAgICAgICAgICBpZiAobW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25N
b2RlOjpOb25lIHx8IG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6VW5rbm93blBy
b3BlcnR5KQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAgICBDU1NQcm9w
ZXJ0eUlEIHByb3AgPSBhbmltYXRpb24ucHJvcGVydHkoKS5pZDsKLQotICAgICAgICAgICAgYm9v
bCBhbGwgPSBtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OkFsbDsKLQotICAgICAg
ICAgICAgLy8gSGFuZGxlIGJvdGggdGhlICdhbGwnIGFuZCBzaW5nbGUgcHJvcGVydHkgY2FzZXMu
IEZvciB0aGUgc2luZ2xlIHByb3AgY2FzZSwgd2UgbWFrZSBvbmx5IG9uZSBwYXNzCi0gICAgICAg
ICAgICAvLyB0aHJvdWdoIHRoZSBsb29wLgotICAgICAgICAgICAgZm9yIChpbnQgcHJvcGVydHlJ
bmRleCA9IDA7IHByb3BlcnR5SW5kZXggPCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0TnVtUHJv
cGVydGllcygpOyArK3Byb3BlcnR5SW5kZXgpIHsKLSAgICAgICAgICAgICAgICBpZiAoYWxsKSB7
Ci0gICAgICAgICAgICAgICAgICAgIC8vIEdldCB0aGUgbmV4dCBwcm9wZXJ0eSB3aGljaCBpcyBu
b3QgYSBzaG9ydGhhbmQuCi0gICAgICAgICAgICAgICAgICAgIE9wdGlvbmFsPGJvb2w+IGlzU2hv
cnRoYW5kOwotICAgICAgICAgICAgICAgICAgICBwcm9wID0gQ1NTUHJvcGVydHlBbmltYXRpb246
OmdldFByb3BlcnR5QXRJbmRleChwcm9wZXJ0eUluZGV4LCBpc1Nob3J0aGFuZCk7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChpc1Nob3J0aGFuZCAmJiAqaXNTaG9ydGhhbmQpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
ICAgICBpZiAocHJvcCA9PSBDU1NQcm9wZXJ0eUludmFsaWQpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFhbGwpCi0gICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIAot
ICAgICAgICAgICAgICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhcmUgYWx3YXlzIGhhc2hlZCBi
eSBhY3R1YWwgcHJvcGVydGllcywgbmV2ZXIgYW5pbWF0ZUFsbC4KLSAgICAgICAgICAgICAgICBB
U1NFUlQocHJvcCA+PSBmaXJzdENTU1Byb3BlcnR5ICYmIHByb3AgPCAoZmlyc3RDU1NQcm9wZXJ0
eSArIG51bUNTU1Byb3BlcnRpZXMpKTsKLQotICAgICAgICAgICAgICAgIC8vIElmIHRoZXJlIGlz
IGEgcnVubmluZyBhbmltYXRpb24gZm9yIHRoaXMgcHJvcGVydHksIHRoZSB0cmFuc2l0aW9uIGlz
IG92ZXJyaWRkZW4KLSAgICAgICAgICAgICAgICAvLyBhbmQgd2UgaGF2ZSB0byB1c2UgdGhlIHVu
YW5pbWF0ZWRTdHlsZSBmcm9tIHRoZSBhbmltYXRpb24uIFdlIGRvIHRoZSB0ZXN0Ci0gICAgICAg
ICAgICAgICAgLy8gYWdhaW5zdCB0aGUgdW5hbmltYXRlZCBzdHlsZSBoZXJlLCBidXQgd2UgIm92
ZXJyaWRlIiB0aGUgdHJhbnNpdGlvbiBsYXRlci4KLSAgICAgICAgICAgICAgICBhdXRvKiBrZXlm
cmFtZUFuaW1hdGlvbiA9IGFuaW1hdGlvbkZvclByb3BlcnR5KHByb3ApOwotICAgICAgICAgICAg
ICAgIGF1dG8qIGZyb21TdHlsZSA9IGtleWZyYW1lQW5pbWF0aW9uID8gJmtleWZyYW1lQW5pbWF0
aW9uLT51bmFuaW1hdGVkU3R5bGUoKSA6IGN1cnJlbnRTdHlsZTsKLQotICAgICAgICAgICAgICAg
IC8vIFNlZSBpZiB0aGVyZSBpcyBhIGN1cnJlbnQgdHJhbnNpdGlvbiBmb3IgdGhpcyBwcm9wCi0g
ICAgICAgICAgICAgICAgSW1wbGljaXRBbmltYXRpb24qIGltcGxBbmltID0gbV90cmFuc2l0aW9u
cy5nZXQocHJvcCk7Ci0gICAgICAgICAgICAgICAgYm9vbCBlcXVhbCA9IHRydWU7Ci0KLSAgICAg
ICAgICAgICAgICBpZiAoaW1wbEFuaW0pIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSWYgd2Ug
YXJlIHBvc3QgYWN0aXZlIGRvbid0IGJvdGhlciBzZXR0aW5nIHRoZSBhY3RpdmUgZmxhZy4gVGhp
cyB3aWxsIGNhdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgYW5pbWF0aW9uIHRvIGdl
dCByZW1vdmVkIGF0IHRoZSBlbmQgb2YgdGhpcyBmdW5jdGlvbi4KLSAgICAgICAgICAgICAgICAg
ICAgaWYgKCFpbXBsQW5pbS0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICAgICAg
aW1wbEFuaW0tPnNldEFjdGl2ZSh0cnVlKTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbWlnaHQgYmUgYSB0cmFuc2l0aW9uIHRoYXQgaXMganVzdCBm
aW5pc2hpbmcuIFRoYXQgd291bGQgYmUgdGhlIGNhc2UKLSAgICAgICAgICAgICAgICAgICAgLy8g
aWYgaXQgd2VyZSBwb3N0QWN0aXZlLiBCdXQgd2Ugc3RpbGwgbmVlZCB0byBjaGVjayBmb3IgZXF1
YWxpdHkgYmVjYXVzZQotICAgICAgICAgICAgICAgICAgICAvLyBpdCBjb3VsZCBiZSBqdXN0IGZp
bmlzaGluZyBBTkQgY2hhbmdpbmcgdG8gYSBuZXcgZ29hbCBzdGF0ZS4KLSAgICAgICAgICAgICAg
ICAgICAgLy8KLSAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpbXBsQW5pbSBtaWdodCBhbHNv
IG5vdCBiZSBhbiBhbHJlYWR5IHJ1bm5pbmcgdHJhbnNpdGlvbi4gSXQgbWlnaHQgYmUKLSAgICAg
ICAgICAgICAgICAgICAgLy8gbmV3bHkgYWRkZWQgdG8gdGhlIGxpc3QgaW4gYSBwcmV2aW91cyBp
dGVyYXRpb24uIFRoaXMgd291bGQgaGFwcGVuIGlmCi0gICAgICAgICAgICAgICAgICAgIC8vIHlv
dSBoYXZlIGJvdGggYW4gZXhwbGljaXQgdHJhbnNpdGlvbi1wcm9wZXJ0eSBhbmQgJ2FsbCcgaW4g
dGhlIHNhbWUKLSAgICAgICAgICAgICAgICAgICAgLy8gbGlzdC4gSW4gdGhpcyBjYXNlLCB0aGUg
bGF0dGVyIG9uZSBvdmVycmlkZXMgdGhlIGVhcmxpZXIgb25lLCBzbyB3ZQotICAgICAgICAgICAg
ICAgICAgICAvLyBiZWhhdmUgYXMgdGhvdWdoIHRoaXMgaXMgYSBydW5uaW5nIGFuaW1hdGlvbiBi
ZWluZyByZXBsYWNlZC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKCFpbXBsQW5pbS0+aXNUYXJn
ZXRQcm9wZXJ0eUVxdWFsKHByb3AsICZ0YXJnZXRTdHlsZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIEZvciBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHdlIG5lZWQgdG8gcmV0dXJuIGEg
bmV3IFJlbmRlclN0eWxlIHdpdGggdGhlIF9jdXJyZW50XyB2YWx1ZQotICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gb2YgdGhlIHByb3BlcnR5LCBzbyB0aGF0IHJlc3RhcnRlZCB0cmFuc2l0aW9u
cyB1c2UgdGhlIGNvcnJlY3Qgc3RhcnRpbmcgcG9pbnQuCi0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJh
dGVkKHByb3ApICYmIGltcGxBbmltLT5pc0FjY2VsZXJhdGVkKCkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBpZiAoIW1vZGlmaWVkQ3VycmVudFN0eWxlKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBtb2RpZmllZEN1cnJlbnRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZVB0cigqY3VycmVudFN0eWxlKTsKLQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltcGxB
bmltLT5ibGVuZFByb3BlcnR5VmFsdWVJblN0eWxlKHByb3AsIG1vZGlmaWVkQ3VycmVudFN0eWxl
LmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAg
ICAgIExPRyhBbmltYXRpb25zLCAiUmVtb3ZpbmcgZXhpc3RpbmcgSW1wbGljaXRBbmltYXRpb24g
JXAgZm9yIHByb3BlcnR5ICVzIiwgaW1wbEFuaW0sIGdldFByb3BlcnR5TmFtZShwcm9wKSk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2ls
bEJlUmVtb3ZlZCgqaW1wbEFuaW0pOwotICAgICAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0
aW9ucy5yZW1vdmUocHJvcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBlcXVhbCA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAg
ICAgICAgICAgICAgICAgLy8gV2UgbmVlZCB0byBzdGFydCBhIHRyYW5zaXRpb24gaWYgaXQgaXMg
YWN0aXZlIGFuZCB0aGUgcHJvcGVydGllcyBkb24ndCBtYXRjaAotICAgICAgICAgICAgICAgICAg
ICBlcXVhbCA9ICFpc0FjdGl2ZVRyYW5zaXRpb24gfHwgQ1NTUHJvcGVydHlBbmltYXRpb246OnBy
b3BlcnRpZXNFcXVhbChwcm9wLCBmcm9tU3R5bGUsICZ0YXJnZXRTdHlsZSkgfHwgIUNTU1Byb3Bl
cnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKHByb3AsIGZyb21TdHlsZSwg
JnRhcmdldFN0eWxlKTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBX
ZSBjYW4gYmUgaW4gdGhpcyBsb29wIHdpdGggYW4gaW5hY3RpdmUgdHJhbnNpdGlvbiAoIWlzQWN0
aXZlVHJhbnNpdGlvbikuIFdlIG5lZWQKLSAgICAgICAgICAgICAgICAvLyB0byBkbyB0aGF0IHRv
IGNoZWNrIHRvIHNlZSBpZiB3ZSBhcmUgY2FuY2VsaW5nIGEgdHJhbnNpdGlvbi4gQnV0IHdlIGRv
bid0IHdhbnQgdG8KLSAgICAgICAgICAgICAgICAvLyBzdGFydCBvbmUgb2YgdGhlIGluYWN0aXZl
IHRyYW5zaXRpb25zLiBTbyBzaG9ydCBjaXJjdWl0IHRoYXQgaGVyZS4gKFNlZQotICAgICAgICAg
ICAgICAgIC8vIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ3ODc+
Ci0gICAgICAgICAgICAgICAgaWYgKCFlcXVhbCAmJiBpc0FjdGl2ZVRyYW5zaXRpb24pIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gQWRkIHRoZSBuZXcgdHJhbnNpdGlvbgotICAgICAgICAgICAg
ICAgICAgICBhdXRvIGltcGxpY2l0QW5pbWF0aW9uID0gSW1wbGljaXRBbmltYXRpb246OmNyZWF0
ZShhbmltYXRpb24sIHByb3AsIGVsZW1lbnQsICp0aGlzLCBtb2RpZmllZEN1cnJlbnRTdHlsZSA/
ICptb2RpZmllZEN1cnJlbnRTdHlsZSA6ICpmcm9tU3R5bGUpOwotICAgICAgICAgICAgICAgICAg
ICBpZiAobV9zdXNwZW5kZWQgJiYgaW1wbGljaXRBbmltYXRpb24tPmhhc1N0eWxlKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbXBsaWNpdEFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFu
aW1hdGlvblBsYXlTdGF0ZTo6UGF1c2VkKTsKLQotICAgICAgICAgICAgICAgICAgICBMT0coQW5p
bWF0aW9ucywgIkNyZWF0ZWQgSW1wbGljaXRBbmltYXRpb24gJXAgb24gZWxlbWVudCAlcCBmb3Ig
cHJvcGVydHkgJXMgZHVyYXRpb24gJS4yZiBkZWxheSAlLjJmIiwgaW1wbGljaXRBbmltYXRpb24u
cHRyKCksICZlbGVtZW50LCBnZXRQcm9wZXJ0eU5hbWUocHJvcCksIGFuaW1hdGlvbi5kdXJhdGlv
bigpLCBhbmltYXRpb24uZGVsYXkoKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fdHJhbnNpdGlv
bnMuc2V0KHByb3AsIFdURk1vdmUoaW1wbGljaXRBbmltYXRpb24pKTsKLSAgICAgICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBXZSBvbmx5IG5lZWQgb25lIHBhc3MgZm9yIHRoZSBz
aW5nbGUgcHJvcCBjYXNlCi0gICAgICAgICAgICAgICAgaWYgKCFhbGwpCi0gICAgICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8g
TWFrZSBhIGxpc3Qgb2YgdHJhbnNpdGlvbnMgdG8gYmUgcmVtb3ZlZAotICAgIFZlY3RvcjxpbnQ+
IHRvQmVSZW1vdmVkOwotICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMu
dmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKCF0cmFuc2l0aW9uLT5hY3RpdmUoKSkgewotICAgICAg
ICAgICAgYW5pbWF0aW9uQ29udHJvbGxlcigpLmFuaW1hdGlvbldpbGxCZVJlbW92ZWQoKnRyYW5z
aXRpb24pOwotICAgICAgICAgICAgdG9CZVJlbW92ZWQuYXBwZW5kKHRyYW5zaXRpb24tPmFuaW1h
dGluZ1Byb3BlcnR5KCkpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBJ
bXBsaWNpdEFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAgZm9yIHByb3BlcnR5ICVzIiwgdHJh
bnNpdGlvbi5nZXQoKSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFtZSh0cmFuc2l0aW9uLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpKSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgcmVtb3Zl
IHRoZSB0cmFuc2l0aW9ucyBmcm9tIHRoZSBsaXN0Ci0gICAgZm9yIChhdXRvIHByb3BlcnR5VG9S
ZW1vdmUgOiB0b0JlUmVtb3ZlZCkKLSAgICAgICAgbV90cmFuc2l0aW9ucy5yZW1vdmUocHJvcGVy
dHlUb1JlbW92ZSk7Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjp1cGRhdGVLZXlmcmFt
ZUFuaW1hdGlvbnMoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRT
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKQotewotICAgIC8vIE5vdGhpbmcg
dG8gZG8gaWYgd2UgZG9uJ3QgaGF2ZSBhbnkgYW5pbWF0aW9ucywgYW5kIGRpZG4ndCBoYXZlIGFu
eSBiZWZvcmUKLSAgICBpZiAobV9rZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpICYmICF0YXJn
ZXRTdHlsZS5oYXNBbmltYXRpb25zKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1fa2V5ZnJh
bWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAKLSAgICBpZiAoY3VycmVudFN0
eWxlICYmIGN1cnJlbnRTdHlsZS0+aGFzQW5pbWF0aW9ucygpICYmIHRhcmdldFN0eWxlLmhhc0Fu
aW1hdGlvbnMoKSAmJiAqKGN1cnJlbnRTdHlsZS0+YW5pbWF0aW9ucygpKSA9PSAqKHRhcmdldFN0
eWxlLmFuaW1hdGlvbnMoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIEFuaW1hdGlvbk5hbWVN
YXAgbmV3QW5pbWF0aW9uczsKLQotICAgIC8vIFRvc3MgdGhlIGFuaW1hdGlvbiBvcmRlciBtYXAu
Ci0gICAgbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmNsZWFyKCk7Ci0KLSAgICBzdGF0aWMg
TWFpblRocmVhZE5ldmVyRGVzdHJveWVkPGNvbnN0IEF0b21TdHJpbmc+IG5vbmUoIm5vbmUiLCBB
dG9tU3RyaW5nOjpDb25zdHJ1Y3RGcm9tTGl0ZXJhbCk7Ci0gICAgCi0gICAgLy8gTm93IG1hcmsg
YW55IHN0aWxsIGFjdGl2ZSBhbmltYXRpb25zIGFzIGFjdGl2ZSBhbmQgYWRkIGFueSBuZXcgYW5p
bWF0aW9ucy4KLSAgICBpZiAodGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpKSB7Ci0gICAgICAgIGlu
dCBudW1BbmltcyA9IHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKS0+c2l6ZSgpOwotICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bUFuaW1zOyArK2kpIHsKLSAgICAgICAgICAgIGF1dG8mIGFu
aW1hdGlvbiA9IHRhcmdldFN0eWxlLmFuaW1hdGlvbnMoKS0+YW5pbWF0aW9uKGkpOwotICAgICAg
ICAgICAgQXRvbVN0cmluZyBhbmltYXRpb25OYW1lKGFuaW1hdGlvbi5uYW1lKCkpOwotCi0gICAg
ICAgICAgICBpZiAoIWFuaW1hdGlvbi5pc1ZhbGlkQW5pbWF0aW9uKCkpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIFNlZSBpZiB0aGVyZSBp
cyBhIGN1cnJlbnQgYW5pbWF0aW9uIGZvciB0aGlzIG5hbWUuCi0gICAgICAgICAgICBSZWZQdHI8
S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdl
dChhbmltYXRpb25OYW1lLmltcGwoKSk7Ci0gICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltKSB7
Ci0gICAgICAgICAgICAgICAgbmV3QW5pbWF0aW9ucy5hZGQoa2V5ZnJhbWVBbmltLT5uYW1lKCku
aW1wbCgpLCBrZXlmcmFtZUFuaW0pOwotCi0gICAgICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5p
bS0+cG9zdEFjdGl2ZSgpKQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICAgICAgICAgIC8vIEFuaW1hdGlvbnMgbWF0Y2gsIGJ1dCBwbGF5IHN0YXRlcyBtYXkgZGlmZmVy
LiBVcGRhdGUgaWYgbmVlZGVkLgotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRl
UGxheVN0YXRlKGFuaW1hdGlvbi5wbGF5U3RhdGUoKSk7Ci0KLSAgICAgICAgICAgICAgICAvLyBT
ZXQgdGhlIHNhdmVkIGFuaW1hdGlvbiB0byB0aGlzIG5ldyBvbmUsIGp1c3QgaW4gY2FzZSB0aGUg
cGxheSBzdGF0ZSBoYXMgY2hhbmdlZC4KLSAgICAgICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnNl
dEFuaW1hdGlvbihhbmltYXRpb24pOwotICAgICAgICAgICAgfSBlbHNlIGlmICgoYW5pbWF0aW9u
LmR1cmF0aW9uKCkgfHwgYW5pbWF0aW9uLmRlbGF5KCkpICYmIGFuaW1hdGlvbi5pdGVyYXRpb25D
b3VudCgpICYmIGFuaW1hdGlvbk5hbWUgIT0gbm9uZSkgewotICAgICAgICAgICAgICAgIGtleWZy
YW1lQW5pbSA9IEtleWZyYW1lQW5pbWF0aW9uOjpjcmVhdGUoYW5pbWF0aW9uLCBlbGVtZW50LCAq
dGhpcywgdGFyZ2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiQ3Jl
YXRpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgb24gZWxlbWVudCAlcCB3aXRoIGtleWZyYW1lcyAl
cywgZHVyYXRpb24gJS4yZiwgZGVsYXkgJS4yZiwgaXRlcmF0aW9ucyAlLjJmIiwga2V5ZnJhbWVB
bmltLmdldCgpLCAmZWxlbWVudCwgYW5pbWF0aW9uLm5hbWUoKS51dGY4KCkuZGF0YSgpLCBhbmlt
YXRpb24uZHVyYXRpb24oKSwgYW5pbWF0aW9uLmRlbGF5KCksIGFuaW1hdGlvbi5pdGVyYXRpb25D
b3VudCgpKTsKLQotICAgICAgICAgICAgICAgIGlmIChtX3N1c3BlbmRlZCkgewotICAgICAgICAg
ICAgICAgICAgICBrZXlmcmFtZUFuaW0tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3Rh
dGU6OlBhdXNlZCk7Ci0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiICAoY3Jl
YXRlZCBpbiBzdXNwZW5kZWQvcGF1c2VkIHN0YXRlKSIpOwotICAgICAgICAgICAgICAgIH0KLSNp
ZiAhTE9HX0RJU0FCTEVECi0gICAgICAgICAgICAgICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBr
ZXlmcmFtZUFuaW0tPmtleWZyYW1lcygpLnByb3BlcnRpZXMoKSkKLSAgICAgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICIgIHByb3BlcnR5ICVzIiwgZ2V0UHJvcGVydHlOYW1lKHByb3Bl
cnR5SUQpKTsKLSNlbmRpZgotCi0gICAgICAgICAgICAgICAgbmV3QW5pbWF0aW9ucy5zZXQoa2V5
ZnJhbWVBbmltLT5uYW1lKCkuaW1wbCgpLCBrZXlmcmFtZUFuaW0pOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBBZGQgdGhpcyB0byB0aGUgYW5pbWF0aW9uIG9y
ZGVyIG1hcC4KLSAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0pCi0gICAgICAgICAgICAgICAg
bV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFwLmFwcGVuZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5p
bXBsKCkpOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIC8vIE1ha2UgYSBsaXN0IG9mIGFu
aW1hdGlvbnMgdG8gYmUgcmVtb3ZlZC4KLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5
ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICghbmV3QW5pbWF0aW9ucy5j
b250YWlucyhhbmltYXRpb24tPm5hbWUoKS5pbXBsKCkpKSB7Ci0gICAgICAgICAgICBhbmltYXRp
b25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKLSAgICAg
ICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
UmVtb3ZpbmcgS2V5ZnJhbWVBbmltYXRpb24gJXAgZnJvbSBlbGVtZW50ICVwIiwgYW5pbWF0aW9u
LmdldCgpLCAmZWxlbWVudCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgc3RkOjpzd2Fw
KG5ld0FuaW1hdGlvbnMsIG1fa2V5ZnJhbWVBbmltYXRpb25zKTsKLX0KLQotQW5pbWF0aW9uVXBk
YXRlIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0ZShFbGVtZW50JiBlbGVtZW50LCBjb25zdCBS
ZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUp
Ci17Ci0gICAgLy8gV2UgZG9uJ3QgZG8gYW55IHRyYW5zaXRpb25zIGlmIHdlIGRvbid0IGhhdmUg
YSBjdXJyZW50U3R5bGUgKG9uIHN0YXJ0dXApLgotICAgIHVwZGF0ZVRyYW5zaXRpb25zKGVsZW1l
bnQsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAgIHVwZGF0ZUtleWZyYW1lQW5pbWF0
aW9ucyhlbGVtZW50LCBjdXJyZW50U3R5bGUsIHRhcmdldFN0eWxlKTsKLSAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBPcHRpb25TZXQ8QW5pbWF0aW9u
SW1wYWN0PiBpbWFwY3Q7Ci0KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1h
dGVkU3R5bGU7Ci0KLSAgICBpZiAoY3VycmVudFN0eWxlKSB7Ci0gICAgICAgIC8vIE5vdyB0aGF0
IHdlIGhhdmUgdHJhbnNpdGlvbiBvYmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRo
ZSBuZXcgZ29hbCBzdGF0ZS4gIFdlIHdhbnQgdGhlbQotICAgICAgICAvLyB0byBmaWxsIGluIGEg
UmVuZGVyU3R5bGUqJiBvbmx5IGlmIG5lZWRlZC4KLSAgICAgICAgYm9vbCBjaGVja0ZvclN0YWNr
aW5nQ29udGV4dCA9IGZhbHNlOwotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3Ry
YW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhdXRvIGNoYW5nZXMgPSB0cmFuc2l0
aW9uLT5hbmltYXRlKCp0aGlzLCB0YXJnZXRTdHlsZSwgYW5pbWF0ZWRTdHlsZSk7Ci0gICAgICAg
ICAgICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hhbmdlOjpTdHlsZUJsZW5kZWQpKQot
ICAgICAgICAgICAgICAgIGNoZWNrRm9yU3RhY2tpbmdDb250ZXh0IHw9IFdpbGxDaGFuZ2VEYXRh
Ojpwcm9wZXJ0eUNyZWF0ZXNTdGFja2luZ0NvbnRleHQodHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJv
cGVydHkoKSk7Ci0KLSAgICAgICAgICAgIGlmIChjaGFuZ2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFu
Z2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSkgJiYgdHJhbnNpdGlvbi0+YWZmZWN0c0FjY2VsZXJhdGVk
UHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICBpbWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6
UmVxdWlyZXNSZWNvbXBvc2l0ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBpZiAoYW5pbWF0ZWRT
dHlsZSAmJiBjaGVja0ZvclN0YWNraW5nQ29udGV4dCkgewotICAgICAgICAgICAgLy8gTm90ZSB0
aGF0IHRoaXMgaXMgc2ltaWxhciB0byBjb2RlIGluIFN0eWxlOjpBZGp1c3Rlcjo6YWRqdXN0KCkg
YnV0IG9ubHkgbmVlZHMgdG8gY29uc3VsdAotICAgICAgICAgICAgLy8gYW5pbWF0YWJsZSBwcm9w
ZXJ0aWVzIHRoYXQgY2FuIHRyaWdnZXIgc3RhY2tpbmcgY29udGV4dC4KLSAgICAgICAgICAgIGlm
IChhbmltYXRlZFN0eWxlLT5vcGFjaXR5KCkgPCAxLjBmCi0gICAgICAgICAgICAgICAgfHwgYW5p
bWF0ZWRTdHlsZS0+aGFzVHJhbnNmb3JtUmVsYXRlZFByb3BlcnR5KCkKLSAgICAgICAgICAgICAg
ICB8fCBhbmltYXRlZFN0eWxlLT5oYXNNYXNrKCkKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRl
ZFN0eWxlLT5jbGlwUGF0aCgpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRTdHlsZS0+Ym94
UmVmbGVjdCgpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRTdHlsZS0+aGFzRmlsdGVyKCkK
LSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVk
U3R5bGUtPmhhc0JhY2tkcm9wRmlsdGVyKCkKLSNlbmRpZgotICAgICAgICAgICAgICAgICkKLSAg
ICAgICAgICAgIGltYXBjdC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpGb3JjZXNTdGFja2luZ0NvbnRl
eHQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgLy8gTm93IHRoYXQgd2UgaGF2ZSBhbmltYXRp
b24gb2JqZWN0cyByZWFkeSwgbGV0IHRoZW0ga25vdyBhYm91dCB0aGUgbmV3IGdvYWwgc3RhdGUu
ICBXZSB3YW50IHRoZW0KLSAgICAvLyB0byBmaWxsIGluIGEgUmVuZGVyU3R5bGUqJiBvbmx5IGlm
IG5lZWRlZC4KLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJN
YXApIHsKLSAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlmcmFtZUFuaW0gPSBt
X2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZSk7Ci0gICAgICAgIGlmIChrZXlmcmFtZUFuaW0p
IHsKLSAgICAgICAgICAgIGF1dG8gY2hhbmdlcyA9IGtleWZyYW1lQW5pbS0+YW5pbWF0ZSgqdGhp
cywgdGFyZ2V0U3R5bGUsIGFuaW1hdGVkU3R5bGUpOwotICAgICAgICAgICAgaWYgKGNoYW5nZXMu
Y29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6UnVubmluZ1N0YXRlQ2hhbmdlKSAmJiBrZXlmcmFtZUFu
aW0tPmFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkpCi0gICAgICAgICAgICAgICAgaW1hcGN0
LmFkZChBbmltYXRpb25JbXBhY3Q6OlJlcXVpcmVzUmVjb21wb3NpdGUpOwotCi0gICAgICAgICAg
ICBpZiAoY2hhbmdlcy5jb250YWlucyhBbmltYXRlQ2hhbmdlOjpTdHlsZUJsZW5kZWQpICYmIGtl
eWZyYW1lQW5pbS0+dHJpZ2dlcnNTdGFja2luZ0NvbnRleHQoKSkKLSAgICAgICAgICAgICAgICBp
bWFwY3QuYWRkKEFuaW1hdGlvbkltcGFjdDo6Rm9yY2VzU3RhY2tpbmdDb250ZXh0KTsKLQotICAg
ICAgICAgICAgbV9oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0IHw9IGtleWZyYW1lQW5p
bS0+ZGVwZW5kc09uTGF5b3V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4geyBX
VEZNb3ZlKGFuaW1hdGVkU3R5bGUpLCBpbWFwY3QgfTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJl
bmRlclN0eWxlPiBDb21wb3NpdGVBbmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoKSBjb25zdAot
ewotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gcmVzdWx0U3R5bGU7Ci0gICAgZm9y
IChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkKLSAgICAgICAgdHJh
bnNpdGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7Ci0KLSAgICBtX2tleWZyYW1l
QW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBmb3IgKGF1dG8mIG5hbWUgOiBt
X2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXApIHsKLSAgICAgICAgUmVmUHRyPEtleWZyYW1lQW5p
bWF0aW9uPiBrZXlmcmFtZUFuaW1hdGlvbiA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdldChuYW1l
KTsKLSAgICAgICAgaWYgKGtleWZyYW1lQW5pbWF0aW9uKQotICAgICAgICAgICAga2V5ZnJhbWVB
bmltYXRpb24tPmdldEFuaW1hdGVkU3R5bGUocmVzdWx0U3R5bGUpOwotICAgIH0KLSAgICAKLSAg
ICByZXR1cm4gcmVzdWx0U3R5bGU7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IENvbXBvc2l0ZUFu
aW1hdGlvbjo6dGltZVRvTmV4dFNlcnZpY2UoKSBjb25zdAotewotICAgIC8vIFJldHVybnMgdGhl
IHRpbWUgYXQgd2hpY2ggbmV4dCBzZXJ2aWNlIGlzIHJlcXVpcmVkLiBXVEY6Om51bGxvcHQgbWVh
bnMgbm8gc2VydmljZSBpcyByZXF1aXJlZC4gMCBtZWFucwotICAgIC8vIHNlcnZpY2UgaXMgcmVx
dWlyZWQgbm93LCBhbmQgPiAwIG1lYW5zIHNlcnZpY2UgaXMgcmVxdWlyZWQgdGhhdCBtYW55IHNl
Y29uZHMgaW4gdGhlIGZ1dHVyZS4KLSAgICBPcHRpb25hbDxTZWNvbmRzPiBtaW5UOwotICAgIAot
ICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0
cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgT3B0aW9u
YWw8U2Vjb25kcz4gdCA9IHRyYW5zaXRpb24tPnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAg
ICAgICBpZiAoIXQpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpZiAo
IW1pblQgfHwgdC52YWx1ZSgpIDwgbWluVC52YWx1ZSgpKQotICAgICAgICAgICAgICAgIG1pblQg
PSB0LnZhbHVlKCk7Ci0gICAgICAgICAgICBpZiAobWluVC52YWx1ZSgpID09IDBfcykKLSAgICAg
ICAgICAgICAgICByZXR1cm4gMF9zOwotICAgICAgICB9Ci0gICAgfQotICAgIGlmICghbV9rZXlm
cmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25z
LmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tl
eWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgT3B0aW9uYWw8U2Vjb25k
cz4gdCA9IGFuaW1hdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAgIGlmICgh
dCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghbWluVCB8fCB0
LnZhbHVlKCkgPCBtaW5ULnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWluVCA9IHQudmFsdWUo
KTsKLSAgICAgICAgICAgIGlmIChtaW5ULnZhbHVlKCkgPT0gMF9zKQotICAgICAgICAgICAgICAg
IHJldHVybiAwX3M7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gbWluVDsKLX0KLQot
S2V5ZnJhbWVBbmltYXRpb24qIENvbXBvc2l0ZUFuaW1hdGlvbjo6YW5pbWF0aW9uRm9yUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBLZXlmcmFtZUFuaW1hdGlv
biogcmVzdWx0ID0gbnVsbHB0cjsKLQotICAgIC8vIFdlIHdhbnQgdG8gc2VuZCBiYWNrIHRoZSBs
YXN0IGFuaW1hdGlvbiB3aXRoIHRoZSBwcm9wZXJ0eSBpZiB0aGVyZSBhcmUgbXVsdGlwbGVzLgot
ICAgIC8vIFNvIHdlIG5lZWQgdG8gaXRlcmF0ZSB0aHJvdWdoIGFsbCBhbmltYXRpb25zCi0gICAg
aWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1h
dGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAo
YW5pbWF0aW9uLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0eShwcm9wZXJ0eSkpCi0gICAgICAgICAg
ICAgICAgcmVzdWx0ID0gYW5pbWF0aW9uLmdldCgpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAg
cmV0dXJuIHJlc3VsdDsKLX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OmNvbXB1dGVFeHRl
bnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAg
Ly8gSWYgbW9yZSB0aGFuIG9uZSB0cmFuc2l0aW9uIGFuZCBhbmltYXRpb24gYWZmZWN0IHRyYW5z
Zm9ybSwgZ2l2ZSB1cC4KLSAgICBib29sIHNlZW5UcmFuc2Zvcm1BbmltYXRpb24gPSBmYWxzZTsK
LSAgICAKLSAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZh
bHVlcygpKSB7Ci0gICAgICAgIGlmICghYW5pbWF0aW9uLT5oYXNBbmltYXRpb25Gb3JQcm9wZXJ0
eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAg
ICBpZiAoc2VlblRyYW5zZm9ybUFuaW1hdGlvbikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICBzZWVuVHJhbnNmb3JtQW5pbWF0aW9uID0gdHJ1ZTsKLQotICAgICAgICBpZiAo
IWFuaW1hdGlvbi0+Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5kcykpCi0g
ICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgZm9yIChhdXRvJiB0cmFuc2l0
aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAodHJhbnNpdGlvbi0+
YW5pbWF0aW5nUHJvcGVydHkoKSAhPSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSB8fCAhdHJhbnNpdGlv
bi0+aGFzU3R5bGUoKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmIChzZWVu
VHJhbnNmb3JtQW5pbWF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAg
IGlmICghdHJhbnNpdGlvbi0+Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKGJvdW5k
cykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHJldHVybiB0
cnVlOwotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6c3VzcGVuZEFuaW1hdGlvbnMoKQot
ewotICAgIGlmIChtX3N1c3BlbmRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9zdXNwZW5k
ZWQgPSB0cnVlOwotCi0gICAgaWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAg
ICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKQot
ICAgICAgICAgICAgYW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRl
OjpQYXVzZWQpOwotICAgIH0KLQotICAgIGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsK
LSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkg
ewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmhhc1N0eWxlKCkpCi0gICAgICAgICAgICAg
ICAgdHJhbnNpdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6UGF1c2Vk
KTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnJlc3Vt
ZUFuaW1hdGlvbnMoKQotewotICAgIGlmICghbV9zdXNwZW5kZWQpCi0gICAgICAgIHJldHVybjsK
LQotICAgIG1fc3VzcGVuZGVkID0gZmFsc2U7Ci0KLSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRp
b25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNp
c3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1h
dGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmltYXRpb24tPnBsYXlTdGF0ZVBs
YXlpbmcoKSkKLSAgICAgICAgICAgICAgICBhbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmlt
YXRpb25QbGF5U3RhdGU6OlBsYXlpbmcpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFt
X3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24g
OiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+
aGFzU3R5bGUoKSkKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT51cGRhdGVQbGF5U3RhdGUo
QW5pbWF0aW9uUGxheVN0YXRlOjpQbGF5aW5nKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246Om92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpCi17Ci0gICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewot
ICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7
Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9w
ZXJ0eSkKLSAgICAgICAgICAgICAgICB0cmFuc2l0aW9uLT5zZXRPdmVycmlkZGVuKHRydWUpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lT3Zl
cnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQotewotICAg
IGlmICghbV90cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFu
c2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5z
aXRpb24tPmFuaW1hdGluZ1Byb3BlcnR5KCkgPT0gcHJvcGVydHkpCi0gICAgICAgICAgICAgICAg
dHJhbnNpdGlvbi0+c2V0T3ZlcnJpZGRlbihmYWxzZSk7Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0K
LWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjppc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5
SUQgcHJvcGVydHksIGJvb2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdAotewotICAgIGlmICghbV9r
ZXlmcmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRp
b25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBt
X2tleWZyYW1lQW5pbWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGFuaW1hdGlv
bi0+aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5KSkKLSAgICAg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICghbV90
cmFuc2l0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDog
bV90cmFuc2l0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKHRyYW5zaXRpb24tPmlz
QW5pbWF0aW5nUHJvcGVydHkocHJvcGVydHksIGFjY2VsZXJhdGVkT25seSkpCi0gICAgICAgICAg
ICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgcmV0dXJuIGZhbHNlOwot
fQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6cGF1c2VBbmltYXRpb25BdFRpbWUoY29uc3Qg
QXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpCi17Ci0gICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMu
Y2hlY2tDb25zaXN0ZW5jeSgpOwotCi0gICAgUmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPiBrZXlm
cmFtZUFuaW0gPSBtX2tleWZyYW1lQW5pbWF0aW9ucy5nZXQobmFtZS5pbXBsKCkpOwotICAgIGlm
ICgha2V5ZnJhbWVBbmltIHx8ICFrZXlmcmFtZUFuaW0tPnJ1bm5pbmcoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAga2V5ZnJhbWVBbmltLT5mcmVlemVBdFRpbWUodCk7Ci0gICAgcmV0
dXJuIHRydWU7Ci19Ci0KLWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpwYXVzZVRyYW5zaXRpb25B
dFRpbWUoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAgaWYgKChwcm9w
ZXJ0eSA8IGZpcnN0Q1NTUHJvcGVydHkpIHx8IChwcm9wZXJ0eSA+PSBmaXJzdENTU1Byb3BlcnR5
ICsgbnVtQ1NTUHJvcGVydGllcykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIEltcGxp
Y2l0QW5pbWF0aW9uKiBpbXBsQW5pbSA9IG1fdHJhbnNpdGlvbnMuZ2V0KHByb3BlcnR5KTsKLSAg
ICBpZiAoIWltcGxBbmltKSB7Ci0gICAgICAgIC8vIENoZWNrIHRvIHNlZSBpZiB0aGlzIHByb3Bl
cnR5IGlzIGJlaW5nIGFuaW1hdGVkIHZpYSBhIHNob3J0aGFuZC4KLSAgICAgICAgLy8gVGhpcyBj
b2RlIGlzIG9ubHkgdXNlZCBmb3IgdGVzdGluZywgc28gcGVyZm9ybWFuY2UgaXMgbm90IGNyaXRp
Y2FsIGhlcmUuCi0gICAgICAgIEhhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gc2hvcnRoYW5kUHJvcGVy
dGllcyA9IENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGlu
Z1Byb3BlcnR5KHByb3BlcnR5KTsKLSAgICAgICAgYm9vbCBhbnlQYXVzZWQgPSBmYWxzZTsKLSAg
ICAgICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBzaG9ydGhhbmRQcm9wZXJ0aWVzKSB7Ci0gICAg
ICAgICAgICBpZiAocGF1c2VUcmFuc2l0aW9uQXRUaW1lKHByb3BlcnR5SUQsIHQpKQotICAgICAg
ICAgICAgICAgIGFueVBhdXNlZCA9IHRydWU7Ci0gICAgICAgIH0KLSAgICAgICAgcmV0dXJuIGFu
eVBhdXNlZDsKLSAgICB9Ci0KLSAgICBpZiAoIWltcGxBbmltLT5ydW5uaW5nKCkpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIGlmICgodCA+PSAwLjApICYmICh0IDw9IGltcGxBbmltLT5k
dXJhdGlvbigpKSkgewotICAgICAgICBpbXBsQW5pbS0+ZnJlZXplQXRUaW1lKHQpOwotICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXVuc2lnbmVk
IENvbXBvc2l0ZUFuaW1hdGlvbjo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKLXsK
LSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgCi0gICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMu
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFt
ZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKGFuaW1hdGlvbi0+cnVubmluZygp
KQotICAgICAgICAgICAgKytjb3VudDsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRp
b24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9uLT5y
dW5uaW5nKCkpCi0gICAgICAgICAgICArK2NvdW50OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4g
Y291bnQ7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKZGVsZXRlZCBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDk0MjI2OTIzOTZkMmZiYTY4ODBkMWNkOWY5YzhkNjliODJlN2IwYzUuLjAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAt
MSwxMDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBt
ZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBu
YW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMg
Y29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBk
ZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Ig
d3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUg
SU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
LSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIu
aCIKLSNpbmNsdWRlICJJbXBsaWNpdEFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5p
bWF0aW9uLmgiCi0jaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9B
dG9tU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU7Ci1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyOwotY2xhc3Mg
UmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi0vLyBBIENvbXBvc2l0ZUFuaW1h
dGlvbiByZXByZXNlbnRzIGEgY29sbGVjdGlvbiBvZiBhbmltYXRpb25zIHRoYXQgYXJlIHJ1bm5p
bmcKLS8vIG9uIGEgc2luZ2xlIFJlbmRlckVsZW1lbnQsIHN1Y2ggYXMgYSBudW1iZXIgb2YgcHJv
cGVydGllcyB0cmFuc2l0aW9uaW5nIGF0IG9uY2UuCi1jbGFzcyBDb21wb3NpdGVBbmltYXRpb24g
OiBwdWJsaWMgUmVmQ291bnRlZDxDb21wb3NpdGVBbmltYXRpb24+IHsKLSAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPENvbXBvc2l0ZUFuaW1hdGlv
bj4gY3JlYXRlKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9s
bGVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQ29tcG9zaXRlQW5pbWF0
aW9uKGFuaW1hdGlvbkNvbnRyb2xsZXIpKTsKLSAgICB9OwotCi0gICAgfkNvbXBvc2l0ZUFuaW1h
dGlvbigpOwotICAgIAotICAgIHZvaWQgY2xlYXJFbGVtZW50KCk7Ci0KLSAgICBBbmltYXRpb25V
cGRhdGUgYW5pbWF0ZShFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUqIGN1cnJlbnRTdHlsZSwg
Y29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IGdldEFuaW1hdGVkU3R5bGUoKSBjb25zdDsKLSAgICBib29sIGNvbXB1dGVFeHRl
bnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICBPcHRpb25h
bDxTZWNvbmRzPiB0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0OwotICAgIAotICAgIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlJiBhbmltYXRpb25Db250cm9sbGVyKCkgY29uc3QgeyByZXR1
cm4gbV9hbmltYXRpb25Db250cm9sbGVyOyB9Ci0KLSAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25z
KCk7Ci0gICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgYm9vbCBpc1N1c3BlbmRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3VzcGVuZGVkOyB9Ci0gICAgCi0gICAgYm9vbCBoYXNBbmltYXRp
b25zKCkgY29uc3QgIHsgcmV0dXJuICFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSB8fCAhbV9rZXlm
cmFtZUFuaW1hdGlvbnMuaXNFbXB0eSgpOyB9Ci0KLSAgICBib29sIGlzQW5pbWF0aW5nUHJvcGVy
dHkoQ1NTUHJvcGVydHlJRCwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0OwotCi0gICAgS2V5
ZnJhbWVBbmltYXRpb24qIGFuaW1hdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0
OwotCi0gICAgdm9pZCBvdmVycmlkZUltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEKTsK
LSAgICB2b2lkIHJlc3VtZU92ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJ
RCk7Ci0KLSAgICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKGNvbnN0IEF0b21TdHJpbmcmIG5h
bWUsIGRvdWJsZSB0KTsKLSAgICBib29sIHBhdXNlVHJhbnNpdGlvbkF0VGltZShDU1NQcm9wZXJ0
eUlELCBkb3VibGUpOwotICAgIHVuc2lnbmVkIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNv
bnN0OwotCi0gICAgYm9vbCBoYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0KCkgY29uc3Qg
eyByZXR1cm4gbV9oYXNBbmltYXRpb25UaGF0RGVwZW5kc09uTGF5b3V0OyB9Ci0KLXByaXZhdGU6
Ci0gICAgQ29tcG9zaXRlQW5pbWF0aW9uKENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlJik7
Ci0KLSAgICB2b2lkIHVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHls
ZSogY3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwotICAgIHZv
aWQgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25zKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSog
Y3VycmVudFN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwotICAgIAotICAg
IHR5cGVkZWYgSGFzaE1hcDxpbnQsIFJlZlB0cjxJbXBsaWNpdEFuaW1hdGlvbj4+IENTU1Byb3Bl
cnR5VHJhbnNpdGlvbnNNYXA7Ci0gICAgdHlwZWRlZiBIYXNoTWFwPEF0b21TdHJpbmdJbXBsKiwg
UmVmUHRyPEtleWZyYW1lQW5pbWF0aW9uPj4gQW5pbWF0aW9uTmFtZU1hcDsKLQotICAgIGJvb2wg
bV9zdXNwZW5kZWQgeyBmYWxzZSB9OwotICAgIGJvb2wgbV9oYXNBbmltYXRpb25UaGF0RGVwZW5k
c09uTGF5b3V0IHsgZmFsc2UgfTsKLQotICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
JiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7Ci0gICAgQ1NTUHJvcGVydHlUcmFuc2l0aW9uc01hcCBt
X3RyYW5zaXRpb25zOwotICAgIEFuaW1hdGlvbk5hbWVNYXAgbV9rZXlmcmFtZUFuaW1hdGlvbnM7
Ci0gICAgVmVjdG9yPEF0b21TdHJpbmdJbXBsKj4gbV9rZXlmcmFtZUFuaW1hdGlvbk9yZGVyTWFw
OwotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUv
cGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCA0NTM5ZjZhNTNlYzUxNTBjOTA3MzdkMjBlMWJiMmE1YmI0MGEwOWE4Li4wMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcAorKysgL2Rldi9udWxsCkBAIC0x
LDM3OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1l
dDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5h
bWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBj
b250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRl
cml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3
cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJ
TVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEs
IE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
Ci0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgot
ICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJJbXBsaWNpdEFuaW1hdGlvbi5o
IgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIKLSNpbmNsdWRl
ICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5o
IgotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0jaW5jbHVkZSAiQ29udGVudENoYW5nZU9ic2Vy
dmVyLmgiCi0jZW5kaWYKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiR2VvbWV0
cnlVdGlsaXRpZXMuaCIKLSNpbmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlN0eWxlUGVuZGluZ1Jlc291cmNlcy5oIgotCi1uYW1l
c3BhY2UgV2ViQ29yZSB7Ci0KLUltcGxpY2l0QW5pbWF0aW9uOjpJbXBsaWNpdEFuaW1hdGlvbihj
b25zdCBBbmltYXRpb24mIHRyYW5zaXRpb24sIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVy
dHksIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0
aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgZnJvbVN0eWxlKQotICAgIDogQW5pbWF0aW9uQmFzZSh0
cmFuc2l0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmltYXRpb24pCi0gICAgLCBtX2Zyb21TdHls
ZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoZnJvbVN0eWxlKSkKLSAgICAsIG1fdHJhbnNpdGlvblBy
b3BlcnR5KHRyYW5zaXRpb24ucHJvcGVydHkoKS5pZCkKLSAgICAsIG1fYW5pbWF0aW5nUHJvcGVy
dHkoYW5pbWF0aW5nUHJvcGVydHkpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBl
bGVtZW50LmRvY3VtZW50KCkuY29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkQWRkVHJhbnNpdGlv
bihlbGVtZW50LCB0cmFuc2l0aW9uKTsKLSNlbmRpZgotICAgIEFTU0VSVChhbmltYXRpbmdQcm9w
ZXJ0eSAhPSBDU1NQcm9wZXJ0eUludmFsaWQpOwotfQotCi1JbXBsaWNpdEFuaW1hdGlvbjo6fklt
cGxpY2l0QW5pbWF0aW9uKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChh
dXRvKiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVu
dCgpLmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZFJlbW92ZVRyYW5zaXRpb24oKmVsZW1lbnQs
IG1fYW5pbWF0aW5nUHJvcGVydHkpOwotI2VuZGlmCi0gICAgLy8gLy8gTWFrZSBzdXJlIHRvIHRl
bGwgdGhlIHJlbmRlcmVyIHRoYXQgd2UgYXJlIGVuZGluZy4gVGhpcyB3aWxsIG1ha2Ugc3VyZSBh
bnkgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBhcmUgcmVtb3ZlZC4KLSAgICBpZiAoIXBvc3RBY3Rp
dmUoKSkKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRp
b246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0ZW5lclR5cGUgaW5M
aXN0ZW5lclR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+ZG9jdW1lbnQoKS5o
YXNMaXN0ZW5lclR5cGUoaW5MaXN0ZW5lclR5cGUpOwotfQotCi1PcHRpb25TZXQ8QW5pbWF0ZUNo
YW5nZT4gSW1wbGljaXRBbmltYXRpb246OmFuaW1hdGUoQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21w
b3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSwgc3RkOjp1bmlx
dWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSkKLXsKLSAgICAvLyBJZiB3ZSBnZXQg
dGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFu
aW5nIHVwIGEganVzdCBmaW5pc2hlZCBhbmltYXRpb24uCi0gICAgLy8gU28ganVzdCByZXR1cm4u
IEV2ZXJ5dGhpbmcgaXMgYWxyZWFkeSBhbGwgY2xlYW5lZCB1cC4KLSAgICBpZiAocG9zdEFjdGl2
ZSgpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUg
PSBzdGF0ZSgpOwotCi0gICAgLy8gUmVzZXQgdG8gc3RhcnQgdGhlIHRyYW5zaXRpb24gaWYgd2Ug
YXJlIG5ldwotICAgIGlmIChpc05ldygpKQotICAgICAgICByZXNldCh0YXJnZXRTdHlsZSwgY29t
cG9zaXRlQW5pbWF0aW9uKTsKLQotICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlvbi4KLSAg
ICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1ha2Ugb25l
IGlmIG5lZWRlZAotICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgYW5pbWF0ZWRTdHls
ZSA9IFJlbmRlclN0eWxlOjpjbG9uZVB0cih0YXJnZXRTdHlsZSk7Ci0KLSAgICBDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIG1fYW5pbWF0aW5nUHJvcGVydHksIGFu
aW1hdGVkU3R5bGUuZ2V0KCksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3RvU3R5bGUuZ2V0KCksIHBy
b2dyZXNzKCkpOwotICAgIC8vIEZJWE1FOiB3ZSBhbHNvIG5lZWQgdG8gZGV0ZWN0IGNhc2VzIHdo
ZXJlIHdlIGhhdmUgdG8gc29mdHdhcmUgYW5pbWF0ZSBmb3Igb3RoZXIgcmVhc29ucywKLSAgICAv
LyBzdWNoIGFzIGEgY2hpbGQgdXNpbmcgaW5oZXJpdGluZyB0aGUgdHJhbnNmb3JtLiBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM5MDIKLQotICAgIC8vIEZpcmUgdGhl
IHN0YXJ0IHRpbWVvdXQgaWYgbmVlZGVkCi0gICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVk
KCk7Ci0KLSAgICBPcHRpb25TZXQ8QW5pbWF0ZUNoYW5nZT4gY2hhbmdlKEFuaW1hdGVDaGFuZ2U6
OlN0eWxlQmxlbmRlZCk7Ci0gICAgaWYgKHN0YXRlKCkgIT0gb2xkU3RhdGUpCi0gICAgICAgIGNo
YW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6U3RhdGVDaGFuZ2UpOwotCi0gICAgaWYgKChpc1BhdXNl
ZFN0YXRlKG9sZFN0YXRlKSB8fCBpc1J1bm5pbmdTdGF0ZShvbGRTdGF0ZSkpICE9IChpc1BhdXNl
ZFN0YXRlKHN0YXRlKCkpIHx8IGlzUnVubmluZ1N0YXRlKHN0YXRlKCkpKSkKLSAgICAgICAgY2hh
bmdlLmFkZChBbmltYXRlQ2hhbmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpOwotCi0gICAgcmV0dXJu
IGNoYW5nZTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZShz
dGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQotewotICAgIGlmICgh
YW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgYW5pbWF0ZWRTdHlsZSA9IFJlbmRlclN0eWxlOjpjbG9u
ZVB0cigqbV90b1N0eWxlKTsKLQotICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3Bl
cnRpZXModGhpcywgbV9hbmltYXRpbmdQcm9wZXJ0eSwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgbV9m
cm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJvZ3Jlc3MoKSk7Ci19Ci0KLWJvb2wg
SW1wbGljaXRBbmltYXRpb246OmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1hdGlvbihMYXlv
dXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKGhhc1N0eWxlKCkpOwotCi0gICAg
aWYgKCFpczxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
Tm9uLWJveGVzIGRvbid0IGdldCB0cmFuc2Zvcm1lZDsKLQotICAgIEFTU0VSVChtX2FuaW1hdGlu
Z1Byb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKLQotICAgIFJlbmRlckJveCYgYm94
ID0gZG93bmNhc3Q8UmVuZGVyQm94PigqcmVuZGVyZXIoKSk7Ci0gICAgRmxvYXRSZWN0IHJlbmRl
cmVyQm94ID0gc25hcFJlY3RUb0RldmljZVBpeGVscyhib3guYm9yZGVyQm94UmVjdCgpLCBib3gu
ZG9jdW1lbnQoKS5kZXZpY2VTY2FsZUZhY3RvcigpKTsKLQotICAgIExheW91dFJlY3Qgc3RhcnRC
b3VuZHMgPSBib3VuZHM7Ci0gICAgTGF5b3V0UmVjdCBlbmRCb3VuZHMgPSBib3VuZHM7Ci0KLSAg
ICBpZiAodHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoKCkpIHsKLSAgICAgICAgaWYgKCFjb21w
dXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVyQm94LCAqbV9mcm9t
U3R5bGUsIHN0YXJ0Qm91bmRzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAg
ICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJC
b3gsICptX3RvU3R5bGUsIGVuZEJvdW5kcykpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRy
aXgocmVuZGVyZXJCb3gsICptX2Zyb21TdHlsZSwgc3RhcnRCb3VuZHMpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlmICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50Vmlh
TWF0cml4KHJlbmRlcmVyQm94LCAqbV90b1N0eWxlLCBlbmRCb3VuZHMpKQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgIH0KLQotICAgIGJvdW5kcyA9IHVuaW9uUmVjdChzdGFydEJvdW5k
cywgZW5kQm91bmRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1h
dGlvbjo6YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdAotewotICAgIHJldHVybiBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQobV9h
bmltYXRpbmdQcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRpb246OnN0YXJ0QW5p
bWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci0+c3RhcnRUcmFuc2l0aW9u
KHRpbWVPZmZzZXQsIG1fYW5pbWF0aW5nUHJvcGVydHksIG1fZnJvbVN0eWxlLmdldCgpLCBtX3Rv
U3R5bGUuZ2V0KCkpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1h
dGlvbjo6cGF1c2VBbmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8q
IHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPnRyYW5zaXRp
b25QYXVzZWQodGltZU9mZnNldCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0gICAgLy8gUmVzdG9y
ZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgaWYgKCFwYXVzZWQoKSkKLSAg
ICAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi12b2lkIEltcGxpY2l0
QW5pbWF0aW9uOjpjbGVhcigpCi17Ci0jaWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSAgICBpZiAo
YXV0byogZWxlbWVudCA9IHRoaXMtPmVsZW1lbnQoKSkKLSAgICAgICAgZWxlbWVudC0+ZG9jdW1l
bnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRSZW1vdmVUcmFuc2l0aW9uKCplbGVtZW50
LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSNlbmRpZgotICAgIEFuaW1hdGlvbkJhc2U6OmNsZWFy
KCk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmVuZEFuaW1hdGlvbihib29sKQotewot
ICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRl
cmVyLT50cmFuc2l0aW9uRmluaXNoZWQobV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci19Ci0KLXZvaWQg
SW1wbGljaXRBbmltYXRpb246Om9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkKLXsK
LSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChhdXRvKiBlbGVtZW50ID0gdGhpcy0+
ZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgpLmNvbnRlbnRDaGFuZ2VPYnNl
cnZlcigpLmRpZEZpbmlzaFRyYW5zaXRpb24oKmVsZW1lbnQsIG1fYW5pbWF0aW5nUHJvcGVydHkp
OwotI2VuZGlmCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGtleWZyYW1lIGFuaW1hdGlvbiBvbiB0aGlz
IHByb3BlcnR5LCB0aGlzIHRyYW5zaXRpb24gaXMgYmVpbmcgb3ZlcnJpZGRlbi4gVGhlIGtleWZy
YW1lCi0gICAgLy8gYW5pbWF0aW9uIGtlZXBzIGFuIHVuYW5pbWF0ZWQgc3R5bGUgaW4gY2FzZSBh
IHRyYW5zaXRpb24gc3RhcnRzIHdoaWxlIHRoZSBrZXlmcmFtZSBhbmltYXRpb24gaXMKLSAgICAv
LyBydW5uaW5nLiBCdXQgbm93IHRoYXQgdGhlIHRyYW5zaXRpb24gaGFzIGNvbXBsZXRlZCwgd2Ug
bmVlZCB0byB1cGRhdGUgdGhpcyBzdHlsZSB3aXRoIGl0cyBuZXcKLSAgICAvLyBkZXN0aW5hdGlv
bi4gSWYgd2UgZGlkbid0LCB0aGUgbmV4dCB0aW1lIHRocm91Z2ggd2Ugd291bGQgdGhpbmsgYSB0
cmFuc2l0aW9uIGhhZCBzdGFydGVkCi0gICAgLy8gKGNvbXBhcmluZyB0aGUgb2xkIHVuYW5pbWF0
ZWQgc3R5bGUgd2l0aCB0aGUgbmV3IGZpbmFsIHN0eWxlIG9mIHRoZSB0cmFuc2l0aW9uKS4KLSAg
ICBpZiAoYXV0byogYW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkZv
clByb3BlcnR5KG1fYW5pbWF0aW5nUHJvcGVydHkpKQotICAgICAgICBhbmltYXRpb24tPnNldFVu
YW5pbWF0ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIoKm1fdG9TdHlsZSkpOwotCi0gICAg
c2VuZFRyYW5zaXRpb25FdmVudChldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50LCBlbGFw
c2VkVGltZSk7Ci0gICAgZW5kQW5pbWF0aW9uKCk7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRp
b246OnNlbmRUcmFuc2l0aW9uRXZlbnQoY29uc3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBkb3Vi
bGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudHJh
bnNpdGlvbmVuZEV2ZW50KSB7Ci0gICAgICAgIERvY3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVu
ZXJUeXBlID0gRG9jdW1lbnQ6OlRSQU5TSVRJT05FTkRfTElTVEVORVI7Ci0KLSAgICAgICAgaWYg
KHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3RlbmVyVHlwZSkpIHsKLSAgICAgICAgICAg
IFN0cmluZyBwcm9wZXJ0eU5hbWUgPSBnZXRQcm9wZXJ0eU5hbWVTdHJpbmcobV9hbmltYXRpbmdQ
cm9wZXJ0eSk7Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBEaXNwYXRjaCB0aGUg
ZXZlbnQKLSAgICAgICAgICAgIGF1dG8gZWxlbWVudCA9IG1ha2VSZWZQdHIodGhpcy0+ZWxlbWVu
dCgpKTsKLQotICAgICAgICAgICAgQVNTRVJUKCFlbGVtZW50IHx8IGVsZW1lbnQtPmRvY3VtZW50
KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRD
YWNoZSk7Ci0gICAgICAgICAgICBpZiAoIWVsZW1lbnQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgICAgICAvLyBTY2hlZHVsZSBldmVudCBoYW5kbGluZwotICAgICAg
ICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFdmVu
dFRvRGlzcGF0Y2goKmVsZW1lbnQsIGV2ZW50VHlwZSwgcHJvcGVydHlOYW1lLCBlbGFwc2VkVGlt
ZSk7Ci0KLSAgICAgICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFuaW1hdGVkKSBz
dHlsZQotICAgICAgICAgICAgaWYgKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlv
bmVuZEV2ZW50ICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICAgICAgc2V0TmVl
ZHNTdHlsZVJlY2FsYyhlbGVtZW50LmdldCgpKTsKLQotICAgICAgICAgICAgcmV0dXJuIHRydWU7
IC8vIERpZCBkaXNwYXRjaCBhbiBldmVudAotICAgICAgICB9Ci0gICAgfQotCi0gICAgcmV0dXJu
IGZhbHNlOyAvLyBEaWRuJ3QgZGlzcGF0Y2ggYW4gZXZlbnQKLX0KLQotdm9pZCBJbXBsaWNpdEFu
aW1hdGlvbjo6cmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmIHRvLCBDb21wb3NpdGVBbmltYXRpb24m
IGNvbXBvc2l0ZUFuaW1hdGlvbikKLXsKLSAgICBBU1NFUlQobV9mcm9tU3R5bGUpOwotCi0gICAg
bV90b1N0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHRvKTsKLQotICAgIGlmIChlbGVtZW50
KCkpCi0gICAgICAgIFN0eWxlOjpsb2FkUGVuZGluZ1Jlc291cmNlcygqbV90b1N0eWxlLCBlbGVt
ZW50KCktPmRvY3VtZW50KCksIGVsZW1lbnQoKSk7Ci0KLSAgICAvLyBSZXN0YXJ0IHRoZSB0cmFu
c2l0aW9uLgotICAgIGlmIChtX2Zyb21TdHlsZSAmJiBtX3RvU3R5bGUgJiYgIWNvbXBvc2l0ZUFu
aW1hdGlvbi5pc1N1c3BlbmRlZCgpKQotICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0
aW9uU3RhdGVJbnB1dDo6UmVzdGFydEFuaW1hdGlvbiwgLTEpOwotCi0gICAgLy8gU2V0IHRoZSB0
cmFuc2Zvcm0gYW5pbWF0aW9uIGxpc3QuCi0gICAgdmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxp
c3QoKTsKLSAgICBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwotI2VuZGlmCi0gICAgY2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpzZXRPdmVycmlk
ZGVuKGJvb2wgYikKLXsKLSAgICBpZiAoYiA9PSBtX292ZXJyaWRkZW4pCi0gICAgICAgIHJldHVy
bjsKLQotICAgIG1fb3ZlcnJpZGRlbiA9IGI7Ci0gICAgdXBkYXRlU3RhdGVNYWNoaW5lKG1fb3Zl
cnJpZGRlbiA/IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBhdXNlT3ZlcnJpZGUgOiBBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN1bWVPdmVycmlkZSwgLTEpOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0
aW9uOjphZmZlY3RzUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsKLSAg
ICByZXR1cm4gKG1fYW5pbWF0aW5nUHJvcGVydHkgPT0gcHJvcGVydHkpOwotfQotCi1ib29sIElt
cGxpY2l0QW5pbWF0aW9uOjppc1RhcmdldFByb3BlcnR5RXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9w
LCBjb25zdCBSZW5kZXJTdHlsZSogdGFyZ2V0U3R5bGUpCi17Ci0gICAgLy8gV2UgY2FuIGdldCBo
ZXJlIGZvciBhIHRyYW5zaXRpb24gdGhhdCBoYXMgbm90IHN0YXJ0ZWQgeWV0LiBUaGlzIHdvdWxk
IG1ha2UgbV90b1N0eWxlIHVuc2V0IGFuZCBudWxsLiAKLSAgICAvLyBTbyB3ZSBjaGVjayB0aGF0
IGhlcmUgKHNlZSA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI2NzA2
PikKLSAgICBpZiAoIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVy
biBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKHByb3AsIG1fdG9TdHlsZS5n
ZXQoKSwgdGFyZ2V0U3R5bGUpOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpibGVuZFBy
b3BlcnR5VmFsdWVJblN0eWxlKENTU1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGN1cnJl
bnRTdHlsZSkKLXsKLSAgICAvLyBXZSBzaG91bGQgbmV2ZXIgYWRkIGEgdHJhbnNpdGlvbiB3aXRo
IGEgMCBkdXJhdGlvbiBhbmQgZGVsYXkuIEJ1dCBpZiB3ZSBldmVyIGRpZAotICAgIC8vIGl0IHdv
dWxkIGhhdmUgYSBudWxsIHRvU3R5bGUuIFNvIGp1c3QgaW4gY2FzZSwgbGV0J3MgY2hlY2sgdGhh
dCBoZXJlLiAoU2VlCi0gICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yNDc4Nz4KLSAgICBpZiAoIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotICAgICAg
ICAKLSAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3As
IGN1cnJlbnRTdHlsZSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJvZ3Jl
c3MoKSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnZhbGlkYXRlVHJhbnNmb3JtRnVu
Y3Rpb25MaXN0KCkKLXsKLSAgICBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNl
OwotICAgIAotICAgIGlmICghbV9mcm9tU3R5bGUgfHwgIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0
dXJuOwotICAgICAgICAKLSAgICBjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zKiB2YWwgPSAmbV9m
cm9tU3R5bGUtPnRyYW5zZm9ybSgpOwotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHRv
VmFsID0gJm1fdG9TdHlsZS0+dHJhbnNmb3JtKCk7Ci0KLSAgICBpZiAodmFsLT5vcGVyYXRpb25z
KCkuaXNFbXB0eSgpKQotICAgICAgICB2YWwgPSB0b1ZhbDsKLQotICAgIGlmICh2YWwtPm9wZXJh
dGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgLy8gQW4g
ZW1wdHkgdHJhbnNmb3JtIGxpc3QgbWF0Y2hlcyBhbnl0aGluZy4KLSAgICBpZiAodmFsICE9IHRv
VmFsICYmICF0b1ZhbC0+b3BlcmF0aW9ucygpLmlzRW1wdHkoKSAmJiAhdmFsLT5vcGVyYXRpb25z
TWF0Y2goKnRvVmFsKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gVHJhbnNmb3JtIGxpc3Rz
IG1hdGNoLgotICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gdHJ1ZTsKLX0KLQot
c3RhdGljIGJvb2wgZmlsdGVyT3BlcmF0aW9uc01hdGNoKGNvbnN0IEZpbHRlck9wZXJhdGlvbnMq
IGZyb21PcGVyYXRpb25zLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB0b09wZXJhdGlvbnMpCi17
Ci0gICAgaWYgKGZyb21PcGVyYXRpb25zLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAgICAg
ICBmcm9tT3BlcmF0aW9ucyA9ICZ0b09wZXJhdGlvbnM7Ci0KLSAgICBpZiAoZnJvbU9wZXJhdGlv
bnMtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IGlmIChmcm9tT3BlcmF0aW9ucyAhPSAmdG9PcGVyYXRpb25zICYmICF0b09wZXJhdGlvbnMub3Bl
cmF0aW9ucygpLmlzRW1wdHkoKSAmJiAhZnJvbU9wZXJhdGlvbnMtPm9wZXJhdGlvbnNNYXRjaCh0
b09wZXJhdGlvbnMpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHJ1ZTsK
LX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0
aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0K
LSAgICBpZiAoIW1fZnJvbVN0eWxlIHx8ICFtX3RvU3R5bGUpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmlsdGVyT3BlcmF0aW9uc01hdGNoKCZt
X2Zyb21TdHlsZS0+ZmlsdGVyKCksIG1fdG9TdHlsZS0+ZmlsdGVyKCkpOwotfQotCi0jaWYgRU5B
QkxFKEZJTFRFUlNfTEVWRUxfMikKLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmNoZWNrRm9yTWF0
Y2hpbmdCYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKQotewotICAgIG1fYmFja2Ryb3BGaWx0
ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsKLQotICAgIGlmICghbV9mcm9tU3R5bGUgfHwg
IW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9iYWNrZHJvcEZpbHRlckZ1bmN0
aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRjaCgmbV9mcm9tU3R5bGUtPmJhY2tk
cm9wRmlsdGVyKCksIG1fdG9TdHlsZS0+YmFja2Ryb3BGaWx0ZXIoKSk7Ci19Ci0jZW5kaWYKLQot
dm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rp
b25MaXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsKLQot
ICAgIGlmICghbV9mcm9tU3R5bGUgfHwgIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZpbHRlck9wZXJhdGlvbnNNYXRj
aCgmbV9mcm9tU3R5bGUtPmFwcGxlQ29sb3JGaWx0ZXIoKSwgbV90b1N0eWxlLT5hcHBsZUNvbG9y
RmlsdGVyKCkpOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBJbXBsaWNpdEFuaW1hdGlvbjo6dGlt
ZVRvTmV4dFNlcnZpY2UoKQotewotICAgIE9wdGlvbmFsPFNlY29uZHM+IHQgPSBBbmltYXRpb25C
YXNlOjp0aW1lVG9OZXh0U2VydmljZSgpOwotICAgIGlmICghdCB8fCB0LnZhbHVlKCkgIT0gMF9z
IHx8IHByZUFjdGl2ZSgpKQotI2lmIENPTVBJTEVSKE1TVkMpICYmIF9NU0NfVkVSID49IDE5MjAK
LSAgICAgICAgcmV0dXJuIFdURk1vdmUodCk7Ci0jZWxzZQotICAgICAgICByZXR1cm4gdDsKLSNl
bmRpZgotCi0gICAgLy8gQSByZXR1cm4gdmFsdWUgb2YgMCBtZWFucyB3ZSBuZWVkIHNlcnZpY2Uu
IEJ1dCBpZiB0aGlzIGlzIGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiB3ZSAKLSAgICAvLyBvbmx5
IG5lZWQgc2VydmljZSBhdCB0aGUgZW5kIG9mIHRoZSB0cmFuc2l0aW9uLgotICAgIGlmIChDU1NQ
cm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQobV9hbmlt
YXRpbmdQcm9wZXJ0eSkgJiYgaXNBY2NlbGVyYXRlZCgpKSB7Ci0gICAgICAgIGJvb2wgaXNMb29w
aW5nOwotICAgICAgICBnZXRUaW1lVG9OZXh0RXZlbnQodC52YWx1ZSgpLCBpc0xvb3BpbmcpOwot
ICAgIH0KLSAgICByZXR1cm4gdDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDcyYjg0YWRjZWNmOTI4ZDg0ZTE1YTQwYzVjODg1NzYw
NWYzZTY0NjIuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaAorKysgL2Rl
di9udWxsCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5l
aXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgot
ICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3Rl
IHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVj
aWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
Ci0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBP
RiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0g
KiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQW5pbWF0aW9uQmFz
ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5o
IgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIFJlbmRlckVsZW1lbnQ7Ci0KLS8vIEFu
IEltcGxpY2l0QW5pbWF0aW9uIHRyYWNrcyB0aGUgc3RhdGUgb2YgYSB0cmFuc2l0aW9uIG9mIGEg
c3BlY2lmaWMgQ1NTIHByb3BlcnR5Ci0vLyBmb3IgYSBzaW5nbGUgUmVuZGVyRWxlbWVudC4KLWNs
YXNzIEltcGxpY2l0QW5pbWF0aW9uIDogcHVibGljIEFuaW1hdGlvbkJhc2UgewotcHVibGljOgot
ICAgIHN0YXRpYyBSZWY8SW1wbGljaXRBbmltYXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24m
IGFuaW1hdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwgRWxlbWVudCYgZWxl
bWVudCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRl
clN0eWxlJiBmcm9tU3R5bGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBJ
bXBsaWNpdEFuaW1hdGlvbihhbmltYXRpb24sIGFuaW1hdGluZ1Byb3BlcnR5LCBlbGVtZW50LCBj
b21wb3NpdGVBbmltYXRpb24sIGZyb21TdHlsZSkpOwotICAgIH07Ci0gICAgCi0gICAgQ1NTUHJv
cGVydHlJRCB0cmFuc2l0aW9uUHJvcGVydHkoKSBjb25zdCB7IHJldHVybiBtX3RyYW5zaXRpb25Q
cm9wZXJ0eTsgfQotICAgIENTU1Byb3BlcnR5SUQgYW5pbWF0aW5nUHJvcGVydHkoKSBjb25zdCB7
IHJldHVybiBtX2FuaW1hdGluZ1Byb3BlcnR5OyB9Ci0KLSAgICB2b2lkIG9uQW5pbWF0aW9uRW5k
KGRvdWJsZSBlbGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdGFydEFuaW1hdGlvbihk
b3VibGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3Vi
bGUgdGltZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRBbmltYXRpb24oYm9vbCBmaWxs
aW5nRm9yd2FyZHMgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0KLSAgICBPcHRpb25TZXQ8QW5pbWF0ZUNo
YW5nZT4gYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYgdGFy
Z2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpOwot
ICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lkIHJlc2V0KGNvbnN0IFJlbmRlclN0eWxl
JiB0bywgQ29tcG9zaXRlQW5pbWF0aW9uJik7Ci0KLSAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRy
YW5zZm9ybUFuaW1hdGlvbihMYXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBib29s
IGFmZmVjdHNBY2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3Q7Ci0KLSAgICB2b2lkIHNldE92ZXJy
aWRkZW4oYm9vbCk7Ci0gICAgYm9vbCBvdmVycmlkZGVuKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9vdmVycmlkZGVuOyB9Ci0KLSAgICBib29sIGFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0
eUlEKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgaGFzU3R5bGUoKSBjb25zdCB7IHJldHVy
biBtX2Zyb21TdHlsZSAmJiBtX3RvU3R5bGU7IH0KLQotICAgIGJvb2wgaXNUYXJnZXRQcm9wZXJ0
eUVxdWFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKik7Ci0KLSAgICB2b2lkIGJs
ZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUoQ1NTUHJvcGVydHlJRCwgUmVuZGVyU3R5bGUqKTsKLQot
ICAgIE9wdGlvbmFsPFNlY29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgb3ZlcnJpZGU7Ci0gICAg
Ci0gICAgYm9vbCBhY3RpdmUoKSBjb25zdCB7IHJldHVybiBtX2FjdGl2ZTsgfQotICAgIHZvaWQg
c2V0QWN0aXZlKGJvb2wgYikgeyBtX2FjdGl2ZSA9IGI7IH0KLQotICAgIGNvbnN0IFJlbmRlclN0
eWxlJiB1bmFuaW1hdGVkU3R5bGUoKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiAqbV9mcm9tU3R5
bGU7IH0KLQotICAgIHZvaWQgY2xlYXIoKSBvdmVycmlkZTsKLQotcHJvdGVjdGVkOgotICAgIGJv
b2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSkgY29u
c3Q7ICAgIAotICAgIGJvb2wgc2VuZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9tU3RyaW5nJiwg
ZG91YmxlIGVsYXBzZWRUaW1lKTsKLQotICAgIHZvaWQgdmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlv
bkxpc3QoKTsKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdC
YWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIHZvaWQgY2hlY2tGb3JN
YXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotCi1wcml2YXRlOgotICAgIEltcGxp
Y2l0QW5pbWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIENTU1Byb3BlcnR5SUQsIEVsZW1lbnQmLCBD
b21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHlsZSYpOwotICAgIHZpcnR1YWwgfklt
cGxpY2l0QW5pbWF0aW9uKCk7Ci0KLSAgICAvLyBUaGUgdHdvIHN0eWxlcyB0aGF0IHdlIGFyZSBi
bGVuZGluZy4KLSAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IG1fZnJvbVN0eWxlOwot
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV90b1N0eWxlOwotCi0gICAgQ1NTUHJv
cGVydHlJRCBtX3RyYW5zaXRpb25Qcm9wZXJ0eTsgLy8gVHJhbnNpdGlvbiBwcm9wZXJ0eSBhcyBz
cGVjaWZpZWQgaW4gdGhlIFJlbmRlclN0eWxlLgotICAgIENTU1Byb3BlcnR5SUQgbV9hbmltYXRp
bmdQcm9wZXJ0eTsgLy8gU3BlY2lmaWMgcHJvcGVydHkgZm9yIHRoaXMgSW1wbGljaXRBbmltYXRp
b24KLQotICAgIGJvb2wgbV9hY3RpdmUgeyB0cnVlIH07IC8vIFVzZWQgZm9yIGN1bGxpbmcgdGhl
IGxpc3Qgb2YgdHJhbnNpdGlvbnMuCi0gICAgYm9vbCBtX292ZXJyaWRkZW4geyBmYWxzZSB9OyAv
LyBUcnVlIHdoZW4gdGhlcmUgaXMgYSBrZXlmcmFtZSBhbmltYXRpb24gdGhhdCBvdmVycmlkZXMg
dGhlIHRyYW5zaXRpb25pbmcgcHJvcGVydHkKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0
aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9u
LmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYjFiNTcxNTA3NzIzODc3YjVlYmYz
MzJiYjA4Yzg1MDk3Nzc5ODhjNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlv
bi5jcHAKKysrIC9kZXYvbnVsbApAQCAtMSw1NDMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAo
QykgMjAwNywgMjAxMiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIp
IG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRv
IGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNv
ZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0g
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JT
ICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQot
ICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRpb24uaCIKLQotI2luY2x1ZGUgIkNTU0FuaW1hdGlv
bkNvbnRyb2xsZXJQcml2YXRlLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIK
LSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0
aW9uLmgiCi0jaW5jbHVkZSAiRXZlbnROYW1lcy5oIgotI2luY2x1ZGUgIkdlb21ldHJ5VXRpbGl0
aWVzLmgiCi0jaW5jbHVkZSAiUmVuZGVyQm94LmgiCi0jaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIK
LSNpbmNsdWRlICJTdHlsZVBlbmRpbmdSZXNvdXJjZXMuaCIKLSNpbmNsdWRlICJTdHlsZVJlc29s
dmVyLmgiCi0jaW5jbHVkZSAiU3R5bGVTY29wZS5oIgotI2luY2x1ZGUgIlRyYW5zbGF0ZVRyYW5z
Zm9ybU9wZXJhdGlvbi5oIgotI2luY2x1ZGUgIldpbGxDaGFuZ2VEYXRhLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotS2V5ZnJhbWVBbmltYXRpb246OktleWZyYW1lQW5pbWF0aW9uKGNvbnN0
IEFuaW1hdGlvbiYgYW5pbWF0aW9uLCBFbGVtZW50JiBlbGVtZW50LCBDb21wb3NpdGVBbmltYXRp
b24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHls
ZSkKLSAgICA6IEFuaW1hdGlvbkJhc2UoYW5pbWF0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmlt
YXRpb24pCi0gICAgLCBtX2tleWZyYW1lcyhhbmltYXRpb24ubmFtZSgpKQotICAgICwgbV91bmFu
aW1hdGVkU3R5bGUoUmVuZGVyU3R5bGU6OmNsb25lUHRyKHVuYW5pbWF0ZWRTdHlsZSkpCi17Ci0g
ICAgcmVzb2x2ZUtleWZyYW1lU3R5bGVzKCk7Ci0KLSAgICAvLyBVcGRhdGUgdGhlIG1fdHJhbnNm
b3JtRnVuY3Rpb25MaXN0VmFsaWQgZmxhZyBiYXNlZCBvbiB3aGV0aGVyIHRoZSBmdW5jdGlvbiBs
aXN0cyBpbiB0aGUga2V5ZnJhbWVzIG1hdGNoLgotICAgIHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rp
b25MaXN0KCk7Ci0gICAgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZp
bHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRpZgotICAgIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZp
bHRlckZ1bmN0aW9uTGlzdHMoKTsKLQotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlm
cmFtZXMucHJvcGVydGllcygpKSB7Ci0gICAgICAgIGlmIChXaWxsQ2hhbmdlRGF0YTo6cHJvcGVy
dHlDcmVhdGVzU3RhY2tpbmdDb250ZXh0KHByb3BlcnR5SUQpKQotICAgICAgICAgICAgbV90cmln
Z2Vyc1N0YWNraW5nQ29udGV4dCA9IHRydWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoQ1NTUHJv
cGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5
SUQpKQotICAgICAgICAgICAgbV9oYXNBY2NlbGVyYXRlZFByb3BlcnR5ID0gdHJ1ZTsKLSAgICAg
ICAgCi0gICAgICAgIGlmIChtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0ICYmIG1faGFzQWNjZWxl
cmF0ZWRQcm9wZXJ0eSkKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGNvbXB1dGVM
YXlvdXREZXBlbmRlbmN5KCk7Ci19Ci0KLUtleWZyYW1lQW5pbWF0aW9uOjp+S2V5ZnJhbWVBbmlt
YXRpb24oKQotewotICAgIC8vIE1ha2Ugc3VyZSB0byB0ZWxsIHRoZSByZW5kZXJlciB0aGF0IHdl
IGFyZSBlbmRpbmcuIFRoaXMgd2lsbCBtYWtlIHN1cmUgYW55IGFjY2VsZXJhdGVkIGFuaW1hdGlv
bnMgYXJlIHJlbW92ZWQuCi0gICAgaWYgKCFwb3N0QWN0aXZlKCkpCi0gICAgICAgIGVuZEFuaW1h
dGlvbigpOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjb21wdXRlTGF5b3V0RGVwZW5k
ZW5jeSgpCi17Ci0gICAgaWYgKCFtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KENTU1Byb3Bl
cnR5VHJhbnNmb3JtKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc2l6ZV90IG51bUtleWZyYW1l
cyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtl
eWZyYW1lczsgaSsrKSB7Ci0gICAgICAgIGF1dG8qIGtleWZyYW1lU3R5bGUgPSBtX2tleWZyYW1l
c1tpXS5zdHlsZSgpOwotICAgICAgICBpZiAoIWtleWZyYW1lU3R5bGUpIHsKLSAgICAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0K
LSAgICAgICAgaWYgKGtleWZyYW1lU3R5bGUtPmhhc1RyYW5zZm9ybSgpKSB7Ci0gICAgICAgICAg
ICBhdXRvJiB0cmFuc2Zvcm1PcGVyYXRpb25zID0ga2V5ZnJhbWVTdHlsZS0+dHJhbnNmb3JtKCk7
Ci0gICAgICAgICAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJhdGlvbiA6IHRyYW5zZm9ybU9wZXJh
dGlvbnMub3BlcmF0aW9ucygpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG9wZXJhdGlvbi0+aXNU
cmFuc2xhdGVUcmFuc2Zvcm1PcGVyYXRpb25UeXBlKCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
YXV0byB0cmFuc2xhdGlvbiA9IGRvd25jYXN0PFRyYW5zbGF0ZVRyYW5zZm9ybU9wZXJhdGlvbj4o
b3BlcmF0aW9uLmdldCgpKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHRyYW5zbGF0aW9uLT54
KCkuaXNQZXJjZW50KCkgfHwgdHJhbnNsYXRpb24tPnkoKS5pc1BlcmNlbnQoKSkgewotICAgICAg
ICAgICAgICAgICAgICAgICAgbV9kZXBlbmRzT25MYXlvdXQgPSB0cnVlOwotICAgICAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAg
ICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpmZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgUmVuZGVyU3R5bGUqJiBmcm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0
eWxlKiYgdG9TdHlsZSwgZG91YmxlJiBwcm9nKSBjb25zdAotewotICAgIHNpemVfdCBudW1LZXlm
cmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgaWYgKCFudW1LZXlmcmFtZXMpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIC8vIEZpbmQgdGhlIGZpcnN0IGtleQotICAgIGRvdWJsZSBlbGFw
c2VkVGltZSA9IGdldEVsYXBzZWRUaW1lKCk7Ci0gICAgaWYgKG1fYW5pbWF0aW9uLT5kdXJhdGlv
bigpICYmIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpICE9IEFuaW1hdGlvbjo6SXRlcmF0
aW9uQ291bnRJbmZpbml0ZSkKLSAgICAgICAgZWxhcHNlZFRpbWUgPSBzdGQ6Om1pbihlbGFwc2Vk
VGltZSwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkgKiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291
bnQoKSk7Ci0KLSAgICBjb25zdCBkb3VibGUgZnJhY3Rpb25hbFRpbWUgPSB0aGlzLT5mcmFjdGlv
bmFsVGltZSgxLCBlbGFwc2VkVGltZSwgMCk7Ci0gICAgQVNTRVJUKCFtX2tleWZyYW1lc1swXS5r
ZXkoKSk7Ci0gICAgQVNTRVJUKG1fa2V5ZnJhbWVzW21fa2V5ZnJhbWVzLnNpemUoKSAtIDFdLmtl
eSgpID09IDEpOwotCi0gICAgaW50IHByZXZJbmRleCA9IC0xOwotICAgIGludCBuZXh0SW5kZXgg
PSAtMTsKLSAgICAvLyBGSVhNRTogd2l0aCBhIGxvdCBvZiBrZXlzLCB0aGlzIGxpbmVhciBzZWFy
Y2ggd2lsbCBiZSBzbG93LiBXZSBjb3VsZCBiaW5hcnkgc2VhcmNoLgotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVW
YWx1ZSYgY3VycktleUZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0KLSAgICAgICAgaWYgKCFjdXJy
S2V5RnJhbWUuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSkpCi0gICAgICAgICAgICBjb250aW51
ZTsKLQotICAgICAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCBjdXJyS2V5RnJhbWUua2V5KCkpIHsK
LSAgICAgICAgICAgIG5leHRJbmRleCA9IGk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
fQotICAgICAgICBwcmV2SW5kZXggPSBpOwotICAgIH0KLQotICAgIGlmIChwcmV2SW5kZXggPT0g
LTEpCi0gICAgICAgIHByZXZJbmRleCA9IDA7Ci0gICAgaWYgKG5leHRJbmRleCA9PSAtMSkKLSAg
ICAgICAgbmV4dEluZGV4ID0gbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMTsKLQotICAgIGNvbnN0IEtl
eWZyYW1lVmFsdWUmIHByZXZLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW3ByZXZJbmRleF07Ci0gICAg
Y29uc3QgS2V5ZnJhbWVWYWx1ZSYgbmV4dEtleWZyYW1lID0gbV9rZXlmcmFtZXNbbmV4dEluZGV4
XTsKLQotICAgIGZyb21TdHlsZSA9IHByZXZLZXlmcmFtZS5zdHlsZSgpOwotICAgIHRvU3R5bGUg
PSBuZXh0S2V5ZnJhbWUuc3R5bGUoKTsKLQotICAgIGRvdWJsZSBvZmZzZXQgPSBwcmV2S2V5ZnJh
bWUua2V5KCk7Ci0gICAgZG91YmxlIHNjYWxlID0gMS4wIC8gKG5leHRJbmRleCA9PSBwcmV2SW5k
ZXggPyAgMSA6IChuZXh0S2V5ZnJhbWUua2V5KCkgLSBwcmV2S2V5ZnJhbWUua2V5KCkpKTsKLQot
ICAgIHByb2cgPSBwcm9ncmVzcyhzY2FsZSwgb2Zmc2V0LCBwcmV2S2V5ZnJhbWUudGltaW5nRnVu
Y3Rpb24oKSk7Ci19Ci0KLU9wdGlvblNldDxBbmltYXRlQ2hhbmdlPiBLZXlmcmFtZUFuaW1hdGlv
bjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3Qg
UmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBh
bmltYXRlZFN0eWxlKQotewotICAgIEFuaW1hdGlvblN0YXRlIG9sZFN0YXRlID0gc3RhdGUoKTsK
LQotICAgIC8vIFVwZGF0ZSBzdGF0ZSBhbmQgZmlyZSB0aGUgc3RhcnQgdGltZW91dCBpZiBuZWVk
ZWQgKEZJWE1FOiB0aGlzIGZ1bmN0aW9uIG5lZWRzIGEgYmV0dGVyIG5hbWUpLgotICAgIGZpcmVB
bmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwotCi0gICAgLy8gSWYgd2UgaGF2ZSBub3QgeWV0IHN0
YXJ0ZWQsIHdlIHdpbGwgbm90IGhhdmUgYSB2YWxpZCBzdGFydCB0aW1lLCBzbyBqdXN0IHN0YXJ0
IHRoZSBhbmltYXRpb24gaWYgbmVlZGVkLgotICAgIGlmIChpc05ldygpKSB7Ci0gICAgICAgIGlm
IChtX2FuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0gQW5pbWF0aW9uUGxheVN0YXRlOjpQbGF5aW5n
ICYmICFjb21wb3NpdGVBbmltYXRpb24uaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgICAgIHVwZGF0
ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiwgLTEpOwot
ICAgICAgICBlbHNlIGlmIChtX2FuaW1hdGlvbi0+cGxheVN0YXRlKCkgPT0gQW5pbWF0aW9uUGxh
eVN0YXRlOjpQYXVzZWQpCi0gICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9u
U3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkLCAtMSk7Ci0gICAgfQotCi0gICAgLy8gSWYgd2Ug
Z2V0IHRoaXMgZmFyIGFuZCB0aGUgYW5pbWF0aW9uIGlzIGRvbmUsIGl0IG1lYW5zIHdlIGFyZSBj
bGVhbmluZyB1cCBhIGp1c3QtZmluaXNoZWQgYW5pbWF0aW9uLgotICAgIC8vIElmIHNvLCB3ZSBu
ZWVkIHRvIHNlbmQgYmFjayB0aGUgdGFyZ2V0U3R5bGUuCi0gICAgaWYgKHBvc3RBY3RpdmUoKSkg
ewotICAgICAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgICAgICBhbmltYXRlZFN0eWxl
ID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHRhcmdldFN0eWxlKTsKLSAgICAgICAgcmV0dXJuIHsg
fTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIHN0YXJ0IHRpbWVy
LCB3ZSBkb24ndCB3YW50IHRvIGNoYW5nZSB0aGUgc3R5bGUgeWV0LgotICAgIC8vIFNwZWNpYWwg
Y2FzZSAxIC0gaWYgdGhlIGRlbGF5IHRpbWUgaXMgMCwgdGhlbiB3ZSBkbyB3YW50IHRvIHNldCB0
aGUgZmlyc3QgZnJhbWUgb2YgdGhlCi0gICAgLy8gYW5pbWF0aW9uIHJpZ2h0IGF3YXkuIFRoaXMg
YXZvaWRzIGEgZmxhc2ggd2hlbiB0aGUgYW5pbWF0aW9uIHN0YXJ0cy4KLSAgICAvLyBTcGVjaWFs
IGNhc2UgMiAtIGlmIHRoZXJlIGlzIGEgYmFja3dhcmRzIGZpbGwgbW9kZSwgdGhlbiB3ZSB3YW50
IHRvIGNvbnRpbnVlCi0gICAgLy8gdGhyb3VnaCB0byB0aGUgc3R5bGUgYmxlbmQgc28gdGhhdCB3
ZSBnZXQgdGhlIGZyb21TdHlsZS4KLSAgICBpZiAod2FpdGluZ1RvU3RhcnQoKSAmJiBtX2FuaW1h
dGlvbi0+ZGVsYXkoKSA+IDAgJiYgIW1fYW5pbWF0aW9uLT5maWxsc0JhY2t3YXJkcygpKQotICAg
ICAgICByZXR1cm4geyB9OwotICAgIAotICAgIC8vIElmIHdlIGhhdmUgbm8ga2V5ZnJhbWVzLCBk
b24ndCBhbmltYXRlLgotICAgIGlmICghbV9rZXlmcmFtZXMuc2l6ZSgpKSB7Ci0gICAgICAgIHVw
ZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRBbmltYXRpb24sIC0xKTsK
LSAgICAgICAgcmV0dXJuIHsgfTsKLSAgICB9Ci0KLSAgICAvLyBSdW4gYSBjeWNsZSBvZiBhbmlt
YXRpb24uCi0gICAgLy8gV2Uga25vdyB3ZSB3aWxsIG5lZWQgYSBuZXcgcmVuZGVyIHN0eWxlLCBz
byBtYWtlIG9uZSBpZiBuZWVkZWQuCi0gICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICBh
bmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHRhcmdldFN0eWxlKTsKLQotICAg
IC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGJlIG1vcmUgZWZmaWNpZW50IGFib3V0IGRldGVybWluaW5n
IHdoaWNoIGtleWZyYW1lcyB3ZSBhcmUgYW5pbWF0aW5nIGJldHdlZW4uCi0gICAgLy8gV2Ugc2hv
dWxkIGNhY2hlIHRoZSBsYXN0IHBhaXIgb3Igc29tZXRoaW5nLgotICAgIGZvciAoYXV0byBwcm9w
ZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygpKSB7Ci0gICAgICAgIC8vIEdldCB0aGUg
ZnJvbS90byBzdHlsZXMgYW5kIHByb2dyZXNzIGJldHdlZW4KLSAgICAgICAgY29uc3QgUmVuZGVy
U3R5bGUqIGZyb21TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiB0
b1N0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgZG91YmxlIHByb2dyZXNzID0gMDsKLSAgICAgICAg
ZmV0Y2hJbnRlcnZhbEVuZHBvaW50c0ZvclByb3BlcnR5KHByb3BlcnR5SUQsIGZyb21TdHlsZSwg
dG9TdHlsZSwgcHJvZ3Jlc3MpOwotCi0gICAgICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVu
ZFByb3BlcnRpZXModGhpcywgcHJvcGVydHlJRCwgYW5pbWF0ZWRTdHlsZS5nZXQoKSwgZnJvbVN0
eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0gICAgfQotCi0gICAgT3B0aW9uU2V0PEFuaW1hdGVD
aGFuZ2U+IGNoYW5nZShBbmltYXRlQ2hhbmdlOjpTdHlsZUJsZW5kZWQpOwotICAgIGlmIChzdGF0
ZSgpICE9IG9sZFN0YXRlKQotICAgICAgICBjaGFuZ2UuYWRkKEFuaW1hdGVDaGFuZ2U6OlN0YXRl
Q2hhbmdlKTsKLQotICAgIGlmICgoaXNQYXVzZWRTdGF0ZShvbGRTdGF0ZSkgfHwgaXNSdW5uaW5n
U3RhdGUob2xkU3RhdGUpKSAhPSAoaXNQYXVzZWRTdGF0ZShzdGF0ZSgpKSB8fCBpc1J1bm5pbmdT
dGF0ZShzdGF0ZSgpKSkpCi0gICAgICAgIGNoYW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6UnVubmlu
Z1N0YXRlQ2hhbmdlKTsKLQotICAgIHJldHVybiBjaGFuZ2U7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVB
bmltYXRpb246OmdldEFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYg
YW5pbWF0ZWRTdHlsZSkKLXsKLSAgICAvLyBJZiB3ZSdyZSBkb25lLCBvciBpbiB0aGUgZGVsYXkg
cGhhc2UgYW5kIHdlJ3JlIG5vdCBiYWNrd2FyZHMgZmlsbGluZywgdGVsbCB0aGUgY2FsbGVyIHRv
IHVzZSB0aGUgY3VycmVudCBzdHlsZS4KLSAgICBpZiAocG9zdEFjdGl2ZSgpIHx8ICh3YWl0aW5n
VG9TdGFydCgpICYmIG1fYW5pbWF0aW9uLT5kZWxheSgpID4gMCAmJiAhbV9hbmltYXRpb24tPmZp
bGxzQmFja3dhcmRzKCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIW1fa2V5ZnJhbWVz
LnNpemUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAg
ICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRyKHJlbmRlcmVyKCktPnN0
eWxlKCkpOwotCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0
aWVzKCkpIHsKLSAgICAgICAgLy8gR2V0IHRoZSBmcm9tL3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3Mg
YmV0d2VlbgotICAgICAgICBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxlID0gbnVsbHB0cjsK
LSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUgPSBudWxscHRyOwotICAgICAgICBk
b3VibGUgcHJvZ3Jlc3MgPSAwOwotICAgICAgICBmZXRjaEludGVydmFsRW5kcG9pbnRzRm9yUHJv
cGVydHkocHJvcGVydHlJRCwgZnJvbVN0eWxlLCB0b1N0eWxlLCBwcm9ncmVzcyk7Ci0KLSAgICAg
ICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGllcyh0aGlzLCBwcm9wZXJ0eUlE
LCBhbmltYXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKLSAg
ICB9Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OmNvbXB1dGVFeHRlbnRPZlRyYW5zZm9y
bUFuaW1hdGlvbihMYXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKG1fa2V5
ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKTsKLQotICAgIGlm
ICghaXM8UmVuZGVyQm94PihyZW5kZXJlcigpKSkKLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIE5v
bi1ib3hlcyBkb24ndCBnZXQgdHJhbnNmb3JtZWQ7Ci0KLSAgICBhdXRvJiBib3ggPSBkb3duY2Fz
dDxSZW5kZXJCb3g+KCpyZW5kZXJlcigpKTsKLSAgICBhdXRvIHJlbmRlcmVyQm94ID0gc25hcFJl
Y3RUb0RldmljZVBpeGVscyhib3guYm9yZGVyQm94UmVjdCgpLCBib3guZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKLQotICAgIExheW91dFJlY3QgY3VtdWxhdGl2ZUJvdW5kczsKLQot
ICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX2tleWZyYW1lcy5rZXlmcmFtZXMoKSkgewotICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSoga2V5ZnJhbWVTdHlsZSA9IGtleWZyYW1lLnN0eWxlKCk7
Ci0KLSAgICAgICAgaWYgKCFrZXlmcmFtZS5jb250YWluc1Byb3BlcnR5KENTU1Byb3BlcnR5VHJh
bnNmb3JtKSkgewotICAgICAgICAgICAgLy8gSWYgdGhlIGZpcnN0IGtleWZyYW1lIGlzIG1pc3Np
bmcgdHJhbnNmb3JtIHN0eWxlLCB1c2UgdGhlIGN1cnJlbnQgc3R5bGUuCi0gICAgICAgICAgICBp
ZiAoIWtleWZyYW1lLmtleSgpKQotICAgICAgICAgICAgICAgIGtleWZyYW1lU3R5bGUgPSAmYm94
LnN0eWxlKCk7Ci0gICAgICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIH0KLQotICAgICAgICBhdXRvIGtleWZyYW1lQm91bmRzID0gYm91bmRzOwotICAgICAg
ICAKLSAgICAgICAgYm9vbCBjYW5Db21wdXRlOwotICAgICAgICBpZiAodHJhbnNmb3JtRnVuY3Rp
b25MaXN0c01hdGNoKCkpCi0gICAgICAgICAgICBjYW5Db21wdXRlID0gY29tcHV0ZVRyYW5zZm9y
bWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwgKmtleWZyYW1lU3R5bGUsIGtl
eWZyYW1lQm91bmRzKTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAgY2FuQ29tcHV0ZSA9IGNv
bXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChyZW5kZXJlckJveCwgKmtleWZyYW1lU3R5
bGUsIGtleWZyYW1lQm91bmRzKTsKLSAgICAgICAgCi0gICAgICAgIGlmICghY2FuQ29tcHV0ZSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIGN1bXVsYXRpdmVC
b3VuZHMudW5pdGUoa2V5ZnJhbWVCb3VuZHMpOwotICAgIH0KLQotICAgIGJvdW5kcyA9IGN1bXVs
YXRpdmVCb3VuZHM7Ci0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRp
b246Omhhc0FuaW1hdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0
Ci17Ci0gICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpOwot
fQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9m
ZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAg
ICAgICByZXR1cm4gcmVuZGVyZXItPnN0YXJ0QW5pbWF0aW9uKHRpbWVPZmZzZXQsIG1fYW5pbWF0
aW9uLCBtX2tleWZyYW1lcyk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEtleWZyYW1l
QW5pbWF0aW9uOjpwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAo
IWVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0g
dGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPmFuaW1hdGlvblBhdXNlZCh0aW1l
T2Zmc2V0LCBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1lKCkpOwotCi0gICAgLy8gUmVzdG9yZSB0
aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgaWYgKCFwYXVzZWQoKSkKLSAgICAg
ICAgc2V0TmVlZHNTdHlsZVJlY2FsYyhlbGVtZW50KCkpOwotfQotCi12b2lkIEtleWZyYW1lQW5p
bWF0aW9uOjplbmRBbmltYXRpb24oYm9vbCBmaWxsaW5nRm9yd2FyZHMpCi17Ci0gICAgaWYgKCFl
bGVtZW50KCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5hbmltYXRpb25GaW5pc2hlZChtX2tl
eWZyYW1lcy5hbmltYXRpb25OYW1lKCkpOwotCi0gICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwg
KHVuYW5pbWF0ZWQpIHN0eWxlCi0gICAgaWYgKCFmaWxsaW5nRm9yd2FyZHMgJiYgIXBhdXNlZCgp
KQotICAgICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQoKSk7Ci19Ci0KLWJvb2wgS2V5
ZnJhbWVBbmltYXRpb246OnNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKERvY3VtZW50OjpMaXN0
ZW5lclR5cGUgbGlzdGVuZXJUeXBlKSBjb25zdAotewotICAgIHJldHVybiBlbGVtZW50KCktPmRv
Y3VtZW50KCkuaGFzTGlzdGVuZXJUeXBlKGxpc3RlbmVyVHlwZSk7Ci19Ci0KLXZvaWQgS2V5ZnJh
bWVBbmltYXRpb246Om9uQW5pbWF0aW9uU3RhcnQoZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAg
IHNlbmRBbmltYXRpb25FdmVudChldmVudE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRFdmVudCwgZWxh
cHNlZFRpbWUpOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvbkl0ZXJh
dGlvbihkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50
TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVudCwgZWxhcHNlZFRpbWUpOwotfQotCi12b2lk
IEtleWZyYW1lQW5pbWF0aW9uOjpvbkFuaW1hdGlvbkVuZChkb3VibGUgZWxhcHNlZFRpbWUpCi17
Ci0gICAgc2VuZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5hbmltYXRpb25lbmRFdmVudCwg
ZWxhcHNlZFRpbWUpOwotICAgIGVuZEFuaW1hdGlvbihtX2FuaW1hdGlvbi0+ZmlsbHNGb3J3YXJk
cygpKTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6c2VuZEFuaW1hdGlvbkV2ZW50KGNv
bnN0IEF0b21TdHJpbmcmIGV2ZW50VHlwZSwgZG91YmxlIGVsYXBzZWRUaW1lKQotewotICAgIERv
Y3VtZW50OjpMaXN0ZW5lclR5cGUgbGlzdGVuZXJUeXBlOwotICAgIGlmIChldmVudFR5cGUgPT0g
ZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkl0ZXJhdGlvbkV2ZW50IHx8IGV2ZW50VHlwZSA9
PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uaXRlcmF0aW9uRXZlbnQpCi0gICAgICAgIGxpc3RlbmVy
VHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05JVEVSQVRJT05fTElTVEVORVI7Ci0gICAgZWxzZSBp
ZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25FbmRFdmVudCB8fCBl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50KQotICAgICAgICBsaXN0
ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9ORU5EX0xJU1RFTkVSOwotICAgIGVsc2Ugewot
ICAgICAgICBBU1NFUlQoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS53ZWJraXRBbmltYXRpb25T
dGFydEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uc3RhcnRFdmVu
dCk7Ci0gICAgICAgIGlmIChtX3N0YXJ0RXZlbnREaXNwYXRjaGVkKQotICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwotICAgICAgICBtX3N0YXJ0RXZlbnREaXNwYXRjaGVkID0gdHJ1ZTsKLSAgICAg
ICAgbGlzdGVuZXJUeXBlID0gRG9jdW1lbnQ6OkFOSU1BVElPTlNUQVJUX0xJU1RFTkVSOwotICAg
IH0KLQotICAgIGlmIChzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihsaXN0ZW5lclR5cGUpKSB7
Ci0gICAgICAgIC8vIERpc3BhdGNoIHRoZSBldmVudAotICAgICAgICBhdXRvIGVsZW1lbnQgPSBt
YWtlUmVmUHRyKHRoaXMtPmVsZW1lbnQoKSk7Ci0KLSAgICAgICAgQVNTRVJUKCFlbGVtZW50IHx8
IGVsZW1lbnQtPmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1lbnQ6
Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICAvLyBTY2hlZHVsZSBldmVudCBoYW5kbGluZwot
ICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEV2
ZW50VG9EaXNwYXRjaCgqZWxlbWVudCwgZXZlbnRUeXBlLCBtX2tleWZyYW1lcy5hbmltYXRpb25O
YW1lKCksIGVsYXBzZWRUaW1lKTsKLQotICAgICAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAo
dW5hbmltYXRlZCkgc3R5bGUKLSAgICAgICAgaWYgKChldmVudFR5cGUgPT0gZXZlbnROYW1lcygp
LndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50IHx8IGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkuYW5p
bWF0aW9uZW5kRXZlbnQpICYmIGVsZW1lbnQtPnJlbmRlcmVyKCkpCi0gICAgICAgICAgICBzZXRO
ZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQuZ2V0KCkpOwotCi0gICAgICAgIHJldHVybiB0cnVlOyAv
LyBEaWQgZGlzcGF0Y2ggYW4gZXZlbnQKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7IC8vIERp
ZCBub3QgZGlzcGF0Y2ggYW4gZXZlbnQKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6b3Zl
cnJpZGVBbmltYXRpb25zKCkKLXsKLSAgICAvLyBUaGlzIHdpbGwgb3ZlcnJpZGUgaW1wbGljaXQg
YW5pbWF0aW9ucyB0aGF0IG1hdGNoIHRoZSBwcm9wZXJ0aWVzIGluIHRoZSBrZXlmcmFtZSBhbmlt
YXRpb24KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMo
KSkKLSAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPm92ZXJyaWRlSW1wbGljaXRBbmltYXRp
b25zKHByb3BlcnR5SUQpOwotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpyZXN1bWVPdmVy
cmlkZGVuQW5pbWF0aW9ucygpCi17Ci0gICAgLy8gVGhpcyB3aWxsIHJlc3VtZSBvdmVycmlkZGVu
IGltcGxpY2l0IGFuaW1hdGlvbnMKLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJh
bWVzLnByb3BlcnRpZXMoKSkKLSAgICAgICAgY29tcG9zaXRlQW5pbWF0aW9uKCktPnJlc3VtZU92
ZXJyaWRkZW5JbXBsaWNpdEFuaW1hdGlvbnMocHJvcGVydHlJRCk7Ci19Ci0KLWJvb2wgS2V5ZnJh
bWVBbmltYXRpb246OmFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25z
dAotewotICAgIHJldHVybiBtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KTsK
LX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6cmVzb2x2ZUtleWZyYW1lU3R5bGVzKCkKLXsK
LSAgICBpZiAoIWVsZW1lbnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHN0
eWxlU2NvcGUgPSBTdHlsZTo6U2NvcGU6OmZvck9yZGluYWwoKmVsZW1lbnQoKSwgbV9hbmltYXRp
b24tPm5hbWVTdHlsZVNjb3BlT3JkaW5hbCgpKSkKLSAgICAgICAgc3R5bGVTY29wZS0+cmVzb2x2
ZXIoKS5rZXlmcmFtZVN0eWxlc0ZvckFuaW1hdGlvbigqZWxlbWVudCgpLCBtX3VuYW5pbWF0ZWRT
dHlsZS5nZXQoKSwgbV9rZXlmcmFtZXMpOwotCi0gICAgLy8gRW5zdXJlIHJlc291cmNlIGxvYWRz
IGZvciBhbGwgdGhlIGZyYW1lcy4KLSAgICBmb3IgKGF1dG8mIGtleWZyYW1lIDogbV9rZXlmcmFt
ZXMua2V5ZnJhbWVzKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHN0eWxlID0gY29uc3RfY2FzdDxS
ZW5kZXJTdHlsZSo+KGtleWZyYW1lLnN0eWxlKCkpKQotICAgICAgICAgICAgU3R5bGU6OmxvYWRQ
ZW5kaW5nUmVzb3VyY2VzKCpzdHlsZSwgZWxlbWVudCgpLT5kb2N1bWVudCgpLCBlbGVtZW50KCkp
OwotICAgIH0KLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1G
dW5jdGlvbkxpc3QoKQotewotICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gZmFs
c2U7Ci0gICAgCi0gICAgaWYgKG1fa2V5ZnJhbWVzLnNpemUoKSA8IDIgfHwgIW1fa2V5ZnJhbWVz
LmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKQotICAgICAgICByZXR1cm47
Ci0KLSAgICAvLyBFbXB0eSB0cmFuc2Zvcm1zIG1hdGNoIGFueXRoaW5nLCBzbyBmaW5kIHRoZSBm
aXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhlIHJlZmVyZW5jZQotICAgIHNpemVfdCBudW1LZXlm
cmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7Ci0gICAgc2l6ZV90IGZpcnN0Tm9uRW1wdHlUcmFu
c2Zvcm1LZXlmcmFtZUluZGV4ID0gbnVtS2V5ZnJhbWVzOwotCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVl
JiBjdXJyZW50S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKLSAgICAgICAgaWYgKGN1cnJlbnRL
ZXlmcmFtZS5zdHlsZSgpLT50cmFuc2Zvcm0oKS5vcGVyYXRpb25zKCkuc2l6ZSgpKSB7Ci0gICAg
ICAgICAgICBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCA9IGk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoZmlyc3ROb25FbXB0
eVRyYW5zZm9ybUtleWZyYW1lSW5kZXggPT0gbnVtS2V5ZnJhbWVzKQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIGZpcnN0VmFsID0gJm1f
a2V5ZnJhbWVzW2ZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4XS5zdHlsZSgpLT50
cmFuc2Zvcm0oKTsKLSAgICAKLSAgICAvLyBTZWUgaWYgdGhlIGtleWZyYW1lcyBhcmUgdmFsaWQK
LSAgICBmb3IgKHNpemVfdCBpID0gZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXgg
KyAxOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kpIHsKLSAgICAgICAgY29uc3QgS2V5ZnJhbWVWYWx1
ZSYgY3VycmVudEtleWZyYW1lID0gbV9rZXlmcmFtZXNbaV07Ci0gICAgICAgIGNvbnN0IFRyYW5z
Zm9ybU9wZXJhdGlvbnMqIHZhbCA9ICZjdXJyZW50S2V5ZnJhbWUuc3R5bGUoKS0+dHJhbnNmb3Jt
KCk7Ci0gICAgICAgIAotICAgICAgICAvLyBBbiBlbXRweSB0cmFuc2Zvcm0gbGlzdCBtYXRjaGVz
IGFueXRoaW5nLgotICAgICAgICBpZiAodmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpKQotICAg
ICAgICAgICAgY29udGludWU7Ci0gICAgICAgIAotICAgICAgICBpZiAoIWZpcnN0VmFsLT5vcGVy
YXRpb25zTWF0Y2goKnZhbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgfQotCi0gICAgbV90
cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSB0cnVlOwotfQotCi1ib29sIEtleWZyYW1lQW5p
bWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9wZXJ0eUlE
IHByb3BlcnR5SUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYg
KGNvbnN0IFJlbmRlclN0eWxlJik+JiBmaWx0ZXJzR2V0dGVyKSBjb25zdAotewotICAgIGlmICht
X2tleWZyYW1lcy5zaXplKCkgPCAyIHx8ICFtX2tleWZyYW1lcy5jb250YWluc1Byb3BlcnR5KHBy
b3BlcnR5SUQpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAvLyBFbXB0eSBmaWx0ZXJz
IG1hdGNoIGFueXRoaW5nLCBzbyBmaW5kIHRoZSBmaXJzdCBub24tZW1wdHkgZW50cnkgYXMgdGhl
IHJlZmVyZW5jZQotICAgIHNpemVfdCBudW1LZXlmcmFtZXMgPSBtX2tleWZyYW1lcy5zaXplKCk7
Ci0gICAgc2l6ZV90IGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID0gbnVtS2V5ZnJhbWVzOwot
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAg
ICBpZiAoZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNbaV0uc3R5bGUoKSkub3BlcmF0aW9ucygp
LnNpemUoKSkgewotICAgICAgICAgICAgZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXggPSBpOwot
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgaWYgKGZpcnN0
Tm9uRW1wdHlLZXlmcmFtZUluZGV4ID09IG51bUtleWZyYW1lcykKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgYXV0byYgZmlyc3RWYWwgPSBmaWx0ZXJzR2V0dGVyKCptX2tleWZyYW1lc1tm
aXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleF0uc3R5bGUoKSk7Ci0gICAgCi0gICAgZm9yIChzaXpl
X3QgaSA9IGZpcnN0Tm9uRW1wdHlLZXlmcmFtZUluZGV4ICsgMTsgaSA8IG51bUtleWZyYW1lczsg
KytpKSB7Ci0gICAgICAgIGF1dG8mIHZhbHVlID0gZmlsdGVyc0dldHRlcigqbV9rZXlmcmFtZXNb
aV0uc3R5bGUoKSk7Ci0KLSAgICAgICAgLy8gQW4gZW10cHkgZmlsdGVyIGxpc3QgbWF0Y2hlcyBh
bnl0aGluZy4KLSAgICAgICAgaWYgKHZhbHVlLm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAg
ICAgICAgICBjb250aW51ZTsKLQotICAgICAgICBpZiAoIWZpcnN0VmFsLm9wZXJhdGlvbnNNYXRj
aCh2YWx1ZSkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcmV0dXJu
IHRydWU7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0
ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGNo
ZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5RmlsdGVyLCBbXSAo
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSAtPiBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB7Ci0g
ICAgICAgIHJldHVybiBzdHlsZS5maWx0ZXIoKTsKLSAgICB9KTsKLX0KLQotI2lmIEVOQUJMRShG
SUxURVJTX0xFVkVMXzIpCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5n
QmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBtX2JhY2tkcm9wRmlsdGVyRnVu
Y3Rpb25MaXN0c01hdGNoID0gY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NT
UHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciwgW10gKGNvbnN0IFJlbmRlclN0eWxlJiBzdHls
ZSkgLT4gY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgewotICAgICAgICByZXR1cm4gc3R5bGUuYmFj
a2Ryb3BGaWx0ZXIoKTsKLSAgICB9KTsKLX0KLSNlbmRpZgotCi12b2lkIEtleWZyYW1lQW5pbWF0
aW9uOjpjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCkKLXsKLSAgICBt
X2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1
bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyLCBbXSAoY29uc3QgUmVuZGVy
U3R5bGUmIHN0eWxlKSAtPiBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB7Ci0gICAgICAgIHJldHVy
biBzdHlsZS5hcHBsZUNvbG9yRmlsdGVyKCk7Ci0gICAgfSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29u
ZHM+IEtleWZyYW1lQW5pbWF0aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpCi17Ci0gICAgT3B0aW9u
YWw8U2Vjb25kcz4gdCA9IEFuaW1hdGlvbkJhc2U6OnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAg
aWYgKCF0IHx8IHQudmFsdWUoKSAhPSAwX3MgfHwgcHJlQWN0aXZlKCkpCi0jaWYgQ09NUElMRVIo
TVNWQykgJiYgX01TQ19WRVIgPj0gMTkyMAotICAgICAgICByZXR1cm4gV1RGTW92ZSh0KTsKLSNl
bHNlCi0gICAgICAgIHJldHVybiB0OwotI2VuZGlmCi0KLSAgICAvLyBBIHJldHVybiB2YWx1ZSBv
ZiAwIG1lYW5zIHdlIG5lZWQgc2VydmljZS4gQnV0IGlmIHdlIG9ubHkgaGF2ZSBhY2NlbGVyYXRl
ZCBhbmltYXRpb25zIHdlIAotICAgIC8vIG9ubHkgbmVlZCBzZXJ2aWNlIGF0IHRoZSBlbmQgb2Yg
dGhlIHRyYW5zaXRpb24uCi0gICAgYm9vbCBhY2NlbGVyYXRlZFByb3BlcnRpZXNPbmx5ID0gdHJ1
ZTsKLSAgICAKLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRp
ZXMoKSkgewotICAgICAgICBpZiAoIUNTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlBy
b3BlcnR5SXNBY2NlbGVyYXRlZChwcm9wZXJ0eUlEKSB8fCAhaXNBY2NlbGVyYXRlZCgpKSB7Ci0g
ICAgICAgICAgICBhY2NlbGVyYXRlZFByb3BlcnRpZXNPbmx5ID0gZmFsc2U7Ci0gICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhY2NlbGVyYXRlZFByb3BlcnRp
ZXNPbmx5KSB7Ci0gICAgICAgIGJvb2wgaXNMb29waW5nOwotICAgICAgICBnZXRUaW1lVG9OZXh0
RXZlbnQodC52YWx1ZSgpLCBpc0xvb3BpbmcpOwotICAgIH0KLQotICAgIHJldHVybiB0OwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vS2V5ZnJhbWVBbmltYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
NDkyZTM5MTU1YzRhOWI3OGMxYzZkNmZlZTFjMmVlM2UwYmI2YmYzOC4uMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1h
dGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oCisrKyAvZGV2L251bGwKQEAgLTEsMTEzICswLDAgQEAK
LS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEu
ICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
Ci0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJ
bmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBt
YXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAg
IGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlz
c2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRT
IENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0g
KiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBU
SEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI3ByYWdt
YSBvbmNlCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQu
aCIKLSNpbmNsdWRlICJLZXlmcmFtZUxpc3QuaCIKLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1j
bGFzcyBGaWx0ZXJPcGVyYXRpb25zOwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLS8vIEEgS2V5ZnJh
bWVBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhbiBleHBsaWNpdCBhbmltYXRpb24gZm9y
IGEgc2luZ2xlIFJlbmRlckVsZW1lbnQuCi1jbGFzcyBLZXlmcmFtZUFuaW1hdGlvbiBmaW5hbCA6
IHB1YmxpYyBBbmltYXRpb25CYXNlIHsKLXB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPEtleWZyYW1l
QW5pbWF0aW9uPiBjcmVhdGUoY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24sIEVsZW1lbnQmIGVs
ZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQotICAgIHsKLSAgICAgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgS2V5ZnJhbWVBbmltYXRpb24oYW5pbWF0aW9uLCBlbGVtZW50LCBjb21wb3NpdGVBbmlt
YXRpb24sIHVuYW5pbWF0ZWRTdHlsZSkpOwotICAgIH0KLSAgICAKLSAgICBPcHRpb25TZXQ8QW5p
bWF0ZUNoYW5nZT4gYW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mLCBjb25zdCBSZW5kZXJTdHls
ZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5
bGUpOwotICAgIHZvaWQgZ2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5
bGU+Jikgb3ZlcnJpZGU7Ci0KLSAgICBib29sIGNvbXB1dGVFeHRlbnRPZlRyYW5zZm9ybUFuaW1h
dGlvbihMYXlvdXRSZWN0JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLSAgICBjb25zdCBLZXlmcmFtZUxp
c3QmIGtleWZyYW1lcygpIGNvbnN0IHsgcmV0dXJuIG1fa2V5ZnJhbWVzOyB9Ci0KLSAgICBjb25z
dCBBdG9tU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXMuYW5pbWF0aW9u
TmFtZSgpOyB9Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5
SUQpIGNvbnN0OwotCi0gICAgYm9vbCB0cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCgpIGNvbnN0IHsg
cmV0dXJuIG1fdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQ7IH0KLSAgICBib29sIGRlcGVuZHNPbkxh
eW91dCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVwZW5kc09uTGF5b3V0OyB9Ci0gICAgYm9vbCBhZmZl
Y3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1faGFzQWNjZWxlcmF0ZWRQ
cm9wZXJ0eTsgfQotCi0gICAgdm9pZCBzZXRVbmFuaW1hdGVkU3R5bGUoc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBzdHlsZSkgeyBtX3VuYW5pbWF0ZWRTdHlsZSA9IFdURk1vdmUoc3R5bGUp
OyB9Ci0gICAgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSgpIGNvbnN0IG92ZXJy
aWRlIHsgcmV0dXJuICptX3VuYW5pbWF0ZWRTdHlsZTsgfQotCi0gICAgT3B0aW9uYWw8U2Vjb25k
cz4gdGltZVRvTmV4dFNlcnZpY2UoKSBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBLZXlmcmFt
ZUFuaW1hdGlvbihjb25zdCBBbmltYXRpb24mLCBFbGVtZW50JiwgQ29tcG9zaXRlQW5pbWF0aW9u
JiwgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRTdHlsZSk7Ci0gICAgdmlydHVhbCB+S2V5
ZnJhbWVBbmltYXRpb24oKTsKLQotICAgIHZvaWQgb25BbmltYXRpb25TdGFydChkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgb25BbmltYXRpb25JdGVyYXRpb24oZG91Ymxl
IGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICB2b2lkIG9uQW5pbWF0aW9uRW5kKGRvdWJsZSBl
bGFwc2VkVGltZSkgb3ZlcnJpZGU7Ci0gICAgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgdGlt
ZU9mZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9m
ZnNldCkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBlbmRBbmltYXRpb24oYm9vbCBmaWxsaW5nRm9yd2Fy
ZHMgPSBmYWxzZSkgb3ZlcnJpZGU7Ci0KLSAgICB2b2lkIG92ZXJyaWRlQW5pbWF0aW9ucygpIG92
ZXJyaWRlOwotICAgIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKSBvdmVycmlkZTsK
LQotICAgIGJvb2wgc2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVy
VHlwZSBpbkxpc3RlbmVyVHlwZSkgY29uc3Q7Ci0gICAgYm9vbCBzZW5kQW5pbWF0aW9uRXZlbnQo
Y29uc3QgQXRvbVN0cmluZyYsIGRvdWJsZSBlbGFwc2VkVGltZSk7Ci0KLSAgICBib29sIGFmZmVj
dHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgY29t
cHV0ZUV4dGVudE9mQW5pbWF0aW9uRm9yTWF0cml4QW5pbWF0aW9uKGNvbnN0IEZsb2F0UmVjdCYg
cmVuZGVyZXJCb3gsIExheW91dFJlY3QmKSBjb25zdDsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVu
dE9mQW5pbWF0aW9uRm9yTWF0Y2hpbmdUcmFuc2Zvcm1MaXN0cyhjb25zdCBGbG9hdFJlY3QmIHJl
bmRlcmVyQm94LCBMYXlvdXRSZWN0JikgY29uc3Q7Ci0KLSAgICB2b2lkIGNvbXB1dGVMYXlvdXRE
ZXBlbmRlbmN5KCk7Ci0gICAgdm9pZCByZXNvbHZlS2V5ZnJhbWVTdHlsZXMoKTsKLSAgICB2b2lk
IHZhbGlkYXRlVHJhbnNmb3JtRnVuY3Rpb25MaXN0KCk7Ci0gICAgdm9pZCBjaGVja0Zvck1hdGNo
aW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2lmIEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0g
ICAgdm9pZCBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0j
ZW5kaWYKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMo
KTsKLSAgICBib29sIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENTU1Byb3Bl
cnR5SUQsIGNvbnN0IHN0ZDo6ZnVuY3Rpb248Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKGNvbnN0
IFJlbmRlclN0eWxlJik+JikgY29uc3Q7Ci0gICAgCi0gICAgLy8gR2V0IHRoZSBzdHlsZXMgZm9y
IHRoZSBnaXZlbiBwcm9wZXJ0eSBzdXJyb3VuZGluZyB0aGUgY3VycmVudCBhbmltYXRpb24gdGlt
ZSBhbmQgdGhlIHByb2dyZXNzIGJldHdlZW4gdGhlbS4KLSAgICB2b2lkIGZldGNoSW50ZXJ2YWxF
bmRwb2ludHNGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSomIGZy
b21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqJiB0b1N0eWxlLCBkb3VibGUmIHByb2dyZXNzKSBj
b25zdDsKLQotICAgIEtleWZyYW1lTGlzdCBtX2tleWZyYW1lczsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+IG1fdW5hbmltYXRlZFN0eWxlOyAvLyBUaGUgc3R5bGUganVzdCBiZWZv
cmUgd2Ugc3RhcnRlZCBhbmltYXRpb24KLQotICAgIGJvb2wgbV9zdGFydEV2ZW50RGlzcGF0Y2hl
ZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX3RyaWdnZXJzU3RhY2tpbmdDb250ZXh0IHsgZmFsc2Ug
fTsKLSAgICBib29sIG1faGFzQWNjZWxlcmF0ZWRQcm9wZXJ0eSB7IGZhbHNlIH07Ci0gICAgYm9v
bCBtX2RlcGVuZHNPbkxheW91dCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGlj
c0xheWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVy
LmgKaW5kZXggN2U0ZmUzZmQwMGNhNTlkOWI3ODJhOGEwNDBmNGQ1Yjc5MTgwOWZlNi4uZWUzNDdi
YTg1MzI2MWM5NjJlYTk5NDJiNjgzZjJhMmRhOTEyYWQxMSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApAQCAtNDc0LDkgKzQ3NCw3IEBA
IHB1YmxpYzoKICAgICAvLyBUcmFuc2l0aW9ucyBhcmUgaWRlbnRpZmllZCBieSBhIHNwZWNpYWwg
YW5pbWF0aW9uIG5hbWUgdGhhdCBjYW5ub3QgY2xhc2ggd2l0aCBhIGtleWZyYW1lIGlkZW50aWZp
ZXIuCiAgICAgc3RhdGljIFN0cmluZyBhbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRl
ZFByb3BlcnR5SUQpOwogCi0gICAgLy8gUmV0dXJuIHRydWUgaWYgdGhlIGFuaW1hdGlvbiBpcyBo
YW5kbGVkIGJ5IHRoZSBjb21wb3NpdGluZyBzeXN0ZW0uIElmIHRoaXMgcmV0dXJucwotICAgIC8v
IGZhbHNlLCB0aGUgYW5pbWF0aW9uIHdpbGwgYmUgcnVuIGJ5IENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXIuCi0gICAgLy8gVGhlc2UgbWV0aG9kcyBoYW5kbGUgYm90aCB0cmFuc2l0aW9ucyBhbmQga2V5
ZnJhbWUgYW5pbWF0aW9ucy4KKyAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIGlz
IGhhbmRsZWQgYnkgdGhlIGNvbXBvc2l0aW5nIHN5c3RlbS4KICAgICB2aXJ0dWFsIGJvb2wgYWRk
QW5pbWF0aW9uKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiwgY29uc3QgRmxvYXRTaXplJiAvKmJv
eFNpemUqLywgY29uc3QgQW5pbWF0aW9uKiwgY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUq
LywgZG91YmxlIC8qdGltZU9mZnNldCovKSAgeyByZXR1cm4gZmFsc2U7IH0KICAgICB2aXJ0dWFs
IHZvaWQgcGF1c2VBbmltYXRpb24oY29uc3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLywgZG91
YmxlIC8qdGltZU9mZnNldCovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgcmVtb3ZlQW5pbWF0aW9u
KGNvbnN0IFN0cmluZyYgLyphbmltYXRpb25OYW1lKi8pIHsgfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKaW5kZXgg
NDcyMGUxMjk5ZWE2NGI0Y2JiZGY5ZmUwZWMyYjQzZGZjZTViNGIxZS4uNWU5NjQ3ZmZhYzgwMTNm
OTI0MzdmNWRhZWIxMGE4N2I1NWFlNDM2YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCkBAIC0zMDQwLDkgKzMw
NDAsNyBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6dXBkYXRlQ29udGVudHNOZWVkc0Rpc3BsYXko
KQogCiBzdGF0aWMgYm9vbCBpc0tleWZyYW1lKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiBsaXN0
KQogewotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGxpc3Qu
c2l6ZSgpID4gMTsKLSAgICByZXR1cm4gbGlzdC5zaXplKCkgPiAyOworICAgIHJldHVybiBsaXN0
LnNpemUoKSA+IDE7CiB9CiAKIGJvb2wgR3JhcGhpY3NMYXllckNBOjpjcmVhdGVBbmltYXRpb25G
cm9tS2V5ZnJhbWVzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFu
aW1hdGlvbiogYW5pbWF0aW9uLCBjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIFNlY29uZHMg
dGltZU9mZnNldCkKQEAgLTMyOTMsMzkgKzMyOTEsMjkgQEAgdm9pZCBHcmFwaGljc0xheWVyQ0E6
OnNldHVwQW5pbWF0aW9uKFBsYXRmb3JtQ0FBbmltYXRpb24qIHByb3BlcnR5QW5pbSwgY29uc3Qg
QW4KICAgICBwcm9wZXJ0eUFuaW0tPnNldEFkZGl0aXZlKGFkZGl0aXZlKTsKICAgICBwcm9wZXJ0
eUFuaW0tPnNldEZpbGxNb2RlKGZpbGxNb2RlKTsKIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkgewotICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTkxOAotICAgICAgICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRoZSBvbmx5
IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlvbjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKLSAgICAgICAg
Ly8gaXRzIG1vZGUgc2V0IHRvIFNpbmdsZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGRvbid0
IHNldCB0aGUgYW5pbWF0aW9uLXdpZGUKLSAgICAgICAgLy8gdGltaW5nIGZ1bmN0aW9uIHRvIHdv
cmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRhdGlvbi4KLSAgICAgICAgaWYgKGFuaW0t
PnByb3BlcnR5KCkubW9kZSAhPSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9w
ZXJ0eSkKLSAgICAgICAgICAgIHByb3BlcnR5QW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oYW5pbS0+
dGltaW5nRnVuY3Rpb24oKSk7Ci0gICAgfQorICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE1OTE4CisgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBp
cyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZl
CisgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmdsZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdl
IGRvbid0IHNldCB0aGUgYW5pbWF0aW9uLXdpZGUKKyAgICAvLyB0aW1pbmcgZnVuY3Rpb24gdG8g
d29yayBhcm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgorICAgIGlmIChhbmltLT5w
cm9wZXJ0eSgpLm1vZGUgIT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVy
dHkpCisgICAgICAgIHByb3BlcnR5QW5pbS0+c2V0VGltaW5nRnVuY3Rpb24oYW5pbS0+dGltaW5n
RnVuY3Rpb24oKSk7CiB9CiAKIGNvbnN0IFRpbWluZ0Z1bmN0aW9uJiBHcmFwaGljc0xheWVyQ0E6
OnRpbWluZ0Z1bmN0aW9uRm9yQW5pbWF0aW9uVmFsdWUoY29uc3QgQW5pbWF0aW9uVmFsdWUmIGFu
aW1WYWx1ZSwgY29uc3QgQW5pbWF0aW9uJiBhbmltKQogewotICAgIGlmIChSdW50aW1lRW5hYmxl
ZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoKSkgewotICAgICAgICBpZiAoYW5pbS5wcm9wZXJ0eSgpLm1vZGUgPT0gQW5pbWF0aW9u
OjpUcmFuc2l0aW9uTW9kZTo6U2luZ2xlUHJvcGVydHkgJiYgYW5pbS50aW1pbmdGdW5jdGlvbigp
KSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTIxNTkxOAotICAgICAgICAgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBpcyB0aGUg
b25seSBzY2VuYXJpbyB3aGVyZSBBbmltYXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZlCi0gICAg
ICAgICAgICAvLyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwg
d2UgY2hvc2Ugbm90IHRvIHNldCBzZXQgdGhlCi0gICAgICAgICAgICAvLyBhbmltYXRpb24td2lk
ZSB0aW1pbmcgZnVuY3Rpb24sIHNvIHdlIHNldCBpdCBvbiB0aGUgc2luZ2xlIGtleWZyYW1lIGlu
dGVydmFsCi0gICAgICAgICAgICAvLyB0byB3b3JrIGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxp
bWl0YXRpb24uCi0gICAgICAgICAgICByZXR1cm4gKmFuaW0udGltaW5nRnVuY3Rpb24oKTsKLSAg
ICAgICAgfQotICAgICAgICBpZiAoYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCkpCi0gICAgICAg
ICAgICByZXR1cm4gKmFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpOwotICAgICAgICBpZiAoYW5p
bS5kZWZhdWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKSkKLSAgICAgICAgICAgIHJldHVy
biAqYW5pbS5kZWZhdWx0VGltaW5nRnVuY3Rpb25Gb3JLZXlmcmFtZXMoKTsKLSAgICAgICAgcmV0
dXJuIExpbmVhclRpbWluZ0Z1bmN0aW9uOjpzaGFyZWRMaW5lYXJUaW1pbmdGdW5jdGlvbigpOwor
ICAgIGlmIChhbmltLnByb3BlcnR5KCkubW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2Rl
OjpTaW5nbGVQcm9wZXJ0eSAmJiBhbmltLnRpbWluZ0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgLy8g
RklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKKyAg
ICAgICAgLy8gQSBDU1MgVHJhbnNpdGlvbiBpcyB0aGUgb25seSBzY2VuYXJpbyB3aGVyZSBBbmlt
YXRpb246OnByb3BlcnR5KCkgd2lsbCBoYXZlCisgICAgICAgIC8vIGl0cyBtb2RlIHNldCB0byBT
aW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBjaG9zZSBub3QgdG8gc2V0IHNldCB0aGUK
KyAgICAgICAgLy8gYW5pbWF0aW9uLXdpZGUgdGltaW5nIGZ1bmN0aW9uLCBzbyB3ZSBzZXQgaXQg
b24gdGhlIHNpbmdsZSBrZXlmcmFtZSBpbnRlcnZhbAorICAgICAgICAvLyB0byB3b3JrIGFyb3Vu
ZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24uCisgICAgICAgIHJldHVybiAqYW5pbS50aW1p
bmdGdW5jdGlvbigpOwogICAgIH0KLQogICAgIGlmIChhbmltVmFsdWUudGltaW5nRnVuY3Rpb24o
KSkKICAgICAgICAgcmV0dXJuICphbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKTsKLSAgICBpZiAo
YW5pbS5pc1RpbWluZ0Z1bmN0aW9uU2V0KCkpCi0gICAgICAgIHJldHVybiAqYW5pbS50aW1pbmdG
dW5jdGlvbigpOwotICAgIHJldHVybiBDdWJpY0JlemllclRpbWluZ0Z1bmN0aW9uOjpkZWZhdWx0
VGltaW5nRnVuY3Rpb24oKTsKKyAgICBpZiAoYW5pbS5kZWZhdWx0VGltaW5nRnVuY3Rpb25Gb3JL
ZXlmcmFtZXMoKSkKKyAgICAgICAgcmV0dXJuICphbmltLmRlZmF1bHRUaW1pbmdGdW5jdGlvbkZv
cktleWZyYW1lcygpOworICAgIHJldHVybiBMaW5lYXJUaW1pbmdGdW5jdGlvbjo6c2hhcmVkTGlu
ZWFyVGltaW5nRnVuY3Rpb24oKTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1h
dGlvbkVuZHBvaW50cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LCBjb25zdCBB
bmltYXRpb24qIGFuaW1hdGlvbiwgUGxhdGZvcm1DQUFuaW1hdGlvbiogYmFzaWNBbmltKQpAQCAt
MzM0NiwxMSArMzMzNCw2IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRBbmltYXRpb25FbmRw
b2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwKICAgICAgICAgYnJlYWs7
CiAgICAgfQogCi0gICAgLy8gVGhpcyBjb2RlcGF0aCBpcyB1c2VkIGZvciAyLWtleWZyYW1lIGFu
aW1hdGlvbnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8gbG9vayBpbiB0aGUgc3RhcnQKLSAgICAvLyBm
b3IgYSB0aW1pbmcgZnVuY3Rpb24uIEV2ZW4gaW4gdGhlIHJldmVyc2luZyBhbmltYXRpb24gY2Fz
ZSwgdGhlIGZpcnN0IGtleWZyYW1lIHByb3ZpZGVzIHRoZSB0aW1pbmcgZnVuY3Rpb24uCi0gICAg
aWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgYmFzaWNBbmltLT5zZXRUaW1pbmdG
dW5jdGlvbigmdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxpc3QuYXQoMCks
ICphbmltYXRpb24pLCAhZm9yd2FyZHMpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTM0
NDAsMTEgKzM0MjMsNiBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0VHJhbnNmb3JtQW5pbWF0
aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YQogICAgICAgICB9CiAgICAg
fQogCi0gICAgLy8gVGhpcyBjb2RlcGF0aCBpcyB1c2VkIGZvciAyLWtleWZyYW1lIGFuaW1hdGlv
bnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8gbG9vayBpbiB0aGUgc3RhcnQKLSAgICAvLyBmb3IgYSB0
aW1pbmcgZnVuY3Rpb24uIEV2ZW4gaW4gdGhlIHJldmVyc2luZyBhbmltYXRpb24gY2FzZSwgdGhl
IGZpcnN0IGtleWZyYW1lIHByb3ZpZGVzIHRoZSB0aW1pbmcgZnVuY3Rpb24uCi0gICAgaWYgKCFS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgYmFzaWNBbmltLT5zZXRUaW1pbmdGdW5jdGlv
bigmdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxpc3QuYXQoMCksICphbmlt
YXRpb24pLCAhZm9yd2FyZHMpOwotCiAgICAgYXV0byB2YWx1ZUZ1bmN0aW9uID0gZ2V0VmFsdWVG
dW5jdGlvbk5hbWVGb3JUcmFuc2Zvcm1PcGVyYXRpb24odHJhbnNmb3JtT3BUeXBlKTsKICAgICBp
ZiAodmFsdWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24p
CiAgICAgICAgIGJhc2ljQW5pbS0+c2V0VmFsdWVGdW5jdGlvbih2YWx1ZUZ1bmN0aW9uKTsKQEAg
LTM1NTEsMTEgKzM1MjksNiBAQCBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0RmlsdGVyQW5pbWF0
aW9uRW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZQogICAgIGJhc2ljQW5p
bS0+c2V0RnJvbVZhbHVlKGZyb21PcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRl
eCk7CiAgICAgYmFzaWNBbmltLT5zZXRUb1ZhbHVlKHRvT3BlcmF0aW9uLCBpbnRlcm5hbEZpbHRl
clByb3BlcnR5SW5kZXgpOwogCi0gICAgLy8gVGhpcyBjb2RlcGF0aCBpcyB1c2VkIGZvciAyLWtl
eWZyYW1lIGFuaW1hdGlvbnMsIHNvIHdlIHN0aWxsIG5lZWQgdG8gbG9vayBpbiB0aGUgc3RhcnQK
LSAgICAvLyBmb3IgYSB0aW1pbmcgZnVuY3Rpb24uIEV2ZW4gaW4gdGhlIHJldmVyc2luZyBhbmlt
YXRpb24gY2FzZSwgdGhlIGZpcnN0IGtleWZyYW1lIHByb3ZpZGVzIHRoZSB0aW1pbmcgZnVuY3Rp
b24uCi0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgYmFzaWNBbmltLT5z
ZXRUaW1pbmdGdW5jdGlvbigmdGltaW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZSh2YWx1ZUxp
c3QuYXQoMCksICphbmltYXRpb24pLCAhZm9yd2FyZHMpOwotCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmNwcAppbmRleCBkNjM1
ODExOWI0Y2M3MTRlMWRlNTgxNjQ2Mzg1Y2JlZTMyZGM4NTAzLi5kZmQwYmQ5OTEwM2QwYzlkM2Fk
N2Y3MTZkNzhiMWNmMGM3ZDQ4MDJiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJp
bmcvUmVuZGVyRWxlbWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckVsZW1lbnQuY3BwCkBAIC0zMiw2ICszMiw3IEBACiAjZW5kaWYKICNpbmNsdWRlICJDb250ZW50
RGF0YS5oIgogI2luY2x1ZGUgIkN1cnNvckxpc3QuaCIKKyNpbmNsdWRlICJEb2N1bWVudFRpbWVs
aW5lLmgiCiAjaW5jbHVkZSAiRWxlbWVudENoaWxkSXRlcmF0b3IuaCIKICNpbmNsdWRlICJFdmVu
dEhhbmRsZXIuaCIKICNpbmNsdWRlICJGb2N1c0NvbnRyb2xsZXIuaCIKQEAgLTY2LDYgKzY3LDcg
QEAKICNpbmNsdWRlICJSZW5kZXJMaXN0TWFya2VyLmgiCiAjZW5kaWYKICNpbmNsdWRlICJSZW5k
ZXJGcmFnbWVudENvbnRhaW5lci5oIgorI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCiAjaW5jbHVk
ZSAiUmVuZGVyVGFibGVDYXB0aW9uLmgiCiAjaW5jbHVkZSAiUmVuZGVyVGFibGVDZWxsLmgiCiAj
aW5jbHVkZSAiUmVuZGVyVGFibGVDb2wuaCIKQEAgLTIyOTAsNCArMjI5MiwxNyBAQCB2b2lkIFJl
bmRlckVsZW1lbnQ6OnJlc2V0VGV4dEF1dG9zaXppbmcoKQogfQogI2VuZGlmIC8vIEVOQUJMRShU
RVhUX0FVVE9TSVpJTkcpCiAKK3N0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gUmVuZGVyRWxl
bWVudDo6YW5pbWF0ZWRTdHlsZSgpCit7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxl
PiByZXN1bHQ7CisKKyAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1bWVudFRpbWVsaW5lKCkp
CisgICAgICAgIHJlc3VsdCA9IHRpbWVsaW5lLT5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoKnRo
aXMpOworCisgICAgaWYgKCFyZXN1bHQpCisgICAgICAgIHJlc3VsdCA9IFJlbmRlclN0eWxlOjpj
bG9uZVB0cihzdHlsZSgpKTsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmggYi9Tb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCmluZGV4IGUwYTYyZDBlZTI2MGM3NDg0M2Qw
ZTllMTRmMmYyZjM3YjMyZDQ4MmMuLmJhMzQ4YjdhNTM5MDhmOTEwOWQ3NWE0NGZlMGViYWExNzVk
NTU0ODYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaApAQCAtMzAs
NiArMzAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBDb250cm9sU3RhdGVzOwogY2xh
c3MgS2V5ZnJhbWVMaXN0OwogY2xhc3MgUmVuZGVyQmxvY2s7CitjbGFzcyBSZW5kZXJTdHlsZTsK
IGNsYXNzIFJlbmRlclRyZWVCdWlsZGVyOwogCiBjbGFzcyBSZW5kZXJFbGVtZW50IDogcHVibGlj
IFJlbmRlck9iamVjdCB7CkBAIC0yMjYsMTUgKzIyNywxMiBAQCBwdWJsaWM6CiAgICAgUmVuZGVy
T2JqZWN0KiBhdHRhY2hSZW5kZXJlckludGVybmFsKFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+IGNo
aWxkLCBSZW5kZXJPYmplY3QqIGJlZm9yZUNoaWxkKTsKICAgICBSZW5kZXJQdHI8UmVuZGVyT2Jq
ZWN0PiBkZXRhY2hSZW5kZXJlckludGVybmFsKFJlbmRlck9iamVjdCYpOwogCi0gICAgdmlydHVh
bCBib29sIHN0YXJ0VHJhbnNpdGlvbihkb3VibGUgLyogdGltZU9mZnNldCAqLywgQ1NTUHJvcGVy
dHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIC8qIGZyb21TdHlsZSAqLywgY29uc3QgUmVuZGVyU3R5
bGUqIC8qIHRvU3R5bGUgKi8pIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgdmlydHVhbCB2b2lkIHRy
YW5zaXRpb25QYXVzZWQoZG91YmxlIC8qIHRpbWVPZmZzZXQgKi8sIENTU1Byb3BlcnR5SUQpIHsg
fQotICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCkgeyB9
Ci0KICAgICB2aXJ0dWFsIGJvb2wgc3RhcnRBbmltYXRpb24oZG91YmxlIC8qIHRpbWVPZmZzZXQg
Ki8sIGNvbnN0IEFuaW1hdGlvbiYsIGNvbnN0IEtleWZyYW1lTGlzdCYpIHsgcmV0dXJuIGZhbHNl
OyB9CiAgICAgdmlydHVhbCB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3VibGUgLyogdGltZU9mZnNl
dCAqLywgY29uc3QgU3RyaW5nJiAvKiBuYW1lICovKSB7IH0KICAgICB2aXJ0dWFsIHZvaWQgYW5p
bWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiAvKiBuYW1lICovKSB7IH0KIAogICAgIHZpcnR1
YWwgdm9pZCBzdXNwZW5kQW5pbWF0aW9ucyhNb25vdG9uaWNUaW1lID0gTW9ub3RvbmljVGltZSgp
KSB7IH0KKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IGFuaW1hdGVkU3R5bGUoKTsK
IAogcHJvdGVjdGVkOgogICAgIGVudW0gQmFzZVR5cGVGbGFnIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCmluZGV4IDdkMDdjZGJkODQ5NzAyODUzZTFiOTI1YTBiYmM5
OGQ3ZGRhZmE3NjYuLmEwZTBlMjNlOGNmOGQ2ZTI2ODlmMWNiYjYyNmM5YWFhZDVlNWQ0YTAgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcApAQCAtNDYsNyArNDYsNiBA
QAogI2luY2x1ZGUgIlJlbmRlckxheWVyLmgiCiAKICNpbmNsdWRlICJCb3hTaGFwZS5oIgotI2lu
Y2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGaWx0ZXIuaCIK
ICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC0x
MzI3LDIxICsxMzI2LDEwIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxheWVyOjpjdXJy
ZW50VHJhbnNmb3JtKFJlbmRlclN0eWxlOjpBcHBseVRyYW5zZm9ybU9yCiAKICAgICBhdXRvJiBy
ZW5kZXJCb3ggPSBkb3duY2FzdDxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpOwogCi0gICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRl
cmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGltZWxpbmUtPmlz
UnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSkpIHsKLSAgICAgICAgICAgICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBj
dXJyVHJhbnNmb3JtOwotICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gc3R5bGUgPSB0aW1lbGluZS0+YW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkp
OwotICAgICAgICAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0gc25h
cFJlY3RUb0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRv
Q1NTQm94VHlwZShzdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRvY3VtZW50KCku
ZGV2aWNlU2NhbGVGYWN0b3IoKSk7Ci0gICAgICAgICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNm
b3JtKGN1cnJUcmFuc2Zvcm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsK
LSAgICAgICAgICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBjYW5S
ZW5kZXIzRFRyYW5zZm9ybXMoKSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGN1cnJUcmFuc2Zv
cm07Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBpZiAo
cmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlv
bk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKSB7CisgICAgaWYg
KGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKKyAgICAg
ICAgaWYgKHRpbWVsaW5lLT5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIo
cmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pKSB7CiAgICAgICAgICAgICBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3JtOwotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0
ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOworICAgICAgICAgICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCkuYW5pbWF0ZWRTdHlsZSgpOwogICAg
ICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBl
KHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKICAgICAgICAgICAgIHN0eWxlLT5hcHBseVRyYW5zZm9ybShjdXJyVHJhbnNm
b3JtLCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0LCBhcHBseU9yaWdpbik7CiAgICAgICAgICAgICBt
YWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNmb3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMo
KSk7CkBAIC0xMzQ5LDExICsxMzM3LDEwIEBAIFRyYW5zZm9ybWF0aW9uTWF0cml4IFJlbmRlckxh
eWVyOjpjdXJyZW50VHJhbnNmb3JtKFJlbmRlclN0eWxlOjpBcHBseVRyYW5zZm9ybU9yCiAgICAg
ICAgIH0KICAgICB9CiAKLQogICAgIC8vIG1fdHJhbnNmb3JtIGluY2x1ZGVzIHRyYW5zZm9ybS1v
cmlnaW4sIHNvIHdlIG5lZWQgdG8gcmVjb21wdXRlIHRoZSB0cmFuc2Zvcm0gaGVyZS4KICAgICBp
ZiAoYXBwbHlPcmlnaW4gPT0gUmVuZGVyU3R5bGU6OkV4Y2x1ZGVUcmFuc2Zvcm1PcmlnaW4pIHsK
ICAgICAgICAgVHJhbnNmb3JtYXRpb25NYXRyaXggY3VyclRyYW5zZm9ybTsKLSAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBzdHlsZSA9IHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0
aW9uKCkuYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKHJlbmRlcmVyKCkpOworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRlZFN0eWxl
KCk7CiAgICAgICAgIEZsb2F0UmVjdCBwaXhlbFNuYXBwZWRCb3JkZXJSZWN0ID0gc25hcFJlY3RU
b0RldmljZVBpeGVscyhyZW5kZXJCb3gucmVmZXJlbmNlQm94KHRyYW5zZm9ybUJveFRvQ1NTQm94
VHlwZShzdHlsZS0+dHJhbnNmb3JtQm94KCkpKSwgcmVuZGVyQm94LmRvY3VtZW50KCkuZGV2aWNl
U2NhbGVGYWN0b3IoKSk7CiAgICAgICAgIHJlbmRlckJveC5zdHlsZSgpLmFwcGx5VHJhbnNmb3Jt
KGN1cnJUcmFuc2Zvcm0sIHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIFJlbmRlclN0eWxlOjpFeGNs
dWRlVHJhbnNmb3JtT3JpZ2luKTsKICAgICAgICAgbWFrZU1hdHJpeFJlbmRlcmFibGUoY3VyclRy
YW5zZm9ybSwgY2FuUmVuZGVyM0RUcmFuc2Zvcm1zKCkpOwpAQCAtNjE2NSwyMCArNjE1MiwxMyBA
QCBib29sIFJlbmRlckxheWVyOjpnZXRPdmVybGFwQm91bmRzSW5jbHVkaW5nQ2hpbGRyZW5BY2Nv
dW50aW5nRm9yVHJhbnNmb3JtQW5pbWF0aQogICAgIGJvdW5kcyA9IGNhbGN1bGF0ZUxheWVyQm91
bmRzKHRoaXMsIExheW91dFNpemUoKSwgYm91bmRzRmxhZ3MpOwogICAgIAogICAgIExheW91dFJl
Y3QgYW5pbWF0ZWRCb3VuZHMgPSBib3VuZHM7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1l
bGluZSgpKSB7Ci0gICAgICAgICAgICBpZiAodGltZWxpbmUtPmNvbXB1dGVFeHRlbnRPZkFuaW1h
dGlvbihyZW5kZXJlcigpLCBhbmltYXRlZEJvdW5kcykpIHsKLSAgICAgICAgICAgICAgICBib3Vu
ZHMgPSBhbmltYXRlZEJvdW5kczsKLSAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZW5kZXJlcigp
LmxlZ2FjeUFuaW1hdGlvbigpLmNvbXB1dGVFeHRlbnRPZkFuaW1hdGlvbihyZW5kZXJlcigpLCBh
bmltYXRlZEJvdW5kcykpIHsKKyAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRv
Y3VtZW50VGltZWxpbmUoKSkgeworICAgICAgICBpZiAodGltZWxpbmUtPmNvbXB1dGVFeHRlbnRP
ZkFuaW1hdGlvbihyZW5kZXJlcigpLCBhbmltYXRlZEJvdW5kcykpIHsKICAgICAgICAgICAgIGJv
dW5kcyA9IGFuaW1hdGVkQm91bmRzOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICB9Ci0gICAgCisKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuY3BwIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAKaW5kZXggNGQ1NDdjNGI3ZmRk
MWFlNDA5YTZjZTZmODI5MmY2YTZjZDMwMzI2Zi4uMmY3YjU4OTIzMmZhNzIyMzQ2ZjcwMmE4ZDQy
ZGUxMzNiZGU3ZWVhNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRl
ckxheWVyQmFja2luZy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyQmFja2luZy5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckJh
Y2tpbmcuaCIKIAogI2luY2x1ZGUgIkJpdG1hcEltYWdlLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0
aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNp
bmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIKQEAg
LTEyNTEsMTEgKzEyNTAsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6dXBkYXRlR2VvbWV0
cnkoY29uc3QgUmVuZGVyTGF5ZXIqIGNvbXBvc2l0ZWRBbmNlc3RvcikKICAgICBjb25zdCBhdXRv
IGRldmljZVNjYWxlRmFjdG9yID0gdGhpcy0+ZGV2aWNlU2NhbGVGYWN0b3IoKTsKIAogICAgIGJv
b2wgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSBmYWxzZTsKLSAgICBp
ZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0g
cmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5lKCkpCi0gICAgICAgICAgICBpc1J1bm5pbmdBY2Nl
bGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5lLT5pc1J1bm5pbmdBY2NlbGVyYXRl
ZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwot
ICAgIH0gZWxzZQotICAgICAgICBpc1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlv
biA9IHJlbmRlcmVyKCkubGVnYWN5QW5pbWF0aW9uKCkuaXNSdW5uaW5nQWNjZWxlcmF0ZWRBbmlt
YXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAgICBp
ZiAoYXV0byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkKKyAgICAg
ICAgaXNSdW5uaW5nQWNjZWxlcmF0ZWRUcmFuc2Zvcm1BbmltYXRpb24gPSB0aW1lbGluZS0+aXNS
dW5uaW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3Bl
cnR5VHJhbnNmb3JtKTsKIAogICAgIHVwZGF0ZVRyYW5zZm9ybShzdHlsZSk7CiAgICAgdXBkYXRl
T3BhY2l0eShzdHlsZSk7CkBAIC0zNjQ4LDk3ICszNjQ0LDggQEAgdm9pZCBSZW5kZXJMYXllckJh
Y2tpbmc6OmFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSkKICAg
ICBtX293bmluZ0xheWVyLnNldE5lZWRzQ29tcG9zaXRpbmdHZW9tZXRyeVVwZGF0ZSgpOwogfQog
Ci1ib29sIFJlbmRlckxheWVyQmFja2luZzo6c3RhcnRUcmFuc2l0aW9uKGRvdWJsZSB0aW1lT2Zm
c2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbVN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSkKLXsKLSAgICBib29sIGRpZEFuaW1hdGUgPSBm
YWxzZTsKLQotICAgIEFTU0VSVChwcm9wZXJ0eSAhPSBDU1NQcm9wZXJ0eUludmFsaWQpOwotCi0g
ICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5T3BhY2l0eSkgewotICAgICAgICBjb25zdCBB
bmltYXRpb24qIG9wYWNpdHlBbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENT
U1Byb3BlcnR5T3BhY2l0eSk7Ci0gICAgICAgIGlmIChvcGFjaXR5QW5pbSAmJiAhb3BhY2l0eUFu
aW0tPmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVl
TGlzdCBvcGFjaXR5VmVjdG9yKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KTsKLSAgICAgICAgICAg
IG9wYWNpdHlWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmxvYXRBbmltYXRpb25WYWx1ZT4oMCwg
Y29tcG9zaXRpbmdPcGFjaXR5KGZyb21TdHlsZS0+b3BhY2l0eSgpKSkpOwotICAgICAgICAgICAg
b3BhY2l0eVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigxLCBj
b21wb3NpdGluZ09wYWNpdHkodG9TdHlsZS0+b3BhY2l0eSgpKSkpOwotICAgICAgICAgICAgLy8g
VGhlIGJveFNpemUgcGFyYW0gaXMgb25seSB1c2VkIGZvciB0cmFuc2Zvcm0gYW5pbWF0aW9ucyAo
d2hpY2ggY2FuIG9ubHkgcnVuIG9uIFJlbmRlckJveGVzKSwgc28gd2UgcGFzcyBhbiBlbXB0eSBz
aXplIGhlcmUuCi0gICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24o
b3BhY2l0eVZlY3RvciwgRmxvYXRTaXplKCksIG9wYWNpdHlBbmltLCBHcmFwaGljc0xheWVyOjph
bmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5T3BhY2l0eSksIHRpbWVP
ZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3Qg
b3BhY2l0eSBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0aGUg
ZmluYWwgb3BhY2l0eS4KLSAgICAgICAgICAgICAgICB1cGRhdGVPcGFjaXR5KCp0b1N0eWxlKTsK
LSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVRyYW5zZm9ybSAm
JiBtX293bmluZ0xheWVyLmhhc1RyYW5zZm9ybSgpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlv
biogdHJhbnNmb3JtQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9w
ZXJ0eVRyYW5zZm9ybSk7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1BbmltICYmICF0cmFuc2Zvcm1B
bmltLT5pc0VtcHR5T3JaZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1
ZUxpc3QgdHJhbnNmb3JtVmVjdG9yKEFuaW1hdGVkUHJvcGVydHlUcmFuc2Zvcm0pOwotICAgICAg
ICAgICAgdHJhbnNmb3JtVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPFRyYW5zZm9ybUFuaW1hdGlv
blZhbHVlPigwLCBmcm9tU3R5bGUtPnRyYW5zZm9ybSgpKSk7Ci0gICAgICAgICAgICB0cmFuc2Zv
cm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFsdWU+KDEsIHRv
U3R5bGUtPnRyYW5zZm9ybSgpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFwaGljc0xheWVyLT5h
ZGRBbmltYXRpb24odHJhbnNmb3JtVmVjdG9yLCBzbmFwcGVkSW50UmVjdChyZW5kZXJCb3goKS0+
Ym9yZGVyQm94UmVjdCgpKS5zaXplKCksIHRyYW5zZm9ybUFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFu
aW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlUcmFuc2Zvcm0pLCB0aW1l
T2Zmc2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0
IHRyYW5zZm9ybSBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0
aGUgZmluYWwgdHJhbnNmb3JtLgotICAgICAgICAgICAgICAgIHVwZGF0ZVRyYW5zZm9ybSgqdG9T
dHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlGaWx0
ZXIgJiYgbV9vd25pbmdMYXllci5oYXNGaWx0ZXIoKSkgewotICAgICAgICBjb25zdCBBbmltYXRp
b24qIGZpbHRlckFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVy
dHlGaWx0ZXIpOwotICAgICAgICBpZiAoZmlsdGVyQW5pbSAmJiAhZmlsdGVyQW5pbS0+aXNFbXB0
eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0IGZpbHRl
clZlY3RvcihBbmltYXRlZFByb3BlcnR5RmlsdGVyKTsKLSAgICAgICAgICAgIGZpbHRlclZlY3Rv
ci5pbnNlcnQobWFrZVVuaXF1ZTxGaWx0ZXJBbmltYXRpb25WYWx1ZT4oMCwgZnJvbVN0eWxlLT5m
aWx0ZXIoKSkpOwotICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZp
bHRlckFuaW1hdGlvblZhbHVlPigxLCB0b1N0eWxlLT5maWx0ZXIoKSkpOwotICAgICAgICAgICAg
aWYgKG1fZ3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKGZpbHRlclZlY3RvciwgRmxvYXRTaXpl
KCksIGZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9u
KEFuaW1hdGVkUHJvcGVydHlGaWx0ZXIpLCB0aW1lT2Zmc2V0KSkgewotICAgICAgICAgICAgICAg
IC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGZpbHRlciBpcyB2aXNpYmxlIHdoZW4gdGhl
IGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNldCB0aGUgZmluYWwgZmlsdGVyLgotICAgICAgICAgICAg
ICAgIHVwZGF0ZUZpbHRlcnMoKnRvU3R5bGUpOwotICAgICAgICAgICAgICAgIGRpZEFuaW1hdGUg
PSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQotCi0jaWYgRU5BQkxFKEZJ
TFRFUlNfTEVWRUxfMikKLSAgICBpZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNr
ZHJvcEZpbHRlciAmJiBtX293bmluZ0xheWVyLmhhc0JhY2tkcm9wRmlsdGVyKCkpIHsKLSAgICAg
ICAgY29uc3QgQW5pbWF0aW9uKiBiYWNrZHJvcEZpbHRlckFuaW0gPSB0b1N0eWxlLT50cmFuc2l0
aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcik7Ci0gICAgICAg
IGlmIChiYWNrZHJvcEZpbHRlckFuaW0gJiYgIWJhY2tkcm9wRmlsdGVyQW5pbS0+aXNFbXB0eU9y
WmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0IGJhY2tkcm9w
RmlsdGVyVmVjdG9yKEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcik7Ci0gICAg
ICAgICAgICBiYWNrZHJvcEZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGaWx0ZXJBbmlt
YXRpb25WYWx1ZT4oMCwgZnJvbVN0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7Ci0gICAgICAgICAg
ICBiYWNrZHJvcEZpbHRlclZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGaWx0ZXJBbmltYXRpb25W
YWx1ZT4oMSwgdG9TdHlsZS0+YmFja2Ryb3BGaWx0ZXIoKSkpOwotICAgICAgICAgICAgaWYgKG1f
Z3JhcGhpY3NMYXllci0+YWRkQW5pbWF0aW9uKGJhY2tkcm9wRmlsdGVyVmVjdG9yLCBGbG9hdFNp
emUoKSwgYmFja2Ryb3BGaWx0ZXJBbmltLCBHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9y
VHJhbnNpdGlvbihBbmltYXRlZFByb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIpLCB0aW1lT2Zm
c2V0KSkgewotICAgICAgICAgICAgICAgIC8vIFRvIGVuc3VyZSB0aGF0IHRoZSBjb3JyZWN0IGJh
Y2tkcm9wIGZpbHRlciBpcyB2aXNpYmxlIHdoZW4gdGhlIGFuaW1hdGlvbiBlbmRzLCBhbHNvIHNl
dCB0aGUgZmluYWwgYmFja2Ryb3AgZmlsdGVyLgotICAgICAgICAgICAgICAgIHVwZGF0ZUJhY2tk
cm9wRmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRydWU7
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0jZW5kaWYKLQotICAgIGlmIChkaWRB
bmltYXRlKQotICAgICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzUG9zdExheW91dENvbXBvc2l0
aW5nVXBkYXRlKCk7Ci0KLSAgICByZXR1cm4gZGlkQW5pbWF0ZTsKLX0KLQotdm9pZCBSZW5kZXJM
YXllckJhY2tpbmc6OnRyYW5zaXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHkpCi17Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIGFuaW1hdGVkUHJvcGVy
dHkgPSBjc3NUb0dyYXBoaWNzTGF5ZXJQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKGFuaW1h
dGVkUHJvcGVydHkgIT0gQW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpCi0gICAgICAgIG1fZ3JhcGhp
Y3NMYXllci0+cGF1c2VBbmltYXRpb24oR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRy
YW5zaXRpb24oYW5pbWF0ZWRQcm9wZXJ0eSksIHRpbWVPZmZzZXQpOwotfQotCi12b2lkIFJlbmRl
ckxheWVyQmFja2luZzo6dHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQgcHJvcGVydHkp
Ci17Ci0gICAgQW5pbWF0ZWRQcm9wZXJ0eUlEIGFuaW1hdGVkUHJvcGVydHkgPSBjc3NUb0dyYXBo
aWNzTGF5ZXJQcm9wZXJ0eShwcm9wZXJ0eSk7Ci0gICAgaWYgKGFuaW1hdGVkUHJvcGVydHkgIT0g
QW5pbWF0ZWRQcm9wZXJ0eUludmFsaWQpIHsKLSAgICAgICAgbV9ncmFwaGljc0xheWVyLT5yZW1v
dmVBbmltYXRpb24oR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oYW5p
bWF0ZWRQcm9wZXJ0eSkpOwotICAgICAgICBtX293bmluZ0xheWVyLnNldE5lZWRzUG9zdExheW91
dENvbXBvc2l0aW5nVXBkYXRlKCk7Ci0gICAgfQotfQotCi12b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgY29uc3QgU3Ry
aW5nJiwgTW9ub3RvbmljVGltZSB0aW1lKQordm9pZCBSZW5kZXJMYXllckJhY2tpbmc6Om5vdGlm
eUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllciosIGNvbnN0IFN0cmluZyYsIE1v
bm90b25pY1RpbWUpCiB7Ci0gICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAg
cmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5ub3RpZnlBbmltYXRpb25TdGFydGVkKHJlbmRl
cmVyKCksIHRpbWUpOwogfQogCiB2b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5Rmx1c2hS
ZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllckJhY2tpbmcuaAppbmRleCA5Yzc2NDdiYjI2NzZiM2ZjMWY5MjZmYWQ5Mjg0
N2Q4ZjhlYTdjMGYwLi41YzExMjUyODczMTkyMDJjYTA0ZDI4Mjk1ZGEyMmE3YzFmMmRiY2EzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oCkBAIC0x
ODQsMTEgKzE4NCw3IEBAIHB1YmxpYzoKICAgICAvLyBOb3RpZmljYXRpb24gZnJvbSB0aGUgcmVu
ZGVyZXIgdGhhdCBpdHMgY29udGVudCBjaGFuZ2VkLgogICAgIHZvaWQgY29udGVudENoYW5nZWQo
Q29udGVudENoYW5nZVR5cGUpOwogCi0gICAgLy8gSW50ZXJmYWNlIHRvIHN0YXJ0LCBmaW5pc2gs
IHN1c3BlbmQgYW5kIHJlc3VtZSBhbmltYXRpb25zIGFuZCB0cmFuc2l0aW9ucwotICAgIGJvb2wg
c3RhcnRUcmFuc2l0aW9uKGRvdWJsZSwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUq
IGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpOwotICAgIHZvaWQgdHJhbnNp
dGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCk7Ci0gICAgdm9pZCB0
cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCk7Ci0KKyAgICAvLyBJbnRlcmZhY2UgdG8g
c3RhcnQsIGZpbmlzaCwgc3VzcGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlvbnMKICAgICBib29sIHN0
YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRpb24mLCBjb25zdCBL
ZXlmcmFtZUxpc3QmKTsKICAgICB2b2lkIGFuaW1hdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNl
dCwgY29uc3QgU3RyaW5nJiBuYW1lKTsKICAgICB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0
IFN0cmluZyYgbmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJDb21wb3NpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwCmluZGV4IDE4NDFmOTZmMGI2Mjk4Y2E1MjNlZDdmMWU2OTg5ZjJj
Mjc2ZGRkNzUuLmYyMzljNGE0NDgwYWVlNzJhMzkyYjM2YzUyNDViN2NkNDFkNjJkMzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckNvbXBvc2l0b3IuY3Bw
CkBAIC0yOCw3ICsyOCw2IEBACiAjaW5jbHVkZSAiUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmgiCiAK
ICNpbmNsdWRlICJBc3luY1Njcm9sbGluZ0Nvb3JkaW5hdG9yLmgiCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNs
dWRlICJDYW52YXNSZW5kZXJpbmdDb250ZXh0LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC01
NjAsOSArNTU5LDYgQEAgdm9pZCBSZW5kZXJMYXllckNvbXBvc2l0b3I6OmZsdXNoUGVuZGluZ0xh
eWVyQ2hhbmdlcyhib29sIGlzRmx1c2hSb290KQogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgYXV0byYgZnJhbWVWaWV3ID0gbV9yZW5kZXJWaWV3LmZyYW1lVmlldygpOwotICAgIEFuaW1h
dGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZmcmFtZVZpZXcuZnJhbWUoKS5s
ZWdhY3lBbmltYXRpb24oKSk7Ci0KICAgICBBU1NFUlQoIW1fZmx1c2hpbmdMYXllcnMpOwogICAg
IHsKICAgICAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gZmx1c2hpbmdMYXllcnNTY29wZShtX2ZsdXNo
aW5nTGF5ZXJzLCB0cnVlKTsKQEAgLTgxOSw4ICs4MTUsNiBAQCBib29sIFJlbmRlckxheWVyQ29t
cG9zaXRvcjo6dXBkYXRlQ29tcG9zaXRpbmdMYXllcnMoQ29tcG9zaXRpbmdVcGRhdGVUeXBlIHVw
ZGF0ZQogCiAgICAgKyttX2NvbXBvc2l0aW5nVXBkYXRlQ291bnQ7CiAKLSAgICBBbmltYXRpb25V
cGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9jaygmbV9yZW5kZXJWaWV3LmZyYW1lVmlldygp
LmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkpOwotCiAgICAgU2V0Rm9yU2NvcGU8Ym9vbD4gcG9z
dExheW91dENoYW5nZShtX2luUG9zdExheW91dFVwZGF0ZSwgdHJ1ZSk7CiAKICNpZiAhTE9HX0RJ
U0FCTEVECkBAIC0yOTc3LDE3ICsyOTcxLDcgQEAgYm9vbCBSZW5kZXJMYXllckNvbXBvc2l0b3I6
OnJlcXVpcmVzQ29tcG9zaXRpbmdGb3JBbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamUKICAg
ICAgICAgfQogICAgIH0KIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRG
ZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgYXV0byYgYW5pbUNvbnRyb2xsZXIgPSByZW5kZXJlci5sZWdh
Y3lBbmltYXRpb24oKTsKLSAgICByZXR1cm4gKGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0FuaW1h
dGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5T3BhY2l0eSkKLSAgICAgICAgJiYg
KHVzZXNDb21wb3NpdGluZygpIHx8IChtX2NvbXBvc2l0aW5nVHJpZ2dlcnMgJiBDaHJvbWVDbGll
bnQ6OkFuaW1hdGVkT3BhY2l0eVRyaWdnZXIpKSkKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIu
aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlGaWx0ZXIp
Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgfHwgYW5pbUNvbnRyb2xsZXIu
aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZHJvcEZpbHRlcikKLSNlbmRpZgotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1bm5p
bmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Cisg
ICAgcmV0dXJuIGZhbHNlOwogfQogCiBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVxdWly
ZXNDb21wb3NpdGluZ0ZvclRyYW5zZm9ybShSZW5kZXJMYXllck1vZGVsT2JqZWN0JiByZW5kZXJl
cikgY29uc3QKQEAgLTM1MTUsMTAgKzM0OTksNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRv
cjo6aXNSdW5uaW5nVHJhbnNmb3JtQW5pbWF0aW9uKFJlbmRlckxheWVyTW9kZWxPYmplY3QmCiAg
ICAgICAgICAgICByZXR1cm4gZWZmZWN0c1N0YWNrLT5pc0N1cnJlbnRseUFmZmVjdGluZ1Byb3Bl
cnR5KENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKICAgICB9CiAKLSAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiByZW5kZXJlci5s
ZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eVRyYW5zZm9ybSk7CisgICAgcmV0dXJuIGZhbHNlOwogfQogCiAvLyBJZiBhbiBl
bGVtZW50IGhhcyBjb21wb3NpdGVkIG5lZ2F0aXZlIHotaW5kZXggY2hpbGRyZW4sIHRob3NlIGNo
aWxkcmVuIHJlbmRlciBpbiBmcm9udCBvZiB0aGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmNwcAppbmRleCBjZmVjYWU0NGQzZGQ4ODZh
ZDY0NzQ5N2I5YTExYjg0MGU0ZDE1ZDZiLi5jYWU4ZjcyZjM2Y2Q4NTMyYTI1OThiNDhiNmJlYmY4
MzUzOGY0NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJNb2RlbE9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxh
eWVyTW9kZWxPYmplY3QuY3BwCkBAIC0yNTAsMjcgKzI1MCw2IEBAIHZvaWQgUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdDo6Y29tcHV0ZVJlcGFpbnRMYXlvdXRSZWN0cyhjb25zdCBSZW5kZXJMYXllck1v
ZGVsT2JqCiAgICAgICAgIHNldFJlcGFpbnRMYXlvdXRSZWN0cyhSZXBhaW50TGF5b3V0UmVjdHMo
KnRoaXMsIHJlcGFpbnRDb250YWluZXIsIGdlb21ldHJ5TWFwKSk7CiB9CiAKLWJvb2wgUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdDo6c3RhcnRUcmFuc2l0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQ
cm9wZXJ0eUlEIHByb3BlcnR5SWQsIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNvbnN0
IFJlbmRlclN0eWxlKiB0b1N0eWxlKQotewotICAgIGlmICghbGF5ZXIoKSB8fCAhbGF5ZXIoKS0+
YmFja2luZygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGxheWVyKCktPmJh
Y2tpbmcoKS0+c3RhcnRUcmFuc2l0aW9uKHRpbWVPZmZzZXQsIHByb3BlcnR5SWQsIGZyb21TdHls
ZSwgdG9TdHlsZSk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlv
blBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlkKQotewot
ICAgIGlmICghbGF5ZXIoKSB8fCAhbGF5ZXIoKS0+YmFja2luZygpKQotICAgICAgICByZXR1cm47
Ci0gICAgbGF5ZXIoKS0+YmFja2luZygpLT50cmFuc2l0aW9uUGF1c2VkKHRpbWVPZmZzZXQsIHBy
b3BlcnR5SWQpOwotfQotCi12b2lkIFJlbmRlckxheWVyTW9kZWxPYmplY3Q6OnRyYW5zaXRpb25G
aW5pc2hlZChDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8
ICFsYXllcigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAgICBsYXllcigpLT5iYWNr
aW5nKCktPnRyYW5zaXRpb25GaW5pc2hlZChwcm9wZXJ0eUlkKTsKLX0KLQogYm9vbCBSZW5kZXJM
YXllck1vZGVsT2JqZWN0OjpzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3Qg
QW5pbWF0aW9uJiBhbmltYXRpb24sIGNvbnN0IEtleWZyYW1lTGlzdCYga2V5ZnJhbWVzKQogewog
ICAgIGlmICghbGF5ZXIoKSB8fCAhbGF5ZXIoKS0+YmFja2luZygpKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaCBiL1NvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1vZGVsT2JqZWN0LmgKaW5kZXggYTNiM2RjYWRj
YTZkNTA0Mzc3MTNkYjcyZWEyMmI2MzFmZmUyZGJhNy4uZDk3ODFjZWNjODk3YzM1ODY5YTc3Mjli
YTFjZDBlNzZlMTk0MWYwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyTW9kZWxPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVu
ZGVyTGF5ZXJNb2RlbE9iamVjdC5oCkBAIC02OSwxMCArNjksNiBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRSZXBhaW50TGF5b3V0UmVjdHMoY29uc3QgUmVwYWludExheW91dFJlY3RzJik7CiAgICAg
dm9pZCBjbGVhclJlcGFpbnRMYXlvdXRSZWN0cygpOwogCi0gICAgYm9vbCBzdGFydFRyYW5zaXRp
b24oZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBm
cm9tU3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKSBvdmVycmlkZTsKLSAgICB2b2lk
IHRyYW5zaXRpb25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3BlcnR5SUQpIG92ZXJy
aWRlOwotICAgIHZvaWQgdHJhbnNpdGlvbkZpbmlzaGVkKENTU1Byb3BlcnR5SUQpIG92ZXJyaWRl
OwotCiAgICAgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCwgY29uc3QgQW5p
bWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRp
b25QYXVzZWQoZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBhbmltYXRpb25GaW5pc2hlZChjb25zdCBTdHJpbmcmIG5hbWUpIG92ZXJyaWRl
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9iamVjdC5oCmluZGV4IDE5MTI1ZmVmNzlm
ZmUyNjAwNGZmZTk5ODdlMWZmMGIzNDBkZGY5YWQuLjUwMDlhZDE3YmE5Y2I3YjYyMzBmYzFjM2Rm
ZTRjNmRmMGFmNzcyODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5k
ZXJPYmplY3QuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgK
QEAgLTQ2LDcgKzQ2LDYgQEAgY2xhc3MgVGV4dFN0cmVhbTsKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQWZmaW5lVHJhbnNmb3JtOwotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjsK
IGNsYXNzIENvbG9yOwogY2xhc3MgQ3Vyc29yOwogY2xhc3MgRG9jdW1lbnQ7CkBAIC03MDYsNyAr
NzA1LDYgQEAgcHVibGljOgogICAgIHZvaWQgaW1hZ2VDaGFuZ2VkKENhY2hlZEltYWdlKiwgY29u
c3QgSW50UmVjdCogPSBudWxscHRyKSBvdmVycmlkZTsKICAgICB2aXJ0dWFsIHZvaWQgaW1hZ2VD
aGFuZ2VkKFdyYXBwZWRJbWFnZVB0ciwgY29uc3QgSW50UmVjdCogPSBudWxscHRyKSB7IH0KIAot
ICAgIENTU0FuaW1hdGlvbkNvbnRyb2xsZXImIGxlZ2FjeUFuaW1hdGlvbigpIGNvbnN0OwogICAg
IERvY3VtZW50VGltZWxpbmUqIGRvY3VtZW50VGltZWxpbmUoKSBjb25zdDsKIAogICAgIC8vIE1h
cCBwb2ludHMgYW5kIHF1YWRzIHRocm91Z2ggZWxlbWVudHMsIHBvdGVudGlhbGx5IHZpYSAzZCB0
cmFuc2Zvcm1zLiBZb3Ugc2hvdWxkIG5ldmVyIG5lZWQgdG8gY2FsbCB0aGVzZSBkaXJlY3RseTsg
dXNlCkBAIC05NzMsMTEgKzk3MSw2IEBAIGlubGluZSBQYWdlJiBSZW5kZXJPYmplY3Q6OnBhZ2Uo
KSBjb25zdAogICAgIHJldHVybiAqZnJhbWUoKS5wYWdlKCk7CiB9CiAKLWlubGluZSBDU1NBbmlt
YXRpb25Db250cm9sbGVyJiBSZW5kZXJPYmplY3Q6OmxlZ2FjeUFuaW1hdGlvbigpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIGZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCk7Ci19Ci0KIGlubGluZSBEb2N1
bWVudFRpbWVsaW5lKiBSZW5kZXJPYmplY3Q6OmRvY3VtZW50VGltZWxpbmUoKSBjb25zdAogewog
ICAgIHJldHVybiBkb2N1bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCmlu
ZGV4IDhhN2ZkNjU4YjJkZDk5MDcwOTcwNTJkMTEzYmRjZjg3ZGQ4MThkODYuLmIxMzI4YWE5OTk5
OTYzZmMyNGZjNTllZWViOGZjZDVhZGUyZGZlNjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcApAQCAtMjcsNyAr
MjcsNiBAQAogI2luY2x1ZGUgIlJlbmRlclRyZWVVcGRhdGVyLmgiCiAKICNpbmNsdWRlICJBWE9i
amVjdENhY2hlLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1
ZGUgIkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb21wb3NlZFRy
ZWVJdGVyYXRvci5oIgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCkBAIC01NTYsNyArNTU1LDYgQEAg
dm9pZCBSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRvd25SZW5kZXJlcnMoRWxlbWVudCYgcm9vdCwg
VGVhcmRvd25UeXBlIHRlYXJkb3duVHkKIAogICAgIGF1dG8mIGRvY3VtZW50ID0gcm9vdC5kb2N1
bWVudCgpOwogICAgIGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQuZXhpc3RpbmdUaW1lbGluZSgp
OwotICAgIGF1dG8mIGFuaW1hdGlvbkNvbnRyb2xsZXIgPSBkb2N1bWVudC5mcmFtZSgpLT5sZWdh
Y3lBbmltYXRpb24oKTsgICAgCiAKICAgICBhdXRvIHBvcCA9IFsmXSAodW5zaWduZWQgZGVwdGgp
IHsKICAgICAgICAgd2hpbGUgKHRlYXJkb3duU3RhY2suc2l6ZSgpID4gZGVwdGgpIHsKQEAgLTU3
NSw3ICs1NzMsNiBAQCB2b2lkIFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVycyhF
bGVtZW50JiByb290LCBUZWFyZG93blR5cGUgdGVhcmRvd25UeQogICAgICAgICAgICAgICAgICAg
ICBlbHNlIGlmICh0ZWFyZG93blR5cGUgPT0gVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZUNh
bmNlbGluZ0FuaW1hdGlvbnMpCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lbGluZS0+Y2Fu
Y2VsRGVjbGFyYXRpdmVBbmltYXRpb25zRm9yRWxlbWVudChlbGVtZW50LCBXZWJBbmltYXRpb246
OlNpbGVudGx5OjpObyk7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIGFuaW1h
dGlvbkNvbnRyb2xsZXIuY2FuY2VsQW5pbWF0aW9ucyhlbGVtZW50KTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIGNhc2UgVGVhcmRvd25UeXBlOjpSZW5kZXJlclVwZGF0ZToK
ICAgICAgICAgICAgICAgICBpZiAodGltZWxpbmUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZUFkanVzdGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRq
dXN0ZXIuY3BwCmluZGV4IDhjZTA3NTJhNjM2NmQ4MzMwMDI2MmIwMmVlMDgzZWU1OWZjMTA3Mzgu
LmEzZWJmNmZiNjdmMWZhNjEyYmYwNjQ2N2E3ZDU4ZDg5YTNlYjk5YTYgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3N0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwCkBAIC0zMCw3ICszMCw2IEBACiAjaW5jbHVkZSAiY29u
ZmlnLmgiCiAjaW5jbHVkZSAiU3R5bGVBZGp1c3Rlci5oIgogCi0jaW5jbHVkZSAiQW5pbWF0aW9u
QmFzZS5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgogI2luY2x1ZGUgIkRPTVdpbmRv
dy5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKQEAgLTU3LDYgKzU2LDcgQEAKICNpbmNsdWRlICJT
VkdVUklSZWZlcmVuY2UuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHQu
aCIKKyNpbmNsdWRlICJXZWJBbmltYXRpb25UeXBlcy5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7
CiBuYW1lc3BhY2UgU3R5bGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5
bGVUcmVlUmVzb2x2ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2
ZXIuY3BwCmluZGV4IGI4NWNmNDY2YzE3M2I4ODAzZjc1ZTM3NjI1YmYwMjU4NmVmOTBhZTUuLmY3
ZmZkNDRmOWFhNGI5NzFkZDlmMWI2NmFjNTJlMDMzZWY2N2ZmNTcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3N0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRl
ICJjb25maWcuaCIKICNpbmNsdWRlICJTdHlsZVRyZWVSZXNvbHZlci5oIgogCi0jaW5jbHVkZSAi
Q1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZvbnRTZWxlY3Rvci5oIgog
I2luY2x1ZGUgIkNvbXBvc2VkVHJlZUFuY2VzdG9ySXRlcmF0b3IuaCIKICNpbmNsdWRlICJDb21w
b3NlZFRyZWVJdGVyYXRvci5oIgpAQCAtNTQsNiArNTMsNyBAQAogI2luY2x1ZGUgIlN0eWxlUmVz
b2x2ZXIuaCIKICNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgorI2lu
Y2x1ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIApAQCAt
MzEyLDI2ICszMTIsMjMgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1h
dGVkRWxlbWVudFVwZGF0ZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3QKIAogICAgIE9wdGlvblNl
dDxBbmltYXRpb25JbXBhY3Q+IGFuaW1hdGlvbkltcGFjdDsKIAotICAgIC8vIE5ldyBjb2RlIHBh
dGggZm9yIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMuCi0gICAgaWYgKFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIC8vIEZpcnN0LCB3ZSBuZWVkIHRvIG1ha2Ugc3Vy
ZSB0aGF0IGFueSBuZXcgQ1NTIGFuaW1hdGlvbiBvY2N1cmluZyBvbiB0aGlzIGVsZW1lbnQgaGFz
IGEgbWF0Y2hpbmcgV2ViQW5pbWF0aW9uCi0gICAgICAgIC8vIG9uIHRoZSBkb2N1bWVudCB0aW1l
bGluZS4gTm90ZSB0aGF0IHdlIGdldCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVudCBoZXJlIGJl
Y2F1c2Ugd2UgbmVlZCBhIHRpbWVsaW5lIGNyZWF0ZWQKLSAgICAgICAgLy8gaW4gY2FzZSBubyBX
ZWIgQW5pbWF0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBBUEkuCi0gICAg
ICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9j
dW1lbnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSAmJiAhZWxlbWVudC5kb2N1bWVudCgpLnJlbmRl
clZpZXcoKS0+cHJpbnRpbmcoKSkgewotICAgICAgICAgICAgaWYgKG9sZFN0eWxlICYmIChvbGRT
dHlsZS0+aGFzVHJhbnNpdGlvbnMoKSB8fCBuZXdTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSkpCi0g
ICAgICAgICAgICAgICAgbV9kb2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU1RyYW5zaXRpb25z
Rm9yRWxlbWVudChlbGVtZW50LCAqb2xkU3R5bGUsICpuZXdTdHlsZSk7Ci0KLSAgICAgICAgICAg
IC8vIFRoZSBvcmRlciBpbiB3aGljaCBDU1MgVHJhbnNpdGlvbnMgYW5kIENTUyBBbmltYXRpb25z
IGFyZSB1cGRhdGVkIG1hdHRlcnMgc2luY2UgQ1NTIFRyYW5zaXRpb25zIGRlZmluZSB0aGUgYWZ0
ZXItY2hhbmdlIHN0eWxlCi0gICAgICAgICAgICAvLyB0byB1c2UgQ1NTIEFuaW1hdGlvbnMgYXMg
ZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMgc3R5bGUgY2hhbmdlIGV2ZW50LiBBcyBzdWNoLCB3ZSB1
cGRhdGUgQ1NTIEFuaW1hdGlvbnMgYWZ0ZXIgQ1NTIFRyYW5zaXRpb25zCi0gICAgICAgICAgICAv
LyBzdWNoIHRoYXQgd2hlbiBDU1MgVHJhbnNpdGlvbnMgYXJlIHVwZGF0ZWQgdGhlIENTUyBBbmlt
YXRpb25zIGRhdGEgaXMgdGhlIHNhbWUgYXMgZHVyaW5nIHRoZSBwcmV2aW91cyBzdHlsZSBjaGFu
Z2UgZXZlbnQuCi0gICAgICAgICAgICBpZiAoKG9sZFN0eWxlICYmIG9sZFN0eWxlLT5oYXNBbmlt
YXRpb25zKCkpIHx8IG5ld1N0eWxlLT5oYXNBbmltYXRpb25zKCkpIHsKLSAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBhbmQgcGFzcyB0aGUgcGFyZW50IHN0eWxlIHZp
YSB1cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudC4KLSAgICAgICAgICAgICAgICBzY29wZSgp
LnJlc29sdmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktleWZyYW1lcygmcGFyZW50KCkuc3R5
bGUpOwotCi0gICAgICAgICAgICAgICAgbV9kb2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU0Fu
aW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsIG9sZFN0eWxlLCAqbmV3U3R5bGUpOwotCi0gICAg
ICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5bGVGb3JLZXlm
cmFtZXMobnVsbHB0cik7Ci0gICAgICAgICAgICB9CisgICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8g
bWFrZSBzdXJlIHRoYXQgYW55IG5ldyBDU1MgYW5pbWF0aW9uIG9jY3VyaW5nIG9uIHRoaXMgZWxl
bWVudCBoYXMgYSBtYXRjaGluZyBXZWJBbmltYXRpb24KKyAgICAvLyBvbiB0aGUgZG9jdW1lbnQg
dGltZWxpbmUuIE5vdGUgdGhhdCB3ZSBnZXQgdGltZWxpbmUoKSBvbiB0aGUgRG9jdW1lbnQgaGVy
ZSBiZWNhdXNlIHdlIG5lZWQgYSB0aW1lbGluZSBjcmVhdGVkCisgICAgLy8gaW4gY2FzZSBubyBX
ZWIgQW5pbWF0aW9ucyBoYXZlIGJlZW4gY3JlYXRlZCB0aHJvdWdoIHRoZSBKUyBBUEkuCisgICAg
aWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlICYmICFlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmll
dygpLT5wcmludGluZygpKSB7CisgICAgICAgIGlmIChvbGRTdHlsZSAmJiAob2xkU3R5bGUtPmhh
c1RyYW5zaXRpb25zKCkgfHwgbmV3U3R5bGUtPmhhc1RyYW5zaXRpb25zKCkpKQorICAgICAgICAg
ICAgbV9kb2N1bWVudC50aW1lbGluZSgpLnVwZGF0ZUNTU1RyYW5zaXRpb25zRm9yRWxlbWVudChl
bGVtZW50LCAqb2xkU3R5bGUsICpuZXdTdHlsZSk7CisKKyAgICAgICAgLy8gVGhlIG9yZGVyIGlu
IHdoaWNoIENTUyBUcmFuc2l0aW9ucyBhbmQgQ1NTIEFuaW1hdGlvbnMgYXJlIHVwZGF0ZWQgbWF0
dGVycyBzaW5jZSBDU1MgVHJhbnNpdGlvbnMgZGVmaW5lIHRoZSBhZnRlci1jaGFuZ2Ugc3R5bGUK
KyAgICAgICAgLy8gdG8gdXNlIENTUyBBbmltYXRpb25zIGFzIGRlZmluZWQgaW4gdGhlIHByZXZp
b3VzIHN0eWxlIGNoYW5nZSBldmVudC4gQXMgc3VjaCwgd2UgdXBkYXRlIENTUyBBbmltYXRpb25z
IGFmdGVyIENTUyBUcmFuc2l0aW9ucworICAgICAgICAvLyBzdWNoIHRoYXQgd2hlbiBDU1MgVHJh
bnNpdGlvbnMgYXJlIHVwZGF0ZWQgdGhlIENTUyBBbmltYXRpb25zIGRhdGEgaXMgdGhlIHNhbWUg
YXMgZHVyaW5nIHRoZSBwcmV2aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuCisgICAgICAgIGlmICgo
b2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgfHwgbmV3U3R5bGUtPmhhc0Fu
aW1hdGlvbnMoKSkgeworICAgICAgICAgICAgLy8gRklYTUU6IFJlbW92ZSB0aGlzIGhhY2sgYW5k
IHBhc3MgdGhlIHBhcmVudCBzdHlsZSB2aWEgdXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQu
CisgICAgICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktl
eWZyYW1lcygmcGFyZW50KCkuc3R5bGUpOworCisgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVs
aW5lKCkudXBkYXRlQ1NTQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgb2xkU3R5bGUsICpu
ZXdTdHlsZSk7CisKKyAgICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVu
dFN0eWxlRm9yS2V5ZnJhbWVzKG51bGxwdHIpOwogICAgICAgICB9CiAgICAgfQogCkBAIC0zNDcs
MTcgKzM0NCw2IEBAIEVsZW1lbnRVcGRhdGUgVHJlZVJlc29sdmVyOjpjcmVhdGVBbmltYXRlZEVs
ZW1lbnRVcGRhdGUoc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0CiAgICAgfSBlbHNlCiAgICAgICAg
IGVsZW1lbnQuc2V0TGFzdFN0eWxlQ2hhbmdlRXZlbnRTdHlsZShudWxscHRyKTsKIAotICAgIC8v
IE9sZCBjb2RlIHBhdGggZm9yIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMuCi0g
ICAgaWYgKCFSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBhdXRvJiBhbmltYXRpb25D
b250cm9sbGVyID0gbV9kb2N1bWVudC5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24oKTsKLQotICAg
ICAgICBhdXRvIGFuaW1hdGlvblVwZGF0ZSA9IGFuaW1hdGlvbkNvbnRyb2xsZXIudXBkYXRlQW5p
bWF0aW9ucyhlbGVtZW50LCAqbmV3U3R5bGUsIG9sZFN0eWxlKTsKLSAgICAgICAgYW5pbWF0aW9u
SW1wYWN0LmFkZChhbmltYXRpb25VcGRhdGUuaW1wYWN0KTsKLQotICAgICAgICBpZiAoYW5pbWF0
aW9uVXBkYXRlLnN0eWxlKQotICAgICAgICAgICAgbmV3U3R5bGUgPSBXVEZNb3ZlKGFuaW1hdGlv
blVwZGF0ZS5zdHlsZSk7Ci0gICAgfQotCiAgICAgaWYgKGFuaW1hdGlvbkltcGFjdCkKICAgICAg
ICAgQWRqdXN0ZXI6OmFkanVzdEFuaW1hdGVkU3R5bGUoKm5ld1N0eWxlLCBwYXJlbnRCb3hTdHls
ZSgpLCBhbmltYXRpb25JbXBhY3QpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0
aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bFNldHRpbmdzLmNwcAppbmRleCBiMzc2YmY2YzE3NWQ1NDU5YTRlMGI0NjNjYTQ4YjliZjBjYTY2
Nzk5Li42YTViNmY0YWU0MjAyOWNlNjYwOGMwNGJjOTI2NGZkMDM2ZmVkOGQwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKQEAgLTEwMjksMTEgKzEwMjks
NiBAQCB2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldEZvcmNlZFN1cHBvcnRzSGlnaER5bmFtaWNS
YW5nZVZhbHVlKEludGVybmFsU2V0dGluZ3M6OgogICAgIHNldHRpbmdzKCkuc2V0Rm9yY2VkU3Vw
cG9ydHNIaWdoRHluYW1pY1JhbmdlVmFsdWUoaW50ZXJuYWxTZXR0aW5nc1RvU2V0dGluZ3NWYWx1
ZSh2YWx1ZSkpOwogfQogCi1ib29sIEludGVybmFsU2V0dGluZ3M6OndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKQotewotICAgIHJldHVybiBSdW50aW1lRW5hYmxlZEZlYXR1cmVz
OjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsK
LX0KLQogdm9pZCBJbnRlcm5hbFNldHRpbmdzOjpzZXRTaG91bGREZWFjdGl2YXRlQXVkaW9TZXNz
aW9uKGJvb2wgc2hvdWxkKQogewogI2lmIEVOQUJMRShWSURFTykgfHwgRU5BQkxFKFdFQl9BVURJ
TykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5o
IGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmgKaW5kZXggYjUyN2Ux
NTVjOTBkNDY2OGUzMTI0YzVlOWI0OGJmZTBkMGUzOTU3Mi4uZjY1YTc0MTM0OWZmY2EyOWIxOTU1
YzY3NGFhNDgzM2Q3MjM2NTc1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbFNldHRpbmdzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNl
dHRpbmdzLmgKQEAgLTEzNSw4ICsxMzUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgc2V0
UGljdHVyZUluUGljdHVyZUFQSUVuYWJsZWQoYm9vbCk7CiAgICAgc3RhdGljIHZvaWQgc2V0RmV0
Y2hBUElLZWVwQWxpdmVFbmFibGVkKGJvb2wpOwogCi0gICAgc3RhdGljIGJvb2wgd2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotCiAgICAgdm9pZCBzZXRTaG91bGREZWFjdGl2
YXRlQXVkaW9TZXNzaW9uKGJvb2wpOwogICAgIAogICAgIHZvaWQgc2V0U3RvcmFnZUFjY2Vzc0FQ
SVBlclBhZ2VTY29wZUVuYWJsZWQoYm9vbCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbFNldHRpbmdzLmlkbAppbmRleCA0MWEyN2Q2MmUyNzY0NjRhYWU1ZTEyOGI4ZTliZTFlY2Y5
MWZlZGZmLi41Y2M2MmYzMjVhMmY2ODk2MDBlM2JmODhjZWEwNWM2NTZmYWU0ZWYwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKQEAgLTExNyw4ICsxMTcs
NiBAQCBlbnVtIEZvbnRMb2FkVGltaW5nT3ZlcnJpZGUgeyAiQmxvY2siLCAiU3dhcCIsICJGYWls
dXJlIiB9OwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZpbmVkIHNldFNob3VsZE1hbmFn
ZUF1ZGlvU2Vzc2lvbkNhdGVnb3J5KGJvb2xlYW4gc2hvdWxkKTsKICAgICBbTWF5VGhyb3dFeGNl
cHRpb25dIHVuZGVmaW5lZCBzZXRDdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoYm9vbGVhbiBl
bmFibGVkKTsKIAotICAgIFtFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNdIGJvb2xlYW4g
d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotCiAgICAgdW5kZWZpbmVkIHNl
dFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24oYm9vbGVhbiBzaG91bGREZWFjdGl2YXRlKTsK
ICAgICAKICAgICB1bmRlZmluZWQgc2V0U3RvcmFnZUFjY2Vzc0FQSVBlclBhZ2VTY29wZUVuYWJs
ZWQoYm9vbGVhbiBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCAxZDE0ZDcwZWQ4ZjEyYTFlNmQzZDBmMjU1Y2IxYmEwZjUwNzgzZThjLi43YzRkZjAzZTVlMTg0
YjViNTljOTBkNDZmNjZlY2UxMDY4ZDZmYjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiQmFja0ZvcndhcmRDYWNoZS5oIgog
I2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkJpdG1hcEltYWdl
LmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0tl
eWZyYW1lc1J1bGUuaCIKICNpbmNsdWRlICJDU1NNZWRpYVJ1bGUuaCIKICNpbmNsdWRlICJDU1NQ
cm9wZXJ0eVBhcnNlci5oIgpAQCAtMTA2OSw5ICsxMDY4LDcgQEAgYm9vbCBJbnRlcm5hbHM6OmFu
aW1hdGlvbldpdGhJZEV4aXN0cyhjb25zdCBTdHJpbmcmIGlkKSBjb25zdAogCiB1bnNpZ25lZCBJ
bnRlcm5hbHM6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucygpIGNvbnN0CiB7Ci0gICAgaWYgKFJ1
bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+
dGltZWxpbmUoKS5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnNGb3JUZXN0aW5nKCk7Ci0gICAgcmV0
dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhm
cmFtZSgpLT5kb2N1bWVudCgpKTsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGlt
ZWxpbmUoKS5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnNGb3JUZXN0aW5nKCk7CiB9CiAKIEV4Y2Vw
dGlvbk9yPGJvb2w+IEludGVybmFsczo6YW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpIGNvbnN0CkBA
IC0xMDgwLDkgKzEwNzcsNyBAQCBFeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OmFuaW1hdGlv
bnNBcmVTdXNwZW5kZWQoKSBjb25zdAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5m
cmFtZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBkb2N1bWVu
dC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLmFuaW1hdGlvbnNBcmVTdXNwZW5kZWQoKTsK
LSAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGlv
bnNBcmVTdXNwZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCk7CisgICAgcmV0dXJuIGRvY3VtZW50
LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwog
fQogCiBkb3VibGUgSW50ZXJuYWxzOjphbmltYXRpb25zSW50ZXJ2YWwoKSBjb25zdApAQCAtMTA5
MSwxNSArMTA4Niw5IEBAIGRvdWJsZSBJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCgpIGNv
bnN0CiAgICAgaWYgKCFkb2N1bWVudCkKICAgICAgICAgcmV0dXJuIElORklOSVRZOwogCi0gICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvIHRpbWVsaW5lID0g
ZG9jdW1lbnQtPmV4aXN0aW5nVGltZWxpbmUoKSkKLSAgICAgICAgICAgIHJldHVybiB0aW1lbGlu
ZS0+YW5pbWF0aW9uSW50ZXJ2YWwoKS5zZWNvbmRzKCk7Ci0gICAgICAgIHJldHVybiBJTkZJTklU
WTsKLSAgICB9Ci0KLSAgICBpZiAoIWRvY3VtZW50LT5mcmFtZSgpKQotICAgICAgICByZXR1cm4g
SU5GSU5JVFk7Ci0gICAgcmV0dXJuIGRvY3VtZW50LT5mcmFtZSgpLT5sZWdhY3lBbmltYXRpb24o
KS5hbmltYXRpb25JbnRlcnZhbCgpLnZhbHVlKCk7CisgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBk
b2N1bWVudC0+ZXhpc3RpbmdUaW1lbGluZSgpKQorICAgICAgICByZXR1cm4gdGltZWxpbmUtPmFu
aW1hdGlvbkludGVydmFsKCkuc2Vjb25kcygpOworICAgIHJldHVybiBJTkZJTklUWTsKIH0KIAog
RXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzdXNwZW5kQW5pbWF0aW9ucygpIGNvbnN0CkBA
IC0xMTA4LDE5ICsxMDk3LDEwIEBAIEV4Y2VwdGlvbk9yPHZvaWQ+IEludGVybmFsczo6c3VzcGVu
ZEFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFt
ZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07CiAK
LSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgZG9jdW1lbnQtPmVuc3Vy
ZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICBmb3Ig
KEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+
dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3Vt
ZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAgICAgICAgZG9jdW1lbnQtPmVuc3Vy
ZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICB9Ci0g
ICAgfSBlbHNlIHsKLSAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigp
LnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotCi0gICAgICAgIGZvciAo
RnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50
cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1l
bnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBmcmFtZS0+bGVnYWN5QW5p
bWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci0gICAgICAg
IH0KKyAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmlt
YXRpb25zKCk7CisgICAgZm9yIChGcmFtZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJh
bWU7IGZyYW1lID0gZnJhbWUtPnRyZWUoKS50cmF2ZXJzZU5leHQoKSkgeworICAgICAgICBpZiAo
RG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCisgICAgICAgICAgICBkb2N1
bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7CiAg
ICAgfQogCiAgICAgcmV0dXJuIHsgfTsKQEAgLTExMzIsNzMgKzExMTIsMTcgQEAgRXhjZXB0aW9u
T3I8dm9pZD4gSW50ZXJuYWxzOjpyZXN1bWVBbmltYXRpb25zKCkgY29uc3QKICAgICBpZiAoIWRv
Y3VtZW50IHx8ICFkb2N1bWVudC0+ZnJhbWUoKSkKICAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7
IEludmFsaWRBY2Nlc3NFcnJvciB9OwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7
Ci0gICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVzdW1lQW5p
bWF0aW9ucygpOwotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgp
OyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAg
ICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAg
ICAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmlt
YXRpb25zKCk7Ci0gICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBkb2N1bWVudC0+ZnJh
bWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3Vt
ZW50KTsKLQotICAgICAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBm
cmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7Ci0gICAgICAgICAg
ICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50KCkpCi0gICAgICAgICAg
ICAgICAgZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVu
dChkb2N1bWVudCk7Ci0gICAgICAgIH0KKyAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29u
dHJvbGxlcigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRv
Y3VtZW50LT5mcmFtZSgpOyBmcmFtZTsgZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4
dCgpKSB7CisgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQo
KSkKKyAgICAgICAgICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkucmVz
dW1lQW5pbWF0aW9ucygpOwogICAgIH0KIAogICAgIHJldHVybiB7IH07CiB9CiAKLUV4Y2VwdGlv
bk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3Qg
U3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50
KQotewotICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlv
bigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGVsZW1lbnQsIEF0b21TdHJpbmcoYW5pbWF0aW9uTmFt
ZSksIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VB
bmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1l
LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVk
b0lkKQotewotICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICBpZiAocHNldWRvSWQgIT0gImJlZm9yZSIg
JiYgcHNldWRvSWQgIT0gImFmdGVyIikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFs
aWRBY2Nlc3NFcnJvciB9OwotCi0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBz
ZXVkb0lkID09ICJiZWZvcmUiID8gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBlbGVt
ZW50LmFmdGVyUHNldWRvRWxlbWVudCgpOwotICAgIGlmICghcHNldWRvRWxlbWVudCkKLSAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotCi0gICAgcmV0dXJu
IGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKCpwc2V1ZG9F
bGVtZW50LCBBdG9tU3RyaW5nKGFuaW1hdGlvbk5hbWUpLCBwYXVzZVRpbWUpOwotfQotCi1FeGNl
cHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChj
b25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYgZWxl
bWVudCkKLXsKLSAgICBpZiAocGF1c2VUaW1lIDwgMCkKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlv
biB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotICAgIHJldHVybiBmcmFtZSgpLT5sZWdhY3lBbmlt
YXRpb24oKS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZWxlbWVudCwgcHJvcGVydHlOYW1lLCBwYXVz
ZVRpbWUpOwotfQotCi1FeGNlcHRpb25Pcjxib29sPiBJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlv
bkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgcGF1
c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKQotewotICAg
IGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07Ci0KLSAgICBpZiAocHNldWRvSWQgIT0gImJlZm9yZSIgJiYgcHNldWRvSWQg
IT0gImFmdGVyIikKLSAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJv
ciB9OwotCi0gICAgUHNldWRvRWxlbWVudCogcHNldWRvRWxlbWVudCA9IHBzZXVkb0lkID09ICJi
ZWZvcmUiID8gZWxlbWVudC5iZWZvcmVQc2V1ZG9FbGVtZW50KCkgOiBlbGVtZW50LmFmdGVyUHNl
dWRvRWxlbWVudCgpOwotICAgIGlmICghcHNldWRvRWxlbWVudCkKLSAgICAgICAgcmV0dXJuIEV4
Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciB9OwotCi0gICAgcmV0dXJuIGZyYW1lKCktPmxl
Z2FjeUFuaW1hdGlvbigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZSgqcHNldWRvRWxlbWVudCwgcHJv
cGVydHksIHBhdXNlVGltZSk7Ci19Ci0KIFZlY3RvcjxJbnRlcm5hbHM6OkFjY2VsZXJhdGVkQW5p
bWF0aW9uPiBJbnRlcm5hbHM6OmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoRWxlbWVu
dCYgZWxlbWVudCkKIHsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZl
YXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBy
ZXR1cm4geyB9OwotCiAgICAgVmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+
IGFuaW1hdGlvbnM7CiAgICAgZm9yIChjb25zdCBhdXRvJiBhbmltYXRpb25Bc1BhaXIgOiBlbGVt
ZW50LmRvY3VtZW50KCkudGltZWxpbmUoKS5hY2NlbGVyYXRlZEFuaW1hdGlvbnNGb3JFbGVtZW50
KGVsZW1lbnQpKQogICAgICAgICBhbmltYXRpb25zLmFwcGVuZCh7IGFuaW1hdGlvbkFzUGFpci5m
aXJzdCwgYW5pbWF0aW9uQXNQYWlyLnNlY29uZCB9KTsKQEAgLTEyMDcsOSArMTEzMSw3IEBAIFZl
Y3RvcjxJbnRlcm5hbHM6OkFjY2VsZXJhdGVkQW5pbWF0aW9uPiBJbnRlcm5hbHM6OmFjY2VsZXJh
dGVkQW5pbWF0aW9uc0ZvckVsZW1lCiAKIHVuc2lnbmVkIEludGVybmFsczo6bnVtYmVyT2ZBbmlt
YXRpb25UaW1lbGluZUludmFsaWRhdGlvbnMoKSBjb25zdAogewotICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRpbWVsaW5l
KCkubnVtYmVyT2ZBbmltYXRpb25UaW1lbGluZUludmFsaWRhdGlvbnNGb3JUZXN0aW5nKCk7Ci0g
ICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGZyYW1lKCktPmRvY3VtZW50KCktPnRpbWVsaW5lKCku
bnVtYmVyT2ZBbmltYXRpb25UaW1lbGluZUludmFsaWRhdGlvbnNGb3JUZXN0aW5nKCk7CiB9CiAK
IGRvdWJsZSBJbnRlcm5hbHM6OnRpbWVUb05leHRBbmltYXRpb25UaWNrKFdlYkFuaW1hdGlvbiYg
YW5pbWF0aW9uKSBjb25zdApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuaCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKaW5kZXggMzcxMTc2
ZjZjMmEzYzc4N2UwMzZmNTIyNjYyNTgzNWZkYzEzZWU4YS4uZDE3Y2RlZDFkMjE5ZTY1MzhjYzE0
ODEzM2M1NmVmYjEyYWFjNWFlMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCkBAIC0y
MzMsMTQgKzIzMyw4IEBAIHB1YmxpYzoKICAgICBFeGNlcHRpb25Pcjxib29sPiBhbmltYXRpb25z
QXJlU3VzcGVuZGVkKCkgY29uc3Q7CiAgICAgRXhjZXB0aW9uT3I8dm9pZD4gc3VzcGVuZEFuaW1h
dGlvbnMoKSBjb25zdDsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiByZXN1bWVBbmltYXRpb25zKCkg
Y29uc3Q7Ci0gICAgRXhjZXB0aW9uT3I8Ym9vbD4gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1l
bnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50
Jik7Ci0gICAgRXhjZXB0aW9uT3I8Ym9vbD4gcGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0Vs
ZW1lbnQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVt
ZW50JiwgY29uc3QgU3RyaW5nJiBwc2V1ZG9JZCk7CiAgICAgZG91YmxlIGFuaW1hdGlvbnNJbnRl
cnZhbCgpIGNvbnN0OwogCi0gICAgLy8gQ1NTIFRyYW5zaXRpb24gdGVzdGluZy4KLSAgICBFeGNl
cHRpb25Pcjxib29sPiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQoY29uc3QgU3RyaW5n
JiBwcm9wZXJ0eU5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmKTsKLSAgICBFeGNlcHRp
b25Pcjxib29sPiBwYXVzZVRyYW5zaXRpb25BdFRpbWVPblBzZXVkb0VsZW1lbnQoY29uc3QgU3Ry
aW5nJiBwcm9wZXJ0eSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYsIGNvbnN0IFN0cmluZyYg
cHNldWRvSWQpOwotCiAgICAgLy8gV2ViIEFuaW1hdGlvbnMgdGVzdGluZy4KICAgICBzdHJ1Y3Qg
QWNjZWxlcmF0ZWRBbmltYXRpb24gewogICAgICAgICBTdHJpbmcgcHJvcGVydHk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5pZGwKaW5kZXggOGQxYWQ0MmZkNWE3YjUwMDRjYjA4ZmE2NmVl
Zjc0YWJjNDY0OGQ0My4uZmQ2N2U3MTIyYWNkNDE2YmNkZDcwNGVhNWQwMDM1NWY5YzY4YjA0MiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbApAQCAtMzE1LDE0ICszMTUsOCBAQCBl
bnVtIENvbnRlbnRTaXplQ2F0ZWdvcnkgewogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gdW5kZWZp
bmVkIHN1c3BlbmRBbmltYXRpb25zKCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmlu
ZWQgcmVzdW1lQW5pbWF0aW9ucygpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBh
bmltYXRpb25zQXJlU3VzcGVuZGVkKCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFu
IHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KERPTVN0cmluZyBhbmltYXRpb25OYW1lLCB1
bnJlc3RyaWN0ZWQgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50KTsKLSAgICBbTWF5
VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1c2VBbmltYXRpb25BdFRpbWVPblBzZXVkb0VsZW1l
bnQoRE9NU3RyaW5nIGFuaW1hdGlvbk5hbWUsIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VUaW1l
LCBFbGVtZW50IGVsZW1lbnQsIERPTVN0cmluZyBwc2V1ZG9JZCk7CiAgICAgcmVhZG9ubHkgYXR0
cmlidXRlIGRvdWJsZSBhbmltYXRpb25zSW50ZXJ2YWw7CiAKLSAgICAvLyBDU1MgVHJhbnNpdGlv
biB0ZXN0aW5nLgotICAgIFtNYXlUaHJvd0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZVRyYW5zaXRp
b25BdFRpbWVPbkVsZW1lbnQoRE9NU3RyaW5nIHByb3BlcnR5TmFtZSwgdW5yZXN0cmljdGVkIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCk7Ci0gICAgW01heVRocm93RXhjZXB0aW9u
XSBib29sZWFuIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChET01TdHJpbmcg
cHJvcGVydHksIHVucmVzdHJpY3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQs
IERPTVN0cmluZyBwc2V1ZG9JZCk7Ci0KICAgICAvLyBXZWIgQW5pbWF0aW9ucyB0ZXN0aW5nLgog
ICAgIHNlcXVlbmNlPEFjY2VsZXJhdGVkQW5pbWF0aW9uPiBhY2NlbGVyYXRlZEFuaW1hdGlvbnNG
b3JFbGVtZW50KEVsZW1lbnQgZWxlbWVudCk7CiAgICAgdW5zaWduZWQgbG9uZyBudW1iZXJPZkFu
aW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9ucygpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlBy
ZWZlcmVuY2VzLnlhbWwKaW5kZXggYTgxNDIyYzliMWQ3MGUwMGNmNWFmMjI3YjNiZDdhMmJmNmNi
M2NkOS4uYmQxMWZhNjFiZTRhY2ZjMWViNzJiODRlMTlhNzFmMDdiYWE2ZDJjNiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9TaGFyZWQvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2Uv
V2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNlcy55YW1sCkBAIC0xNDA1LDIyICsxNDA1LDYgQEAg
Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5nRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0
aW9uOiAiRW5hYmxlIERPTSBBUEkgYW5kIENTUyBwcm9wZXJ0eSBmb3IgJ3Ntb290aCcgc2Nyb2xs
IGJlaGF2aW9yIgogICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCiAKLVdlYkFuaW1hdGlvbnNFbmFi
bGVkOgotICB0eXBlOiBib29sCi0gIGRlZmF1bHRWYWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxl
TmFtZTogIldlYiBBbmltYXRpb25zIgotICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJXZWIg
QW5pbWF0aW9ucyBwcm90b3R5cGUiCi0gIGNhdGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29y
ZUJpbmRpbmc6IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXMKLQotV2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZDoKLSAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVt
YW5SZWFkYWJsZU5hbWU6ICJDU1MgQW5pbWF0aW9ucyB2aWEgV2ViIEFuaW1hdGlvbnMiCi0gIGh1
bWFuUmVhZGFibGVEZXNjcmlwdGlvbjogIkV4cG9zZSBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRy
YW5zaXRpb25zIHRocm91Z2ggZ2V0QW5pbWF0aW9ucygpIgotICBjYXRlZ29yeTogZXhwZXJpbWVu
dGFsCi0gIHdlYmNvcmVCaW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KIFdlYkFuaW1h
dGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBkZWZhdWx0
VmFsdWU6IERFRkFVTFRfRVhQRVJJTUVOVEFMX0ZFQVRVUkVTX0VOQUJMRUQKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZWJjMmQyN2Fm
Nzc0ZTgzMjVkNWFkYjNhOTQ0NjAzMTY2MzEwMDAzZS4uMTdkY2YzODNlNTUwN2UxYjcwZDBkZTgz
MTMxN2RkZDFjN2Y5Y2FmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlcy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0Mv
V0tQcmVmZXJlbmNlcy5jcHAKQEAgLTQ4NiwyNiArNDg2LDYgQEAgYm9vbCBXS1ByZWZlcmVuY2Vz
R2V0QWNjZWxlcmF0ZWQyRENhbnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNl
c1JlZikKICAgICByZXR1cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWNjZWxlcmF0ZWQyZENh
bnZhc0VuYWJsZWQoKTsKIH0KIAotdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0Vu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewotICAg
IHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGZsYWcpOwot
fQotCi1ib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVu
Y2VzUmVmIHByZWZlcmVuY2VzUmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNS
ZWYpLT53ZWJBbmltYXRpb25zRW5hYmxlZCgpOwotfQotCi12b2lkIFdLUHJlZmVyZW5jZXNTZXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVy
ZW5jZXNSZWYsIGJvb2wgZmxhZykKLXsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJl
ZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5j
ZXNSZWYgcHJlZmVyZW5jZXNSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1Jl
ZiktPndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogdm9pZCBXS1By
ZWZlcmVuY2VzU2V0TmVlZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVm
ZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNl
dE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKaW5kZXggN2UxNGEy
YWM0NWNiMWJmNWZhZTAzOTE0ZWM5MjhiOTEzMmZiYzU2MS4uMjFkZjM3NDg2NmNkMjU4Mjk3OTdj
NzI5YjM4MjYxZDU4ZjBmYjYyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQy9XS1ByZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCkBAIC05NywxNCArOTcsNiBAQCBX
S19FWFBPUlQgYm9vbCBXS1ByZWZlcmVuY2VzR2V0V2ViR0xFbmFibGVkKFdLUHJlZmVyZW5jZXNS
ZWYpOwogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkMkRDYW52YXNF
bmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJl
bmNlc0dldEFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogCi0v
LyBEZWZhdWx0cyB0byBmYWxzZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFu
aW1hdGlvbnNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQg
Ym9vbCBXS1ByZWZlcmVuY2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1Jl
Zik7Ci0KLS8vIERlZmF1bHRzIHRvIGZhbHNlCi1XS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2Vz
U2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBi
b29sIGZsYWcpOwotV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KIC8vIERlZmF1bHRzIHRv
IGZhbHNlLgogV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJl
bmNlc0dldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0g
Yi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQppbmRl
eCAxM2E4ODEwYzNhZjRiNzNmZTJlMGIyYmJkZDdlOGI1NzY4NjEyZGE2Li5kYWRhOTEzM2ZjZDk3
M2JmNWZiNjYwMDJiNTM5MTk5NmUyMDllY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQpAQCAtMTQzMCwxNiArMTQzMCw2IEBA
IC0gKEJPT0wpX3ZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZAog
ICAgIHJldHVybiBfcHJlZmVyZW5jZXMtPnZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBv
c2l0aW5nRW5hYmxlZCgpOwogfQogCi0tICh2b2lkKV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkOihCT09MKWVuYWJsZWQKLXsKLSAgICBfcHJlZmVyZW5jZXMtPnNldFdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLS0gKEJPT0wpX3dl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gX3ByZWZlcmVu
Y2VzLT53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIC0gKHZvaWQp
X3NldERldmljZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkOihCT09MKWVuYWJsZWQKIHsKICNpZiBF
TkFCTEUoREVWSUNFX09SSUVOVEFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBhMzQ5ODk1Njky
Njk0NDc4NTM2YzRhNDQ0NWU1YTgwZTQ0M2YxODcyLi41ODQwNGE2ODQ1ZDdhNDljOGE3NmFhZWFm
ODg0ZGYyYTBlMzNjZGRlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkv
Q29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtMTUxLDcgKzE1MSw2IEBAIHR5
cGVkZWYgTlNfRU5VTShOU0ludGVnZXIsIF9XS0VkaXRhYmxlTGlua0JlaGF2aW9yKSB7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXpl
RW5hYmxlZDopIEJPT0wgX2xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkIFdLX0FQ
SV9BVkFJTEFCTEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgc2V0dGVyPV9zZXRTaG91bGRJZ25vcmVNZXRhVmlld3BvcnQ6KSBCT09MIF9zaG91bGRJ
Z25vcmVNZXRhVmlld3BvcnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEy
LjIpKTsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFZpZGVvUXVhbGl0eUluY2x1
ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZDopIEJPT0wgX3ZpZGVvUXVhbGl0eUluY2x1ZGVz
RGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQp
LCBpb3MoMTIuMikpOwotQHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDopIEJPT0wgX3dlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4yKSk7CiBA
cHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXREZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5h
YmxlZDopIEJPT0wgX2RldmljZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkIFdLX0FQSV9BVkFJTEFC
TEUobWFjb3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0
dGVyPV9zZXROZWVkc1NpdGVTcGVjaWZpY1F1aXJrczopIEJPT0wgX25lZWRzU2l0ZVNwZWNpZmlj
UXVpcmtzIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMy4wKSk7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXRJdHBEZWJ1Z01vZGVFbmFibGVkOikgQk9PTCBf
aXRwRGVidWdNb2RlRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEz
LjApKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRs
ZS9JbmplY3RlZEJ1bmRsZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRC
dW5kbGUvSW5qZWN0ZWRCdW5kbGUuY3BwCmluZGV4IDQxOWMxNWY5NzAxN2RkYmQyZGI4YjM4NzA2
ODM3NTBhYTAzNGVmMTEuLmJlNWRlZDU3ODM3MjIwNTQwZTAxMzJjNzJlODJjNjQxZmFjM2ZmOTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9Jbmpl
Y3RlZEJ1bmRsZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVu
ZGxlL0luamVjdGVkQnVuZGxlLmNwcApAQCAtMTg3LDEyICsxODcsNiBAQCB2b2lkIEluamVjdGVk
QnVuZGxlOjpvdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihXZWJQYWdlR3JvdXBQ
cm94eSogcGFnZQogICAgIH0KICNlbmRpZgogCi0gICAgaWYgKHByZWZlcmVuY2UgPT0gIldlYktp
dFdlYkFuaW1hdGlvbnNFbmFibGVkIikKLSAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChlbmFibGVkKTsKLQotICAg
IGlmIChwcmVmZXJlbmNlID09ICJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkIikKLSAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5z
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotCiAgICAgaWYg
KHByZWZlcmVuY2UgPT0gIldlYktpdENhY2hlQVBJRW5hYmxlZCIpCiAgICAgICAgIFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKGVuYWJs
ZWQpOwogCkBAIC01ODksMTYgKzU4Myw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFRhYktl
eUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJsZWQpCiAgICAg
cGFnZS0+Y29yZVBhZ2UoKS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGVuYWJsZWQp
OwogfQogCi12b2lkIEluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29s
IGVuYWJsZWQpCi17Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChlbmFibGVkKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1
bmRsZTo6c2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQp
Ci17Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCiB2b2lkIEluamVj
dGVkQnVuZGxlOjpzZXRBY2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChib29sIGVuYWJs
ZWQpCiB7CiAjaWYgRU5BQkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmgKaW5kZXggMDlhMTI1Y2E0Yzk2Y2MzYTAzMmFlNThhNGViYmMyYmM0M2M3NWZiZi4uYzAx
ZGU4MGZjY2JjZTNkMzViZTMyYWY3YTBkYTRiM2MzYzFkZjY0MyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIv
U291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgK
QEAgLTE0Miw4ICsxNDIsNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Ro
cm91Z2hFbGVtZW50cyhXZWJQYWdlKiwgYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHNldFNlcmlh
bExvYWRpbmdFbmFibGVkKGJvb2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQo
Ym9vbCk7Ci0gICAgdm9pZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGJv
b2wpOwogICAgIHZvaWQgc2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCk7
CiAgICAgdm9pZCBkaXNwYXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUu
aCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2
YXRlLmgKaW5kZXggZTIzYjg0MDY4ZjI0MGNlMjFiYmFkMTcwNGI5ZTM2YzdkYWU0MWRlYi4uMWJj
YTdiZmE4N2JjZjM5MDlhNDc3NmVmOTQ5OTVmMGUxOWJhMDAyMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0
ZS5oCkBAIC01Miw3ICs1Miw2IEBACiAjZGVmaW5lIFdlYktpdEphdmFFbmFibGVkUHJlZmVyZW5j
ZUtleSBAIldlYktpdEphdmFFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0RW5hYmxl
ZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0
SmF2YVNjcmlwdE1hcmt1cEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdE1h
cmt1cEVuYWJsZWQiCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5j
ZUtleSBAIldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJB
bmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2Vi
QW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRDU1NDdXN0
b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NDdXN0
b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCIKQEAgLTIwNSw3ICsyMDQsNiBAQAogI2RlZmlu
ZSBXZWJLaXRDb2xvckZpbHRlckVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q29sb3JGaWx0
ZXJFbmFibGVkIgogI2RlZmluZSBXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtN
b2RlUHJlZmVyZW5jZUtleSBAIldlYktpdFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01v
ZGUiCiAjZGVmaW5lIFdlYktpdEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZFByZWZlcmVuY2VLZXkg
QCJXZWJLaXRGZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQiCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0Q1NTU2hhZG93UGFydHNF
bmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdENTU1NoYWRvd1BhcnRzRW5hYmxlZCIKICNkZWZp
bmUgV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJl
bmNlS2V5IEAiV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWQi
CiAjZGVmaW5lIFdlYktpdFdlYlNRTEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViU1FM
RW5hYmxlZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2Vi
UHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZl
cmVuY2VzLm1tCmluZGV4IDU3YjY0ODZlOTkzN2ZjMWJkYWJlYWJlMzBhY2ExYjI3YTk2MDliNWMu
LmFkYWRlOTcwMDQxNjdhODRmYzVlZjFlNDg4ODA2MGQyZTE5MzJjZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0KKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlcy5tbQpAQCAtNjM2LDcg
KzYzNiw2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBATk8sIFdlYktpdERpYWxvZ0Vs
ZW1lbnRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQE5PLCBXZWJLaXRIaWdobGlnaHRB
UElFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0TW9kZXJuTWVkaWFD
b250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVTLCBXZWJLaXRXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywg
V2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNl
S2V5LAogCiAjaWYgRU5BQkxFKFdFQkdMMikKQEAgLTY1OCw3ICs2NTcsNiBAQCArICh2b2lkKWlu
aXRpYWxpemUKICAgICAgICAgQE5PLCBXZWJLaXREb3dubG9hZEF0dHJpYnV0ZUVuYWJsZWRQcmVm
ZXJlbmNlS2V5LAogI2VuZGlmCiAgICAgICAgIEBOTywgV2ViS2l0RGlyZWN0b3J5VXBsb2FkRW5h
YmxlZFByZWZlcmVuY2VLZXksCi0gICAgICAgIEBZRVMsIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFi
bGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0U3ludGhldGljRWRpdGluZ0Nv
bW1hbmRzRW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBQTEFURk9STShJT1NfRkFNSUxZKQpA
QCAtMzE3NiwxNiArMzE3NCw2IEBAIC0gKHZvaWQpc2V0Q1NTT01WaWV3U21vb3RoU2Nyb2xsaW5n
RW5hYmxlZDooQk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpX
ZWJLaXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkUHJlZmVyZW5jZUtleV07CiB9CiAK
LS0gKEJPT0wpd2ViQW5pbWF0aW9uc0VuYWJsZWQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2Jvb2xW
YWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXldOwotfQot
Ci0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNFbmFibGVkOihCT09MKWZsYWcKLXsKLSAgICBbc2Vs
ZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJl
ZmVyZW5jZUtleV07Ci19Ci0KIC0gKEJPT0wpd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlv
bnNFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleV07CkBAIC0z
MjQ2LDE2ICszMjM0LDYgQEAgLSAodm9pZClzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZDoo
Qk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpXZWJLaXRNb2Rl
cm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQogCi0tIChCT09MKXdlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gW3NlbGYgX2Jvb2xW
YWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVy
ZW5jZUtleV07Ci19Ci0KLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZDooQk9PTClmbGFnCi17Ci0gICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZvcktleTpX
ZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleV07Ci19
Ci0KIC0gKEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtz
ZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0SW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkUHJl
ZmVyZW5jZUtleV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3
L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmll
dy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCA3MzBlYjZiZjFmMmQ2N2JmNDcxMjcwYzk1
OTVjYmQyZDNjOTg0ZDA1Li5iOTg3YzljMjg4ZDdiNTMwNzM0NTM2M2E5YzgyNDg5ZGFjZTIxMzQ5
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVu
Y2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJl
ZmVyZW5jZXNQcml2YXRlLmgKQEAgLTU2NCw5ICs1NjQsNiBAQCBleHRlcm4gTlNTdHJpbmcgKldl
YlByZWZlcmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlmaWNhdGlvbiBXRUJLSVRf
REVQUgogLSAodm9pZClzZXREaXJlY3RvcnlVcGxvYWRFbmFibGVkOihCT09MKWZsYWc7CiAtIChC
T09MKWRpcmVjdG9yeVVwbG9hZEVuYWJsZWQ7CiAKLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0Vu
YWJsZWQ6KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0VuYWJsZWQ7Ci0KIC0gKHZv
aWQpc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOihCT09MKWZsYWc7
CiAtIChCT09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDsKIApAQCAt
NTg1LDkgKzU4Miw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVyZW5jZXNDYWNoZU1vZGVs
Q2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAtICh2b2lkKXNldE1vZGVy
bk1lZGlhQ29udHJvbHNFbmFibGVkOihCT09MKWZsYWc7CiAtIChCT09MKW1vZGVybk1lZGlhQ29u
dHJvbHNFbmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ6KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZDsKLQogLSAodm9pZClzZXRJbnRlcnNlY3Rpb25PYnNlcnZlckVuYWJsZWQ6KEJPT0wpZmxh
ZzsKIC0gKEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggNGVjMDIzN2E3NGM3YzQ5ZGRlODI4
NTljZTU4OWUxNzRjZDVlOTQwNS4uY2U0Y2IzZDRjMDY4MTE4OTYyNjJjYTg5NTIwNjM3ZDEzZTUx
ZWE0NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJWaWV3
Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQpAQCAt
MTMyLDcgKzEzMiw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0aW9uQ2FjaGVTdG9yYWdl
Lmg+CiAjaW1wb3J0IDxXZWJDb3JlL0JhY2tGb3J3YXJkQ2FjaGUuaD4KICNpbXBvcnQgPFdlYkNv
cmUvQmFja0ZvcndhcmRDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJDb3JlL0NTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVTdG9yYWdlUHJvdmlkZXIuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0NvbG9yTWFjLmg+
CkBAIC0zMzM0LDcgKzMzMzMsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNlc0NoYW5nZWQ6KFdlYlBy
ZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKIAogICAgIHNldHRpbmdzLnNldEludGVyYWN0aXZlRm9y
bVZhbGlkYXRpb25FbmFibGVkKFtzZWxmIGludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVk
XSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRNb2Rl
cm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbcHJlZmVyZW5jZXMgbW9kZXJuTWVkaWFDb250cm9sc0Vu
YWJsZWRdKTsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNl
dFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRdKTsKIAogICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKFtwcmVmZXJlbmNlcyBjYWNo
ZUFQSUVuYWJsZWRdKTsKIApAQCAtMzM1OCw3ICszMzU2LDYgQEAgLSAodm9pZClfcHJlZmVyZW5j
ZXNDaGFuZ2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAgICAgc2V0dGluZ3Muc2V0
RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkKFtwcmVmZXJlbmNlcyBkb3dubG9hZEF0dHJpYnV0ZUVu
YWJsZWRdKTsKICNlbmRpZgogCi0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9u
c0VuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygp
LnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChbcHJlZmVyZW5jZXMg
d2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkXSk7CiAgICAgUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zTXV0YWJsZVRp
bWVsaW5lc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVz
RW5hYmxlZF0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZh
Y2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vSW50ZXJm
YWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAppbmRleCBmZTIyODExYzg2ZWM1Y2Q4ZTMzMWM2N2Ux
NmYzY2Q5MzFiMjNkMzA3Li5kZjdjMTdmN2Y5YjA1ZjE4ZDY2MTliODg2OWQwNjY3MzU2OTYwNDgw
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJGcmFt
ZVByaXZhdGUuaWRsCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdl
YkZyYW1lUHJpdmF0ZS5pZGwKQEAgLTg0LDEwICs4NCw2IEBAIGludGVyZmFjZSBJV2ViRnJhbWVQ
cml2YXRlIDogSVVua25vd24KIAogICAgIEhSRVNVTFQgZWxlbWVudERvZXNBdXRvQ29tcGxldGUo
W2luXSBJRE9NRWxlbWVudCogZWxlbWVudCwgW291dCwgcmV0dmFsXSBCT09MKiByZXN1bHQpOwog
Ci0gICAgSFJFU1VMVCBwYXVzZUFuaW1hdGlvbihbaW5dIEJTVFIgYW5pbWF0aW9uTmFtZSwgW2lu
XSBJRE9NTm9kZSogbm9kZSwgW2luXSBkb3VibGUgc2Vjb25kc0Zyb21Ob3csIFtvdXQsIHJldHZh
bF0gQk9PTCogYW5pbWF0aW9uV2FzUnVubmluZyk7Ci0gICAgSFJFU1VMVCBwYXVzZVRyYW5zaXRp
b24oW2luXSBCU1RSIHByb3BlcnR5TmFtZSwgW2luXSBJRE9NTm9kZSogbm9kZSwgW2luXSBkb3Vi
bGUgc2Vjb25kc0Zyb21Ob3csIFtvdXQsIHJldHZhbF0gQk9PTCogdHJhbnNpdGlvbldhc1J1bm5p
bmcpOwotICAgIEhSRVNVTFQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKFtvdXQsIHJldHZhbF0g
VUlOVCogbnVtYmVyKTsKLQogICAgIEhSRVNVTFQgaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdl
KFtvdXQsIHJldHZhbF0gQk9PTCogcmVzdWx0KTsKIAogICAgIEhSRVNVTFQgYWxsb3dzRm9sbG93
aW5nTGluayhbaW5dIEJTVFIgdXJsLCBbb3V0LCByZXR2YWxdIEJPT0wqIHJlc3VsdCk7CkBAIC0x
MTAsOSArMTA2LDYgQEAgaW50ZXJmYWNlIElXZWJGcmFtZVByaXZhdGUgOiBJVW5rbm93bgogCiAg
ICAgSFJFU1VMVCB1bnVzZWQ1KCk7CiAKLSAgICBIUkVTVUxUIHN1c3BlbmRBbmltYXRpb25zKCk7
Ci0gICAgSFJFU1VMVCByZXN1bWVBbmltYXRpb25zKCk7IAotCiAgICAgSFJFU1VMVCBsb2FkUGxh
aW5UZXh0U3RyaW5nKFtpbl0gQlNUUiBzdHJpbmcsIFtpbl0gQlNUUiB1cmwpOwogCiAgICAgSFJF
U1VMVCBjbGVhck9wZW5lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
SW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5pZGwKaW5kZXggOWE4NzVk
NDc5ZTdiZmFkNzM2MWE2ZjJmOGE0ZDMxOTMzN2VlNTdmMi4uYjBiZDA1ZjI1MDU4MmUxNDdhNmE3
ZmJkYTNiNmRiZjRiNmFiNjA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4v
SW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZhdGUuaWRsCkBAIC0xODMs
MTYgKzE4MywxMiBAQCBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTMgOiBJV2ViUHJl
ZmVyZW5jZXNQcml2YXRlMgogICAgIEhSRVNVTFQgc2V0Q3VzdG9tRWxlbWVudHNFbmFibGVkKFtp
bl0gQk9PTCBlbmFibGVkKTsKICAgICBIUkVTVUxUIG1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVk
KFtvdXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7CiAgICAgSFJFU1VMVCBzZXRNb2Rlcm5NZWRp
YUNvbnRyb2xzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7Ci0gICAgSFJFU1VMVCB3ZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7
Ci0gICAgSFJFU1VMVCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtpbl0g
Qk9PTCBlbmFibGVkKTsKIH0KIAogW3V1aWQoRjk1ODJENzItNjM0OC00NUIxLUFCMDktMzlFMzM0
NTlCNUI5KV0KIGludGVyZmFjZSBJV2ViUHJlZmVyZW5jZXNQcml2YXRlNCA6IElXZWJQcmVmZXJl
bmNlc1ByaXZhdGUzCiB7CiAgICAgSFJFU1VMVCBzZXRBcHBsaWNhdGlvbklkKFtpbl0gQlNUUiBh
cHBsaWNhdGlvbklkKTsKLSAgICBIUkVTVUxUIHdlYkFuaW1hdGlvbnNFbmFibGVkKFtvdXQsIHJl
dHZhbF0gQk9PTCopOwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoW2luXSBC
T09MIGVuYWJsZWQpOwogICAgIEhSRVNVTFQgdXNlclRpbWluZ0VuYWJsZWQoW291dCwgcmV0dmFs
XSBCT09MKik7CiAgICAgSFJFU1VMVCBzZXRVc2VyVGltaW5nRW5hYmxlZChbaW5dIEJPT0wgZW5h
YmxlZCk7CiAgICAgSFJFU1VMVCByZXNvdXJjZVRpbWluZ0VuYWJsZWQoW291dCwgcmV0dmFsXSBC
T09MKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKaW5kZXggZjA2MjliYmUzNzJj
YmE5OGQzNmRkOGM4ZjI0MDFkNzYxNWViZjc1OC4uOGM4ZTU4NWE3YmM3YjkzNGI4Y2EwYWZkMGNj
NzM4ZDJkYmJiNjY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJh
bWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmNwcApAQCAtMTE3
Nyw2NCArMTE3Nyw2IEBAIEhSRVNVTFQgV2ViRnJhbWU6OmVsZW1lbnREb2VzQXV0b0NvbXBsZXRl
KF9Jbl9vcHRfIElET01FbGVtZW50ICplbGVtZW50LCBfT3V0XyBCCiAgICAgcmV0dXJuIFNfT0s7
CiB9CiAKLUhSRVNVTFQgV2ViRnJhbWU6OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIEZyYW1l
KiBmcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEVf
VU5FWFBFQ1RFRDsKLQotICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViRnJhbWU6OnN1c3BlbmRB
bmltYXRpb25zKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHRoaXMpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7Ci0KLSAgICBmcmFtZS0+bGVnYWN5
QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQot
SFJFU1VMVCBXZWJGcmFtZTo6cGF1c2VBbmltYXRpb24oX0luXyBCU1RSIGFuaW1hdGlvbk5hbWUs
IF9Jbl9vcHRfIElET01Ob2RlKiBub2RlLCBkb3VibGUgc2Vjb25kc0Zyb21Ob3csIF9PdXRfIEJP
T0wqIGFuaW1hdGlvbldhc1J1bm5pbmcpCi17Ci0gICAgaWYgKCFub2RlIHx8ICFhbmltYXRpb25X
YXNSdW5uaW5nKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAgKmFuaW1hdGlvbldh
c1J1bm5pbmcgPSBGQUxTRTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAg
aWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKLQotICAgIENPTVB0cjxE
T01Ob2RlPiBkb21Ob2RlKFF1ZXJ5LCBub2RlKTsKLSAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAg
IHJldHVybiBFX0ZBSUw7Ci0KLSAgICAqYW5pbWF0aW9uV2FzUnVubmluZyA9IGZyYW1lLT5sZWdh
Y3lBbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShkb3duY2FzdDxFbGVtZW50PigqZG9t
Tm9kZS0+bm9kZSgpKSwgU3RyaW5nKGFuaW1hdGlvbk5hbWUsIFN5c1N0cmluZ0xlbihhbmltYXRp
b25OYW1lKSksIHNlY29uZHNGcm9tTm93KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VM
VCBXZWJGcmFtZTo6cGF1c2VUcmFuc2l0aW9uKF9Jbl8gQlNUUiBwcm9wZXJ0eU5hbWUsIF9Jbl9v
cHRfIElET01Ob2RlKiBub2RlLCBkb3VibGUgc2Vjb25kc0Zyb21Ob3csIF9PdXRfIEJPT0wqIHRy
YW5zaXRpb25XYXNSdW5uaW5nKQotewotICAgIGlmICghbm9kZSB8fCAhdHJhbnNpdGlvbldhc1J1
bm5pbmcpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICAqdHJhbnNpdGlvbldhc1J1
bm5pbmcgPSBGQUxTRTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYg
KCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKLQotICAgIENPTVB0cjxET01O
b2RlPiBkb21Ob2RlKFF1ZXJ5LCBub2RlKTsKLSAgICBpZiAoIWRvbU5vZGUpCi0gICAgICAgIHJl
dHVybiBFX0ZBSUw7Ci0KLSAgICAqdHJhbnNpdGlvbldhc1J1bm5pbmcgPSBmcmFtZS0+bGVnYWN5
QW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGRvd25jYXN0PEVsZW1lbnQ+KCpkb21O
b2RlLT5ub2RlKCkpLCBTdHJpbmcocHJvcGVydHlOYW1lLCBTeXNTdHJpbmdMZW4ocHJvcGVydHlO
YW1lKSksIHNlY29uZHNGcm9tTm93KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQogSFJFU1VMVCBX
ZWJGcmFtZTo6dmlzaWJsZUNvbnRlbnRSZWN0KF9PdXRfIFJFQ1QqIHJlY3QpCiB7CiAgICAgaWYg
KCFyZWN0KQpAQCAtMTI1MywyMSArMTE5NSw2IEBAIEhSRVNVTFQgV2ViRnJhbWU6OnZpc2libGVD
b250ZW50UmVjdChfT3V0XyBSRUNUKiByZWN0KQogICAgIHJldHVybiBTX09LOwogfQogCi1IUkVT
VUxUIFdlYkZyYW1lOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoX091dF8gVUlOVCogbnVtYmVy
KQotewotICAgIGlmICghbnVtYmVyKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0gICAg
Km51bWJlciA9IDA7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHRoaXMpOwotICAgIGlmICgh
ZnJhbWUpCi0gICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7Ci0KLSAgICAqbnVtYmVyID0gZnJh
bWUtPmxlZ2FjeUFuaW1hdGlvbigpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhmcmFtZS0+ZG9j
dW1lbnQoKSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNVTFQgV2ViRnJhbWU6OmlzRGlz
cGxheWluZ1N0YW5kYWxvbmVJbWFnZShfT3V0XyBCT09MKiByZXN1bHQpCiB7CiAgICAgaWYgKCFy
ZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5oIGIv
U291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuaAppbmRleCA3NjcyNzQxNTdhOGRlMjAz
YmQwYTMwYjUyM2Q5OWNlYjExMTQ4MjYxLi40MDYyMzU0Njk2NmIxZDVlNzJhYjQ3OWZkYTgzMDQ5
NDRlMzY3ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5o
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmgKQEAgLTEzNiw5ICsxMzYs
NiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBhaW50
RG9jdW1lbnRSZWN0VG9Db250ZXh0KFJFQ1QsIF9Jbl8gSERDKTsKICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgcGFpbnRTY3JvbGxWaWV3UmVjdFRvQ29udGV4dEF0UG9pbnQo
UkVDVCwgUE9JTlQsIF9Jbl8gSERDKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgZWxlbWVudERvZXNBdXRvQ29tcGxldGUoX0luX29wdF8gSURPTUVsZW1lbnQqLCBfT3V0
XyBCT09MKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBhdXNlQW5p
bWF0aW9uKF9Jbl8gQlNUUiBhbmltYXRpb25OYW1lLCBfSW5fb3B0XyBJRE9NTm9kZSosIGRvdWJs
ZSBzZWNvbmRzRnJvbU5vdywgX091dF8gQk9PTCogYW5pbWF0aW9uV2FzUnVubmluZyk7Ci0gICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBhdXNlVHJhbnNpdGlvbihfSW5fIEJT
VFIgcHJvcGVydHlOYW1lLCBfSW5fb3B0XyBJRE9NTm9kZSosIGRvdWJsZSBzZWNvbmRzRnJvbU5v
dywgX091dF8gQk9PTCogdHJhbnNpdGlvbldhc1J1bm5pbmcpOwotICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSBudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoX091dF8gVUlOVCop
OwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBsb2FkUGxhaW5UZXh0U3Ry
aW5nKF9Jbl8gQlNUUiwgX0luXyBCU1RSIHVybCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1F
VEhPRENBTExUWVBFIGlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZShfT3V0XyBCT09MKik7CiAg
ICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGFsbG93c0ZvbGxvd2luZ0xpbmso
X0luXyBCU1RSLCBfT3V0XyBCT09MKik7CkBAIC0xNTAsOCArMTQ3LDYgQEAgcHVibGljOgogICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjbGVhck9wZW5lcigpOwogICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRUZXh0RGlyZWN0aW9uKF9Jbl8gQlNU
Uik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHVudXNlZDQoKSB7IHJl
dHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUg
cmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxM
VFlQRSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uKHVuc2lnbmVkIG9wdGlvbnMs
IF9EZXJlZl9vcHRfb3V0XyBCU1RSKiByZXN1bHQpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERN
RVRIT0RDQUxMVFlQRSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uRm9yUHJpbnRp
bmcoX0RlcmVmX29wdF9vdXRfIEJTVFIqIHJlc3VsdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKaW5kZXggMmEyMTIxYWRiOTY4
Njk4NDEyMWMwZTRiYThkYWZmY2E3YmNjNmNhYi4uOTIxN2I4NWU0OTdkYTEzZGE3NjgyMjk1YjJk
ZTc2MmEyZGU3MTY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJl
ZmVyZW5jZUtleXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJl
ZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTE4OCwxNCArMTg4LDEwIEBACiAKICNkZWZpbmUgV2Vi
S2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRNb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZCIKIAotI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxl
ZFByZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkIgotCiAjZGVmaW5lIFdl
YktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkg
IldlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCIKIAogI2RlZmlu
ZSBXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWRQcmVmZXJlbmNlS2V5
ICJXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQiCiAKLSNkZWZpbmUg
V2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VLZXkgIldl
YktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiCi0KICNkZWZpbmUgV2ViS2l0
Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRD
U1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCIKIAogI2RlZmluZSBXZWJLaXRVc2Vy
VGltaW5nRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdFVzZXJUaW1pbmdFbmFibGVkIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCmluZGV4IDlkOWIwZGZlMTE5
YmNmMThiZTQwMzU2MTI0NTZlYjZhODNlYmFlYzguLmY3NDI2YTk1NjNkOWZkYmJiYTU3NjRiMTY3
YzVjMDFiYWQxYjM4NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlBy
ZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNl
cy5jcHAKQEAgLTMxMSwxNCArMzExLDEwIEBAIHZvaWQgV2ViUHJlZmVyZW5jZXM6OmluaXRpYWxp
emVEZWZhdWx0U2V0dGluZ3MoKQogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMs
IENGU1RSKFdlYktpdEN1c3RvbUVsZW1lbnRzRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29s
ZWFuRmFsc2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdl
YktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5UcnVlKTsK
LQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRXZWJBbmlt
YXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVh
bkZhbHNlKTsKIAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJL
aXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NG
Qm9vbGVhbkZhbHNlKTsKIAotICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNU
UihXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSks
IGtDRkJvb2xlYW5GYWxzZSk7Ci0KICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywg
Q0ZTVFIoV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJlbmNl
S2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1
bHRzLCBDRlNUUihXZWJLaXRVc2VyVGltaW5nRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29s
ZWFuRmFsc2UpOwpAQCAtMjEzOCwyMCArMjEzNCw2IEBAIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6
Om1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKF9PdXRfIEJPT0wqIGVuYWJsZWQpCiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKLXsKLSAgICBpZiAoIWVuYWJs
ZWQpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmVuYWJsZWQgPSBib29sVmFsdWVG
b3JLZXkoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZlcmVuY2VL
ZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpzZXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKEJPT0wgZW5hYmxlZCkKLXsKLSAgICBz
ZXRCb29sVmFsdWUoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFByZWZl
cmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVTVUxUIFdlYlBy
ZWZlcmVuY2VzOjpmZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkK
IHsKICAgICBpZiAoIWVuYWJsZWQpCkBAIC0yMzQwLDIwICsyMzIyLDYgQEAgSFJFU1VMVCBXZWJQ
cmVmZXJlbmNlczo6c2V0QXBwbGljYXRpb25JZChCU1RSIGFwcGxpY2F0aW9uSWQpCiAgICAgcmV0
dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldFdlYkFuaW1hdGlvbnNF
bmFibGVkKEJPT0wgZW5hYmxlZCkKLXsKLSAgICBzZXRCb29sVmFsdWUoV2ViS2l0V2ViQW5pbWF0
aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKLSAgICByZXR1cm4gU19PSzsKLX0K
LQotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0VuYWJsZWQoX091dF8gQk9P
TCogZW5hYmxlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybiBFX1BPSU5U
RVI7Ci0gICAgKmVuYWJsZWQgPSBib29sVmFsdWVGb3JLZXkoV2ViS2l0V2ViQW5pbWF0aW9uc0Vu
YWJsZWRQcmVmZXJlbmNlS2V5KTsKLSAgICByZXR1cm4gU19PSzsKLX0KLQogSFJFU1VMVCBXZWJQ
cmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKEJP
T0wgZW5hYmxlZCkKIHsKICAgICBzZXRCb29sVmFsdWUoV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBv
c2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwgZW5hYmxlZCk7CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5oIGIvU291cmNlL1dlYktp
dExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaAppbmRleCAyNDM3YjBlNzYyODk1MDZjMjY0MDQ4
ODZiZDJjMDNmNTgzMjUzYzUxLi4yMTI5MDVjYjFiYTYwMDk0MDM4Njk1MzkxNzhhM2ZlYTcwM2Ez
OGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5o
CisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmgKQEAgLTIzNiwx
MyArMjM2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQ
RSBzZXRDdXN0b21FbGVtZW50c0VuYWJsZWQoQk9PTCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIG1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKF9PdXRfIEJPT0wqKTsK
ICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0TW9kZXJuTWVkaWFDb250
cm9sc0VuYWJsZWQoQk9PTCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoX091dF8gQk9PTCopOwotICAgIHZp
cnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKEJPT0wpOwogICAgIAogICAgIC8vIElXZWJQcmVmZXJlbmNlc1ByaXZhdGU0
CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldEFwcGxpY2F0aW9uSWQo
QlNUUik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHdlYkFuaW1hdGlv
bnNFbmFibGVkKF9PdXRfIEJPT0wqKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoQk9PTCk7CiAgICAgdmlydHVhbCBIUkVTVUxU
IFNURE1FVEhPRENBTExUWVBFIHVzZXJUaW1pbmdFbmFibGVkKF9PdXRfIEJPT0wqKTsKICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0VXNlclRpbWluZ0VuYWJsZWQoQk9P
TCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJlc291cmNlVGltaW5n
RW5hYmxlZChfT3V0XyBCT09MKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCmluZGV4
IGI2YTI4M2M5M2U4ODJhM2UyMWQ0MTY4YzRiMzFjYjg0OWQxNWQxYWMuLjJlMjViZTk2YjJhZDQ1
YjVmNGU1ZTMxODhkNjJjMTRlMDJlOTlkOTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwCkBAIC01MjQ0LDExICs1MjQ0LDYgQEAgSFJFU1VMVCBXZWJWaWV3Ojpub3RpZnlQcmVmZXJl
bmNlc0NoYW5nZWQoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgICAgICByZXR1
cm4gaHI7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRN
b2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0gICAgaHIgPSBwcmVmc1By
aXZhdGUtPndlYkFuaW1hdGlvbnNFbmFibGVkKCZlbmFibGVkKTsKLSAgICBpZiAoRkFJTEVEKGhy
KSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJl
ZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoISFlbmFibGVkKTsKLQogICAgIGhy
ID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQo
JmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICByZXR1cm4gaHI7CkBAIC01
MjU5LDExICs1MjU0LDYgQEAgSFJFU1VMVCBXZWJWaWV3Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5n
ZWQoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgICAgICByZXR1cm4gaHI7CiAg
ICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRp
b25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQoISFlbmFibGVkKTsKIAotICAgIGhyID0gcHJlZnNQ
cml2YXRlLT53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCZlbmFibGVkKTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAgIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZCghIWVuYWJsZWQpOwotCiAgICAgaHIgPSBwcmVmc1ByaXZhdGUtPkNTU0N1c3RvbVBy
b3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkKCZlbmFibGVkKTsKICAgICBpZiAoRkFJTEVEKGhyKSkK
ICAgICAgICAgcmV0dXJuIGhyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMv
Q2hhbmdlTG9nCmluZGV4IDRmYTcwOTQ3YzM4MzgyZmMwMzBjMjFhZTdlNmJlMjVlMWIyNmVlM2Uu
LjgzMzA3NTIxYzg4NDJiMjA4ZTI4ZGZjZTMzYzI0MzVhZjZjYmVmYzYgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAy
MC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgU2luY2Ugd2Ugbm93IGhhdmUgYSBzaW5nbGUgYW5pbWF0
aW9uIGVuZ2luZSwgdGhlIHJ1bnRpbWUgZmxhZ3MgdG8gb3B0aW9uYWxseSBlbmFibGUgdGhlIFdl
YiBBbmltYXRpb25zIGVuZ2luZSBhcmUKKyAgICAgICAgbm90IG5lZWRlZCBhbnltb3JlIGFuZCBh
cmUgbm93IHJlbW92ZWQuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5j
cHA6CisgICAgICAgIChUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMpOgorICAgICAgICAoVGVzdE9w
dGlvbnM6OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyBjb25zdCk6CisgICAgICAgICog
RHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9t
YWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChlbmFibGVFeHBlcmltZW50YWxGZWF0dXJl
cyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKToKKyAgICAgICAg
KiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwOgorICAgICAgICAoZW5hYmxl
RXhwZXJpbWVudGFsRmVhdHVyZXMpOgorICAgICAgICAoc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0
T3B0aW9ucyk6CisKIDIwMjAtMDktMTYgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgogCiAgICAgICAgIFtGbGF0cGFrIFNES10gQ2hlcnJ5LXBpY2sgTWVzYSB1c2UtYWZ0
ZXItZnJlZSBmaXhlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlv
bnMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3BwCmluZGV4IDA2NDU3
ZGZkZmRlZWE1MDMwNGUzMzJkMGEzMTgyZjVhYmE0YWY4MDUuLjBkYmZhYzlmM2M4NzQ5NDJjZDdi
MWRlZjE0MDg4NDg0MzJlNDI2NGYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RPcHRpb25zLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAK
QEAgLTEyNiw4ICsxMjYsNiBAQCBUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpz
dHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdQogICAgICAgICAgICAg
ZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3Vy
Y2VzVG9Bc2tGb3JDcmVkZW50aWFscyIpCiAgICAgICAgICAgICBhbGxvd0Nyb3NzT3JpZ2luU3Vi
cmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVhblRlc3RIZWFkZXJWYWx1
ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICAgICAgZW5hYmxlV2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsK
ICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpbnRlcm5hbDpzZWxlY3Rpb25BY3Jvc3NTaGFkb3dC
b3VuZGFyaWVzRW5hYmxlZCIpCiAgICAgICAgICAgICBlbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFk
b3dCb3VuZGFyaWVzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKICAgICAg
ICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCkBAIC0xNjcsNiArMTY1LDUg
QEAgVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5nJiBwYXRoT3JVUkws
IGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHUKIGJvb2wgVGVzdE9wdGlvbnM6OndlYlZpZXdJc0Nv
bXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3RoZXIpIGNvbnN0CiB7CiAg
ICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJhY2tlZFdlYlZpZXcK
LSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zCi0gICAgICAgICYmIG90
aGVyLmVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiA9PSBlbmFibGVXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb247CisgICAgICAgICYmIG90aGVyLmpzY09wdGlvbnMgPT0ganNjT3B0
aW9uczsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgg
Yi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCmluZGV4IGM1YzhjODU5OTJlMWNm
ZjM3NTA4MjFjODFmZjI4NDNkZDA5ZWI5OTcuLmQ3NjY4MTdiNzA1YjQ2MjUwZDJlZmY1NTMzNDZh
N2RkOTM3ZWIzNjYgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25z
LmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaApAQCAtMjksNyArMjks
NiBAQAogCiBzdHJ1Y3QgVGVzdE9wdGlvbnMgewogICAgIGJvb2wgZW5hYmxlQXR0YWNobWVudEVs
ZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uIHsgdHJ1ZSB9OwogICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5nIHsgZmFsc2UgfTsK
ICAgICBib29sIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIHsgZmFsc2UgfTsKICAgICBib29s
IHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvbWFj
L0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IDQ2M2M5YjkyZWViNWVlZTk3YTFhNzIwZGVmODVmYzYw
ZDQ4Nzg1M2MuLjY5MTU3YzQzMDAxYzU0NDE0MzBiMTExN2NkYTNhY2M0NzAyNzRlODkgMTAwNjQ0
Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQorKysgYi9U
b29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAgLTgxNCw3ICs4MTQs
NiBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyhXZWJQcmVmZXJlbmNl
cyogcHJlZmVyZW5jZXMpCiAgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhUHJlbG9hZGluZ0VuYWJs
ZWQ6WUVTXTsKICAgICAvLyBGSVhNRTogSW5wdXRFdmVudHMKICAgICBbcHJlZmVyZW5jZXMgc2V0
RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkOllFU107Ci0gICAgW3ByZWZlcmVuY2VzIHNldFdlYkFu
aW1hdGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdlYkFuaW1hdGlvbnND
b21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRXZWJB
bmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMg
c2V0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQ6WUVTXTsKQEAgLTk3OSw3ICs5
NzgsNiBAQCBzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKGNvbnN0
IFRlc3RPcHRpb25zJiBvcHRpb25zKQogICAgIHByZWZlcmVuY2VzLmlzU2VjdXJlQ29udGV4dEF0
dHJpYnV0ZUVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZUlzU2VjdXJlQ29udGV4dEF0dHJpYnV0ZTsK
ICAgICBwcmVmZXJlbmNlcy5pbnNwZWN0b3JBZGRpdGlvbnNFbmFibGVkID0gb3B0aW9ucy5lbmFi
bGVJbnNwZWN0b3JBZGRpdGlvbnM7CiAgICAgcHJlZmVyZW5jZXMuYWxsb3dDcm9zc09yaWdpblN1
YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHMgPSBvcHRpb25zLmFsbG93Q3Jvc3NPcmlnaW5T
dWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRlbnRpYWxzOwotICAgIHByZWZlcmVuY2VzLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbjsKICAgICBwcmVmZXJlbmNlcy5jb2xvckZpbHRlckVuYWJsZWQgPSBvcHRp
b25zLmVuYWJsZUNvbG9yRmlsdGVyOwogICAgIHByZWZlcmVuY2VzLnNlbGVjdGlvbkFjcm9zc1No
YWRvd0JvdW5kYXJpZXNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVTZWxlY3Rpb25BY3Jvc3NTaGFk
b3dCb3VuZGFyaWVzOwogICAgIHByZWZlcmVuY2VzLndlYkdQVUVuYWJsZWQgPSBvcHRpb25zLmVu
YWJsZVdlYkdQVTsKZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVu
ZGVyVHJlZS5jcHAgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3Bw
CmluZGV4IGE3MjczNGY2ZjRmYWY2YWRlOTU3Y2MzY2IzNDNkNTY3ZTQ4N2QzM2UuLmQ3NDcxMzFm
OTJiZGZkZmJjMzdhOTFhM2Y3ZThmYmIyZjQ2YjE2NTkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHAKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcApAQCAtNzk2LDcgKzc5Niw2IEBAIHN0YXRpYyB2b2lk
IGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKElXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMp
CiAgICAgcHJlZnNQcml2YXRlLT5zZXRWaXN1YWxWaWV3cG9ydEFQSUVuYWJsZWQoVFJVRSk7CiAg
ICAgcHJlZnNQcml2YXRlLT5zZXRDU1NPTVZpZXdTY3JvbGxpbmdBUElFbmFibGVkKFRSVUUpOwog
ICAgIHByZWZzUHJpdmF0ZS0+c2V0UmVzaXplT2JzZXJ2ZXJFbmFibGVkKFRSVUUpOwotICAgIHBy
ZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoVFJVRSk7CiAgICAgcHJlZnNQcml2
YXRlLT5zZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoVFJVRSk7CiAg
ICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQo
VFJVRSk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVz
RW5hYmxlZChUUlVFKTsKQEAgLTkwOSw3ICs5MDgsNiBAQCBzdGF0aWMgdm9pZCBzZXRXZWJQcmVm
ZXJlbmNlc0ZvclRlc3RPcHRpb25zKElXZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMsIGNvbnN0
CiB7CiAgICAgQ09NUHRyPElXZWJQcmVmZXJlbmNlc1ByaXZhdGU4PiBwcmVmc1ByaXZhdGUgeyBR
dWVyeSwgcHJlZmVyZW5jZXMgfTsKIAotICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZChvcHRpb25zLmVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbik7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRNZW51SXRlbUVsZW1lbnRFbmFibGVkKG9w
dGlvbnMuZW5hYmxlTWVudUl0ZW1FbGVtZW50KTsKICAgICBwcmVmc1ByaXZhdGUtPnNldEtleWdl
bkVsZW1lbnRFbmFibGVkKG9wdGlvbnMuZW5hYmxlS2V5Z2VuRWxlbWVudCk7CiAgICAgcHJlZnNQ
cml2YXRlLT5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChvcHRpb25zLmVuYWJsZU1vZGVy
bk1lZGlhQ29udHJvbHMpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IGE5YWVkNzY0OWI0OGQ4OTRhZmZhOTRhMDViMjRkYmQ4
ODg0MjFjMWEuLjYyMzJlZTI1NjJmMWY5YmY4ZTI5ZjdlZjUwOWZkMjM5ZDU3NzdhNTggMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSw5MSBAQAorMjAyMC0wOS0xNiAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgUmVtb3ZlIGFueSB1
c2Ugb2Ygbm93LXJlbW92ZWQgdGVzdGluZyBtZXRob2RzIGFuZCBzb21lIHJ1bnRpbWUgZmxhZ3Mg
ZnJvbSBsYXlvdXQgdGVzdHMuCisKKyAgICAgICAgKiBhbmltYXRpb25zL2xlZ2FjeS1lbmNvZGlu
Zy10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiBhbmltYXRpb25zL3Jlc291cmNlcy9h
bmltYXRpb24tdGVzdC1oZWxwZXJzLmpzOgorICAgICAgICAocGF1c2VBbmltYXRpb25BdFRpbWVP
bkVsZW1lbnQpOgorICAgICAgICAqIGh0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRp
c3BsYXktbm9uZS1rZXlmcmFtZS5odG1sOgorICAgICAgICAqIGltcG9ydGVkL2JsaW5rL3RyYW5z
aXRpb25zL3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZy
YW1lLWlubmVyLmh0bWw6IFJlbW92ZWQuCisgICAgICAgICogdHJhbnNpdGlvbnMvYmFja2dyb3Vu
ZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2JhY2tn
cm91bmQtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9ibGVuZG1vZGUt
dHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9ib3JkZXItcmFkaXVzLXRy
YW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFu
c2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9u
cy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVkLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL2RlbGF5Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZmxleC10
cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmlu
Zy10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1m
dW5jdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFu
c2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5k
LWluaXRpYWwuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlv
bnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9u
cy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbDoKKyAgICAgICAg
KiB0cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5Lmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRleC5odG1sOgorICAgICAgICAqIHRyYW5zaXRp
b25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qczoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3N2Zy1s
YXlvdXQtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3N2Zy10ZXh0LXNo
YWRvdy10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRp
b25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29udGVudC5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbDoKKyAgICAg
ICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlz
cGxheS1ub25lLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmlt
YXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1sOgorICAgICAgICAq
IHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbDoKKyAg
ICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3Zpbmct
cHJvcGVydHkuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50
LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbDoKKyAgICAgICAg
KiB3ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3Nz
LWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMv
Y3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwt
Y3Jhc2guaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0
LXRhcmdldC1jaGFuZ2UtYW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRtbDoKKyAgICAgICAgKiB3
ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9u
cy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbDoKKyAg
ICAgICAgKiB3ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sOgorICAgICAg
ICAqIHdlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3Zp
bmctcHJvcGVydHkuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFu
aW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sOgorICAgICAgICAqIHdlYmFu
aW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUt
YWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWw6CisKIDIwMjAtMDktMTUgIFJvYiBCdWlzICA8cmJ1
aXNAaWdhbGlhLmNvbT4KIAogICAgICAgICBGaXggbGF6eSBpbWFnZSBsb2FkIHBhaW50aW5nCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmct
ZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRp
bWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDQwMmY5OGVhMzExNWFhMWQ3NzZmYWY4OGVlZGI5MWEy
ODc1MWY5NzMuLjA4ZWJjNDRjNGQxNmRhNjkyNWQ2NWVkYzEzMTk0ZDhhZDMyNTY0NzUgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRpbWluZy1mdW5j
dGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRp
bWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+IDwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9ZmFsc2UgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4K
ICAgICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL3Jlc291cmNl
cy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9yZXNv
dXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCAxOGE1YTAxMjlmZjdmMmFlMjRi
ZDMzZTMxOWU2MDZmNTc5YWE0MTllLi42ZGUwOGQzODU1MTg0NDM2NzExN2YwMDcyMjU3MDkwM2Vh
ZjViY2ZlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL3Jlc291cmNlcy9hbmlt
YXRpb24tdGVzdC1oZWxwZXJzLmpzCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3Vy
Y2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKQEAgLTUxNCwxMSArNTE0LDYgQEAgZnVuY3Rp
b24gY2hlY2tFeHBlY3RlZFZhbHVlQ2FsbGJhY2soZXhwZWN0ZWQsIGluZGV4KQogCiBmdW5jdGlv
biBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVt
ZW50KQogewotICAgIC8vIElmIHdlIGhhdmVuJ3Qgb3B0ZWQgaW50byBDU1MgQW5pbWF0aW9ucyBh
bmQgQ1NTIFRyYW5zaXRpb25zIGFzIFdlYiBBbmltYXRpb25zLCB1c2UgdGhlIGludGVybmFsIEFQ
SS4KLSAgICBpZiAoJ2ludGVybmFscycgaW4gd2luZG93ICYmICFpbnRlcm5hbHMuc2V0dGluZ3Mu
d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gaW50
ZXJuYWxzLnBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGFuaW1hdGlvbk5hbWUsIHRpbWUs
IGVsZW1lbnQpOwotCi0gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIFdlYiBBbmltYXRpb25zIEFQ
SS4KICAgICBjb25zdCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zKCk7CiAgICAg
Zm9yIChsZXQgYW5pbWF0aW9uIG9mIGFuaW1hdGlvbnMpIHsKICAgICAgICAgaWYgKGFuaW1hdGlv
biBpbnN0YW5jZW9mIENTU0FuaW1hdGlvbiAmJiBhbmltYXRpb24uYW5pbWF0aW9uTmFtZSA9PSBh
bmltYXRpb25OYW1lKSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRl
bnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbCBiL0xheW91dFRlc3Rz
L2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5o
dG1sCmluZGV4IGMxYzZmZDY3MmM0ZDBlZjc5ZjhiZTdiYTg4MTk0OWZiMjZkOTRjOTkuLmE1Y2Uz
NDJkNTJlYmZiMDA1ZmQwNDFiNzg4ZmJiMTE2YjE2N2Y2ZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFt
ZS5odG1sCisrKyBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3Nz
LWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIEhU
TUw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD1mYWxzZSBdIC0tPgorPCFET0NUWVBFIEhUTUw+CiA8c2NyaXB0
PgogaWYgKHdpbmRvdy50ZXN0UnVubmVyKSB7CiAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNv
dXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5o
dG1sIGIvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29w
YWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUtaW5uZXIuaHRtbApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggY2I0MWNiYzhiZmM3ODQzYzNiYjk4OTMyZmM5ZWM5
OTczYmM1MDcyNC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0
eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5odG1sCisrKyAvZGV2
L251bGwKQEAgLTEsNzcgKzAsMCBAQAotPCFET0NUWVBFPgotPGh0bWw+Ci08aGVhZD4KLTxzdHls
ZT4KLSAgICAjYmFja2dyb3VuZCB7Ci0gICAgICAgIHdpZHRoOiAyMDBweDsKLSAgICAgICAgaGVp
Z2h0OiAyMDBweDsKLSAgICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICAgIGJhY2tncm91bmQt
Y29sb3I6IGdyZWVuOwotICAgIH0KLSAgICAub3ZlcmxheSB7Ci0gICAgICAgIHdpZHRoOiA1MHB4
OwotICAgICAgICBoZWlnaHQ6IDUwcHg7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEo
MjU1LCAyNTUsIDI1NSwgMSk7Ci0gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAx
czsKLSAgICB9Ci0KLSAgICAjcG9wdXAgewotICAgICAgICB3aWR0aDogMjBweDsKLSAgICAgICAg
aGVpZ2h0OiAyMHB4OwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0gICAgICAgIGJv
cmRlci1yYWRpdXM6IDZweDsKLSAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRy
YW5zZm9ybSAxczsKLSAgICB9Ci0KLSAgICAudHJhbnNwYXJlbnQgewotICAgICAgICBvcGFjaXR5
OiAwOwotICAgIH0KLQotICAgIFtoaWRkZW5dIHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAg
ICB9Ci0KLSAgICAub3ZlcmxheS50cmFuc3BhcmVudCAucGFnZSB7Ci0gICAgICAgIHRyYW5zZm9y
bTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwcHgpOwotICAgIH0KLQotPC9zdHlsZT4KLTxzY3JpcHQg
dHlwZT0idGV4dC9qYXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgZnVuY3Rpb24gcnVu
VGVzdCgpCi0gICAgewotICAgICAgICB2YXIgc29saWRfY29sb3Jfb3ZlcmxheSA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJzb2xpZF9jb2xvcl9vdmVybGF5Iik7Ci0gICAgICAgIHNvbGlkX2Nv
bG9yX292ZXJsYXkucmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsKLQotICAgICAgICB2YXIgcG9w
dXAgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKTsKLSAgICAgICAgcG9wdXAucmVt
b3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsKLQotICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGEgaGFj
a3kgd2F5IHRvIGZvcmNlIHRoZSBjb250YWluZXIgdG8gbGF5b3V0IHdoaWNoCi0gICAgICAgIC8v
IHdpbGwgYWxsb3cgdXMgdG8gdHJpZ2dlciB0aGUgd2Via2l0IHRyYW5zaXRpb24uCi0gICAgICAg
IC8vIFNlZSBjcmJ1Zy5jb20vMzI0Njg1Ci0gICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXkuc2Ny
b2xsVG9wOwotICAgICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3Ry
YW5zcGFyZW50Jyk7Ci0KLSAgICAgICAgLy8gZHVtcCB0aGUgcGl4ZWwgaW4gdGhlIG1pZGRsZSBv
ZiB0aGUgdHJhbnNpdGlvbgotICAgICAgICBpZiAod2luZG93LmludGVybmFscykgewotICAgICAg
ICAgICAgd2luZG93LmludGVybmFscy5mb3JjZUNvbXBvc2l0aW5nVXBkYXRlKGRvY3VtZW50KTsK
LSAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMucGF1c2VBbmltYXRpb25zKDAuNSk7Ci0gICAg
ICAgIH0KLSAgICAgICAgdHJpZ2dlclBpeGVsUmVzdWx0cygpOwotICAgIH0KLQotICAgIGZ1bmN0
aW9uIHRyaWdnZXJQaXhlbFJlc3VsdHMoKQotICAgIHsKLSAgICAgICAgcGFyZW50LnBvc3RNZXNz
YWdlKCJUcmlnZ2VyUGl4ZWxSZXN1bHRzIiwgJyonKTsKLSAgICB9Ci0KLSAgICB3aW5kb3cuYWRk
RXZlbnRMaXN0ZW5lcignbG9hZCcsIHJ1blRlc3QsIGZhbHNlKTsKLTwvc2NyaXB0PgotPC9oZWFk
PgotPGJvZHk+Ci08ZGl2IGlkPSJiYWNrZ3JvdW5kIj4KLSAgICA8ZGl2IGlkPSJzb2xpZF9jb2xv
cl9vdmVybGF5IiBjbGFzcz0ib3ZlcmxheSB0cmFuc3BhcmVudCIgaGlkZGVuPXRydWU+Ci0gICAg
ICAgIDxkaXYgaWQ9InBvcHVwIiBjbGFzcz0icGFnZSIgaGlkZGVuPXRydWU+PC9kaXY+Ci0gICAg
PC9kaXY+Ci08L2Rpdj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbApp
bmRleCA2MDFjZDVhODdmMjA0MTA2MmYxYTlkMDk4MDA5YzU0N2Y1MmYzNDVlLi5kOTE0ZmNiYmU4
MWQ0N2NkYmIxYWVlYmFjYjc5NWEzNzkzMWE0YTFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGE4MzdlMDU3ZGJjMTE4Yzc0
YWJiYjYwM2VlYzU1NmU3Yzg4N2U1YTguLmJhNDAwY2FjOWViZmUxY2ExMGUyOTBhNzk4ZTk5ZDcy
YjM0ODgwYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQt
dHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5k
LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sCmluZGV4IDg5
N2NiNDc4OTBlY2Y0OGUxZmQwMDU4OGQ0Yjg4YzkxNzJiMjYxMDMuLmE1YmZhMjdkM2FkMzIxOTky
MDg5MjE2MTUzMGI1ZDczZTE5ZDU2OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1y
YWRpdXMtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJh
ZGl1cy10cmFuc2l0aW9uLmh0bWwKaW5kZXggYjhhM2ZiNTNlN2JkNmJiMDZkMTk5ZDk1NWU0MDNj
OTEzNzA3ZDU4OS4uNTYzYmE5YzhmZjRmOGFjMmRiM2Q1MTRhYjFiMzYxNjI0Y2NlMzMwYyAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9u
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0
aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBm
ZjIzZmEwNDUxMjNlZDMxMDU3ZTgyN2Q3MWFhZGM5ODhkMjEyZDc4Li5jMWZhYTVjZjQyMTIxODAz
NWI0MTBlMmFlYzJiZDYyM2I3NDBhNzZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
bGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiNTVlZGZiN2VhODQ1NTVkOGFjNDRiY2Fm
ZmNhODQwYzc1NzhlZjU2Li41ZTY2NDRhODg0ZmNjZDYwN2JiNzYwYjE5OGQ5OTBmNzFlMjlhZmRi
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlv
bnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlv
bnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sCmluZGV4IDNjN2UyOWYxOTcwMTJk
ZmRlYTQzMDQzY2MwNDJhNzIxZGUwODEzZTEuLmZkZTFmMTczYWJjOTZiOTFhYTQ2YmVmOTdhOGY5
MDllY2Y3ZDAxYjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJh
bnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlv
bi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCmluZGV4IDMzYzU5
ODBlNjg3YWIzZTAyZTdlM2YyNTc3NmM4NzNmZDVkZThhYjkuLmE0OTJlNzEzMzk0NDAwYzI2ZDM0
N2U4OGFlMWQxM2MzMTdlM2RjN2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y29sb3ItdHJhbnNpdGlvbi1hbGwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVs
dGlwbGllZC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1w
cmVtdWx0aXBsaWVkLmh0bWwKaW5kZXggYzczZmQ0YWE4M2NmYWQ5NWI1MGI2ZTYzNTkxZTlhZTY3
OTg5NTZkZC4uNTdjNjNlYzlhOGMxYWUwN2RhZDhjMzc4NWRmM2I4MTQ0YjkyOGYyMCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBs
aWVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1w
cmVtdWx0aXBsaWVkLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3Vu
ZGluZy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3Vu
ZGluZy5odG1sCmluZGV4IDZlNzU2YmYzMzc4M2ZkNzIxZjMzYTY3YzhmYmQ2ZjI4ZjE1NWU1YjAu
LmNhYWExMTU3OWY5YjBkZjg2ZTA4MTk0YzBkOTBmMWRkZjhiNTAzMTcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCmluZGV4IDc2ZTlkYjI2
YTNiMTRkNGEzOGEzY2RhZjAwZWY2NmJmZjhlZGRiNjQuLmI4ZDcwYTI3OTM1MTU1YmVhYjI4ZTc4
NWNhZWY4ZjI1MzhkYzk1NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Ny
b3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2Nyb3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4K
IDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1i
b3JkZXItaW1hZ2UuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9y
ZGVyLWltYWdlLmh0bWwKaW5kZXggNGRiZGY3YTZiMTNmOGFlZTAzYTc3ODliMzY4YzEwOGUzZDFh
NGRkZi4uODdkYzAwN2VkZjVmYjc2ZmYxNDUxY2E5YWZmOGNiOWNhYWE0MTg5NSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbAppbmRleCBiNzZlYjY1
YWVkMzNjODQ2YzRkY2VjNDViOTdkNTQxYTAzOGNlN2JhLi43NDc0ZjY2ZDExNmM2ZjJhMjNhMmFm
NjMzYTUwNDRlMjhjMmI3NjczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
ZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+
CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxv
dzogQ29sb3JzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbAppbmRleCA2NmZlYmFjZmY5N2U0MmE2
NzNiMWRhNTlhYWMwZjYzNzFmOWVjNWFkLi4xYjVkZGFmZGY2NDhkOWYxMGYwZWM4ZjIwZDk0OWJh
MzYxNmZlODRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXpp
ZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Vi
aWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBl
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1s
PgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBMZW5n
dGhzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJl
emllci1vdmVyZmxvdy1zaGFkb3cuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1Ymlj
LWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbAppbmRleCBhOTlhNGRiYTczNmFmYjJmOTU4MDVh
ZTg4ODVlMDJiZTBjMGE3M2Y4Li4wYmNjYTg4ZTg3MTdkYWRmNTllM2NlYmQwNjkxOWNlYWM0YTJh
NzZlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3Zl
cmZsb3ctc2hhZG93Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6
aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogICA8
aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBTaGFkb3dzPC90
aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1v
dmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1i
ZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCmluZGV4IDcyMDI0NjgxYjNjM2E3Y2RkMTlh
MjhmNGMyODM4ZTYwNGFkNWI3Y2IuLjM1NTUzMDM5ZmM5ZGE4ZGI2ZWVhMzI5NTZkOTFhYzFlNjQy
Y2ExZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1v
dmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Vi
aWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhZG9j
dHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+CiA8
aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxvdzog
U1ZHIExlbmd0aHM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
Y3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sCmluZGV4IDY2MDk3MjUz
NGRjNjYyYmMzYjgwZmY3NjQ5MzZmZmI0YWRhNWYyNjguLjY1MjkxMTJiMTFkNjRmMWVjNDBhYmFj
NTc1YTY4NjgxNTQwNWQ1NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1
YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlw
ZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUg
b3ZlcmZsb3c6IFRyYW5zZm9ybXM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXggNzk4M2ZkY2VkMjI2Mzcw
ZTFhMzQ0OTAxM2UwYzk4NWUwZDZlMjg2Yy4uMzUwODdjMzY0YTNmMWM5OGU0NDBkOWE3OTllMGJk
ZDBjYmYwMDBhZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10
aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0
LXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9kZWxheS5odG1sCmluZGV4IDk5YzMxZWE4N2RhMDkxZDVkNjdk
YTU5ZjExYjNmMjY5M2EwZmY0YzAuLjNhMDJiNjI3OTgxMDVhMzZkNjBlZWExODIxYWY3MDM4MGVj
Y2VhMmQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggOWZj
NDY2MDM3YTUzOTUyZmRiOTAwZGMwZTk2M2Y0MzUyZTkxNjk0NS4uNjFmNDU2YWNlOTE3MzBlN2Iy
NGNmZjZjNTQxOGY3MjA1ZDc1M2NkNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvZmxleC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Zs
ZXgtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJh
bnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVyaW5n
LXRyYW5zaXRpb24uaHRtbAppbmRleCBjZGNkMjBmMTU3NDkzN2Q5YWJjYjc2NmYyZTkyMDdkYzc4
ZmRjYzc4Li4wM2Y5NTJkYTFiNzMzZTg0OTY5MTRjNWExNzY5YTgwMTdiYzZjOGZmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlv
bi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10
cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1s
CmluZGV4IDMwZmVjYzZkNTFkNGMwNmU2NGVjN2FlZjAwMDk4NTA0NmJiNWYwOGEuLmU4YjE2MjEw
ZWE3NjU3ZTQ3MGIwZGEyODE0MDM5Zjg1NTIyYTQzMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKaW5kZXggN2Q0NzNlOTEyMTQ2NTgz
ZjgxMTA5M2RlMjk3YmUzYWFmNTM4YmI0OC4uOWU2NmNkNGY5MjYxNGUxZTUwN2YyY2ZhNjQyM2Y3
ZDJlNjEwMDlkZCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvaW50ZXJydXB0
ZWQtYWxsLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9pbnRl
cnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZz
LXNob3J0aGFuZC1pbml0aWFsLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9sb25naGFu
ZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCmluZGV4IDYwOTkzM2Y2MDRhNzE1MjhjZWY0MzFh
N2JhNDk1OGJhNzJlNDc5NWYuLjIwMmU2NGQ2NDRkZjVjOGQ1ZjVlNGY5OTE4N2I0NzdhM2E4ZmJk
MWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0
aGFuZC1pbml0aWFsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQt
dnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbCBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiYzdj
NzE4M2VhZjNmOWQ5YjRjMDY4N2RiYjk3NjRkM2E5NzJmNTA4Li4wYzNkMzlhYjlmMjFhZDFmYjA5
Nzg2MmYwM2VkMTJlZTVmY2ExNmIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9tYXNrLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFz
ay10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlv
bnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRy
YW5zaXRpb25zLmh0bWwKaW5kZXggMTIwNDExN2JjYzMyMGMxMmE4MWVlMmJlZWUyMjhlNDExZjk5
YjljNy4uOWRkZjM5MzhhMjliZjNlMTBjOGM4YjZiNzQ2ZTMxYjAzZDc0MjYwYiAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlv
bnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdo
dC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5
bGVzLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHls
ZXMuaHRtbAppbmRleCBlMmU1Y2IwNzI5ZDgxM2Q5ODQ2MGI4OTg0YTQxMjBiNGZiOWVkZTI3Li44
NzIzYzI3NDE2ODhiZWQ0OTAzYzc4YzgyOTY4NGI0NWQ0Y2M3NjAxIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAppbmRl
eCBjYjZkMzRkODQ3NWJmYTYxMTM2YjM2MzM4YmJjNzg3ZTBlOGVjNTA4Li42ODdkMTBmMTIwOGE4
MzVjZDI1ZmU5MDA5ZDQ1MzdkNGEwOGM2NzA0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9taXhlZC10eXBlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0
bWwKaW5kZXggMjRmYjExZmVmNGUxODcyZjE0MmIwZjU3MmRmNTUxYzA3MzkzYjFiZC4uMzMzMjM2
OGQ2ZTQ0ODUyMGZiODE2ODM3ZDQ5ZjdjOTc4ZTQ0ODlmYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL21peGVkLXR5cGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8c3R5bGU+CiAjYm94IHsK
ICAgICB3aWR0aDogMTAlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92
ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFm
dGVyLXRyYW5zaXRpb24uaHRtbAppbmRleCBjZWQyZDVhMjIyMjgwNzAxN2U1MzY5YWQwMWUxM2Ri
NjE1ZjNlNzJmLi5kYzQ0NThmMmQ1Mjc2NzZjOGNkNzMyZTBlMmJlYzk2MGVkOGIzYjZmIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10
cmFuc2l0aW9ucy5odG1sCmluZGV4IDIxM2UyMWFkY2VkNjZhN2FhZDY3ZWM4YjVmOTU2OGM3Zjdi
ZWZmMjQuLjE0ZDc1MWM2NDk3MzNjMWMzMGEwN2JkYzRmZmI4ZWUzNjFjNTIwMjkgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFu
c2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tn
cm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10
cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dy
b3VuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGIyOWVlNzNkMzUwZDk1YjM3YjcyMTcxODZlYWE5
YmMyOTMxODA2YzUuLjUwMzA2N2MxNjRjYTYwNzk1N2FkNThmMzY2ZGZmZGEyNzRlNzU4NTcgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJh
bnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNr
Z3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25z
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25z
Lmh0bWwKaW5kZXggMzkyM2Q5M2M2ZDg0NTM0ZTVmN2Q3OGViOWYzZTM2YWRhNGZkMzAyYy4uNWNi
ZTY5ZmMwNDc1NzJlYWJlNjBhMDQ4N2YxNTM2NWE0Y2E5YTkxOSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggMzRhMGFkMjYzY2E5
ZjE1OGQ3NDk5MDVhNGM1ZGZjNjU1MWU5M2ViNi4uNGE5ZDRlYzU2NGYzM2M1NTQ3MzMxN2UxMThm
NGY5MDdlY2U3NTA4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlw
bGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bXVsdGlwbGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbAppbmRleCBj
NzViZTdmM2NjNmQ1OTNjZmQxMDYyYTc3NTY1NzZiNWJhYTZhNmI2Li5kMzNlNGI1NzYwZjU1M2M3
Y2NkNzBiN2Q0YzdkODM2NjU1M2QxZjRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25l
Z2F0aXZlLWRlbGF5Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KICAg
PHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFu
c2l0aW9uLXppbmRleC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFu
c2l0aW9uLXppbmRleC5odG1sCmluZGV4IGQ4NjM3MDU5ZWY3MGZlN2EyMmViMGNkMjA5NTZlN2Fi
ZGQ4NzcxOGUuLjg2MmJhMDJiMTVmNjJlYjM0Mjg3ZmE1OGY0NGNiNWViNDdmOWM5YjYgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXgu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24temlu
ZGV4Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxw
ZXJzLmpzIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVz
dC1oZWxwZXJzLmpzCmluZGV4IDdlNzlkMGM5ZTFiNDlhOGU3ODE2OTNlODRiZmY0MDkxODMyNWJm
YzYuLmYzNTczMWI2NWZhNGM3NTJmZDEyNjAyZDcwMWZjMDliODYwZDA3ZWEgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVy
cy5qcworKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10
ZXN0LWhlbHBlcnMuanMKQEAgLTM4MSwxNCArMzgxLDkgQEAgY29uc3QgcHJvcGVydGllc1JlcXVp
cmluZ1ByZWZpeCA9IFsiLXdlYmtpdC10ZXh0LXN0cm9rZS1jb2xvciIsICItd2Via2l0LXRleHQt
ZmkKIAogZnVuY3Rpb24gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KHRyYW5zaXRpb25Q
cm9wZXJ0eSwgdGltZSwgZWxlbWVudCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlbid0IG9wdGVkIGlu
dG8gQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucyBhcyBXZWIgQW5pbWF0aW9ucywg
dXNlIHRoZSBpbnRlcm5hbCBBUEkuCi0gICAgaWYgKCdpbnRlcm5hbHMnIGluIHdpbmRvdyAmJiAh
aW50ZXJuYWxzLnNldHRpbmdzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkK
LSAgICAgICAgcmV0dXJuIGludGVybmFscy5wYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQo
dHJhbnNpdGlvblByb3BlcnR5LCB0aW1lLCBlbGVtZW50KTsKLQogICAgIGlmICh0cmFuc2l0aW9u
UHJvcGVydHkuc3RhcnRzV2l0aChwcmVmaXgpICYmICFwcm9wZXJ0aWVzUmVxdWlyaW5nUHJlZml4
LmluY2x1ZGVzKHRyYW5zaXRpb25Qcm9wZXJ0eSkpCiAgICAgICAgIHRyYW5zaXRpb25Qcm9wZXJ0
eSA9IHRyYW5zaXRpb25Qcm9wZXJ0eS5zdWJzdHIocHJlZml4Lmxlbmd0aCk7CiAKLSAgICAvLyBP
dGhlcndpc2UsIHVzZSB0aGUgV2ViIEFuaW1hdGlvbnMgQVBJLgogICAgIGNvbnN0IGFuaW1hdGlv
bnMgPSBlbGVtZW50LmdldEFuaW1hdGlvbnMoKTsKICAgICBmb3IgKGxldCBhbmltYXRpb24gb2Yg
YW5pbWF0aW9ucykgewogICAgICAgICBpZiAoYW5pbWF0aW9uIGluc3RhbmNlb2YgQ1NTVHJhbnNp
dGlvbiAmJiBhbmltYXRpb24udHJhbnNpdGlvblByb3BlcnR5ID09IHRyYW5zaXRpb25Qcm9wZXJ0
eSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10
cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10
cmFuc2l0aW9ucy5odG1sCmluZGV4IDcwODgxZmU5MDIxYzg5NTAxMTA1M2Y0MmYxY2JiYWFjNDMy
ODYyNGQuLmFlZmM5YTA1MzhmZWIwNGY4M2FlMTVlNDhiMjUyMzk5ZGQ4MTY1ZjEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRpb25z
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IDM1YzllMzI5MWZhYTEyNjIyMmQ0NDEwZTJhMmZlM2U3NDQ5ZTdmOWMuLmZhYTc0
NWMxYjFlN2UxYTM5MWQ2MjRjZWIxZjUxNTRjM2QwMDg3MjggMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBkMzIyYjRlMWY0
MWM1NWUwNGQzMDk5MzdmZGRjYmIxMTY1Zjk5N2NjLi5iNTUxYTJjYmM3NjRiY2UyZWNmZGI1NzE2
MmI0YTE3YTI0ZDMxNmQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9y
dGhhbmQtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9y
dGhhbmQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVu
Y3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlv
bi5odG1sCmluZGV4IDNlZTU1ZTAwYTRjY2MyN2RhNDc3OTU1N2NhM2Y5NmZlNzBlY2JmZWYuLmJi
OTYyYmNiOTcwNDMyMjk2MjliODRhOTJlNGEwY2UwNTgwMTU0MWUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwKaW5kZXggMTQ1ZDgzYTAyYjAyMmM2MWU2ZmE4
OGQ5NDY3MDNmYmFhNGFhMTk1MS4uMDA1OGFiNWQxNDE2ZGE0YjdjZGViYmQyZDE0ZWFkMjg2MGY3
YmNiZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFu
c2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFu
c2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbAppbmRl
eCAzZmNhZDM4ODA2Y2E2MDA3YmE3OGY1ZjBiNDIwMjgwMTU0MjNhNjVmLi41Nzk3ZTVlZGUzZGVh
ZGQ3MmQzYzNhYTM1MTU2YTEyYTEwNGM3YWFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPGh0bWw+CiA8aGVhZD4KICAgICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sCmluZGV4IDhmM2Q4MmY0ZTc1ZDM0ZDVhYjZmYjM4
N2I0M2VkOGIzNWI4ZWM0YzEuLmFhMzk4ODA3OGZjOWVkY2E2ZTIwZTIyNThmMTNlYzllMTllOWRl
NzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhl
YWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQt
aW5kZW50LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5k
ZW50LXRyYW5zaXRpb24uaHRtbAppbmRleCA0NzQ0YjU4NWNlZWZiODE0NWViMmU0OWM3OTYwMWE2
MTkzMWRkMWUxLi4xNmY4YWYxODgyYTVhNzZjYWQzY2Y3MzU0NGFmNTkzYTlmMjAwNzFjIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKaW5kZXggMGY5
YzQ4NzM0ZGRmZWRjZjZmY2ZmYjdlMzk3ODkwNThhZWI4MTU0Mi4uMGQzZjMzZWQxNTI3OTM0MDMx
NTljMzIyNjBkMmIyZmQ4MDJkNjM1ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAog
PGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5z
Zm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCmluZGV4IDg2ZGVhN2UwZmE1ZWJkMzU2N2JjMjE0
MDhjMDc3ZjJhNDcyODJhMjcuLmJmNmQzMGRkM2RhNmEyOGM3ODE1ODBkNjQxZjdiZDJjMmVjMGE5
OWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0
LW5vLW1hdGNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9w
LWxpc3Qtbm8tbWF0Y2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVu
dC1yZW5kZXJpbmcuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5k
LWV2ZW50LXJlbmRlcmluZy5odG1sCmluZGV4IDAwN2NlOGRkMDU4NTM1NjcyN2RlOTE2NTE1ZmJi
M2NjNDI3YjE3YmQuLjk1OWFmZDYwZDA5YjAxMWJjZTNhZTEwNmQ2NzljYTliNmQwYzNhOWYgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJl
bmRlcmluZy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5k
LWV2ZW50LXJlbmRlcmluZy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRl
c3QtdHJhbnNmb3JtLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhp
dC10ZXN0LXRyYW5zZm9ybS5odG1sCmluZGV4IDNkMzI5ZjQ2MDIxOTZhYTFmNDkzNDAwODgyYzg4
ODBjZjQ1ODIzN2MuLmVmODA2YzcxMWExZTE1YWJkZDM3OTZjNWE1ODcxYjY5MTJkYzdkMzggMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJh
bnNmb3JtLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQt
dGVzdC10cmFuc2Zvcm0uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwK
aW5kZXggZDlkZjg1YzE0NDdmMDlhZGU1MmFhYTQyYjAxZjIyMzhjYmNiZTNjNy4uODNhNjBhNmUy
ZTU1M2YzN2E3ZjU5ZTY3MjFiOTg1YmVkNzNhMDE2NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwKaW5kZXggOTNlMDRmMmEzMjhmZjJjZGExNjU2YTQz
NDkxMDRmMjE0MjEwM2FiMC4uZmMyY2U5OTUxMGFkZTcyZDZjZTgxNTY5MTc0NWI5OTAwODBhNjgy
YyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxh
eS1waGFzZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taW4t
ZGVsYXktcGhhc2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50
Lmh0bWwKaW5kZXggMWYwM2VlYTc3NDk2ZjdiNzNmYWVhN2YyYzBjYzdkNjdkODRhMmJhYi4uM2M0
NzI5NDkxNjdkNjgzMjJhMjczNzFlYTA3MWYyNzYxMWY2NTM2OSAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29udGVudC5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRo
LWNvbnRlbnQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCmlu
ZGV4IDY4NzMyMjlkMTRkNzk0NjNjZTBmNDRkZjQ0OTBhYjQ5ODdkY2JjM2MuLmRmMDk4OWQ5ZjY0
ZmE3ZGU0ZTRlYjM1MDgzYWU4ZDQ0OWJlZjQ2ZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA5MTE3NDkyYjBi
YjNhMTJiODEwMzdlZDIyOWZjNTllMGI2ZWNmZDk5Li4wNTBjNTJkMzE3MWM4NjI5NmZjMjc2NTVj
YjEzNDNhNTQ0ZjE5YmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdl
YmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRt
bCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwK
aW5kZXggNGUzN2UxNjdmNDFmMTIzYmVkZWRiMDI4MGUyMWIwMGM5MTZiMDhlZi4uZDg0NTliNzFk
NGM4M2E5YzNkN2UzNjkxNTM2ZjU4YmE2OTA5NGJhNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbAppbmRleCAxNGU3OGM1MDE2
MWRlODI0MjZkYWMyZjc5ZjQ2NDY4ZjA0MjRlY2UwLi42MjhjZjI2ODUyZWFhOGY5MzU2NjI0ZDkx
MTljNmU4NzhlYmFmNzg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zp
c2l0ZWQtbGluay1jb2xvci5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1s
aW5rLWNvbG9yLmh0bWwKaW5kZXggMmVhNDQ2YzZiMmY5NWFhMmNmM2RlZDM2Njc2MWU0MDY1ODM2
MmMyZS4uYjE4NzhkMzE5MDUyMTc2OGU2M2JhNWU1YWQ3YzZkNTMyZGVlNzNlMSAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24t
aW4tbGlzdC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1s
aXN0Lmh0bWwKaW5kZXggZTY2YWRmM2IxOTBjOWUwZDg1ZWE3ODAyYzFkOTcxZDM4YTFjZmUyZC4u
YjJiY2JmNTI1OTdkZGIzZDZlZGZlODkwY2RkNjA1NmY1MGUyZDdkYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXkt
c3RhcnQuaHRtbAppbmRleCA2NjYxZjkxYTQwOWE5MWFiZDNiOWMwNWUxNGJhNDc0NDEwNTMyNDUw
Li42MDhlMDAzZjVjMGRlN2Y2MzAzNThhNmIwNDczYTQzNTk1NDVjMjI2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXkt
c3RhcnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdp
dGgtbm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBo
dG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJh
dGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlzcGxh
eS1ub25lLmh0bWwKaW5kZXggOWM3YTEzYjQ1YjY0NTNhODQ1ZDU4ZTIwNWM5YjRlM2VjODU0NjU0
Yy4uZDExNWM5NTExODQ3Y2M1YjFhOGY2ODg0OTkzNTdlNmViMGEyMDBiYyAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0
aW9uLWRpc3BsYXktbm9uZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNj
ZWxlcmF0ZWQtYW5pbWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRy
YW5zaXRpb24tY29tcGxldGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nl
bGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1s
CmluZGV4IGIzNzY2ODE3Y2Y0MGUzZDlkYWU2NWU0MzljYTJkZmYzYzY5ZTViYjYuLmExYzg0OGEz
YTE1NmEwYTA0YzAwZGIzZDkyNzY0YjRkMDc5YjYxMjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0
aW9uLWNvbXBsZXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vs
ZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNp
b24uaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9u
LXN1c3BlbnNpb24uaHRtbAppbmRleCAwNjU0YTY5NWY1YjI0YmM0MmZjYTdmMWQyMzgxZGEwZjcy
YWI2ODhjLi5lZmFhNTQzOWQ0ZmI3NDBhYjVjNzQzMTBkMTQ3Njg4ODNjMzY4ZmVmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNw
ZW5zaW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1h
bmltYXRpb24tc3VzcGVuc2lvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhl
YWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vs
ZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0
eS5odG1sCmluZGV4IGJlZjA4MDhlOTQ3Yzk2YTA1NGMzMThiOTFkNTlhNTI0MDIxZTNiMjcuLmYz
NDAxYjZjZTY2MGZiNjIwN2Q4YjkxZjNjNTI2ZWJmNmM2YzA3ZDYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1w
cm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQt
dHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4K
IDxib2R5PgogPHN0eWxlPgogICAgIGRpdiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1h
dGlvbi1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1
cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sCmluZGV4
IGI2MDVjMDg5MTFiYTY5MzFiMGNmMzgzNWI3OWNjYjBjNGZmNTM2NzQuLjlkZDU2MThiYjY3NTAx
ZWY5MDlmNjM3MmQxZjExOTFmNWFlYzkyNjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0
aW9uLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5n
LWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggYWNj
ZXNzaW5nIGEgQ1NTQW5pbWF0aW9uJ3MgY3VycmVudCB0aW1lIGFmdGVyIHNldHRpbmcgaXRzIGVm
ZmVjdCB0byBudWxsPC90aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5p
bWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Fj
Y2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQt
cmVtb3ZhbC5odG1sCmluZGV4IDU4ZjZjNDliOWM4YzA4MmRmOGNlOTE2ZDhjNjE2OGEwZDg5OGNl
M2YuLjQzMDZhMTllYmJkM2NjZjhkZTk5MWI1YzU4MzJiNGIxM2Y3ZDBhMWIgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1m
aW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNz
cy1hbmltYXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0
YSBjaGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIGFjY2Vzc2luZyBhIENTU0FuaW1hdGlvbidz
IGN1cnJlbnQgdGltZSBhZnRlciByZW1vdmFsIG9mIGl0cyB0YXJnZXQ8L3RpdGxlPgogPHN0eWxl
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVm
ZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdl
LWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sCmluZGV4IGQ5ODBkMzU2MjhlNGFhMzlh
MTgzNDAzNWQ1N2U0N2FmMGNkMWNiYjcuLjY2ZmJhNTUyZjg1ZGQzYzI4MTdkNzIxMTk4Mzc1NjMy
YjhkNjk5MmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1h
dGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRt
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRh
cmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPGJvZHk+CiA8c3R5bGU+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZy
YW1lcy1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9u
LWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwKaW5kZXgg
NTYwODcyMTNhNDVlZGQ0NzZhMDhlZDkzOWNjMTZiMDhmNTE0Y2M3Yi4uOWU1NTNiZGZiYTRiZjZl
NWYxMTEzZTgxODlmYzJhMDEzNzc0MTg3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJh
bWVzLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0
aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogPGJvZHk+CiA8c3R5bGU+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbAppbmRleCA4M2ZlOTVjYTdkZjE2NjNhZDU5MDhh
YmUwNGEzNmJmNTcxYTU1MWFlLi5lNWY5NTIwMDBjNmE0ZWVlNWVmZGIyMWFhNmU3ZTQ3N2Q1OWJi
YTBjIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25z
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q1NTIEFu
aW1hdGlvbnM8L3RpdGxlPgogPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4t
ZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCmlu
ZGV4IDMwNzgzYThiZmYwYmIwMWE0ZWZiNDA1OGJhZGM3MDkxOGEyZTk3MGYuLjA0ZGJhYTUzY2Ex
ZDIzNmZkOTgwYmNjZDcxY2E4YjlhM2FmOTI4NzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVk
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1m
bGlnaHQtcmV2ZXJzYWwtYWNjZWxlcmF0ZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0
YSBjaGFyc2V0PSJ1dGYtOCI+CiA8dGl0bGU+UmV2ZXJzYWwgb2YgYWNjZWxlcmF0ZWQgaW4tZmxp
Z2h0IENTUyBUcmFuc2l0aW9uczwvdGl0bGU+CiA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlh
PSJzY3JlZW4iPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1r
ZXlmcmFtZXMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5
ZnJhbWVzLWNyYXNoLmh0bWwKaW5kZXggNjBhYzM2NWYzMDU2NTQzYTNmMTg2NTRiOWY3YzJmM2Ux
MjQ3YzU2Mi4uMGY1ZmZiM2YyNzA4NjdiM2E2M2VlMDMxYTMyNWJiYWJhYTQxNzdkMyAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRt
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0
aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwK
aW5kZXggNGRiZjcwNmU0MTc0ZjI5YWIxOTViOGUyZmY1NjJhOWQwOTM3YWY3YS4uZmEzYzg1NWRi
Y2IyNmU4ZDk5N2MxMjUyNDI4ODMyYzkxMTE4N2M4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1w
cm9wZXJ0eS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2Vs
ZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
IGh0bWw+CiA8Ym9keT4KIDxwcmUgaWQ9InJlc3VsdHMiPjwvcHJlPgogPGRpdiBpZD0idGFyZ2V0
IiBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRoOiAxMDBw
eDsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Ij48L2Rpdj4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5v
bmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L3NldHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCmlu
ZGV4IGJkMjQwNjhiY2M0NWRjMzgyOTA4ODlmZDdjM2EzNDY0Y2YyMDE3ZWIuLmY4MGIwNDdmMjY1
NmZlNTkxODgxNWIwMzJjODc1NTQ4NmUwN2JmYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dl
YmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZm
ZWN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmlt
YXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiA8bWV0YSBjaGFyc2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIHNldHRpbmcgYSBDU1MgQW5pbWF0
aW9uIHRvICJub25lIiBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8
c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3Nz
LWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVj
dC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24t
dGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbAppbmRl
eCA0YjE1MDRhYmNhZDNlN2RiMDQxM2NkZGJmMzMzNjFlYTQ5NDU0YWYxLi45MzJiYzkxYTc2ZWEx
NTVmOWFiODZkOGM5MDRkOGZlYjUzNWM3NzZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxl
LWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXIt
Y2xlYXJpbmctZWZmZWN0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11
dGYtOD4KIDx0aXRsZT5DcmFzaCBzZXR0aW5nIGEgQ1NTQW5pbWF0aW9uJ3MgcHJvcGVydHkgdmlh
IHN0eWxlIGFmdGVyIHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90aXRsZT4KIDxzdHlsZT4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409018</attachid>
            <date>2020-09-17 03:48:01 -0700</date>
            <delta_ts>2020-09-17 04:12:40 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200917124759.patch</filename>
            <type>text/plain</type>
            <size>532963</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM2MDcyNDVhYzdjZTNl
MGEyZGYzNjMwMzQzNTA5NDI4YmY0MmI0Yy4uMWM3YmUwYmQ5Njk4NDJiYWZjYzlmZDk4OWY4MDE5
NmVmZGVkNDkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMCBAQAorMjAyMC0wOS0xNyAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0YWJsZS5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbDoKKyAgICAgICAg
KiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3I6OlByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKToKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmguCisgICAgICAgICogYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbDoKKyAgICAgICAgKiBhbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZXN1bWUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAgICAqIGRv
bS9Qc2V1ZG9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpjbGVhclRpbWVycyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSk6CisgICAgICAgICogcGFnZS9G
cmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xh
eW91dENvbnRleHQ6OmxheW91dCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
OjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCk6CisgICAgICAg
ICogcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg6CisgICAgICAgIChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25zRW5h
YmxlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb25Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRy
YW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphbmltYXRl
ZFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3RhcnRUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uRmluaXNo
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNSdW5uaW5nVHJhbnNmb3JtQW5pbWF0aW9uIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdGFydFRyYW5zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNp
dGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVs
T2JqZWN0Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpsZWdhY3lBbmltYXRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
VXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRv
d25SZW5kZXJlcnMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZSk6CisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
U2V0dGluZ3M6OndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5pZGw6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zQXJlU3VzcGVuZGVk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXN1bWVBbmltYXRpb25zIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25z
Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQW5pbWF0
aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMjAtMDktMTUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW2Nzcy1mbGV4XSBSZW1vdmUgZmxleGJveCdzIHNwZWNpZmljIGNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNmM4ZTE2NmNjYzYyZmI4OTVhNDg5NWVi
NmY4N2NhNjEzMGY1YTA0MC4uYjU0ZDdkODI4NjU1YzQwNzVkMzFjMGUwODg0ZTA2MDkxZTU2MmQ3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0wOS0xNyAgQW50b2luZSBRdWludCAg
PGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRp
b24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0
V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdLUHJlZmVyZW5jZXNT
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW06CisgICAg
ICAgICgtW1dLUHJlZmVyZW5jZXMgX3NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJlZmVyZW5jZXMgX3dlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlOjpvdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisKIDIwMjAtMDktMTYgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlByZWZlcmVuY2VzLnlhbWwgaXMgb3ZlcndoZWxt
aW5nLCB3aGF0IGlmIHdlIHNwbGl0IGl0IHVwIGEgYml0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggZjRkYjBjMTFjOTZjMWE4ZThhNWNiMmJiMTQ5NzFhZjA5MmM5ODIyMy4uZGM2Mzcw
ZGQ4YThjN2IzOWQwNDkwNDJmNGVjMWYxMmRiNTVmMzhiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA5LTE3ICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJQ
cmVmZXJlbmNlcy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZV0pOgor
ICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zRW5hYmxlZF0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRXZWJBbmltYXRpb25zRW5hYmxlZDpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAq
IFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWQ6XSk6CisKIDIw
MjAtMDktMTYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBydW50aW1lIHNldHRpbmcgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDU1Mgc2hhZG93IHBhcnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggY2U4MWYwZGQzOTY5ZjE0ZDE2MDE5Zjhh
OWRmYTY4ZjY3OTQ1MjcyMi4uNzkzYzBiNjg3ZTQ1ODFmZDA5NzM0MDA1NDZmZjk4ZjZjN2JjM2Q2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTA5
LTE3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92
ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIEludGVyZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGw6Cisg
ICAgICAgICogSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbDoKKyAgICAgICAg
KiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJGcmFtZTo6cmVzdW1lQW5pbWF0aW9ucyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJGcmFtZTo6c3VzcGVuZEFuaW1hdGlvbnMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViRnJhbWU6OnBhdXNlQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkZyYW1lOjpwYXVzZVRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViRnJhbWU6Om51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViRnJhbWUuaDoK
KyAgICAgICAgKiBXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcmVm
ZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1bHRT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6c2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJQ
cmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViUHJlZmVyZW5jZXM6OndlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2Vi
Vmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToKKwogMjAyMC0wOS0xNiAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHJ1bnRpbWUgc2V0dGluZyBm
b3IgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBpc1NlY3VyZUNvbnRleHQgQVBJPwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA0Y2IzNWM5N2ZiNTBlOGUzNjdlZTQ4NjZhNTZkYzI3NTg5OGUzZTFiLi5h
NDMwY2Y3MGMxMjJmYWViYTA1YWVkYTViN2RlOTM0NzkyMmYwZTE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JF
X0RJUn0vbWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVf
RElSfS9wYWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGNjOGU3YWNmM2I5MDg0Nzk2ZDViNmQzNzVhMDg4
NTYyMzhiN2FiYmUuLjQ2YjY1ZDBlYTViNDU2N2E0YWM2NzU5NWY3Yzk5NGU1MTc2MmQyYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQpAQCAtODkwLDkgKzg5MCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAg
cGFnZS9XaW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmgKLSAgICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNo
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggN2ZkMWE0N2M2NTAzODJjYzdlOWViMGEwZDZhYmViZjczNmI0
NmRiNS4uYzBmZTk0MDFjMDNmMDhlMWEwYzEzZmExMjQ3ZjcwYzJmODQyYjZmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNw
cAogYW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0
aW9uVGltZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmlt
YXRpb24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGlu
ZS5jcHAKQEAgLTE2NzYsMTIgKzE2NzcsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5j
cHAKIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGlj
YXRvci5jcHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1w
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cAotcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQu
Y3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGZi
YTIwMjcwMzNjOGU2ZjIyNTdjZDVhYjVjMTkxOTg2MWRjYzhjNi4uOTlhNzdkNzZiOGU5ZmQ2N2Y5
OTIwMWExYTc5ZTA5ZmY5YWNjZGQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4
MjJFM0M0N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBG
cmFtZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1
NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAz
NUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
NURBODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgg
Ki87IH07CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdF
QzdDNTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNj
cm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAq
LzsgfTsKIAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgx
ODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC05MTUsMTEgKzkxNCw2IEBACiAJCTMxNkRFNzAyMUU4M0FF
MUQwMDg0QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRD
RGF0YUNoYW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyog
SlNDU1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5o
ICovOyB9OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3
MDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZF
MTEyMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyog
QW5pbWF0aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZG
RTEwQTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFE
QTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21w
b3NpdGVBbmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIElt
cGxpY2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAq
LzsgfTsKLQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBF
NkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQx
NjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdF
IC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVy
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
N0QzRkYyMjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JG
ODkgLyogSW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIx
NTIsNyBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJD
NDI0MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIw
MDY1QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIw
MkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5p
bWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3
RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBG
MTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0
MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyog
U1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJD
MThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2
IEBACiAJCTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAx
QjFFRDcyMkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3
N0Q1MTAyNTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1
NTAwREE0Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQx
MkY5REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAw
Qzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJD
NjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQw
NSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAy
MTI2NkUgLyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3Np
dGlvbkV2ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3Np
dGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUYyRjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9Owog
CQk3QTA5Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JE
QiAvKiBGaWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4
ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1D
QUZpbHRlcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFBsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VD
N0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2Vk
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENh
bnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzIxNCwxNiArNzIwNyw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tl
eWZyYW1lc1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlm
cmFtZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NE
N0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IENTU0tleWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZF
MDkyMEU2Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmlt
YXRpb25CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2
MDg4IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25D
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZF
MURBNzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5p
bWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBC
RjYwODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtl
eWZyYW1lQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEtleWZyYW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2
RkUxMTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlj
a09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2lu
dGVyRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk4ODQsNiArOTg2Nyw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAv
KiBBbmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5p
bWF0aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAy
QjM4OEYwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0
aW9uRWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVG
N0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkz
NkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBD
OEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTk5Miw4ICs5OTc3LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2
aWdhdG9yQ3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNO
YXZpZ2F0b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VG
NjJGMTEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURC
NzQwMEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlND
b21wb3NpdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ29tcG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
QUM5MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlv
bkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0
aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTQsMjYgKzE4
Njk3LDYgQEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKLQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJ
CWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAw
QkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJG
NjA4OCAvKiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2
MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJG
NjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUx
REE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5
MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAot
CQkJCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAg
Ki8sCi0JCQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9u
LmggKi8sCi0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9u
LmNwcCAqLywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRp
b24uaCAqLywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRp
b24uY3BwICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1h
dGlvbi5oICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0
aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQz
Myw3ICsyMTM5Niw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUx
RDg0MDBCRjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3
OCAvKiBjb2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAog
CQkJCTE4QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3OCw2ICsyMTg0
MCw4IEBACiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAg
Ki8sCiAJCQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAog
CQkJCTcxQzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJ
CTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8s
CisJCQkJNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
Ki8sCiAJCQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQuaCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlv
bi5jcHAgKi8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24u
aCAqLywKQEAgLTMwMzE5LDcgKzMwMjgzLDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJG
OTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3
MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRp
b25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEz
MzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzAyLDcgKzMwNjY1
LDYgQEAKIAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29t
cG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUx
QkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
LQkJCQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRp
dENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAv
KiBDb21wb3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3
MTEwMEVCN0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApA
QCAtMzA4NDIsOCArMzA4MDQsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBD
cnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0
MUYzQ0NFNjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFk
ZXJzICovLAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyog
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlG
OTEwMTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMDkxMiw3ICszMDg3Miw3IEBACiAJCQkJQTgwRTZDRTYwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUVEOEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5
LmggaW4gSGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJv
cGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcx
RTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcx
MzQxRkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJv
cGVydHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzUsNyArMzE2OTUsNiBAQAogCQkJ
CTU1QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODgg
LyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMz
OEMwMEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Nzg2MzNFOTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzEzLDcgKzMyNjcyLDYgQEAKIAkJCQk1MTdB
NjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1l
QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0Ug
LyogS2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNC
NDFGOUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcxMjQ3RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFi
bGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0
NjQ3MTAwMDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1
NjIyZWNhZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0
YWJsZS5pZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1b
Ci0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBB
bmltYXRhYmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dF
eGNlcHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2Jq
ZWN0PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1l
QW5pbWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBn
ZXRBbmltYXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRs
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJk
ZjFmZTJjNjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlh
M2M1MTIzMjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvbkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxl
ZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3Rv
bVRvSlNPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2
OTFiNDg1MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVl
MWUwZTgzMmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5k
b3csCiBdIGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNv
bnN0cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50
SW5pdCBldmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBl
ODIxZGI0N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFi
YjI2MDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvblBsYXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rp
b25hcnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFy
eSBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBj
dXJyZW50VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4
IDA0ZmE5NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIx
NDNlZmM4NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAg
ICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09S
RV9FWFBPUlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGlt
ZWxpbmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAx
ZTViODg0YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5
NmY5YmU5NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01T
dHJpbmc7CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbiwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2Vi
QW5pbWF0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9u
TmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZm
YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlO
YW1lcy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JC
bGVuZGluZy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUg
IkZvbnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUg
IklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5
bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIK
KyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBi
bGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3Vi
bGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHBy
b2dyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZy
b20pICogcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENv
bG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywg
cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3Ro
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2Fw
TGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1h
bCgpIHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5n
dGgoKSwgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUm
IGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0
dXJuIHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJs
ZW5kRnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKwor
c3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOwor
CisgICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDog
MDsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7
CisgICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJv
Z3Jlc3MpOworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNo
YWRvd1N0eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hh
ZG93RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgp
ICE9IHRvLT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigq
dG8pOworCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9j
YXRpb24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+
cmFkaXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5z
cHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmlt
LCBmcm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5p
c1dlYmtpdEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29s
b3IoKSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVu
Y3Rpb25MaXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVy
YXRpb25zKGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4
SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJl
bmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5i
b3JkZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGlu
ZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9u
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAg
IHJldHVybiB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFz
aWNTaGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENs
aXBQYXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9u
OjpTaGFwZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJv
bVNoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hh
cGUoKTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlw
UGF0aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5j
YW5CbGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBl
Q2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jl
c3MpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZh
bHVlKiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAg
ICAgIHJldHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlw
ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkK
KyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0g
KmZyb20tPnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hh
cGUoKTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICBy
ZXR1cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQo
ZnJvbVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09w
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7Cisg
ICAgQVNTRVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNz
LCBibGVuZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlv
bnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0
OworICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBz
aXplX3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9
IHN0ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChp
IDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9u
cygpW2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRl
ZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHBy
b2dyZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9n
cmVzcywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAg
IHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0
eU9wKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlv
bnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0
ZXJPcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9w
ZXJ0eUZpbHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElm
IHdlIGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVu
Y3Rpb24gYW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAg
IHN3aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAg
ICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAg
ICAgYnJlYWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNr
ZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNo
ID0gYW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0
c01hdGNoKQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJv
bSwgdG8sIHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBm
dW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1
dCBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAg
IC8vIEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9
IHRvOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJv
bSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBB
U1NFUlQoaW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRG
aWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGlt
YWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRl
clZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3Vy
cmVudFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAg
ICBhdXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdl
VmFsdWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRl
ck9wZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0
eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJp
bGl0eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55
IG5vbi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2li
bGUuIE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52
aXNpYmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZz
LiBWaXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8g
dmFsdWVzLgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxl
ID8gMS4gOiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxl
ID8gMS4gOiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRv
OworICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHBy
b2dyZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDog
KHRvICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5s
aW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRl
eHRVbmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20u
aXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGlu
ZU9mZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1
ZSgpLCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJs
aW5lT2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNv
cmF0aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERl
Y29yYXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20u
aXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRp
b25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3Ro
VmFsdWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERl
Y29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
TGVuZ3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgp
LCB0by50b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFu
aW0sIGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVz
cyksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRv
LmxlZnQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5s
aW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQo
ZnJvbSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGlj
IGlubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29u
c3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBz
aXplX3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRv
LnNpemUoKTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3Mg
PyBmcm9tIDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNz
ID09IDEgPyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7
CisgICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5k
ZXIoc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0
b0xlbmd0aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0
aCwgdG9MZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBm
cm9tTGVuZ3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4g
cmVzdWx0KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRM
ZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZy
b21baSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZElt
YWdlKiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVz
cyBpcyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8g
c2hvdyB0aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdl
IGhhbmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNz
KQorICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEp
CisgICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+
Y2FjaGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICBy
ZXR1cm4gdG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8g
dG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hl
ZEltYWdlKCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBj
cm9zc2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1h
Z2VWYWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUp
KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3Nm
YWRlVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZy
b20sIFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8
ICF0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1h
Z2UoKTsKKyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwg
IXRvKQorICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4g
dHdvIGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAg
ICBpZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVk
SW1hZ2U+KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVy
YXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7
CisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlz
PENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdl
VmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVy
YXRlZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4K
KyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxD
U1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRl
ckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9H
ZW5lcmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0
b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dy
ZXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJv
bUdlbmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAg
ICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1ND
cm9zc2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVW
YWx1ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Ny
b3NzZmFkZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRv
Q3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2Cisg
ICAgfSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVD
YWNoZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9t
R2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFs
dWUoKTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQp
KSB7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNh
c3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAo
ZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0
bykuY2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwg
ZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jl
c3MpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3
ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxl
Q2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Cisg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NG
aWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNh
c3Q8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2Fj
aGVkSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9G
aWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJP
cGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRk
IGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAg
fQorCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQg
YW5kIGdlbmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAm
JiBpczxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxl
bmQoYW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxl
Q2FjaGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0
aWMgaW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBp
ZWNlSW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdl
KCkgfHwgIXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1F
ICg3NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0
aGF0IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmlt
YWdlU2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9
IHRvLmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJv
bS5maWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jp
em9udGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkp
CisgICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJl
bmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVy
LCAxLjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAg
ICAgIHJldHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRG
dW5jKGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBm
cm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9t
Lm91dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwor
fQorCisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFy
aWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlh
dGlvblNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUo
KSAhPSB0by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsK
KyAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBm
cm9tLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVt
ID0gdG8uYXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkp
CisgICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZs
b2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0
ZW0udmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0u
dGFnKCksIGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
I2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJv
bSwgRm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJu
IEZvbnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZy
b20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5s
aW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJv
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQorewor
ICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0
PGZsb2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHBy
b2dyZXNzKSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJv
cChwcm9wKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBw
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5k
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAK
KyNpZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3Vs
dCwgZG91YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRp
b25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAg
ICBDU1NQcm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xh
c3MgUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyKSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJv
cCkKKyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAg
IH0KKworICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0g
PDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9t
ICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJl
bmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlX
cmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5
V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQ+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
UmVmUHRyPFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwg
Z2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9n
ZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipt
X3NldHRlcikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAg
ICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50
ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAg
ICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
KGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFBy
b3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1f
c2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0s
IChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlciko
VCYmKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNv
dW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQ
cm9wZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVy
YXRpb24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhP
cGVyYXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRo
ZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhl
ciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgor
ICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0
aE9wZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBh
dGhPcGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChj
bGlwUGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKwor
I2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFy
aWF0aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0
aW5ncz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRW
YXJpYXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFBy
b3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVy
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJ
ZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhl
IHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJv
dGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlv
blNldHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRp
b25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAg
ICAgcmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAg
fQorfTsKKyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlE
IHByb3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBS
ZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVy
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJ
ZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhl
IHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJv
dGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAg
ICBpZiAoc2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxT
dHlsZUltYWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2Uq
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlX
cmFwcGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAg
ICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQor
fTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBD
b2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisg
ICAgICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGIt
Pm9wYWNpdHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBw
ZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRy
YW5zZm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNm
b3JtKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFu
aW0sIGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9
OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
PGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
KQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJv
cGVydHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0
aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
cHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVM
XzIpCisgICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ry
b3BGaWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAg
IH0KK307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0g
MDsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAg
ICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dE
YXRhKiBvdGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0
YT4gZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5v
cm1hbCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgp
LCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRC
b3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRy
dWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgp
LCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KTsKKworICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAg
ICBpZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAg
ICByZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0
V2ViS2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgp
OworCisgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1
bHRXZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOwor
fQorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93
RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0
dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0
cworICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxp
c3RzCisgICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0Ip
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0g
c2hhZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFk
b3dMaXN0TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0
TGVuZ3RoKHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8
IChmcm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3Qt
PiptX3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVz
cywgc2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3Ro
KSwgZmFsc2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBiZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0
TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3By
aXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRj
aGVkU2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0Rh
dGE+IG5ld1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOwor
CisgICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRv
d0IpOworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9y
QmxlbmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywg
ZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hh
ZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hh
ZG93KQorICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFk
b3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5l
eHQoV1RGTW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBi
bGVuZGVkU2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRv
d0EtPm5leHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0It
Pm5leHQoKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsK
KyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgLy8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3Jk
ZXIsIHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVy
c2UgdGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hh
ZG93RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBp
ID0gZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93
c1tpXSA9IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRv
d3ModG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAg
IHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVu
Z3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRh
KiBmcm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAg
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hh
ZG93c1tpXSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9
IHNoYWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNv
bnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBm
cm9tU2hhZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJs
ZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dy
ZXNzKTsKKyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8g
cHJlc2VydmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChX
VEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZN
b3ZlKGJsZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRv
d0RhdGE7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9n
ZXR0ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFi
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9
IHZhbHVlKGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAg
aWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5p
c1ZhbGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICBy
ZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEp
OworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9t
Q29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisK
KyAgICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQK
KyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBm
aW5hbAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8g
IiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0
IENvbG9yJik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFs
aWRDb2xvciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBw
dWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29u
c3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VV
bmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAg
ICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHBy
b3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXli
ZUludmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENv
bG9yJiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVl
PFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikp
CisgICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAg
ICB7CisgICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dy
YXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7Cisg
ICAgfQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBt
X3dyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zp
c2l0ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisK
KyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxl
bmQoYSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxv
Z0JsZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRl
OgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dy
YXBwZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+
IG1fdmlzaXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFu
aW1hdGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAg
ICB9CisgICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgp
ID0gZGVmYXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxM
YXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19E
SVNBQkxFRAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3Vs
dCwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7
CisjZW5kaWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXIgOiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0
dGVyKSgpIGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UocHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciog
YikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVy
KSgpOworICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3Vs
dCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRp
b25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHko
KSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQg
IiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3Mp
IDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVk
OgorICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3Qs
IHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1f
c2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExh
eWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChi
LT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCks
IHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwg
Z2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46
OnByb3BlcnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAi
IDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisg
ICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBG
aWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRl
cikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdl
IChGaWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9y
aWdpblNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikK
KyAgICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmln
aW5HZXR0ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNl
dHRlcikKKyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRv
TGVuZ3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3Ro
Jj46Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4q
bV9vcmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdl
dHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3Ro
ICYmIGZyb21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxs
TGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAg
IExlbmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVk
Z2UgPSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4q
bV9vcmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9F
ZGdlKSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNh
bGMgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisg
ICAgICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aChmcm9tTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2Up
IHsKKyAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xl
bmd0aCh0b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShm
cm9tRWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUg
dG8gdGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAoZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xl
bmd0aCwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBs
b2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcg
IiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkg
PDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1i
ZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQp
KTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1f
bGVuZ3RoU2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdl
KTsKKyAgICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xh
c3MgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZp
bGxMYXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAg
IH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXll
ciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShG
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAg
ICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFs
dWUoYSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0K
KyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJl
ZlB0cjxUPiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIgOiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdl
PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVy
U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUlt
YWdlKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0
ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1f
Z2V0dGVyKSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7
CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmls
bExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlO
YW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1
ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlm
Cit9OworCitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNH
ZXR0ZXIpKCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6Kkxh
eWVyc0FjY2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nl
c3NvcikKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQor
ICAgICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vz
c29yKGFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3Bl
cnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+
KHByb3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlv
biwgJkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91
bmRYT3JpZ2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9w
ZXJ0eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZG
aWxsTGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9y
aWdpbiwgRWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgor
ICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxM
YXllclByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNp
emVMZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBt
X2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFn
ZVByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVy
OjpzZXRJbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0
byogZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRv
TGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxh
eWVyICYmIHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7Cisg
ICAgICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgp
OworICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAg
ICAgYXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAg
ICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1f
ZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBi
TGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOwor
ICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXll
ciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xh
eWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0
dGVyKSgpOworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0
ZXIpKCk7CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsK
KyAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXll
ciwgYUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXll
ci0+bmV4dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAg
ICAgICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXll
cnNHZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nl
c3NvcjsKK307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBw
ZXJzKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisg
ICAgICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwg
IWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFw
cGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVx
dWFscyhhLCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFw
cGVycykKKyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jl
c3MpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUq
IGRzdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+
bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25z
dCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7
Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFByb3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdy
b3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5r
KCk7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwg
Yi0+ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxl
bmRGdW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7Cisg
ICAgICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygp
LCBiLT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0
U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9
CisjZW5kaWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJv
cCwgU1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwg
Q29sb3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVy
KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2Vl
biBTVkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBl
dmVyeXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVy
d2lzZQorICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZv
cmV2ZXIuCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50
VHlwZTo6UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsK
KworICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7
CisgICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRv
Q29sb3IgPSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29s
b3I7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRU
eXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChi
LT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVy
KSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAg
ICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0
dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAg
IH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2lu
Zy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVu
ZGluZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1Bh
aW50VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBD
b2xvciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJT
dHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFw
cGVyRm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0
aW9uVmFsdWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJT
dHlsZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1
cm4gZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERl
c2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8t
PmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50
OworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAg
ICAgICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAg
ICAgaWYgKGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVz
cyA8IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsK
KworICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAg
ICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8g
YmxlbmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9G
b250SXRhbGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZv
bnRJdGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywg
cHJvZ3Jlc3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9
IGRzdC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlw
dGlvbiA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0
YWxpYyhibGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHls
ZUF4aXMoYmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0
ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFu
aW1hdGlvbldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4g
TWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENT
U0FuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJl
dHVybiBtYXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3Jh
cHBlckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAg
IGlmIChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENT
U1Byb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWdu
ZWQgd3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAg
ICAgaWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFw
cGVyc1t3cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6
ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXAoKTsKKyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisK
KyAgICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0
eUlEIC0gZmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwor
ICAgIHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlcklu
ZGV4ID0gVUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8
Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0
aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAv
LyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNv
bnMgYW5kIGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFi
bGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0
eWxlOjpzZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwK
KyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRl
clN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZS
ZW5kZXJTdHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0V2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
TWluV2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lk
dGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lk
dGgsICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAor
CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZS
ZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHls
ZTo6bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6
bWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5
bGU6OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9w
V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyVG9wV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2lu
TGVmdCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdp
blJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJn
aW5Ub3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJn
aW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6
OnBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0
eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZS
ZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9t
KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRl
clN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3Vu
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Jh
Y2tncm91bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVy
cywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRl
clN0eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSks
CisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0
TWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNr
SW1hZ2UpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFy
aWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGlj
ZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJJbWFnZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
PExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAg
ICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZS
ZW5kZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJ
bWFnZVNvdXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNl
SW1hZ2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNr
Qm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcg
RmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgs
ICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNr
Z3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBG
aWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5k
TGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxs
TGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJl
bmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAor
ICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1
cmVNYXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6
ZSwgJlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5
bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAor
ICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1By
b3BlcnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxH
YXBMZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRl
clN0eWxlOjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVk
IHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50
LCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5X
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcs
ICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0
SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxl
Ojp2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJT
cGFjaW5nKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5Wklu
ZGV4LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVj
aWZpZWRaSW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9w
ZXJ0eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBo
YW5zKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRv
d3MsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVu
ZGVyU3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdo
dCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGlu
ZU9mZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVPZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2lu
ZywgJlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRl
bnQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJz
cGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJT
dHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3Jp
Z2luWCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJz
cGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVy
U3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5z
Zm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAm
UmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
T3JpZ2luWSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVy
U3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJUb3BMZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0
eWxlOjpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdo
dFJhZGl1cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpi
b3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRS
YWRpdXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhT
aXplPihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9w
ZXJ0eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpYmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhv
dXRSZXR1cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRl
clN0eWxlOjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0
ZWRPcGFjaXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5z
Zm9ybSgpLAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQ
cm9wZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0Rmls
dGVyKSwKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHls
ZTo6YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2Vu
ZGlmCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNv
bG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
c2V0QXBwbGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQ
YXRoKENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJT
dHlsZTo6c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShD
U1NQcm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5k
ZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAm
UmVuZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNo
YXBlSW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCks
CisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpj
b2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0
ZWRMaW5rQ29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0
ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZp
bGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZp
c2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRG
aWxsQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3Is
ICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXli
ZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJS
aWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxl
Ojp2aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Qm9yZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVj
dGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3Is
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
Qm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGlu
ZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0
bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKwor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAm
UmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93
LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywg
JlJlbmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAor
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZS
ZW5kZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9w
YWNpdHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJv
a2VQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRTdHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXks
ICZSZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURh
c2hBcnJheSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
U3Ryb2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVy
U3R5bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpz
ZXRDeCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwg
JlJlbmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJT
dHlsZTo6c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlSeCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwg
JlJlbmRlclN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpz
dHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5k
ZXJTdHlsZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZs
b29kQ29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9v
ZENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eVN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNl
dFN0b3BPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yKENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGln
aHRpbmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hp
ZnQsICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJh
c2VsaW5lU2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3Ro
VmFsdWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVy
U3R5bGU6OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250
VmFyaWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAm
UmVuZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdl
aWdodCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWln
aHQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NT
UHJvcGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0
eWxlOjpzZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5
bGUoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cz4oQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0
RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4o
Q1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxp
bmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsK
KyAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBX
VEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisg
ICAgc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRp
ZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3Vu
ZC1jb2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAv
LyBmb3IgZm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2ssIC8vIGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAg
ICAgICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJS
YWRpdXMsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3Bl
cnR5Qm9yZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBm
b3IgbGlzdC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAg
Q1NTUHJvcGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5S
dWxlLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NT
UHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1h
dGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAg
Q1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0
aWVzIHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAg
Ly8KKyAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0
Qm94UmVmbGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAg
bV9wcm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisg
ICAgQ09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5p
bWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmlt
YXRhYmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlX
cmFwcGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRp
ZXNDb3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8g
Rmlyc3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhl
IG1hcCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhl
bS4KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9w
ZXJ0aWVzQ291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KiB3cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAg
ICAgbV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Q
cm9wZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkg
eworICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5k
UHJvcGVydGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9w
ZXJ0eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1
dG8gbG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJ
bmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdy
YXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFw
cGVySW5kZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5k
KG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9y
dGhhbmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVy
cykpKTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFi
bGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBn
YXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4mIHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFw
cGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3Jh
cHBlciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3Jh
cHBlcio+KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChh
dXRvJiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkg
eworICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0
eSwgY3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9
PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKGNvbnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5
KCkpOworCisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdl
IG5lZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlv
bjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IENTU1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJU
KHByb3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAg
ICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3Mp
OworI2VuZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3Bl
cnR5QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHBy
b3ApOworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5
SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6
c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVy
ID8gd3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5v
dGU6IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5z
aXRpb25BdFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRp
b246OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQ
cm9wZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRp
ZXMpOworCisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRl
ZChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0g
Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJv
cGVydHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5j
YW5JbnRlcnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5
SUQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9u
YWw8Ym9vbD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBl
ck1hcCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsK
KworICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAg
IGlzU2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJu
IHdyYXBwZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0
TnVtUHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBl
ck1hcDo6c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgw
YzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJv
cGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0
ZWQoQ1NTUHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1By
b3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7Cisg
ICAgc3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBD
U1NQcm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1No
b3J0aGFuZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0
aWMgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1By
b3BlcnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0
byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQ
cm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlE
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFi
NWFkZmQwNmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEz
OWIwNTlmMWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1RyYW5zaXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0
aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7
CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwK
ICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1h
dGlvbiB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9w
ZXJ0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1h
dGlvbnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5p
ZGwKaW5kZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRl
NDllMjAyZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAq
LwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5z
aW9ucy10by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1X
ZWJBbmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50
ZXJmYWNlIERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGlu
ZSB0aW1lbGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9j
dW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4
YTUzNGMxZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0
YTc4ZWRlNTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVu
dE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAg
Ki8KIAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVu
c2lvbnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAg
IEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhp
biBEb2N1bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVu
dE9yU2hhZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25z
KCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGlt
ZWxpbmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRs
CmluZGV4IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEy
NTQ0MjU1ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBb
Ci0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93
LAogXSBpbnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAg
ICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxp
bmVPcHRpb25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0tleWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVm
ZmVjdC5pZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4u
ZjBmMzJiMGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBl
ZGVmIFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2Vi
QW5pbWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVP
YmplY3QsCiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNl
YzNmYTg0MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0
ZThkYTAwZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJB
bmltYXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24u
aWRsCkBAIC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwog
ICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMs
CiAgICAgSW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAg
ICBFeHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
V2ViQW5pbWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZj
OWE2ZDRhNTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiAr
NTAsMTEgQEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAg
fQogfTsKIAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21w
b3NpdGUgICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAx
Cit9OworCiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0
aW9uc01hcmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9
IExpc3RIYXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBh
YzBkODA1YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uMzY5YjFiZDZjMDZkMGM2NGVjNjIwOTZkZmZj
YTM4YmEzOGEyYTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMu
aCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNw
ZWN0UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAi
Q1NTQm9yZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94
Q29udGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEg
KzIyNDYsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVy
U3R5bGVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVy
ID0gZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5p
c0NvbXBvc2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJh
dGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICBpZiAoYXV0byB0
aW1lbGluZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAg
ICAgICBvd25lZFN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVu
ZGVyZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvd25lZFN0eWxlID0gcmVuZGVyZXIt
PmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIpOwor
ICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVy
dHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQp
KSB7CisgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0ZWRTdHlsZSgpOwogICAg
ICAgICBpZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBQc2V1ZG9JZDo6Tm9uZSAmJiAhZWxl
bWVudC5pc1BzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2Fj
aGVkIHBzZXVkbyBzdHlsZSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIGFuaW1hdGlvbiBoYXMgYmVl
biBydW4gYXQgbGVhc3Qgb25jZS4KICAgICAgICAgICAgIHJldHVybiBvd25lZFN0eWxlLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDkwOTZmMjY0Njc5MTMwYTc4NGE1MWE5YWRjOGJhZGViZWM3YzdhYzQuLjI5
NDBjNThiZjE3OGM1MjBhNjA5ZWIxYjczNzczOGViNjY5ZmRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJC
ZWZvcmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgpAQCAtMTk2Miw3ICsxOTYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJl
c29sdmVTdHlsZVR5cGUgdHlwZSkKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShTdHlsZVJl
Y2FsY1N0YXJ0LCBTdHlsZVJlY2FsY0VuZCk7CiAKICAgICBSZW5kZXJWaWV3OjpSZXBhaW50UmVn
aW9uQWNjdW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXcoKSk7Ci0g
ICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fZnJhbWUtPmxl
Z2FjeUFuaW1hdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHVwZGF0ZSBwZXIgdHJl
ZSBzY29wZS4KICAgICB7CkBAIC0yNDIyLDE5ICsyNDIwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmRp
ZEJlY29tZUN1cnJlbnREb2N1bWVudEluRnJhbWUoKQogICAgIC8vIGJlIG91dCBvZiBzeW5jIGlm
IHRoZSBET00gc3VzcGVuc2lvbiBzdGF0ZSBjaGFuZ2VkIHdoaWxlIHRoZSBkb2N1bWVudCB3YXMg
bm90IGluIHRoZSBmcmFtZSAocG9zc2libHkgaW4gdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNh
Y2hlLCBvciBzaW1wbHkgbmV3bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQot
ICAgICAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMo
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1l
bGluZXNDb250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNw
ZW5kQW5pbWF0aW9ucygpOwogICAgICAgICBzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9y
U3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
cmVzdW1lU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3Bl
bmRlZCk7Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAg
aWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0Nv
bnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQo
dGhpcyk7CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBt
X3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CiAKQEAg
LTI1MjgsOSArMjUyMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUo
KQogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5k
ZXRhY2hGcm9tRG9jdW1lbnQodGhpcyk7Ci0KICNpZiBVU0UoTElCV0VCUlRDKQogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBNb2R1bGVzL21lZGlhc3RyZWFtLgogICAgIGlm
IChMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkpIHsKQEAgLTMwNjYsOCArMzA1
NSw2IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICBpZiAoYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBsb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5z
dGFydEljb25Mb2FkaW5nKCk7CiAKLSAgICAgICAgZi0+bGVnYWN5QW5pbWF0aW9uKCkuc3RhcnRB
bmltYXRpb25zSWZOb3RTdXNwZW5kZWQodGhpcyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBiZSBkaXNwYXRjaGluZyBwZW5kaW5nIGV2ZW50cyBnbG9iYWxseSBvbiBhbGwgRG9j
dW1lbnRzIGhlcmUuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgZG8gdGhpcyB3aGVuIHRoZXJl
IGlzIGEgRnJhbWUsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIEpTIHJlZW50cmFuY3kKICAg
ICAgICAgLy8gYmVsb3cgU1ZHIGZvbnQgcGFyc2luZywgZm9yIGV4YW1wbGUuIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzYyNjk+CkBAIC01NDU0LDExICs1NDQxLDggQEAgdm9pZCBEb2N1bWVudDo6
cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgQVNTRVJUKG1fZnJhbWUp
OwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX3RpbWVs
aW5lc0NvbnRyb2xsZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3Vt
ZUFuaW1hdGlvbnMoKTsgIAotICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmlt
YXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgaWYgKG1fdGlt
ZWxpbmVzQ29udHJvbGxlcikKKyAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVB
bmltYXRpb25zKCk7CiAKICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhyZWFzb24pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKaW5kZXggYzEzMTI4YTRiZDQwNjU3NmJhMTBmMjIwM2I1OTRlMmQyZjA5
NmViNS4uYzE2OThmOWVkMWVmMjY3MDQwZjM0N2YxNTI5N2ViY2M1MDIzZTVjMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUu
aCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0
aW9uLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgpAQCAtMTE5LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRl
ICJWb2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJX
ZWJBbmltYXRpb25UeXBlcy5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJY
TGlua05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjI4NSw5ICsyMjg1LDYg
QEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1
bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNS
ZW1vdmVkKCp0aGlzKTsKIAotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmxlZ2FjeUFu
aW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOwotCiAjaWYgRU5BQkxFKFdIRUVMX0VW
RU5UX0xBVENISU5HKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFtZS0+cGFnZSgpLT5zY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1l
bnQuY3BwCmluZGV4IDE1ZDgxYzEwNmQ4MDkzNTNmMjFiZTdlYzg0ODNkZDg4Yjc2MjhiMzcuLmRh
ZDE1NjZjYzA2YTNkMTRkNmJjYjdjNTA3NmVjYzE4YjZjN2E3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UHNldWRvRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudFRp
bWVsaW5lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05Myw5
ICs5Miw2IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgaWYg
KGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAgICAgICAg
IHRpbWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAgICAgCi0gICAgaWYgKGF1dG8q
IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0
aW9uKCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICAgICBtX2hvc3RFbGVtZW50ID0gbnVs
bHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCmluZGV4IGNhZGZiOTY5YjJhNGE0
Y2Y5YjU4MThkNzM0NDY2YmEzNGJlYjYyODMuLjQyMDM2Nzc1MmRiODAyMjY5YmVkODJmYTQ1OGNj
NGQ5OTU0ZWY1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKQEAgLTM0LDMgKzM0LDQg
QEAKIAogU2hhZG93Um9vdCBpbmNsdWRlcyBEb2N1bWVudE9yU2hhZG93Um9vdDsKIFNoYWRvd1Jv
b3QgaW5jbHVkZXMgSW5uZXJIVE1MOworIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9DYWNoZWRGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1l
LmNwcAppbmRleCA0Njk4NTc0ZDMyNTA1ZTZmOWM1YzNhMWNiYWNhYmZlYjJkMGQ0MWRjLi44ZGUy
NmUxYmMxNTMzZmQwYjNmMDc0ZjA2YjFmMzRkM2U4MGI4OThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNhY2hlZEZy
YW1lLmgiCiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgpAQCAtMjcz
LDggKzI3Miw2IEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmRlc3Ryb3koKQogCiAgICAgRnJhbWU6OmNs
ZWFyVGltZXJzKG1fdmlldy5nZXQoKSwgbV9kb2N1bWVudC5nZXQoKSk7CiAKLSAgICBtX3ZpZXct
PmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuZGV0YWNoRnJvbURvY3VtZW50KG1fZG9jdW1lbnQu
Z2V0KCkpOwotCiAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGNhbGwgcmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMgaGVyZT8gV2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gYmFjay9mb3J3YXJk
IGNhY2hlLCB0aGlzIG1ldGhvZCB3b24ndCB3b3JrCiAgICAgLy8gZnVsbHkgYW55d2F5LCBiZWNh
dXNlIHRoZSBkb2N1bWVudCB3b24ndCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgRE9NV2luZG93IG9i
amVjdCAoZHVlIHRvIGJlaW5nIGZyYW1lbGVzcykuCiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggM2M1YWU0NTg1NGM3MmJk
ZjZmYjczNjVlZjVmMjdmYWE2ZmRiZTVlYy4uYmQzNDk3YzFhMjIwMDE1NjU2ZTAwMjA0NWU0ZTYx
NzdjMzkzOThiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNs
dWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxl
U2hlZXQuaCIKQEAgLTE1Niw3ICsxNTUsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAg
ICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxl
cj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9z
Y3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigq
dGhpcykpCiAgICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMp
KQogICAgICwgbV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKICAg
ICAsIG1fZXZlbnRIYW5kbGVyKG1ha2VVbmlxdWVSZWY8RXZlbnRIYW5kbGVyPigqdGhpcykpCkBA
IC03MzcsMTEgKzczNSw4IEBAIHZvaWQgRnJhbWU6OmNsZWFyVGltZXJzKEZyYW1lVmlldyAqdmll
dywgRG9jdW1lbnQgKmRvY3VtZW50KQogewogICAgIGlmICh2aWV3KSB7CiAgICAgICAgIHZpZXct
PmxheW91dENvbnRleHQoKS51bnNjaGVkdWxlTGF5b3V0KCk7Ci0gICAgICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3Vt
ZW50LT50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgdGltZWxpbmVzLT5z
dXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZpZXctPmZy
YW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1
bWVudCk7CisgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC0+dGltZWxpbmVz
Q29udHJvbGxlcigpKQorICAgICAgICAgICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygp
OwogICAgICAgICB2aWV3LT5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnN0b3BBdXRvc2Nyb2xsVGlt
ZXIoKTsKICAgICB9CiB9CkBAIC0xMDI5LDExICsxMDI0LDggQEAgdm9pZCBGcmFtZTo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogCiAgICAgLy8gRnJhbWU6OmNsZWFyVGlt
ZXJzKCkgc3VzcGVuZGVkIGFuaW1hdGlvbnMgYW5kIHBlbmRpbmcgcmVsYXlvdXRzLgogCi0gICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMg
PSBtX2RvYy0+dGltZWxpbmVzQ29udHJvbGxlcigpKQotICAgICAgICAgICAgdGltZWxpbmVzLT5y
ZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxlZ2FjeUFuaW1hdGlvbigp
LnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2RvYy5nZXQoKSk7CisgICAgaWYgKGF1dG8q
IHRpbWVsaW5lcyA9IG1fZG9jLT50aW1lbGluZXNDb250cm9sbGVyKCkpCisgICAgICAgIHRpbWVs
aW5lcy0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgIGlmIChtX3ZpZXcpCiAgICAgICAgIG1fdmll
dy0+bGF5b3V0Q29udGV4dCgpLnNjaGVkdWxlTGF5b3V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5k
ZXggNjhmZGMxMTU1ZDkxM2VlY2YyNTcwNmFkOTg4OWI1MDIxZmFiZjJjNC4uNTBjNjVmNWU1YjA3
NTNjMWU2ZDMwN2IyMTNiNTIwMGM0NTBhYTMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtNjYsNyAr
NjYsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIERPTVdpbmRvdzsK
IGNsYXNzIERvY3VtZW50OwpAQCAtMTc0LDggKzE3Myw2IEBAIHB1YmxpYzoKICAgICBGcmFtZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0K
ICAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9j
dW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKLSAg
ICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSB7IHJldHVybiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7IH0KLSAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBs
ZWdhY3lBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0K
ICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdDsgfQogICAg
IGNvbnN0IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0
OyB9CiAKQEAgLTM0NSw3ICszNDIsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4g
bV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAg
VW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsK
IAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gbV9k
YXRhRGV0ZWN0aW9uUmVzdWx0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA3NWI5
ZTJiZmM5ZWFlM2UzNWJlZTE4ZmViZDQ5MWY0MGYzNjdjNjE2Li5kNDkyNDFlZjA4OGI4Mzc2MjU2
MDlkMmM2NWFiZjI4MzRkYTQxODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0z
MCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tG
b3J3YXJkQ2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
ICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpA
QCAtNTg2LDggKzU4NSw2IEBAIHZvaWQgRnJhbWVWaWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSgp
CiAKICAgICBBU1NFUlQoIW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fc2xv
d1JlcGFpbnRPYmplY3RzIHx8IG1fc2xvd1JlcGFpbnRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkp
OwotCi0gICAgQVNTRVJUKCFmcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLmhhc0FuaW1hdGlvbnMo
KSk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKQEAgLTQ0MTcsOCArNDQxNCw2IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXlvdXRB
bmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCkKICAgICAvLyBTdHlsZSB1cGRhdGVzIGNhbiB0cmln
Z2VyIHNjcmlwdCwgd2hpY2ggY2FuIGNhdXNlIHRoaXMgRnJhbWVWaWV3IHRvIGJlIGRlc3Ryb3ll
ZC4KICAgICBSZWY8RnJhbWVWaWV3PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAotICAgIEFuaW1h
dGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZmcmFtZSgpLmxlZ2FjeUFuaW1h
dGlvbigpKTsKLQogICAgIHVzaW5nIERlc2NlbmRhbnRzRGVxdWUgPSBEZXF1ZTxSZWY8RnJhbWVW
aWV3PiwgMTY+OwogICAgIGF1dG8gbmV4dFJlbmRlcmVkRGVzY2VuZGFudCA9IFt0aGlzXSAoRGVz
Y2VuZGFudHNEZXF1ZSYgZGVzY2VuZGFudHNEZXF1ZSkgLT4gUmVmUHRyPEZyYW1lVmlldz4gewog
ICAgICAgICBpZiAoZGVzY2VuZGFudHNEZXF1ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAppbmRleCA4YTZjMTQyODM3NjcwODk1
N2M3ZDM0MDQ5NWE2NTBhYTJmMDg0Nzc3Li5lYmM4NjUzMjc3NWFmY2IwNDgwOTdmMTYxNzc1ODg4
NDI5MWQxNDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91
dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29u
dGV4dC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVidWdQYWdlT3ZlcmxheXMuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMTg2LDcgKzE4NSw2IEBAIHZvaWQg
RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6bGF5b3V0KCkKICAgICBMYXlvdXRTY29wZSBsYXlvdXRT
Y29wZSgqdGhpcyk7CiAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoTGF5b3V0U3RhcnQsIExh
eW91dEVuZCk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTGF5b3V0KHZpZXco
KS5mcmFtZSgpKTsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9j
aygmdmlldygpLmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkpOwogICAgIFdlYWtQdHI8UmVuZGVy
RWxlbWVudD4gbGF5b3V0Um9vdDsKICAgICAKICAgICBtX2xheW91dFRpbWVyLnN0b3AoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCmluZGV4IGEwYTc3ZDI4ODM2NDgyMWM1MTBiMmQ1MTJiYTcwZTcyOWMyMWI2
ZDUuLmY5MjNiYTg5Mjk5YzAwOGUxMGYwZDI4ZWU4MGEzZjNmOTdiYWE5ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENsaWVudC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJDYWNoZVN0b3JhZ2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVy
LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC0xNjQ4LDkgKzE2NDcsNiBAQCB2b2lkIFBhZ2U6
OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShib29sIGlzTG93UG93ZXJNb2RlRW5hYmxlZCkKICAg
ICBtX3Rocm90dGxpbmdSZWFzb25zID0gbV90aHJvdHRsaW5nUmVhc29ucyBeIFRocm90dGxpbmdS
ZWFzb246Okxvd1Bvd2VyTW9kZTsKICAgICByZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIoKS5hZGp1
c3RSZW5kZXJpbmdVcGRhdGVGcmVxdWVuY3koKTsKIAotICAgIGlmICghUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpCi0gICAgICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnVwZGF0ZVRocm90
dGxpbmdTdGF0ZSgpOwotCiAgICAgdXBkYXRlRE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpOwog
fQogCkBAIC0yMTg1LDEzICsyMTgxLDEwIEBAIHZvaWQgUGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJu
YWwoYm9vbCBpc1Zpc2libGUpCiAgICAgICAgICAgICB2aWV3LT5zaG93KCk7CiAKICAgICAgICAg
aWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGltZWxpbmVzQ29udHJv
bGxlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zKCk7
CisgICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewor
ICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXND
b250cm9sbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+cmVzdW1lQW5pbWF0
aW9ucygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3JFYWNoRG9j
dW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewpAQCAtMjIwOSwxMyArMjIwMiwxMCBAQCB2
b2lkIFBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogCiAgICAgaWYg
KCFpc1Zpc2libGUpIHsKICAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmlt
YXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50
JiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0g
ZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0
aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChb
XSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVs
aW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkg
ewpAQCAtMjU2MCwyMSArMjU1MCwxNCBAQCB2b2lkIFBhZ2U6OnJlc2V0U2Vlbk1lZGlhRW5naW5l
cygpCiB2b2lkIFBhZ2U6OmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFu
Z2VkKCkKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3Vt
ZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9z
ZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+
cmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VD
U1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIG1haW5GcmFt
ZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkucmVzdW1l
QW5pbWF0aW9ucygpOwotICAgICAgICB9CisgICAgICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERv
Y3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRv
Y3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChtX3Nl
dHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRp
b25zKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCA5NGM4NzFlYjA5NGEz
Y2Q3MmU5YmZkY2Q5MTFjZWRhZTAyNTJiZWYyLi45ZjMyY2YxNWFjNDViMTJiYjA2OTRiYzdhMWEw
MGMyODE3YjRkZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaApAQCAtNjcsMTIgKzY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7IG1fYXJlTW9kZXJuTWVkaWFDb250
cm9sc0VuYWJsZWQgPSBhcmVFbmFibGVkOyB9CiAgICAgYm9vbCBtb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ7
IH0KIAotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7
IG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgPSBhcmVFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJB
bmltYXRpb25zRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJs
ZWQ7IH0KLQotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChi
b29sIGlzRW5hYmxlZCkgeyBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCA9
IGlzRW5hYmxlZDsgfQotICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgJiYgbV9pc1dlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ7IH0KLQogICAgIHZvaWQgc2V0V2ViQW5pbWF0
aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKGJvb2wgYXJlRW5hYmxlZCkgeyBtX2FyZVdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KICAg
ICBib29sIHdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOyB9CiAK
QEAgLTI5Myw4ICsyODcsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc01lbnVJdGVtRWxlbWVu
dEVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0RpcmVjdG9yeVVwbG9hZEVuYWJsZWQg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2FyZVdlYkFuaW1hdGlvbnNFbmFibGVkIHsgdHJ1ZSB9OwotICAg
IGJvb2wgbV9pc1dlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAg
ICAgYm9vbCBtX2FyZVdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2FyZVdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxl
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzSW1hZ2VCaXRtYXBFbmFibGVkIHsgdHJ1ZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRhZTc0MzU5NzdmYTkyNTBlYzEwYzE3Mzk0MTVk
ZTRjZDRmNTUzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDc4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJBbmltYXRpb25CYXNlLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NT
UHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1
ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBB
bmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24pCi0gICAgOiBtX2VsZW1lbnQoJmVsZW1lbnQpCi0gICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbigmY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9hbmltYXRp
b24oY29uc3RfY2FzdDxBbmltYXRpb24mPihhbmltYXRpb24pKQotewotICAgIC8vIENvbXB1dGUg
dGhlIHRvdGFsIGR1cmF0aW9uCi0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
ID4gMCkKLSAgICAgICAgbV90b3RhbER1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkg
KiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKTsKLX0KLQotQW5pbWF0aW9uQmFzZTo6fkFu
aW1hdGlvbkJhc2UoKSA9IGRlZmF1bHQ7Ci0KLWNvbnN0IFJlbmRlclN0eWxlJiBBbmltYXRpb25C
YXNlOjpjdXJyZW50U3R5bGUoKSBjb25zdAotewotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBy
ZXR1cm4gdW5hbmltYXRlZFN0eWxlKCk7Ci19Ci0KLVJlbmRlckVsZW1lbnQqIEFuaW1hdGlvbkJh
c2U6OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbGVtZW50ID8gbV9lbGVtZW50
LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpjbGVhcigp
Ci17Ci0gICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbiA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6
c2V0TmVlZHNTdHlsZVJlY2FsYyhFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghZWxlbWVu
dCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1lbnQoKS5iYWNrRm9yd2Fy
ZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBl
bGVtZW50LT5pbnZhbGlkYXRlU3R5bGUoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmR1
cmF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7Ci19
Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6cGxheVN0YXRlUGxheWluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltYXRpb25QbGF5U3RhdGU6OlBs
YXlpbmc7Ci19Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiYgYW5pbWF0aW9uKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+YW5p
bWF0aW9uc01hdGNoKGFuaW1hdGlvbik7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMg
Y29uc3QgY2hhciogbmFtZUZvclN0YXRlKEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlIHN0
YXRlKQotewotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlOjpOZXc6IHJldHVybiAiTmV3IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcjogcmV0dXJuICJTdGFydFdhaXRUaW1lciI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVB
dmFpbGFibGU6IHJldHVybiAiU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUiOwotICAgIGNhc2UgQW5p
bWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOiByZXR1cm4gIlN0
YXJ0V2FpdFJlc3BvbnNlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRl
OjpMb29waW5nOiByZXR1cm4gIkxvb3BpbmciOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5p
bWF0aW9uU3RhdGU6OkVuZGluZzogcmV0dXJuICJFbmRpbmciOwotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzogcmV0dXJuICJQYXVzZWROZXciOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRUaW1lcjogcmV0
dXJuICJQYXVzZWRXYWl0VGltZXIiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJQYXVzZWRXYWl0U3R5bGVB
dmFpbGFibGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNl
ZFdhaXRSZXNwb25zZTogcmV0dXJuICJQYXVzZWRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5p
bWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjogcmV0dXJuICJQYXVzZWRSdW4i
OwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OkRvbmU6IHJldHVybiAi
RG9uZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RmlsbGluZ0Zv
cndhcmRzOiByZXR1cm4gIkZpbGxpbmdGb3J3YXJkcyI7Ci0gICAgfQotICAgIHJldHVybiAiIjsK
LX0KLSNlbmRpZgotCi0jaWYgIUVSUk9SX0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciogbmFt
ZUZvclN0YXRlSW5wdXQoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCkK
LXsKLSAgICBzd2l0Y2ggKGlucHV0KSB7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZUlucHV0OjpNYWtlTmV3OiByZXR1cm4gIk1ha2VOZXciOwotICAgIGNhc2UgQW5pbWF0
aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb246IHJldHVybiAiU3Rh
cnRBbmltYXRpb24iOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1
dDo6UmVzdGFydEFuaW1hdGlvbjogcmV0dXJuICJSZXN0YXJ0QW5pbWF0aW9uIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZXJGaXJlZDogcmV0
dXJuICJTdGFydFRpbWVyRmlyZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGU6IHJldHVybiAiU3R5bGVBdmFpbGFibGUiOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0OiBy
ZXR1cm4gIlN0YXJ0VGltZVNldCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25T
dGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZDogcmV0dXJuICJMb29wVGltZXJGaXJlZCI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkOiBy
ZXR1cm4gIkVuZFRpbWVyRmlyZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGVJbnB1dDo6UGF1c2VPdmVycmlkZTogcmV0dXJuICJQYXVzZU92ZXJyaWRlIjsKLSAgICBj
YXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3VtZU92ZXJyaWRlOiBy
ZXR1cm4gIlJlc3VtZU92ZXJyaWRlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlv
blN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmc6IHJldHVybiAiUGxheVN0YXRlUnVubmluZyI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQ
YXVzZWQ6IHJldHVybiAiUGxheVN0YXRlUGF1c2VkIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbjogcmV0dXJuICJFbmRBbmltYXRpb24i
OwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0jZW5kaWYKLQotdm9pZCBBbmltYXRpb25CYXNl
Ojp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBh
cmFtKQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIElmIHdlIGdldCBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9u
IHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdhcmRsZXNzIG9mIHN0YXRlLgotICAg
IGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpNYWtlTmV3KSB7Ci0gICAgICAgIGlm
IChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWls
YWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwotICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5h
bWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3RhdGUg
PSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICBtX3N0YXJ0VGltZSA9IFdURjo6bnVsbG9w
dDsKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcmVxdWVz
dGVkU3RhcnRUaW1lID0gMDsKLSAgICAgICAgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRp
b24pIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24t
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZSgqdGhpcyk7Ci0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gTmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRU
aW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsK
LSAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRp
b25EdXJhdGlvbiA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0KLSAg
ICAgICAgaWYgKCFwYXVzZWQoKSkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiwgLTEpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlv
bikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAt
PiBEb25lIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpEb25lOwotICAgICAgICBlbmRBbmlt
YXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlv
blN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZSkgewotICAgICAgICAg
ICAgLy8gSWYgd2UgYXJlIGluIEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZSwgdGhl
IGFuaW1hdGlvbiB3aWxsIGdldCBjYW5jZWxlZCBiZWZvcmUgCi0gICAgICAgICAgICAvLyB3ZSBn
ZXQgYSByZXNwb25zZSwgc28gbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4KLSAgICAgICAgICAgIGVu
ZEFuaW1hdGlvbigpOwotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0
aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6RW5kaW5nKSB7Ci0gICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0
aW9uCi0gICAgICAgICAgICBzdGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBFeGVjdXRlIHN0YXRlIG1hY2hpbmUKLSAgICBzd2l0Y2ggKG1fYW5p
bWF0aW9uU3RhdGUpIHsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6TmV3OgotICAgICAg
ICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9u
IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcgfHwgaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAg
ICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uIHx8IGlu
cHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAg
ICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
OwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gU3RhcnRXYWl0VGltZXIiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSBwYXVzaW5nIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkTmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsKLSAg
ICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0
V2FpdFRpbWVyOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0YXJ0VGltZXJGaXJlZCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5
U3RhdGVQYXVzZWQpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49
IDApOwotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUg
YW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQg
dGltZQotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUg
JXMgLT4gU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUgKHRpbWUgaXMgJWYpIiwgdGhpcywgbmFtZUZv
clN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAgICAgICAgICAgbV9hbmlt
YXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZTsKLSAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCi0gICAg
ICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFbGVtZW50Q2hhbmdlVG9EaXNw
YXRjaCgqbV9lbGVtZW50KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKCFwYXVzZWQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3Ig
dGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUgYW5kIHdlIGdvdCBhIHBhdXNlLiBDYW5jZWwgdGhlIHRp
bWVyLCBwYXVzZSBhbmQgd2FpdAotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIl
cCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRXYWl0VGltZXIiLCB0aGlzLCBuYW1lRm9yU3Rh
dGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUg
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVyOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0eWxlQXZhaWxhYmxlIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlT
dGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhh
cyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byBy
ZXNwb25kIHdpdGggc3RhcnQgdGltZQotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0UmVzcG9uc2UgKHRpbWUgaXMgJWYpIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAgICAg
ICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25z
ZTsKLQotICAgICAgICAgICAgICAgIG92ZXJyaWRlQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAg
ICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIGlmIChvdmVycmlk
ZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgdHJ5IHRvIHN0YXJ0IGFj
Y2VsZXJhdGVkIGFuaW1hdGlvbnMgaWYgd2UgYXJlIG92ZXJyaWRkZW4gYW5kCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGp1c3QgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGF0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdh
aXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0UmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQg
PSAwOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgZm9yICdhbmltYXRpb24t
ZGVsYXknIGlzIG5lZ2F0aXZlIHRoZW4gdGhlIGFuaW1hdGlvbiBhcHBlYXJzIHRvIGhhdmUgc3Rh
cnRlZCBpbiB0aGUgcGFzdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT5k
ZWxheSgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVPZmZzZXQgPSAtbV9hbmlt
YXRpb24tPmRlbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0
QW5pbWF0aW9uKHRpbWVPZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRl
QW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFydGVkKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBzdHls
ZSB0byBiZSBhdmFpbGFibGUgYW5kIHdlIGdvdCBhIHBhdXNlLiBQYXVzZSBhbmQgd2FpdAotICAg
ICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0g
ICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQ
YXVzZWRXYWl0U3R5bGVBdmFpbGFibGUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25T
dGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOgot
ICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGlt
ZVNldCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwot
Ci0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1l
U2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID4gLTAuMDAxKTsgLy8gU29tZXRp
bWVzIENvcmUgQW5pbWF0aW9uIGdpdmVzIHVzIGEgYmVnaW5UaW1lIHNsaWdodGx5IGludG8gdGhl
IGZ1dHVyZS4KLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0
YXRlICVzIC0+IFN0YXJ0VGltZVNldCAodGltZSBpcyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUo
bV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
YSBzdGFydCB0aW1lLCBzZXQgaXQsIHVubGVzcyB0aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkgc2V0
Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0YXJ0VGltZSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmFs
dWUgZm9yICdhbmltYXRpb24tZGVsYXknIGlzIG5lZ2F0aXZlIHRoZW4gdGhlIGFuaW1hdGlvbiBh
cHBlYXJzIHRvIGhhdmUgc3RhcnRlZCBpbiB0aGUgcGFzdC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fYW5pbWF0aW9uLT5kZWxheSgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gbV9zdGFydFRpbWUudmFsdWUoKSArIG1fYW5pbWF0aW9uLT5kZWxheSgpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGtub3cg
dGhlIHN0YXJ0IHRpbWUsIGZpcmUgdGhlIHN0YXJ0IGV2ZW50LgotICAgICAgICAgICAgICAgIG9u
QW5pbWF0aW9uU3RhcnQoMCk7IC8vIFRoZSBlbGFwc2VkVGltZSBpcyAwLgotCi0gICAgICAgICAg
ICAgICAgLy8gRGVjaWRlIHdoZXRoZXIgdG8gZ28gaW50byBsb29waW5nIG9yIGVuZGluZyBzdGF0
ZQotICAgICAgICAgICAgICAgIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBEaXNwYXRjaCB1cGRhdGVTdHlsZUlmTmVlZGVkIHNvIHdlIGNhbiBzdGFy
dCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAg
ICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
ZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9lbGVtZW50KTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgd2FpdGluZyBmb3Ig
YSBzdGFydCByZXNwb25zZS4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQuIFdoZW4gCi0g
ICAgICAgICAgICAgICAgLy8gd2UgdW5wYXVzZSwgd2Ugd2lsbCBhY3QgYXMgdGhvdWdoIHRoZSBz
dGFydCB0aW1lciBqdXN0IGZpcmVkCi0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBwYXVzZUFuaW1hdGlvbihi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkpOwotICAg
ICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1
c2VkV2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsK
LSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNl
ZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFuaW1hdGlvblN0YXRlOjpMb29waW5nOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZCkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IExvb3BUaW1lckZpcmVkICh0aW1lIGlzICVmKSIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAg
ICAgICAgLy8gTG9vcCB0aW1lciBmaXJlZCwgbG9vcCBhZ2FpbiBvciBlbmQuCi0gICAgICAgICAg
ICAgICAgb25BbmltYXRpb25JdGVyYXRpb24ocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8g
RGVjaWRlIHdoZXRoZXIgdG8gZ28gaW50byBsb29waW5nIG9yIGVuZGluZyBzdGF0ZQotICAgICAg
ICAgICAgICAgIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcuIENh
bmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUg
PSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBwYXVzZUFuaW1h
dGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkp
OwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gUGF1c2VkUnVuIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1h
dGlvblN0YXRlOjpFbmRpbmc6Ci0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgICAgICAgICBpZiAo
aW5wdXQgIT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCAmJiBpbnB1dCAhPSBB
bmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJTdGF0ZSBpcyBBbmltYXRpb25TdGF0ZTo6RW5kaW5nLCBidXQgaW5wdXQgaXMgbm90
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQgb3IgQW5pbWF0aW9uU3RhdGVJbnB1
dDo6UGxheVN0YXRlUGF1c2VkLiBJdCBpcyAlcy4iLCBuYW1lRm9yU3RhdGVJbnB1dChpbnB1dCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
RW5kVGltZXJGaXJlZCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKLSAg
ICAgICAgICAgICAgICAvLyBFbmQgdGltZXIgZmlyZWQsIGZpbmlzaCB1cAotICAgICAgICAgICAg
ICAgIG9uQW5pbWF0aW9uRW5kKHBhcmFtKTsKLQotICAgICAgICAgICAgICAgIExPRyhBbmltYXRp
b25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRG9uZSAodGltZSBpcyAlZikiLCB0aGlzLCBu
YW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBt
X2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9hbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBGaWxsaW5nRm9yd2Fy
ZHMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpGaWxsaW5nRm9y
d2FyZHM7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBGaXJlIG9mZiBhbm90aGVyIHN0eWxlIGNoYW5nZSBzbyB3ZSBjYW4gc2V0IHRoZSBmaW5hbCB2
YWx1ZQotICAgICAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRF
bGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9lbGVtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdo
aWxlIHJ1bm5pbmcuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0Ci0gICAgICAgICAgICAg
ICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAg
ICAgICBwYXVzZUFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRU
aW1lLnZhbHVlT3IoMCkpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkUnVuIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0
aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFJ1bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHx0aGlzfCBt
YXkgYmUgZGVsZXRlZCBoZXJlCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVyOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcpOwotICAgICAgICAgICAgQVNT
RVJUKHBhdXNlZCgpKTsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKLSAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWUudmFsdWVPcigwKSArIGJlZ2luQW5pbWF0aW9u
VXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUudmFsdWVPcigwKTsKLSAgICAgICAgICAgIG1fcGF1
c2VUaW1lID0gV1RGOjpudWxsb3B0OwotCi0gICAgICAgICAgICAvLyB3ZSB3ZXJlIHdhaXRpbmcg
Zm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJlLCBnbyBiYWNrIGFuZCB3YWl0IGFnYWluCi0gICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1h
dGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRl
TWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiwgMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OgotICAg
ICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2U6Ci0gICAgICAgIGNh
c2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZToKLSAgICAgICAgY2Fz
ZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOgotICAgICAgICAgICAgLy8gV2UgdHJlYXQgdGhl
c2UgdHdvIGNhc2VzIHRoZSBzYW1lLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQsIHdoZW4g
d2UgYXJlIGluCi0gICAgICAgICAgICAvLyBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFJlc3Bv
bnNlLCB3ZSBkb24ndCB5ZXQgaGF2ZSBhIHZhbGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAwIHRv
IHN0YXJ0QW5pbWF0aW9uLgotICAgICAgICAgICAgLy8gV2hlbiB0aGUgQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lU2V0IGNvbWVzIGluIGFuZCB3ZSB3ZXJlIGluIEFuaW1hdGlvblN0YXRl
OjpQYXVzZWRSdW4sIHdlIHdpbGwgbm90aWNlCi0gICAgICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
YWxyZWFkeSBzZXQgdGhlIHN0YXJ0VGltZSBhbmQgd2lsbCBpZ25vcmUgaXQuCi0gICAgICAgICAg
ICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkIHx8
IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcgfHwgaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKTsKLSAgICAgICAgICAgIEFTU0VSVChwYXVzZWQo
KSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5
U3RhdGVSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldykgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
ZXJlIHBhdXNlZCBiZWZvcmUgd2UgZXZlbiBzdGFydGVkLCBhbmQgbm93IHdlJ3JlIHN1cHBvc2Vk
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXJ0LCBzbyBqdW1wIGJhY2sgdG8gdGhlIE5l
dyBzdGF0ZSBhbmQgcmVzZXQuCi0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gQW5pbWF0aW9uU3RhdGU6Ok5ldyIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0
aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgICAgICAgICBtX3Bh
dXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVN
YWNoaW5lKGlucHV0LCBwYXJhbSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKLSAgICAg
ICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
UnVuKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lLnZhbHVl
T3IoMCkgKyBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcGF1c2VUaW1lLnZhbHVlT3Io
MCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGlt
ZSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLQot
ICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRXYWl0U3R5bGVBdmFpbGFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSIs
IHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFp
bGFibGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2Ugd2VyZSBlaXRoZXIgcnVubmluZyBvciB3YWl0aW5nIGZvciBhIGJlZ2luIHRpbWUgcmVzcG9u
c2UgZnJvbSB0aGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgd2F5
IHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYW5pbWF0aW9uIChwb3NzaWJseSB3aXRoIGFuIG9mZnNl
dCBpZiB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBoYWQgYWxyZWFkeSBiZWVuIHJ1bm5pbmcp
IGFuZCB3YWl0IGZvciBpdCB0byBzdGFydC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAg
ICAgICBpZiAob3ZlcnJpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
b24ndCB0cnkgdG8gc3RhcnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJp
ZGRlbiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgbW92ZSBvbiB0byB0aGUg
bmV4dCBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0YXJ0VGltZVNldCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2FuaW1hdGlvblN0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2UpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0IHdlIGdvdCB0aGUgY2Fs
bGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiBzdGFy
dGVkLgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgc3RhcnQgdGltZSBhbmQganVz
dCBtb3ZlIGludG8gdGhlIHBhdXNlZC1ydW4gc3RhdGUuCi0gICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4gKHRpbWUgaXMgJWYp
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW47Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKCFtX3N0YXJ0VGltZSk7Ci0gICAgICAgICAgICAgICAgbV9z
dGFydFRpbWUgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IG1fcGF1c2VU
aW1lLnZhbHVlT3IoMCkgKyBwYXJhbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZE5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRXYWl0U3R5bGVBdmFpbGFibGUpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5p
bWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5
bGVBdmFpbGFibGUpOwotCi0gICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2VkIGJ1dCB3ZSBnb3Qg
dGhlIGNhbGxiYWNrIHRoYXQgbm90aWZpZXMgdXMgdGhhdCBzdHlsZSBoYXMgYmVlbiB1cGRhdGVk
LgotICAgICAgICAgICAgLy8gV2UgbW92ZSB0byB0aGUgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdh
aXRSZXNwb25zZSBzdGF0ZQotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRp
b25TdGF0ZSAlcyAtPiBQYXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9h
bmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2U7Ci0gICAgICAgICAgICBvdmVycmlkZUFuaW1hdGlv
bnMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpG
aWxsaW5nRm9yd2FyZHM6Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OkRvbmU6Ci0gICAg
ICAgICAgICAvLyBXZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgd2UgYXJlIGRl
bGV0ZWQKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBBbmltYXRpb25CYXNl
OjpmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKQotewotICAgIGlmICghbV9jb21wb3NpdGVB
bmltYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZv
ciB0aGUgZGVsYXkgdGltZSB0byBleHBpcmUgYW5kIGl0IGhhcywgZ28gdG8gdGhlIG5leHQgc3Rh
dGUKLSAgICBpZiAobV9hbmltYXRpb25TdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
VGltZXIgJiYgbV9hbmltYXRpb25TdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyAmJiBt
X2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRvIGtlZXAgYSByZWYgdG8gdGhlIHRo
aXMgcG9pbnRlciwgYmVjYXVzZSBpdCBjb3VsZCBnZXQgZGVzdHJveWVkCi0gICAgLy8gZHVyaW5n
IGFuIGFuaW1hdGlvbiBjYWxsYmFjayB0aGF0IG1pZ2h0IGdldCBjYWxsZWQuIFNpbmNlIHRoZSBv
d25lciBpcyBhIENvbXBvc2l0ZUFuaW1hdGlvbgotICAgIC8vIGFuZCBpdCByZWYgY291bnRzIHRo
aXMgb2JqZWN0LCB3ZSB3aWxsIGtlZXAgYSByZWYgdG8gdGhhdCBpbnN0ZWFkLiBUaGF0IHdheSB0
aGUgQW5pbWF0aW9uQmFzZQotICAgIC8vIGNhbiBzdGlsbCBhY2Nlc3MgdGhlIHJlc291cmNlcyBv
ZiBpdHMgQ29tcG9zaXRlQW5pbWF0aW9uIGFzIG5lZWRlZC4KLSAgICBSZWY8QW5pbWF0aW9uQmFz
ZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgUmVmPENvbXBvc2l0ZUFuaW1hdGlvbj4gcHJv
dGVjdENvbXBvc2l0ZUFuaW1hdGlvbigqbV9jb21wb3NpdGVBbmltYXRpb24pOwotICAgIAotICAg
IC8vIENoZWNrIGZvciBzdGFydCB0aW1lb3V0Ci0gICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyKSB7Ci0gICAgICAgIGlmIChiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVkU3RhcnRUaW1lID49IG1fYW5pbWF0aW9uLT5k
ZWxheSgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0YXJ0VGltZXJGaXJlZCwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBk
b3VibGUgZWxhcHNlZER1cmF0aW9uID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApOwotCi0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gZW5zdXJlIHRo
YXQgZWxhcHNlZER1cmF0aW9uIGlzIG5ldmVyIDwgMC4gSWYgaXQgaXMsIHRoaXMgc3VnZ2VzdHMg
dGhhdAotICAgIC8vIHdlIGhhZCBhIHJlY2FsY1N0eWxlKCkgb3V0c2lkZSBvZiBiZWdpbkFuaW1h
dGlvblVwZGF0ZSgpL2VuZEFuaW1hdGlvblVwZGF0ZSgpLgotICAgIC8vIEFsc28gY2hlY2sgaW4g
Z2V0VGltZVRvTmV4dEV2ZW50KCkuCi0gICAgZWxhcHNlZER1cmF0aW9uID0gc3RkOjptYXgoZWxh
cHNlZER1cmF0aW9uLCAwLjApOwotICAgIAotICAgIC8vIENoZWNrIGZvciBlbmQgdGltZW91dAot
ICAgIGlmIChtX3RvdGFsRHVyYXRpb24gJiYgZWxhcHNlZER1cmF0aW9uID49IG1fdG90YWxEdXJh
dGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIC8vIFdlIG1heSBzdGlsbCBiZSBpbiBBbmltYXRpb25T
dGF0ZTo6TG9vcGluZyBpZiB3ZSd2ZSBtYW5hZ2VkIHRvIHNraXAgYQotICAgICAgICAvLyB3aG9s
ZSBpdGVyYXRpb24sIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGp1bXAgdG8gdGhlIGVuZCBzdGF0
ZS4KLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBFbmRp
bmciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICBtX2Fu
aW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZzsKLQotICAgICAgICAvLyBGaXJl
IGFuIGVuZCBldmVudAotICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6RW5kVGltZXJGaXJlZCwgbV90b3RhbER1cmF0aW9uLnZhbHVlKCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIENoZWNrIGZvciBpdGVyYXRpb24gdGltZW91dAotICAgICAgICBpZiAo
IW1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0gICAgICAgICAgICAvLyBIYXNuJ3QgYmVlbiBz
ZXQgeWV0LCBzZXQgaXQKLSAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlvbkxlZnQgPSBtX2FuaW1h
dGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSk7Ci0gICAgICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9IGVsYXBzZWRE
dXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGVsYXBzZWREdXJhdGlvbiA+PSBtX25leHRJdGVyYXRpb25EdXJhdGlvbikgewotICAgICAgICAg
ICAgLy8gU2V0IHRvIHRoZSBuZXh0IGl0ZXJhdGlvbgotICAgICAgICAgICAgZG91YmxlIHByZXZp
b3VzID0gbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24udmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJs
ZSBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1
cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAgICAgICBtX25leHRJdGVy
YXRpb25EdXJhdGlvbiA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gU2VuZCB0aGUgZXZlbnQKLSAgICAgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZCwgcHJldmlvdXMp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVBsYXlT
dGF0ZShBbmltYXRpb25QbGF5U3RhdGUgcGxheVN0YXRlKQotewotICAgIGlmICghbV9jb21wb3Np
dGVBbmltYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdoZW4gd2UgZ2V0IGhlcmUs
IHdlIGNhbiBoYXZlIG9uZSBvZiA0IGRlc2lyZWQgc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQsIHN1
c3BlbmRlZCwgcGF1c2VkICYgc3VzcGVuZGVkLgotICAgIC8vIFRoZSBzdGF0ZSBtYWNoaW5lIGNh
biBiZSBpbiBvbmUgb2YgdHdvIHN0YXRlczogcnVubmluZywgcGF1c2VkLgotICAgIC8vIFNldCB0
aGUgc3RhdGUgbWFjaGluZSB0byB0aGUgZGVzaXJlZCBzdGF0ZS4KLSAgICBib29sIHBhdXNlID0g
cGxheVN0YXRlID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGF1c2VkIHx8IG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5pc1N1c3BlbmRlZCgpOwotCi0gICAgaWYgKHBhdXNlID09IHBhdXNlZCgpICYmICFp
c05ldygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVTdGF0ZU1hY2hpbmUocGF1c2Ug
PyAgQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkIDogQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6UGxheVN0YXRlUnVubmluZywgLTEpOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBBbmlt
YXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpCi17Ci0gICAgLy8gUmV0dXJucyB0aGUgdGlt
ZSBhdCB3aGljaCBuZXh0IHNlcnZpY2UgaXMgcmVxdWlyZWQuIFdURjo6bnVsbG9wdCBtZWFucyBu
byBzZXJ2aWNlIGlzIHJlcXVpcmVkLiAwIG1lYW5zCi0gICAgLy8gc2VydmljZSBpcyByZXF1aXJl
ZCBub3csIGFuZCA+IDAgbWVhbnMgc2VydmljZSBpcyByZXF1aXJlZCB0aGF0IG1hbnkgc2Vjb25k
cyBpbiB0aGUgZnV0dXJlLgotICAgIGlmIChwYXVzZWQoKSB8fCBpc05ldygpIHx8IHBvc3RBY3Rp
dmUoKSB8fCBmaWxsaW5nRm9yd2FyZHMoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAKLSAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0VGltZXIpIHsKLSAgICAgICAgZG91YmxlIHRpbWVGcm9tTm93ID0gbV9hbmltYXRpb24tPmRl
bGF5KCkgLSAoYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3JlcXVlc3RlZFN0YXJ0VGlt
ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1heChTZWNvbmRzIHsgdGltZUZyb21Ob3cgfSwgMF9z
KTsKLSAgICB9Ci0gICAgCi0gICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0gICAg
ICAgIAotICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgd2UgbmVlZCBzZXJ2aWNlIHJpZ2h0IGF3
YXkuCi0gICAgcmV0dXJuIDBfczsKLX0KLQotLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCB0aW1l
LCB0YWtpbmcgaW50byBhY2NvdW50IGRpcmVjdGlvbi4KLS8vIFRoZXJlIGlzIG5vIG5lZWQgdG8g
d29ycnkgYWJvdXQgaXRlcmF0aW9ucywgd2UgYXNzdW1lIHRoYXQgd2Ugd291bGQgaGF2ZQotLy8g
c2hvcnQgY2lyY3VpdGVkIGFib3ZlIGlmIHdlIHdlcmUgZG9uZS4KLQotZG91YmxlIEFuaW1hdGlv
bkJhc2U6OmZyYWN0aW9uYWxUaW1lKGRvdWJsZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBk
b3VibGUgb2Zmc2V0KSBjb25zdAotewotICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpID8gKGVsYXBzZWRUaW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkpIDogMTsKLSAgICAvLyBGSVhNRTogc3RhcnRUaW1lIGNhbiBiZSBiZWZvcmUgdGhlIGN1cnJl
bnQgYW5pbWF0aW9uICJmcmFtZSIgdGltZS4gVGhpcyBpcyB0byBzeW5jIHdpdGggdGhlIGZyYW1l
IHRpbWUKLSAgICAvLyBjb25jZXB0IGluIEFuaW1hdGlvblRpbWVDb250cm9sbGVyLiBTbyB3ZSBu
ZWVkIHRvIHNvbWVob3cgc3luYyB0aGUgdHdvLiBVbnRpbCB0aGVuLCB0aGUgcG9zc2libGUKLSAg
ICAvLyBlcnJvciBpcyBzbWFsbCBhbmQgd2lsbCBwcm9iYWJseSBub3QgYmUgbm90aWNlYWJsZS4g
VW50aWwgd2UgZml4IHRoaXMsIHJlbW92ZSB0aGUgYXNzZXJ0LgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjAzNwotICAgIC8vIEFTU0VSVChmcmFjdGlv
bmFsVGltZSA+PSAwKTsKLSAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCAwKQotICAgICAgICBmcmFj
dGlvbmFsVGltZSA9IDA7Ci0KLSAgICBpbnQgaW50ZWdyYWxUaW1lID0gc3RhdGljX2Nhc3Q8aW50
PihmcmFjdGlvbmFsVGltZSk7Ci0gICAgY29uc3QgaW50IGludGVncmFsSXRlcmF0aW9uQ291bnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKLSAgICBj
b25zdCBib29sIGl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCA9IG1fYW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpIC0gaW50ZWdyYWxJdGVyYXRpb25Db3VudDsKLSAgICBpZiAobV9hbmltYXRp
b24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRl
ICYmICFpdGVyYXRpb25Db3VudEhhc0ZyYWN0aW9uYWwpCi0gICAgICAgIGludGVncmFsVGltZSA9
IHN0ZDo6bWluKGludGVncmFsVGltZSwgaW50ZWdyYWxJdGVyYXRpb25Db3VudCAtIDEpOwotCi0g
ICAgZnJhY3Rpb25hbFRpbWUgLT0gaW50ZWdyYWxUaW1lOwotCi0gICAgaWYgKCgobV9hbmltYXRp
b24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
KSAmJiAoaW50ZWdyYWxUaW1lICYgMSkpCi0gICAgICAgIHx8ICgobV9hbmltYXRpb24tPmRpcmVj
dGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkg
JiYgIShpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgbV9hbmltYXRpb24tPmRpcmVjdGlv
bigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgZnJh
Y3Rpb25hbFRpbWUgPSAxIC0gZnJhY3Rpb25hbFRpbWU7Ci0KLSAgICBpZiAoc2NhbGUgIT0gMSB8
fCBvZmZzZXQpCi0gICAgICAgIGZyYWN0aW9uYWxUaW1lID0gKGZyYWN0aW9uYWxUaW1lIC0gb2Zm
c2V0KSAqIHNjYWxlOwotCi0gICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOwotfQotCi1kb3VibGUg
QW5pbWF0aW9uQmFzZTo6cHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0LCBjb25z
dCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgaWYgKHByZUFj
dGl2ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybiAxOwotCi0gICAgZG91YmxlIGVsYXBzZWRUaW1lID0gZ2V0RWxhcHNlZFRpbWUo
KTsKLQotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOwotICAg
IGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCi0gICAgICAgIGR1cmF0aW9u
ICo9IG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotCi0gICAgaWYgKGZpbGxpbmdGb3J3
YXJkcygpKQotICAgICAgICBlbGFwc2VkVGltZSA9IGR1cmF0aW9uOwotCi0gICAgZG91YmxlIGZy
YWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJhY3Rpb25hbFRpbWUoc2NhbGUsIGVsYXBzZWRUaW1lLCBv
ZmZzZXQpOwotCi0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCAmJiBl
bGFwc2VkVGltZSA+PSBkdXJhdGlvbikgewotICAgICAgICBpZiAoV1RGOjppc0ludGVncmFsKGZy
YWN0aW9uYWxUaW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmcmFjdGlvbmFsVGltZTsKLSAgICB9
Ci0KLSAgICBpZiAoIXRpbWluZ0Z1bmN0aW9uKQotICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IG1f
YW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgcmV0dXJuIHRpbWluZ0Z1bmN0aW9u
LT50cmFuc2Zvcm1UaW1lKGZyYWN0aW9uYWxUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7
Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6Z2V0VGltZVRvTmV4dEV2ZW50KFNlY29uZHMmIHRp
bWUsIGJvb2wmIGlzTG9vcGluZykgY29uc3QKLXsKLSAgICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5k
IG9yIGxvb3AgZXZlbnQgbmVlZHMgdG8gZmlyZQotICAgIGNvbnN0IGRvdWJsZSBlbGFwc2VkRHVy
YXRpb24gPSBzdGQ6Om1heChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1l
LnZhbHVlT3IoMCksIDAuMCk7Ci0gICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IDA7Ci0gICAgZG91
YmxlIG5leHRJdGVyYXRpb25UaW1lID0gbV90b3RhbER1cmF0aW9uLnZhbHVlT3IoMCk7Ci0KLSAg
ICBpZiAoIW1fdG90YWxEdXJhdGlvbiB8fCBlbGFwc2VkRHVyYXRpb24gPCBtX3RvdGFsRHVyYXRp
b24udmFsdWUoKSkgewotICAgICAgICBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSA+IDAgPyAobV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9kKGVsYXBzZWREdXJhdGlv
biwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpKSA6IDA7Ci0gICAgICAgIG5leHRJdGVyYXRpb25U
aW1lID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgIH0KLSAgICAKLSAgICBp
ZiAoIW1fdG90YWxEdXJhdGlvbiB8fCBuZXh0SXRlcmF0aW9uVGltZSA8IG1fdG90YWxEdXJhdGlv
bi52YWx1ZSgpKSB7Ci0gICAgICAgIC8vIFdlIGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQKLSAgICAg
ICAgQVNTRVJUKG5leHRJdGVyYXRpb25UaW1lID4gMCk7Ci0gICAgICAgIGlzTG9vcGluZyA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQKLSAgICAgICAg
aXNMb29waW5nID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHRpbWUgPSBTZWNvbmRzIHsgZHVy
YXRpb25MZWZ0IH07Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6Z29JbnRvRW5kaW5nT3JMb29w
aW5nU3RhdGUoKQotewotICAgIFNlY29uZHMgdDsKLSAgICBib29sIGlzTG9vcGluZzsKLSAgICBn
ZXRUaW1lVG9OZXh0RXZlbnQodCwgaXNMb29waW5nKTsKLSAgICBMT0coQW5pbWF0aW9ucywgIiVw
IEFuaW1hdGlvblN0YXRlICVzIC0+ICVzIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9u
U3RhdGUpLCBpc0xvb3BpbmcgPyAiTG9vcGluZyIgOiAiRW5kaW5nIik7Ci0gICAgbV9hbmltYXRp
b25TdGF0ZSA9IGlzTG9vcGluZyA/IEFuaW1hdGlvblN0YXRlOjpMb29waW5nIDogQW5pbWF0aW9u
U3RhdGU6OkVuZGluZzsKLX0KLSAgCi12b2lkIEFuaW1hdGlvbkJhc2U6OmZyZWV6ZUF0VGltZShk
b3VibGUgdCkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgIC8vIElmIHdlIGhhdmVuJ3Qg
c3RhcnRlZCB5ZXQsIG1ha2UgaXQgYXMgaWYgd2Ugc3RhcnRlZC4KLSAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3Rh
dGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U7Ci0gICAgICAgIG9uQW5pbWF0
aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lOjpub3coKSk7Ci0gICAgfQotCi0gICAgQVNT
RVJUKG1fc3RhcnRUaW1lKTsgLy8gSWYgbV9zdGFydFRpbWUgaXMgemVybywgd2UgaGF2ZW4ndCBz
dGFydGVkIHlldCwgc28gd2UnbGwgZ2V0IGEgYmFkIHBhdXNlIHRpbWUuCi0gICAgaWYgKHQgPD0g
bV9hbmltYXRpb24tPmRlbGF5KCkpCi0gICAgICAgIG1fcGF1c2VUaW1lID0gbV9zdGFydFRpbWUu
dmFsdWVPcigwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGF1c2VUaW1lID0gbV9zdGFydFRpbWUu
dmFsdWVPcigwKSArIHQgLSBtX2FuaW1hdGlvbi0+ZGVsYXkoKTsKLQotICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5zdXNwZW5kQW5p
bWF0aW9ucyhNb25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vjb25kcyhtX3BhdXNlVGltZS52YWx1ZSgp
KSk7Ci19Ci0KLWRvdWJsZSBBbmltYXRpb25CYXNlOjpiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSBjb25zdAotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkuYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNv
bmRzKCk7Ci19Ci0KLWRvdWJsZSBBbmltYXRpb25CYXNlOjpnZXRFbGFwc2VkVGltZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKHBhdXNlZCgpKSB7Ci0gICAgICAgIGRvdWJsZSBkZWxheU9mZnNldCA9ICgh
bV9zdGFydFRpbWUgJiYgbV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKSA/IG1fYW5pbWF0aW9uLT5k
ZWxheSgpIDogMDsKLSAgICAgICAgcmV0dXJuIG1fcGF1c2VUaW1lLnZhbHVlT3IoMCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApIC0gZGVsYXlPZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFtX3N0
YXJ0VGltZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAocG9zdEFjdGl2ZSgpIHx8IGZp
bGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gbV90b3RhbER1cmF0aW9uLnZhbHVlT3Io
MCk7Ci0KLSAgICByZXR1cm4gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGlt
ZS52YWx1ZU9yKDApOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OnNldEVsYXBzZWRUaW1lKGRv
dWJsZSB0aW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICBV
TlVTRURfUEFSQU0odGltZSk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6cGxheSgpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAotfQotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OnBhdXNlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0K
LXN0YXRpYyBib29sIGNvbnRhaW5zUm90YXRpb24oY29uc3QgVmVjdG9yPFJlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+PiYgb3BlcmF0aW9ucykKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJh
dGlvbiA6IG9wZXJhdGlvbnMpIHsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpjb21wdXRlVHJh
bnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJC
b3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAot
ewotICAgIEZsb2F0UmVjdCBmbG9hdEJvdW5kcyA9IGJvdW5kczsKLSAgICBGbG9hdFBvaW50IHRy
YW5zZm9ybU9yaWdpbjsKLSAgICAKLSAgICBib29sIGFwcGx5VHJhbnNmb3JtT3JpZ2luID0gY29u
dGFpbnNSb3RhdGlvbihzdHlsZS50cmFuc2Zvcm0oKS5vcGVyYXRpb25zKCkpIHx8IHN0eWxlLnRy
YW5zZm9ybSgpLmFmZmVjdGVkQnlUcmFuc2Zvcm1PcmlnaW4oKTsKLSAgICBpZiAoYXBwbHlUcmFu
c2Zvcm1PcmlnaW4pIHsKLSAgICAgICAgdHJhbnNmb3JtT3JpZ2luID0gcmVuZGVyZXJCb3gubG9j
YXRpb24oKSArIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS50cmFuc2Zvcm1PcmlnaW5Y
WSgpLCByZW5kZXJlckJveC5zaXplKCkpOwotICAgICAgICAvLyBJZ25vcmUgdHJhbnNmb3JtT3Jp
Z2luWiBiZWNhdXNlIHdlJ2xsIGJhaWwgaWYgd2UgZW5jb3VudGVyIGFueSAzRCB0cmFuc2Zvcm1z
LgotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkoLXRyYW5zZm9ybU9yaWdpbik7Ci0gICAgfQot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiBzdHlsZS50cmFuc2Zvcm0oKS5vcGVy
YXRpb25zKCkpIHsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFKSB7Ci0gICAgICAgICAgICAvLyBGb3Igbm93LCBqdXN0IHRyZWF0IHRo
aXMgYXMgYSBmdWxsIHJvdGF0aW9uLiBUaGlzIGNvdWxkIHRha2UgYW5nbGUgaW50byBhY2NvdW50
IHRvIHJlZHVjZSBpbmZsYXRpb24uCi0gICAgICAgICAgICBmbG9hdEJvdW5kcyA9IGJvdW5kc09m
Um90YXRpbmdSZWN0KGZsb2F0Qm91bmRzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgICAgIG9wZXJhdGlvbi0+
YXBwbHkodHJhbnNmb3JtLCByZW5kZXJlckJveC5zaXplKCkpOwotICAgICAgICAgICAgaWYgKCF0
cmFuc2Zvcm0uaXNBZmZpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChvcGVyYXRpb24tPnR5cGUoKSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1B
VFJJWCB8fCBvcGVyYXRpb24tPnR5cGUoKSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8z
RCkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5
cGUgdG9EZWNvbXA7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLmRlY29tcG9zZTIodG9EZWNv
bXApOwotICAgICAgICAgICAgICAgIC8vIEFueSByb3RhdGlvbiBwcmV2ZW50cyB1cyBmcm9tIHVz
aW5nIGEgc2ltcGxlIHN0YXJ0L2VuZCByZWN0IHVuaW9uLgotICAgICAgICAgICAgICAgIGlmICh0
b0RlY29tcC5hbmdsZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdEJvdW5kcyA9IHRyYW5zZm9ybS5tYXBSZWN0KGZs
b2F0Qm91bmRzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhcHBseVRyYW5zZm9ybU9y
aWdpbikKLSAgICAgICAgZmxvYXRCb3VuZHMubW92ZUJ5KHRyYW5zZm9ybU9yaWdpbik7Ci0KLSAg
ICBib3VuZHMgPSBMYXlvdXRSZWN0KGZsb2F0Qm91bmRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBBbmltYXRpb25CYXNlOjpjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgo
Y29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBM
YXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtOwotICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVyZXJCb3gs
IFJlbmRlclN0eWxlOjpJbmNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKLSAgICBpZiAoIXRyYW5zZm9y
bS5pc0FmZmluZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RGVjb21wb3NlZDJUeXBlIGZyb21EZWNvbXA7Ci0gICAgdHJhbnNmb3JtLmRlY29t
cG9zZTIoZnJvbURlY29tcCk7Ci0gICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVzIGZyb20g
dXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgaWYgKGZyb21EZWNvbXAu
YW5nbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvdW5kcyA9IExheW91dFJlY3Qo
dHJhbnNmb3JtLm1hcFJlY3QoYm91bmRzKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmM0MjA0ZWQ3OTZh
ZTUyMWFhOGIxYzhlNDcyODkyNDAyNDU0YTgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudC5oIgot
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0
YW50cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbXBvc2l0ZUFuaW1hdGlv
bjsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBMYXlvdXRSZWN0Owot
Y2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgVGltaW5nRnVu
Y3Rpb247Ci0KLWVudW0gY2xhc3MgQW5pbWF0ZUNoYW5nZSB7Ci0gICAgU3R5bGVCbGVuZGVkICAg
ICAgICAgICAgPSAxIDw8IDAsIC8vIFN0eWxlIHdhcyBjaGFuZ2VkLgotICAgIFN0YXRlQ2hhbmdl
ICAgICAgICAgICAgID0gMSA8PCAxLCAvLyBBbmltYXRpb24gc3RhdGUoKSBjaGFuZ2VkLgotICAg
IFJ1bm5pbmdTdGF0ZUNoYW5nZSAgICAgID0gMSA8PCAyLCAvLyBBbmltYXRpb24gInJ1bm5pbmcg
b3IgcGF1c2VkIiBjaGFuZ2VkLgotfTsKLQotZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3Qgewot
ICAgIFJlcXVpcmVzUmVjb21wb3NpdGUgICAgID0gMSA8PCAwLAotICAgIEZvcmNlc1N0YWNraW5n
Q29udGV4dCAgID0gMSA8PCAxCi19OwotCi1jbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8QW5pbWF0aW9uQmFzZT4KLSAgICAsIHB1YmxpYyBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50IHsKLSAgICBmcmllbmQgY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOwotICAgIGZyaWVu
ZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlv
biwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotICAgIHZpcnR1YWwgfkFuaW1hdGlv
bkJhc2UoKTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1l
bnQuZ2V0KCk7IH0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKLQotICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0
OwotCi0gICAgLy8gQW5pbWF0aW9ucyBhbmQgVHJhbnNpdGlvbnMgZ28gdGhyb3VnaCB0aGUgc3Rh
dGVzIGJlbG93LiBXaGVuIGVudGVyaW5nIHRoZSBTVEFSVEVEIHN0YXRlCi0gICAgLy8gdGhlIGFu
aW1hdGlvbiBpcyBzdGFydGVkLiBUaGlzIG1heSBvciBtYXkgbm90IHJlcXVpcmUgZGVmZXJyZWQg
cmVzcG9uc2UgZnJvbSB0aGUgYW5pbWF0b3IuCi0gICAgLy8gSWYgc28sIHdlIHN0YXkgaW4gdGhp
cyBzdGF0ZSB1bnRpbCB0aGF0IHJlc3BvbnNlIGlzIHJlY2VpdmVkIChhbmQgaXQgcmV0dXJucyB0
aGUgc3RhcnQgdGltZSkuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgdGlt
ZSBhcyB0aGUgc3RhcnQgdGltZSBhbmQgZ28gaW1tZWRpYXRlbHkgdG8gQW5pbWF0aW9uU3RhdGU6
Okxvb3BpbmcKLSAgICAvLyBvciBBbmltYXRpb25TdGF0ZTo6RW5kaW5nLgotICAgIGVudW0gY2xh
c3MgQW5pbWF0aW9uU3RhdGUgOiB1aW50OF90IHsKLSAgICAgICAgTmV3LCAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFuaW1hdGlvbiBqdXN0IGNyZWF0ZWQsIGFuaW1hdGlvbiBub3QgcnVubmlu
ZyB5ZXQKLSAgICAgICAgU3RhcnRXYWl0VGltZXIsICAgICAgICAgICAgIC8vIHN0YXJ0IHRpbWVy
IHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgU3RhcnRXYWl0U3R5bGVBdmFpbGFi
bGUsICAgIC8vIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwIHNvIHdlIGNhbiBzdGFydCBhbmltYXRp
b25zCi0gICAgICAgIFN0YXJ0V2FpdFJlc3BvbnNlLCAgICAgICAgICAvLyBhbmltYXRpb24gc3Rh
cnRlZCwgd2FpdGluZyBmb3IgcmVzcG9uc2UKLSAgICAgICAgTG9vcGluZywgICAgICAgICAgICAg
ICAgICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgbG9vcCB0aW1l
ciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCi0gICAgICAgIEVuZGluZywgICAgICAgICAgICAg
ICAgICAgICAvLyByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcsIGVuZCB0aW1lciBydW5uaW5n
LCB3YWl0aW5nIGZvciBmaXJlCi0gICAgICAgIFBhdXNlZE5ldywgICAgICAgICAgICAgICAgICAv
LyBpbiBwYXVzZSBtb2RlIHdoZW4gYW5pbWF0aW9uIHdhcyBjcmVhdGVkCi0gICAgICAgIFBhdXNl
ZFdhaXRUaW1lciwgICAgICAgICAgICAvLyBpbiBwYXVzZSBtb2RlIHdoZW4gYW5pbWF0aW9uIHN0
YXJ0ZWQKLSAgICAgICAgUGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlLCAgIC8vIGluIHBhdXNlIG1v
ZGUgd2hlbiB3YWl0aW5nIGZvciBzdHlsZSBzZXR1cAotICAgICAgICBQYXVzZWRXYWl0UmVzcG9u
c2UsICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIFNUQVJUSU5HIHN0YXRlCi0g
ICAgICAgIFBhdXNlZFJ1biwgICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdo
ZW4gaW4gTE9PUElORyBvciBFTkRJTkcgc3RhdGUKLSAgICAgICAgRG9uZSwgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVuZCB0aW1lciBmaXJlZCwgYW5pbWF0aW9uIGZpbmlzaGVkIGFuZCByZW1v
dmVkCi0gICAgICAgIEZpbGxpbmdGb3J3YXJkcyAgICAgICAgICAgICAvLyBhbmltYXRpb24gaGFz
IGVuZGVkIGFuZCBpcyByZXRhaW5pbmcgaXRzIGZpbmFsIHZhbHVlCi0gICAgfTsKLQotICAgIGVu
dW0gY2xhc3MgQW5pbWF0aW9uU3RhdGVJbnB1dCA6IHVpbnQ4X3QgewotICAgICAgICBNYWtlTmV3
LCAgICAgICAgICAgLy8gcmVzZXQgYmFjayB0byBuZXcgZnJvbSBhbnkgc3RhdGUKLSAgICAgICAg
U3RhcnRBbmltYXRpb24sICAgIC8vIGFuaW1hdGlvbiByZXF1ZXN0cyBhIHN0YXJ0Ci0gICAgICAg
IFJlc3RhcnRBbmltYXRpb24sICAvLyBmb3JjZSBhIHJlc3RhcnQgZnJvbSBhbnkgc3RhdGUKLSAg
ICAgICAgU3RhcnRUaW1lckZpcmVkLCAgIC8vIHN0YXJ0IHRpbWVyIGZpcmVkCi0gICAgICAgIFN0
eWxlQXZhaWxhYmxlLCAgICAvLyBzdHlsZSBpcyBzZXR1cCwgcmVhZHkgdG8gc3RhcnQgYW5pbWF0
aW5nCi0gICAgICAgIFN0YXJ0VGltZVNldCwgICAgICAvLyBtX3N0YXJ0VGltZSB3YXMgc2V0Ci0g
ICAgICAgIExvb3BUaW1lckZpcmVkLCAgICAvLyBsb29wIHRpbWVyIGZpcmVkCi0gICAgICAgIEVu
ZFRpbWVyRmlyZWQsICAgICAvLyBlbmQgdGltZXIgZmlyZWQKLSAgICAgICAgUGF1c2VPdmVycmlk
ZSwgICAgIC8vIHBhdXNlIGFuIGFuaW1hdGlvbiBkdWUgdG8gb3ZlcnJpZGUKLSAgICAgICAgUmVz
dW1lT3ZlcnJpZGUsICAgIC8vIHJlc3VtZSBhbiBvdmVycmlkZGVuIGFuaW1hdGlvbgotICAgICAg
ICBQbGF5U3RhdGVSdW5uaW5nLCAgLy8gcGxheSBzdGF0ZSBwYXVzZWQgLT4gcnVubmluZwotICAg
ICAgICBQbGF5U3RhdGVQYXVzZWQsICAgLy8gcGxheSBzdGF0ZSBydW5uaW5nIC0+IHBhdXNlZAot
ICAgICAgICBFbmRBbmltYXRpb24gICAgICAgLy8gZm9yY2UgYW4gZW5kIGZyb20gYW55IHN0YXRl
Ci0gICAgfTsKLQotICAgIC8vIENhbGxlZCB3aGVuIGFuaW1hdGlvbiBpcyBpbiBBbmltYXRpb25T
dGF0ZTo6TmV3IHRvIHN0YXJ0IGFuaW1hdGlvbgotICAgIHZvaWQgdXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvblN0YXRlSW5wdXQsIGRvdWJsZSBwYXJhbSk7Ci0KLSAgICAvLyBBbmltYXRpb24g
aGFzIGFjdHVhbGx5IHN0YXJ0ZWQsIGF0IHBhc3NlZCB0aW1lCi0gICAgdm9pZCBvbkFuaW1hdGlv
blN0YXJ0UmVzcG9uc2UoTW9ub3RvbmljVGltZSBzdGFydFRpbWUpCi0gICAgewotICAgICAgICB1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBzdGFy
dFRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIH0KLQotICAgIC8vIENh
bGxlZCB0byBjaGFuZ2UgdG8gb3IgZnJvbSBwYXVzZWQgc3RhdGUKLSAgICB2b2lkIHVwZGF0ZVBs
YXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGUpOwotICAgIGJvb2wgcGxheVN0YXRlUGxheWluZygp
IGNvbnN0OwotCi0gICAgYm9vbCB3YWl0aW5nVG9TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Ok5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09
IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lciB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpQYXVzZWROZXc7IH0KLSAgICBib29sIHByZUFjdGl2ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVy
IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlIHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJl
c3BvbnNlOwotICAgIH0KLQotICAgIGJvb2wgcG9zdEFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7IH0KLSAgICBib29sIGZpbGxp
bmdGb3J3YXJkcygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OkZpbGxpbmdGb3J3YXJkczsgfQotICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gIXBvc3RBY3RpdmUoKSAmJiAhcHJlQWN0aXZlKCk7IH0KLSAgICBib29sIHJ1bm5pbmcoKSBj
b25zdCB7IHJldHVybiAhaXNOZXcoKSAmJiAhcG9zdEFjdGl2ZSgpOyB9Ci0gICAgYm9vbCBwYXVz
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZSB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpQYXVzZWROZXc7IH0KLQotICAgIHN0YXRpYyBib29sIGlzUGF1c2VkU3Rh
dGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUpIHsgcmV0dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWROZXcgJiYgc3RhdGUgPD0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjsgfQotICAg
IHN0YXRpYyBib29sIGlzUnVubmluZ1N0YXRlKEFuaW1hdGlvblN0YXRlIHN0YXRlKSB7IHJldHVy
biBzdGF0ZSA+PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUgJiYgc3Rh
dGUgPCBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotCi0gICAgYm9vbCBpblBhdXNlZFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gaXNQYXVzZWRTdGF0ZShtX2FuaW1hdGlvblN0YXRlKTsgfQotICAgIGJv
b2wgaW5SdW5uaW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBpc1J1bm5pbmdTdGF0ZShtX2FuaW1h
dGlvblN0YXRlKTsgfQotCi0gICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0
aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Ok5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpQYXVzZWROZXc7IH0KLSAgICBib29sIHdhaXRpbmdGb3JTdGFydFRpbWUo
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRSZXNwb25zZTsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU7IH0KLQotICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNBY2NlbGVyYXRlZDsgfQotCi0gICAgdmlydHVhbCBPcHRpb25hbDxTZWNvbmRzPiB0
aW1lVG9OZXh0U2VydmljZSgpOwotCi0gICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSA9
IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogPSBudWxscHRyKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9
IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0KLSAgICB2b2lkIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwotCi0g
ICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uJikgY29uc3Q7Ci0KLSAgICBj
b25zdCBBbmltYXRpb24mIGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uOyB9
Ci0gICAgdm9pZCBzZXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9h
bmltYXRpb24gPSBjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KLQotICAgIC8v
IFJldHVybiB0cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBv
bmx5IGJlIHRoZSBjYXNlIGZvcgotICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNl
ZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCi0gICAgLy8gc2V0
IHRoZSBzdGFydCB0aW1lLiBJZiBhbiBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbiwgaXQgd2lsbCBw
cm9iYWJseSBub3QgZ2V0Ci0gICAgLy8gYmFjayB0aGUgQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3Rh
cnRUaW1lU2V0IGlucHV0LgotICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIERvZXMgdGhpcyBhbmltYXRpb24vdHJhbnNpdGlvbiBp
bnZvbHZlIHRoZSBnaXZlbiBwcm9wZXJ0eT8KLSAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgLypwcm9wZXJ0eSovKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJv
b2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGFjY2VsZXJhdGVk
T25seSAmJiAhbV9pc0FjY2VsZXJhdGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmICghYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICByZXR1cm4gaW5SdW5uaW5nU3RhdGUoKSB8fCBpblBhdXNlZFN0
YXRlKCk7Ci0gICAgfQotCi0gICAgYm9vbCB0cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaDsgfQot
ICAgIGJvb2wgZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7IH0KLSNpZiBFTkFCTEUoRklMVEVSU19MRVZF
TF8yKQotICAgIGJvb2wgYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0j
ZW5kaWYKLSAgICBib29sIGNvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotCi0gICAg
Ly8gRnJlZXplIHRoZSBhbmltYXRpb247IHVzZWQgYnkgRHVtcFJlbmRlclRyZWUuCi0gICAgdm9p
ZCBmcmVlemVBdFRpbWUoZG91YmxlIHQpOwotCi0gICAgLy8gUGxheSBhbmQgcGF1c2UgQVBJCi0g
ICAgdm9pZCBwbGF5KCk7Ci0gICAgdm9pZCBwYXVzZSgpOwotICAgIAotICAgIGRvdWJsZSBiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKSBjb25zdDsKLSAgICAKLSAgICBkb3VibGUgZ2V0RWxhcHNl
ZFRpbWUoKSBjb25zdDsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbGFwc2VkIHRpbWUgd2lsbCBhZGp1
c3QgdGhlIHN0YXJ0IHRpbWUgYW5kIHBvc3NpYmx5IHBhdXNlIHRpbWUuCi0gICAgdm9pZCBzZXRF
bGFwc2VkVGltZShkb3VibGUpOwotICAgIAotICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKSAKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh3YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSk7Ci0gICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSwg
LTEpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1h
dGlvbnMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMo
KSB7IH0KLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uKCkgeyBy
ZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb247IH0KLQotICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQg
d2hlbiB0aGUgY29ycmVzcG9uZGluZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNhbiBkbyBh
bnkgZXh0cmEgd29yawotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSAv
KmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlv
bihkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRp
b25FbmQoZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgCi0gICAgLy8gdGltZU9mZnNl
dCBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCB0aW1lIHdoZW4gdGhlIGFuaW1hdGlvbiBz
aG91bGQgc3RhcnQuIE5lZ2F0aXZlIHZhbHVlcyBhcmUgT0suCi0gICAgLy8gUmV0dXJuIHZhbHVl
IGluZGljYXRlcyB3aGV0aGVyIHRvIGV4cGVjdCBhbiBhc3luY2hyb25vdXMgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZCgpIGNhbGxiYWNrLgotICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihk
b3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgLy8gdGltZU9mZnNl
dCBpcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYW5pbWF0aW9uIGlzIGJlaW5nIHBhdXNlZC4KLSAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIC8qdGltZU9mZnNldCovKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgLypmaWxsaW5nRm9yd2FyZHMqLyA9
IGZhbHNlKSB7IH0KLQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRT
dHlsZSgpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUo
KTsKLQotICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b25TdGF0ZTsgfQotCi0gICAgc3RhdGljIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYyhFbGVtZW50
Kik7Ci0gICAgCi0gICAgdm9pZCBnZXRUaW1lVG9OZXh0RXZlbnQoU2Vjb25kcyYgdGltZSwgYm9v
bCYgaXNMb29waW5nKSBjb25zdDsKLQotICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZShkb3VibGUg
c2NhbGUsIGRvdWJsZSBlbGFwc2VkVGltZSwgZG91YmxlIG9mZnNldCkgY29uc3Q7Ci0KLSAgICAv
LyBUaGVzZSByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gZWFzaWx5IGNvbXB1dGUgYSBib3VuZGluZyBi
b3ggYnkgYXBwbHlpbmcgdGhlIHN0eWxlJ3MgdHJhbnNmb3JtIHRvIHRoZSBib3VuZHMgcmVjdC4K
LSAgICBib29sIGNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3Qg
RmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBMYXlvdXRSZWN0JiBi
b3VuZHMpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4
KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiwgTGF5b3V0
UmVjdCYgYm91bmRzKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgbV9pc0FjY2VsZXJh
dGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsK
LSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGJvb2wgbV9iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8RWxlbWVudD4gbV9lbGVtZW50OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgLy8gSWRlYWxseSB0aGlzIHdvdWxkIGJlIGEgcmVm
ZXJlbmNlLCBidXQgaXQgaGFzIHRvIGJlIGNsZWFyZWQgaWYgYW4gYW5pbWF0aW9uIGlzIGRlc3Ry
b3llZCBpbnNpZGUgYW4gZXZlbnQgY2FsbGJhY2suCi0gICAgUmVmPEFuaW1hdGlvbj4gbV9hbmlt
YXRpb247Ci0KLSAgICBPcHRpb25hbDxkb3VibGU+IG1fc3RhcnRUaW1lOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gbV9wYXVzZVRpbWU7Ci0gICAgZG91YmxlIG1fcmVxdWVzdGVkU3RhcnRUaW1lIHsg
MCB9OwotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV90b3RhbER1cmF0aW9uOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gbV9uZXh0SXRlcmF0aW9uRHVyYXRpb247Ci0KLSAgICBBbmltYXRpb25TdGF0ZSBt
X2FuaW1hdGlvblN0YXRlIHsgQW5pbWF0aW9uU3RhdGU6Ok5ldyB9OwotICAgIGJvb2wgbV9jb2xv
ckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDJhYzlkYTc4ZDMyNmM1ODQxNTJmMjM5ZjI3ZGU4MzQxMmY2MTc0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODA1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLSNpbmNsdWRlICJBbmlt
YXRpb25FdmVudC5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlci5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRyYW5zaXRpb25FdmVudC5oIgotI2luY2x1ZGUg
IldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlvbkV2ZW50
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQWxsb3cgYSBsaXR0bGUgbW9yZSB0aGFu
IDYwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gYXQgbGVhc3QgaGl0IHRoYXQgZnJhbWUgcmF0ZS4K
LXN0YXRpYyBjb25zdCBTZWNvbmRzIGFuaW1hdGlvblRpbWVyRGVsYXkgeyAxNV9tcyB9OwotLy8g
QWxsb3cgYSBsaXR0bGUgbW9yZSB0aGFuIDMwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gYXQgbGVh
c3QgaGl0IHRoYXQgZnJhbWUgcmF0ZS4KLXN0YXRpYyBjb25zdCBTZWNvbmRzIGFuaW1hdGlvblRp
bWVyVGhyb3R0bGVkRGVsYXkgeyAzMF9tcyB9OwotCi1jbGFzcyBBbmltYXRpb25Qcml2YXRlVXBk
YXRlQmxvY2sgewotcHVibGljOgotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayhDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAg
OiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICB7Ci0gICAg
ICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0K
LSAgICAKLSAgICB+QW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrKCkKLSAgICB7Ci0gICAgICAg
IG1fYW5pbWF0aW9uQ29udHJvbGxlci5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAg
Ci0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIG1fYW5pbWF0aW9uQ29udHJvbGxl
cjsKLX07Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZShGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2FuaW1hdGlvblRpbWVyKCp0aGlz
LCAmQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpCi0g
ICAgLCBtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCp0aGlzLCAmQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQpCi0g
ICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KDAp
Ci0gICAgLCBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uKGZhbHNlKQotICAgICwg
bV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoZmFsc2UpCi17Ci19Ci0KLUNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp+Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUo
KQotewotICAgIC8vIFdlIG5lZWQgdG8gZXhwbGljaXRseSBjbGVhciB0aGUgY29tcG9zaXRlIGFu
aW1hdGlvbnMgaGVyZSBiZWNhdXNlIHRoZQotICAgIC8vIGRlc3RydWN0b3Igb2YgQ29tcG9zaXRl
QW5pbWF0aW9uIHdpbGwgY2FsbCBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgYmFjay4KLSAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuY2xlYXIoKTsKLX0KLQotQ29tcG9zaXRlQW5pbWF0aW9uJiBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKEVsZW1l
bnQmIGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC5zZXRIYXNDU1NBbmltYXRpb24oKTsKLQotICAg
IGF1dG8gcmVzdWx0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuc3VyZSgmZWxlbWVudCwgWyZd
IHsKLSAgICAgICAgcmV0dXJuIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y3JlYXRlKCp0aGlzKTsKLSAg
ICB9KTsKLQotICAgIGlmIChhbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoJmVsZW1l
bnQuZG9jdW1lbnQoKSkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN1c3BlbmRB
bmltYXRpb25zKCk7Ci0KLSAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0K
LWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKEVsZW1lbnQmIGVsZW1l
bnQpCi17Ci0gICAgQVNTRVJUKGVsZW1lbnQuaGFzQ1NTQW5pbWF0aW9uKCkgPT0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmNvbnRhaW5zKCZlbGVtZW50KSk7Ci0KLSAgICBpZiAoIWVsZW1lbnQuaGFz
Q1NTQW5pbWF0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbGVtZW50LmNsZWFy
SGFzQ1NTQW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmZpbmQoJmVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgY2xlYXI6ICVwIiwgdGhpcywgJmVsZW1lbnQpOwot
Ci0gICAgbV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRXZl
bnRUb0Rpc3BhdGNoJiBpbmZvKSB7Ci0gICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQucHRyKCkg
PT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0KLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5y
ZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRFbGVtZW50LnB0cigpID09ICZlbGVtZW50OwotICAgIH0pOwotICAgIAotICAg
IC8vIFJldHVybiBmYWxzZSBpZiB3ZSBkaWRuJ3QgZG8gYW55dGhpbmcgT1Igd2UgYXJlIHN1c3Bl
bmRlZCAoc28gd2UgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gZG8gYSBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCkgd2hlbiBzdXNwZW5kZWQpLgotICAgIC8vIEZJWE1FOiBUaGUgY29kZSBiZWxvdyBk
b2VzIHRoZSBvcHBvc2l0ZSBvZiB3aGF0IHRoZSBjb21tZW50IGFib3ZlIHNheXMgcmVnYXJkaW5n
IHN1c3BlbmRlZCBzdGF0ZS4KLSAgICBhdXRvJiBhbmltYXRpb24gPSAqaXQtPnZhbHVlOwotICAg
IGJvb2wgcmVzdWx0ID0gYW5pbWF0aW9uLmlzU3VzcGVuZGVkKCk7Ci0gICAgYW5pbWF0aW9uLmNs
ZWFyRWxlbWVudCgpOwotCi0gICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnJlbW92ZShpdCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFu
Z2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVw
ZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1l
VG9OZXh0U2VydmljZTsKLSAgICBib29sIGNhbGxlZFNldENoYW5nZWQgPSBmYWxzZTsKLQotICAg
IGZvciAoYXV0byYgY29tcG9zaXRlQW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7
Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgYW5pbWF0aW9uID0gKmNvbXBvc2l0ZUFuaW1h
dGlvbi52YWx1ZTsKLSAgICAgICAgaWYgKCFhbmltYXRpb24uaXNTdXNwZW5kZWQoKSAmJiBhbmlt
YXRpb24uaGFzQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0
ID0gYW5pbWF0aW9uLnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAodCAmJiAo
IXRpbWVUb05leHRTZXJ2aWNlIHx8IHQudmFsdWUoKSA8IHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkpKQotICAgICAgICAgICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gdC52YWx1ZSgpOwotICAg
ICAgICAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlICYmIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkgPT0gMF9zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkICE9IENhbGxT
ZXRDaGFuZ2VkKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gKmNvbXBvc2l0ZUFuaW1hdGlvbi5r
ZXk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2Fy
ZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwotICAgICAgICAgICAgICAgIGNh
bGxlZFNldENoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGNhbGxlZFNldENoYW5nZWQpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHRpbWVUb05leHRTZXJ2aWNlOwot
fQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25U
aW1lckZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRz
PiB0aW1lVG9OZXh0U2VydmljZTsKLQotICAgIGNvbnN0IENvbXBvc2l0ZUFuaW1hdGlvbiogY29t
cG9zaXRlQW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmZWxlbWVudCk7Ci0g
ICAgaWYgKCFjb21wb3NpdGVBbmltYXRpb24tPmlzU3VzcGVuZGVkKCkgJiYgY29tcG9zaXRlQW5p
bWF0aW9uLT5oYXNBbmltYXRpb25zKCkpCi0gICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gY29t
cG9zaXRlQW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotCi0gICAgaWYgKCF0aW1lVG9O
ZXh0U2VydmljZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKSAmJiAobV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpIHx8IG1fYW5p
bWF0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZhbCgpIDw9IHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hh
bmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQotewotICAgIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlID0gdXBkYXRlQW5pbWF0aW9ucyhjYWxsU2V0Q2hhbmdlZCk7Ci0K
LSAgICBMT0coQW5pbWF0aW9ucywgInVwZGF0ZUFuaW1hdGlvblRpbWVyOiB0aW1lVG9OZXh0U2Vy
dmljZSBpcyAlLjJmIiwgdGltZVRvTmV4dFNlcnZpY2UudmFsdWVPcihTZWNvbmRzIHsgLTEgfSku
dmFsdWUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHNlcnZpY2UsIHdlIHdhbnQgdG8g
bWFrZSBzdXJlIHRoZSB0aW1lciBpcyBubyBsb25nZXIgcnVubmluZwotICAgIGlmICghdGltZVRv
TmV4dFNlcnZpY2UpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gSWYgd2Ugd2FudCBzZXJ2aWNlIGltbWVkaWF0ZWx5LCB3ZSBzdGFydCBh
IHJlcGVhdGluZyB0aW1lciB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHN0YXJ0aW5nCi0gICAg
aWYgKCF0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBt
X2ZyYW1lLnBhZ2UoKTsKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvdHRsZSA9IHBhZ2UgJiYgcGFn
ZS0+aXNMb3dQb3dlck1vZGVFbmFibGVkKCk7Ci0gICAgICAgIFNlY29uZHMgZGVsYXkgPSBzaG91
bGRUaHJvdHRsZSA/IGFuaW1hdGlvblRpbWVyVGhyb3R0bGVkRGVsYXkgOiBhbmltYXRpb25UaW1l
ckRlbGF5OwotCi0gICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpIHx8IG1f
YW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSAhPSBkZWxheSkKLSAgICAgICAgICAgIG1f
YW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoZGVsYXkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3YW50IHRvIHN0YXJ0IGEgb25lLXNob3QgdGlt
ZXIgc28gd2UgZ2V0IGhlcmUgYWdhaW4KLSAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpCi17Ci0g
ICAgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpCi17Ci0gICAgLy8gUHJv
dGVjdCB0aGUgZnJhbWUgZnJvbSBnZXR0aW5nIGRlc3Ryb3llZCBpbiB0aGUgZXZlbnQgaGFuZGxl
cgotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwotCi0gICAgYm9vbCB1cGRhdGVT
dHlsZSA9ICFtX2V2ZW50c1RvRGlzcGF0Y2guaXNFbXB0eSgpIHx8ICFtX2VsZW1lbnRDaGFuZ2Vz
VG9EaXNwYXRjaC5pc0VtcHR5KCk7Ci0KLSAgICAvLyBmaXJlIGFsbCB0aGUgZXZlbnRzCi0gICAg
VmVjdG9yPEV2ZW50VG9EaXNwYXRjaD4gZXZlbnRzVG9EaXNwYXRjaCA9IFdURk1vdmUobV9ldmVu
dHNUb0Rpc3BhdGNoKTsKLSAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzVG9EaXNwYXRjaCkg
ewotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZXZlbnQuZWxlbWVudDsKLSAgICAgICAgaWYg
KGV2ZW50LmV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KQotICAg
ICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KFRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50LmV2ZW50VHlwZSwgZXZlbnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1l
bnQ6OnBzZXVkb0VsZW1lbnROYW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbGVtZW50LmRp
c3BhdGNoRXZlbnQoQW5pbWF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudC5ldmVudFR5cGUsIGV2ZW50
Lm5hbWUsIGV2ZW50LmVsYXBzZWRUaW1lLCBQc2V1ZG9FbGVtZW50Ojpwc2V1ZG9FbGVtZW50TmFt
ZUZvckV2ZW50cyhlbGVtZW50LnBzZXVkb0lkKCkpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGNoYW5nZSA6IG1fZWxlbWVudENoYW5nZXNUb0Rpc3Bh
dGNoKQotICAgICAgICBjaGFuZ2UtPmludmFsaWRhdGVTdHlsZSgpOwotCi0gICAgbV9lbGVtZW50
Q2hhbmdlc1RvRGlzcGF0Y2guY2xlYXIoKTsKLQotICAgIGlmICh1cGRhdGVTdHlsZSkKLSAgICAg
ICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERp
c3BhdGNoZXIoKQotewotICAgIGlmICghbV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlci5p
c0FjdGl2ZSgpKQotICAgICAgICBtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyLnN0YXJ0
T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjph
ZGRFdmVudFRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBt
X2V2ZW50c1RvRGlzcGF0Y2guYXBwZW5kKHsgZWxlbWVudCwgZXZlbnRUeXBlLCBuYW1lLCBlbGFw
c2VkVGltZSB9KTsKLSAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZEVsZW1lbnRDaGFuZ2VU
b0Rpc3BhdGNoKEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlz
cGF0Y2guYXBwZW5kKGVsZW1lbnQpOwotICAgIEFTU0VSVChtX2VsZW1lbnRDaGFuZ2VzVG9EaXNw
YXRjaC5sYXN0KCktPmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1l
bnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVk
RGlzcGF0Y2hlcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjph
bmltYXRpb25GcmFtZUNhbGxiYWNrRmlyZWQoKQotewotICAgIE9wdGlvbmFsPFNlY29uZHM+IHRp
bWVUb05leHRTZXJ2aWNlID0gdXBkYXRlQW5pbWF0aW9ucyhDYWxsU2V0Q2hhbmdlZCk7Ci0KLSAg
ICBpZiAodGltZVRvTmV4dFNlcnZpY2UpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dmll
dygpLT5zY2hlZHVsZUFuaW1hdGlvbigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGtl
ZXAgdGhlIGZyYW1lIGFsaXZlLCBzaW5jZSBpdCBvd25zIHVzLgotICAgIFJlZjxGcmFtZT4gcHJv
dGVjdG9yKG1fZnJhbWUpOwotCi0gICAgLy8gVGhlIGFuaW1hdGlvbiB0aW1lciBtaWdodCBmaXJl
IGJlZm9yZSB0aGUgbGF5b3V0IHRpbWVyLCBpbgotICAgIC8vIHdoaWNoIGNhc2Ugd2UgbWlnaHQg
Y3JlYXRlIHNvbWUgYW5pbWF0aW9ucyB3aXRoIGluY29ycmVjdAotICAgIC8vIHZhbHVlcyBpZiB3
ZSBkb24ndCBsYXlvdXQgZmlyc3QuCi0gICAgaWYgKG1fcmVxdWlyZXNMYXlvdXQpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0g
ICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
IGZyYW1lVmlldy0+Zm9yY2VMYXlvdXQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3JlcXVpcmVz
TGF5b3V0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIGFuaW1hdGlvblVwZGF0
ZVRpbWUgaXMgdXBkYXRlZCwgc28gdGhhdCBpdCBpcyBjdXJyZW50IGV2ZW4gaWYgbm8KLSAgICAv
LyBzdHlsZUNoYW5nZSBoYXMgaGFwcGVuZWQgKGUuZy4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucykK
LSAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0g
ICAgLy8gV2hlbiB0aGUgdGltZXIgZmlyZXMsIGFsbCB3ZSBkbyBpcyBjYWxsIHNldENoYW5nZWQg
b24gYWxsIERPTSBub2RlcyB3aXRoIHJ1bm5pbmcgYW5pbWF0aW9ucyBhbmQgdGhlbiBkbyBhbiBp
bW1lZGlhdGUKLSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkLiBJdCB3aWxsIHRoZW4gY2FsbCBi
YWNrIHRvIHVzIHdpdGggbmV3IGluZm9ybWF0aW9uLgotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVy
KENhbGxTZXRDaGFuZ2VkKTsKLQotICAgIC8vIEZpcmUgZXZlbnRzIHJpZ2h0IGF3YXksIHRvIGF2
b2lkIGEgZmxhc2ggb2YgdW5hbmltYXRlZCBzdHlsZSBhZnRlciBhbiBhbmltYXRpb24gY29tcGxl
dGVzLCBhbmQgYmVmb3JlCi0gICAgLy8gdGhlICdlbmQnIGV2ZW50IGZpcmVzLgotICAgIGZpcmVF
dmVudHNBbmRVcGRhdGVTdHlsZSgpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIu
ZWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byogYW5pbWF0aW9uID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmdldChyZW5kZXJlci5lbGVtZW50KCkpOwotICAgIGlmICgh
YW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbi0+
aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgZmFsc2UpOwotfQotCi1ib29sIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVu
ZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNv
bnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRl
cmVyLmVsZW1lbnQoKSk7Ci0gICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCB0
cnVlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlVGhy
b3R0bGluZ1N0YXRlKCkKLXsKLSAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOwotCi0gICAgZm9y
IChhdXRvKiBjaGlsZEZyYW1lID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZEZy
YW1lOyBjaGlsZEZyYW1lID0gY2hpbGRGcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkRnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgp
OwotfQotCi1TZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25J
bnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgSU5GSU5JVFkgfTsKLQotICAgIHJldHVybiBTZWNv
bmRzIHsgbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpIH07Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zKCkKLXsKLSAgICBp
ZiAoaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3VzcGVuZEFuaW1hdGlv
bnNGb3JEb2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3Vi
ZnJhbWVzCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAg
Y2hpbGQtPmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0KLSAgICBtX2lz
U3VzcGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKCFpc1N1c3BlbmRlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1
bWVudCgpKTsKLQotICAgIC8vIFRyYXZlcnNlIHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNo
aWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sZWdhY3lBbmltYXRpb24oKS5y
ZXN1bWVBbmltYXRpb25zKCk7Ci0KLSAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7Ci19Ci0KLWJv
b2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRG
b3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGlzU3VzcGVuZGVk
KCkgfHwgbV9zdXNwZW5kZWREb2N1bWVudHMuY29udGFpbnMoZG9jdW1lbnQpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50KQotewotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLnJlbW92ZShkb2N1bWVu
dCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmlt
YXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmIChhbmltYXRp
b25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N1c3BlbmRlZERvY3VtZW50cy5hZGQoZG9jdW1lbnQpOwotCi0gICAgQW5pbWF0aW9u
UHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5pbWF0
aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1hdGlvbi52
YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVBbmltYXRpb25U
aW1lcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVB
bmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmICghYW5p
bWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZGV0YWNoRnJvbURvY3VtZW50KGRvY3VtZW50KTsKLQotICAgIEFuaW1hdGlvblBy
aXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBmb3IgKGF1dG8mIGFu
aW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBpZiAoJmFuaW1hdGlv
bi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBhbmltYXRpb24udmFs
dWUtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVBbmltYXRpb25UaW1l
cigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydEFuaW1h
dGlvbnNJZk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFhbmlt
YXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpIHx8IGFsbG93c05ld0FuaW1h
dGlvbnNXaGlsZVN1c3BlbmRlZCgpKQotICAgICAgICByZXN1bWVBbmltYXRpb25zRm9yRG9jdW1l
bnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpz
ZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCBhbGxvd2VkKQotewotICAg
IG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkID0gYWxsb3dlZDsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpCi17Ci0gICAg
Q29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZUFuaW1h
dGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZSgp
OwotICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIENvbXBv
c2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0
aW9uKGVsZW1lbnQpOwotICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24ucGF1c2VUcmFuc2l0aW9u
QXRUaW1lKGNzc1Byb3BlcnR5SUQocHJvcGVydHkpLCB0KSkgewotICAgICAgICBlbGVtZW50Lmlu
dmFsaWRhdGVTdHlsZSgpOwotICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRj
aGVyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotTW9ub3RvbmljVGltZSBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVwZGF0
ZUNvdW50KTsKLSAgICBpZiAoIW1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKQotICAgICAgICBt
X2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotCi0gICAg
cmV0dXJuIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lLnZhbHVlKCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJlZ2luQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAg
ICBpZiAoIW1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCkKLSAgICAgICAgbV9iZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgKyttX2JlZ2luQW5pbWF0aW9uVXBk
YXRlQ291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuZEFu
aW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3Vu
dCA+IDApOwotICAgIGlmIChtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQgPT0gMSkgewotICAg
ICAgICBzdHlsZUF2YWlsYWJsZSgpOwotICAgICAgICBpZiAoIW1fd2FpdGluZ0ZvckFzeW5jU3Rh
cnROb3RpZmljYXRpb24pCi0gICAgICAgICAgICBzdGFydFRpbWVSZXNwb25zZShiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgfQotICAgIC0tbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNv
dW50OwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBMT0coQW5pbWF0aW9u
cywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIHJlY2VpdmVkU3RhcnRUaW1lUmVz
cG9uc2UgJWYiLCB0aGlzLCB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKTsKLQot
ICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKLSAgICBzdGFy
dFRpbWVSZXNwb25zZSh0aW1lKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCkKLXsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuZ2V0KCZlbGVtZW50KTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBk
YXRlQmxvY2soKnRoaXMpOwotCi0gICAgYXV0byBhbmltYXRpbmdTdHlsZSA9IGFuaW1hdGlvbi0+
Z2V0QW5pbWF0ZWRTdHlsZSgpOwotICAgIGlmICghYW5pbWF0aW5nU3R5bGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBhbmltYXRpbmdTdHlsZTsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9u
KEVsZW1lbnQmIGVsZW1lbnQsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBhdXRv
KiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50KTsKLSAgICBp
ZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWFuaW1hdGlv
bi0+aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBhbmltYXRpb24tPmNvbXB1dGVFeHRlbnRP
ZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMpOwotfQotCi11bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1
bWVudCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZh
bmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgY291bnQg
Kz0gYW5pbWF0aW9uLnZhbHVlLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRp
b24pCi17Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92
ZSgmYW5pbWF0aW9uKTsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYWRkKCZhbmlt
YXRpb24pOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVG
cm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRpb25Ub1Jl
bW92ZSkKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUucmVtb3ZlKCZhbmltYXRp
b25Ub1JlbW92ZSk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0
eWxlQXZhaWxhYmxlKCkKLXsKLSAgICAvLyBHbyB0aHJvdWdoIGxpc3Qgb2Ygd2FpdGVycyBhbmQg
c2VuZCB0aGVtIG9uIHRoZWlyIHdheQotICAgIGZvciAoY29uc3QgYXV0byYgd2FpdGluZ0FuaW1h
dGlvbiA6IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSkKLSAgICAgICAgd2FpdGluZ0FuaW1h
dGlvbi0+c3R5bGVBdmFpbGFibGUoKTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZS5jbGVhcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRU
b0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5p
bWF0aW9uLCBib29sIHdpbGxHZXRSZXNwb25zZSkKLXsKLSAgICAvLyBJZiB3aWxsR2V0UmVzcG9u
c2UgaXMgdHJ1ZSwgaXQgbWVhbnMgdGhpcyBhbmltYXRpb24gaXMgYWN0dWFsbHkgd2FpdGluZyBm
b3IgYSByZXNwb25zZQotICAgIC8vICh3aGljaCB3aWxsIGNvbWUgaW4gYXMgYSBjYWxsIHRvIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkuCi0gICAgLy8gSW4gdGhhdCBjYXNlIHdlIGRvbid0IG5l
ZWQgdG8gYWRkIGl0IHRvIHRoaXMgbGlzdC4gV2UganVzdCBzZXQgYSB3YWl0aW5nRm9yQVJlc3Bv
bnNlIGZsYWcgCi0gICAgLy8gd2hpY2ggc2F5cyB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIHJlc3Bv
bnNlLiBJZiB3aWxsR2V0UmVzcG9uc2UgaXMgZmFsc2UsIHRoaXMgYW5pbWF0aW9uIAotICAgIC8v
IGlzIG5vdCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZvciBpdHNlbGYsIGJ1dCByYXRoZXIgZm9y
IGEgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwgZm9yIAotICAgIC8vIGFub3RoZXIgYW5pbWF0aW9u
IHRvIHdoaWNoIGl0IHdpbGwgc3luYy4KLSAgICAvLwotICAgIC8vIFdoZW4gZW5kQW5pbWF0aW9u
VXBkYXRlKCkgaXMgY2FsbGVkIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgd2FpdGluZ0ZvckFSZXNw
b25zZSBmbGFnIGlzCi0gICAgLy8gdHJ1ZS4gSWYgc28sIHdlIGp1c3QgcmV0dXJuIGFuZCB3aWxs
IGRvIG91ciB3b3JrIHdoZW4gdGhlIGZpcnN0IG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsCi0gICAg
Ly8gY29tZXMgaW4uIElmIGl0IGlzIGZhbHNlLCB3ZSB3aWxsIG5vdCBiZSBnZXR0aW5nIGEgbm90
aWZ5WFhYU3RhcnRlZCgpIGNhbGwsIHNvIHdlIHdpbGwKLSAgICAvLyBkbyBvdXIgd29yayByaWdo
dCBhd2F5LiBJbiBib3RoIGNhc2VzIHdlIGNhbGwgdGhlIG9uQW5pbWF0aW9uU3RhcnRSZXNwb25z
ZSgpIG1ldGhvZAotICAgIC8vIG9uIGVhY2ggYW5pbWF0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSB3
ZSBzZW5kIGluIHRoZSB0aW1lIHdlIGdvdCBmcm9tIG5vdGlmeVhYWFN0YXJ0ZWQoKS4KLSAgICAv
LyBJbiB0aGUgc2Vjb25kIGNhc2UsIHdlIGp1c3QgcGFzcyBpbiB0aGUgYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lKCkuCi0gICAgLy8KLSAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxsIHNv
ZnR3YXJlIGFuZCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUgCi0g
ICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZCBjeWNsZS4KLSAgICAvLwotCi0gICAgaWYgKHdpbGxH
ZXRSZXNwb25zZSkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9
IHRydWU7Ci0KLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuYWRk
KCZhbmltYXRpb24pOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpy
ZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25C
YXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UucmVtb3ZlKCZhbmltYXRpb25Ub1JlbW92ZSk7Ci0gICAgaWYgKG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5pc0VtcHR5KCkpCi0gICAgICAgIG1f
d2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGlt
ZSB0aW1lKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFuZCBzZW5kIHRo
ZW0gb24gdGhlaXIgd2F5Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSkKLSAgICAgICAgYW5pbWF0aW9uLT5v
bkFuaW1hdGlvblN0YXJ0UmVzcG9uc2UodGltZSk7Ci0gICAgCi0gICAgbV9hbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmNsZWFyKCk7Ci0gICAgbV93YWl0aW5nRm9yQXN5bmNT
dGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlv
bikKLXsKLSAgICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
ICVwIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQ6ICVwIiwgdGhpcywgJmFuaW1hdGlvbik7Ci0KLSAg
ICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShhbmltYXRpb24pOwotICAgIHJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKGFuaW1hdGlvbik7
Ci0KLSAgICBib29sIGFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5bmNTdGFydCA9IGZhbHNlOwot
ICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPndhaXRpbmdGb3JTdGFydFRpbWUo
KSAmJiBhbmltYXRpb24tPmlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICAgICAgYW55QW5pbWF0
aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFhbnlBbmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3Rh
cnQpCi0gICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsK
LX0KLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcihGcmFt
ZSYgZnJhbWUpCi0gICAgOiBtX2RhdGEobWFrZVVuaXF1ZTxDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4oZnJhbWUpKQotewotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjp+Q1NTQW5p
bWF0aW9uQ29udHJvbGxlcigpID0gZGVmYXVsdDsKLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyOjpjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFtX2Rh
dGEtPmNsZWFyKGVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZWxlbWVudC5k
b2N1bWVudCgpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBE
b2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBlbGVtZW50LmludmFsaWRhdGVT
dHlsZSgpOwotfQotCi1BbmltYXRpb25VcGRhdGUgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBk
YXRlQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBib29sIGhhc09ySGFkQW5p
bWF0aW9ucyA9IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5pbWF0aW9uc09yVHJhbnNpdGlv
bnMoKSkgfHwgbmV3U3R5bGUuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKTsKLSAgICBpZiAo
IWhhc09ySGFkQW5pbWF0aW9ucykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChlbGVt
ZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdElu
QmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIC8vIERvbid0IHJ1
biB0cmFuc2l0aW9ucyB3aGVuIHByaW50aW5nLgotICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCku
cmVuZGVyVmlldygpLT5wcmludGluZygpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8g
RmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0
YWJsZS4gV2UgdGhlbiBjb21wYXJlIHRoZW0KLSAgICAvLyBhZ2FpbnN0IHRoZSBhbmltYXRpb25z
IGluIHRoZSBzdHlsZSBhbmQgbWFrZSBzdXJlIHdlJ3JlIGluIHN5bmMuIElmIGRlc3RpbmF0aW9u
IHZhbHVlcwotICAgIC8vIGhhdmUgY2hhbmdlZCwgd2UgcmVzZXQgdGhlIGFuaW1hdGlvbi4gV2Ug
dGhlbiBkbyBhIGJsZW5kIHRvIGdldCBuZXcgdmFsdWVzIGFuZCB3ZSByZXR1cm4KLSAgICAvLyBh
IG5ldyBzdHlsZS4KLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9u
ID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVBbmltYXRpb24oZWxlbWVudCk7Ci0gICAgYXV0byB1
cGRhdGUgPSBjb21wb3NpdGVBbmltYXRpb24uYW5pbWF0ZShlbGVtZW50LCBvbGRTdHlsZSwgbmV3
U3R5bGUpOwotCi0gICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAg
aWYgKChyZW5kZXJlciAmJiByZW5kZXJlci0+cGFyZW50KCkpIHx8IG5ld1N0eWxlLmFuaW1hdGlv
bnMoKSB8fCAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKLSAgICAgICAg
YXV0byYgZnJhbWVWaWV3ID0gKmVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgICAgIGlm
IChjb21wb3NpdGVBbmltYXRpb24uaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpKQot
ICAgICAgICAgICAgbV9kYXRhLT5zZXRSZXF1aXJlc0xheW91dCgpOwotICAgICAgICBtX2RhdGEt
PnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgZnJhbWVW
aWV3LnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVwZGF0ZTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDU1NBbmltYXRpb25Db250cm9sbGVyOjph
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZXN1bHQ7Ci0KLSAgICBpZiAocmVuZGVyZXIu
c3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpICYmIHJlbmRlcmVyLmVsZW1lbnQo
KSkKLSAgICAgICAgcmVzdWx0ID0gbV9kYXRhLT5hbmltYXRlZFN0eWxlRm9yRWxlbWVudCgqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNvbXB1dGVFeHRlbnRPZkFu
aW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25z
dAotewotICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5jb21wdXRlRXh0ZW50
T2ZBbmltYXRpb24oKnJlbmRlcmVyLmVsZW1lbnQoKSwgYm91bmRzKTsKLX0KLQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjpub3RpZnlBbmltYXRpb25TdGFydGVkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBMT0coQW5pbWF0aW9u
cywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIgJXAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCBvbiBy
ZW5kZXJlciAlcCwgdGltZT0lZiIsIHRoaXMsICZyZW5kZXJlciwgc3RhcnRUaW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpKTsKLSAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOwotCi0g
ICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAg
bV9kYXRhLT5yZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKHN0YXJ0VGltZSk7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpCi17Ci0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0
YS0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgbmFtZSwgdCk7Ci19Ci0KLXVuc2lnbmVk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVu
dCogZG9jdW1lbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKGRvY3VtZW50KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpw
YXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBk
YXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VUcmFuc2l0aW9uQXRUaW1l
KGVsZW1lbnQsIHByb3BlcnR5LCB0KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVy
Ojppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuc3R5bGUo
KS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwg
cHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmlzUnVubmluZ0Fj
Y2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCku
aGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBtX2RhdGEtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihy
ZW5kZXJlciwgcHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Omlz
U3VzcGVuZGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1N1c3BlbmRlZCgpOwot
fQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkKLXsK
LSAgICBMT0coQW5pbWF0aW9ucywgImNvbnRyb2xsZXIgaXMgc3VzcGVuZGluZyBhbmltYXRpb25z
Iik7Ci0gICAgbV9kYXRhLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIExPRyhBbmltYXRpb25z
LCAiY29udHJvbGxlciBpcyByZXN1bWluZyBhbmltYXRpb25zIik7Ci0gICAgbV9kYXRhLT5yZXN1
bWVBbmltYXRpb25zKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YWxsb3dz
TmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRh
LT5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyOjpzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9v
bCBhbGxvd2VkKQotewotICAgIG1fZGF0YS0+c2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3Vz
cGVuZGVkKGFsbG93ZWQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnNlcnZp
Y2VBbmltYXRpb25zKCkKLXsKLSAgICBtX2RhdGEtPmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJl
ZCgpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZVRocm90dGxpbmdT
dGF0ZSgpCi17Ci0gICAgbV9kYXRhLT51cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLX0KLQotU2Vj
b25kcyBDU1NBbmltYXRpb25Db250cm9sbGVyOjphbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9uSW50ZXJ2YWwoKTsKLX0KLQotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjphbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBtX2RhdGEtPmFuaW1hdGlvbnNBcmVTdXNw
ZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6ZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1
cm4gbV9kYXRhLT5kZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50KQotewotICAgIExPRyhBbmltYXRpb25zLCAic3VzcGVuZGluZyBhbmltYXRpb25z
IGZvciBkb2N1bWVudCAlcCIsIGRvY3VtZW50KTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRp
b25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0g
ICAgTE9HKEFuaW1hdGlvbnMsICJyZXN1bWluZyBhbmltYXRpb25zIGZvciBkb2N1bWVudCAlcCIs
IGRvY3VtZW50KTsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9j
ayh0aGlzKTsKLSAgICBtX2RhdGEtPnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVu
dCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zSWZO
b3RTdXNwZW5kZWQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIExPRyhBbmltYXRpb25zLCAi
YW5pbWF0aW9ucyBtYXkgc3RhcnQgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotCi0gICAg
QW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgbV9k
YXRhLT5zdGFydEFuaW1hdGlvbnNJZk5vdFN1c3BlbmRlZChkb2N1bWVudCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YmVnaW5BbmltYXRpb25VcGRhdGUoKQotewotICAgIG1f
ZGF0YS0+YmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjplbmRBbmltYXRpb25VcGRhdGUoKQotewotICAgIG1fZGF0YS0+ZW5kQW5pbWF0aW9u
VXBkYXRlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VwcG9ydHNBY2Nl
bGVyYXRlZEFuaW1hdGlvbk9mUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAg
ICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2Vs
ZXJhdGVkKHByb3BlcnR5KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpoYXNB
bmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5oYXNBbmltYXRpb25zKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWNkNjA1ODQ1Mzk4YWE4ZTc1YTlhNTI2NWUwMGVmNjRkNjIyMjgxMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIK
LSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTsKLWNs
YXNzIERvY3VtZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBMYXlvdXRSZWN0OwotY2xhc3MgUmVu
ZGVyRWxlbWVudDsKLQotc3RydWN0IEFuaW1hdGlvblVwZGF0ZSB7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKLSAgICBPcHRpb25TZXQ8QW5pbWF0aW9uSW1wYWN0PiBp
bXBhY3Q7Ci0KLX07Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9uQ29udHJvbGxlcigpOwotCi0gICAg
dm9pZCBjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmKTsKLSAgICBBbmltYXRpb25VcGRhdGUgdXBk
YXRlQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKLQotICAgIC8vIElm
IHBvc3NpYmxlLCBjb21wdXRlIHRoZSB2aXN1YWwgZXh0ZW50IG9mIGFueSB0cmFuc2Zvcm0gYW5p
bWF0aW9uIG9uIHRoZSBnaXZlbiByZW5kZXJlcgotICAgIC8vIHVzaW5nIHRoZSBnaXZlbiByZWN0
LCByZXR1cm5pbmcgdGhlIHJlc3VsdCBpbiB0aGUgcmVjdC4gUmV0dXJuIGZhbHNlIGlmIHRoZXJl
IGlzIHNvbWUKLSAgICAvLyB0cmFuc2Zvcm0gYW5pbWF0aW9uIGJ1dCB3ZSB3ZXJlIHVuYWJsZSB0
byBjaGVhcGx5IGNvbXB1dGUgaXRzIGFmZmVjdCBvbiB0aGUgZXh0ZW50LgotICAgIGJvb2wgY29t
cHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7
Ci0KLSAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiBv
ciB0cmFuc2l0aW9uIGhhcyBhY3R1YWxseSBzdGFydGVkIHRvIGFuaW1hdGUuCi0gICAgdm9pZCBu
b3RpZnlBbmltYXRpb25TdGFydGVkKFJlbmRlckVsZW1lbnQmLCBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZSk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKEVs
ZW1lbnQmLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCk7IC8vIFRvIGJlIHVzZWQg
b25seSBmb3IgdGVzdGluZwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VUcmFuc2l0aW9u
QXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7IC8vIFRv
IGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwotICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIG51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OyAvLyBUbyBiZSB1c2VkIG9u
bHkgZm9yIHRlc3RpbmcKLSAgICAKLSAgICAvLyAiUnVubmluZyIgaGVyZSBtZWFucyB0aGUgYW5p
bWF0aW9uIGlzIHJ1bm5pbmcgb3IgcGF1c2VkLgotICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9u
T25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYs
IENTU1Byb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1N1c3Bl
bmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMo
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lk
IHNlcnZpY2VBbmltYXRpb25zKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVRocm90dGxpbmdTdGF0ZSgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgYW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdDsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChE
b2N1bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbmltYXRpb25zQXJl
U3VzcGVuZGVkRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIGRldGFjaEZyb21Eb2N1
bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5kZWQo
RG9jdW1lbnQqKTsKLQotICAgIHZvaWQgYmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLSAgICB2b2lk
IGVuZEFuaW1hdGlvblVwZGF0ZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NO
ZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sKTsKLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEKTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZT4gbV9kYXRhOwotfTsKLQotY2xhc3MgQW5pbWF0aW9uVXBkYXRlQmxvY2sgewotcHVibGljOgot
ICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrKENTU0FuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlv
bkNvbnRyb2xsZXIpCi0gICAgICAgIDogbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNv
bnRyb2xsZXIpCi0gICAgewotICAgICAgICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAg
ICAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwot
ICAgIH0KLSAgICAKLSAgICB+QW5pbWF0aW9uVXBkYXRlQmxvY2soKQotICAgIHsKLSAgICAgICAg
aWYgKG1fYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uQ29udHJv
bGxlci0+ZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgfQotICAgIAotICAgIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXIqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMzIwMzc3ZGVjYzljNTM0ZGVlYjdiNGU5NWNlMGVkMmQ4NWFlZGIxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIK
LSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFz
cyBGcmFtZTsKLQotZW51bSBTZXRDaGFuZ2VkIHsgRG9Ob3RDYWxsU2V0Q2hhbmdlZCwgQ2FsbFNl
dENoYW5nZWQgfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lJik7Ci0gICAgfkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIHVudGlsIHRoZSBuZXh0IGFu
aW1hdGlvbiBuZWVkcyB0byBiZSBzZXJ2aWNlZCwgb3IgLTEgaWYgdGhlcmUgYXJlIG5vbmUuCi0g
ICAgT3B0aW9uYWw8U2Vjb25kcz4gdXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7Ci0gICAgdm9pZCB1cGRhdGVBbmltYXRpb25U
aW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7Ci0K
LSAgICBDb21wb3NpdGVBbmltYXRpb24mIGVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50
Jik7Ci0gICAgYm9vbCBjbGVhcihFbGVtZW50Jik7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0eWxlSWZO
ZWVkZWREaXNwYXRjaGVyRmlyZWQoKTsKLSAgICB2b2lkIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRl
ZERpc3BhdGNoZXIoKTsKLSAgICB2b2lkIGFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiwgY29u
c3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBlbGFw
c2VkVGltZSk7Ci0gICAgdm9pZCBhZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaChFbGVtZW50Jik7
Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiAhbV9jb21wb3NpdGVB
bmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTdXNwZW5kZWQ7IH0KLSAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7Ci0g
ICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgdm9pZCBhbmltYXRpb25GcmFtZUNhbGxi
YWNrRmlyZWQoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGluZ1N0YXRlKCk7Ci0gICAgU2Vj
b25kcyBhbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0OwotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0
aW9uc0ZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCByZXN1bWVBbmltYXRpb25zRm9y
RG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBib29sIGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5k
ZWQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIGRldGFjaEZyb21Eb2N1bWVudChEb2N1bWVudCopOwot
Ci0gICAgYm9vbCBpc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBD
U1NQcm9wZXJ0eUlEKSBjb25zdDsKLSAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0
aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAg
ICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBBdG9tU3RyaW5nJiBu
YW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYs
IGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQoRWxlbWVudCYpOwotCi0gICAg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25z
dDsKLQotICAgIE1vbm90b25pY1RpbWUgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAg
Ci0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAgIHZvaWQgZW5kQW5pbWF0aW9u
VXBkYXRlKCk7Ci0gICAgdm9pZCByZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKE1vbm90b25pY1Rp
bWUpOwotICAgIAotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1h
dGlvbkJhc2UmKTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmLCBib29sIHdpbGxHZXRSZXNwb25zZSk7Ci0g
ICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShB
bmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0
aW9uQmFzZSYpOwotCi0gICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lckZvckVsZW1lbnQoRWxl
bWVudCYpOwotCi0gICAgYm9vbCBhbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsgfQotICAg
IHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwotCi0gICAg
dm9pZCBzZXRSZXF1aXJlc0xheW91dCgpIHsgbV9yZXF1aXJlc0xheW91dCA9IHRydWU7IH0KLQot
cHJpdmF0ZToKLSAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgc3R5
bGVBdmFpbGFibGUoKTsKLSAgICB2b2lkIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwotICAg
IHZvaWQgc3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSk7Ci0KLSAgICBIYXNoTWFwPFJl
ZlB0cjxFbGVtZW50PiwgUmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4+IG1fY29tcG9zaXRlQW5p
bWF0aW9uczsKLSAgICBUaW1lciBtX2FuaW1hdGlvblRpbWVyOwotICAgIFRpbWVyIG1fdXBkYXRl
U3R5bGVJZk5lZWRlZERpc3BhdGNoZXI7Ci0gICAgRnJhbWUmIG1fZnJhbWU7Ci0KLSAgICBzdHJ1
Y3QgRXZlbnRUb0Rpc3BhdGNoIHsKLSAgICAgICAgUmVmPEVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAg
ICAgIEF0b21TdHJpbmcgZXZlbnRUeXBlOwotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAg
ZG91YmxlIGVsYXBzZWRUaW1lOwotICAgIH07Ci0gICAgVmVjdG9yPEV2ZW50VG9EaXNwYXRjaD4g
bV9ldmVudHNUb0Rpc3BhdGNoOwotICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IG1fZWxlbWVudENo
YW5nZXNUb0Rpc3BhdGNoOwotICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBtX3N1c3BlbmRlZERvY3Vt
ZW50czsKLQotICAgIE9wdGlvbmFsPE1vbm90b25pY1RpbWU+IG1fYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lOwotCi0gICAgdXNpbmcgQW5pbWF0aW9uc1NldCA9IEhhc2hTZXQ8UmVmUHRyPEFuaW1h
dGlvbkJhc2U+PjsKLSAgICBBbmltYXRpb25zU2V0IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZTsKLSAgICBBbmltYXRpb25zU2V0IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZTsKLQotICAgIGludCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQ7Ci0KLSAgICBib29s
IG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb247Ci0gICAgYm9vbCBtX2lzU3VzcGVu
ZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVxdWlyZXNMYXlvdXQgeyBmYWxzZSB9OwotCi0g
ICAgLy8gVXNlZCB0byBmbGFnIHdoZXRoZXIgd2Ugc2hvdWxkIHJldmVydCB0byBwcmV2aW91cyBi
dWdneQotICAgIC8vIGJlaGF2aW9yIG9mIGFsbG93aW5nIG5ldyB0cmFuc2l0aW9ucyBhbmQgYW5p
bWF0aW9ucyB0bwotICAgIC8vIHJ1biBldmVuIHdoZW4gdGhpcyBvYmplY3QgaXMgc3VzcGVuZGVk
LgotICAgIGJvb2wgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFiZTc1OWIwODE2MDliZjUzMzM0MGQzMGEwMjYxNDczNzY1MDUwMDUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTg3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotCi0jaW5j
bHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTQ3Jvc3Nm
YWRlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ2xp
cFBhdGhPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJDb2xvckJsZW5kaW5nLmgiCi0jaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJG
b250U2VsZWN0aW9uQWxnb3JpdGhtLmgiCi0jaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiR2FwTGVuZ3RoLmgiCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNp
bmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlN0eWxlQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCi0j
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBpbnQgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBpbnQgZnJvbSwgaW50IHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVz
cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dyZXNz
KQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMg
aW5saW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
ZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Ci17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgR2FwTGVuZ3RoJiBmcm9tLCBjb25zdCBHYXBMZW5ndGgmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCi17Ci0gICAgcmV0dXJuIChmcm9tLmlzTm9ybWFsKCkgfHwgdG8uaXNOb3JtYWwoKSkg
PyB0byA6IGJsZW5kKGZyb20ubGVuZ3RoKCksIHRvLmxlbmd0aCgpLCBwcm9ncmVzcyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgTGVuZ3RoU2l6ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6
ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4geyBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS53aWR0aCwgdG8ud2lkdGgsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGFuaW0sIGZyb20uaGVp
Z2h0LCB0by5oZWlnaHQsIHByb2dyZXNzKSB9OwotfQotCi1zdGF0aWMgaW5saW5lIFNoYWRvd1N0
eWxlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTaGFk
b3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlm
IChmcm9tID09IHRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBkb3VibGUgZnJvbVZhbCA9
IGZyb20gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSB0b1ZhbCA9
IHRvID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKLSAgICBkb3VibGUgcmVzdWx0ID0g
YmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJuIHJl
c3VsdCA+IDAgPyBTaGFkb3dTdHlsZTo6Tm9ybWFsIDogU2hhZG93U3R5bGU6Okluc2V0OwotfQot
Ci1zdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgU2hhZG93RGF0YSogZnJv
bSwgY29uc3QgU2hhZG93RGF0YSogdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBBU1NFUlQo
ZnJvbSAmJiB0byk7Ci0gICAgaWYgKGZyb20tPnN0eWxlKCkgIT0gdG8tPnN0eWxlKCkpCi0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCp0byk7Ci0KLSAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxTaGFkb3dEYXRhPihibGVuZChmcm9tLT5sb2NhdGlvbigpLCB0by0+bG9jYXRpb24o
KSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChmcm9tLT5yYWRpdXMoKSwgdG8tPnJhZGl1cygp
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnNwcmVhZCgpLCB0by0+c3ByZWFkKCks
IHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20tPnN0eWxlKCksIHRvLT5z
dHlsZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGZyb20tPmlzV2Via2l0Qm94U2hhZG93KCksCi0g
ICAgICAgIGJsZW5kKGZyb20tPmNvbG9yKCksIHRvLT5jb2xvcigpLCBwcm9ncmVzcykpOwotfQot
Ci1zdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW1hdGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
LXsKLSAgICBpZiAoYW5pbWF0aW9uLT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKLSAg
ICAgICAgcmV0dXJuIHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3Mp
OwotICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHBy
b2dyZXNzLCBpczxSZW5kZXJCb3g+KGFuaW1hdGlvbi0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxS
ZW5kZXJCb3g+KCphbmltYXRpb24tPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkg
OiBMYXlvdXRTaXplKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJh
dGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDbGlwUGF0
aE9wZXJhdGlvbiogZnJvbSwgQ2xpcFBhdGhPcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Ci17Ci0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgLy8g
T3RoZXIgY2xpcC1wYXRoIG9wZXJhdGlvbnMgdGhhbiBCYXNpY1NoYXBlcyBjYW4gbm90IGJlIGFu
aW1hdGVkLgotICAgIGlmIChmcm9tLT50eXBlKCkgIT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBl
IHx8IHRvLT50eXBlKCkgIT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBlKQotICAgICAgICByZXR1
cm4gdG87Ci0KLSAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSBkb3duY2FzdDxTaGFw
ZUNsaXBQYXRoT3BlcmF0aW9uPigqZnJvbSkuYmFzaWNTaGFwZSgpOwotICAgIGNvbnN0IEJhc2lj
U2hhcGUmIHRvU2hhcGUgPSBkb3duY2FzdDxTaGFwZUNsaXBQYXRoT3BlcmF0aW9uPigqdG8pLmJh
c2ljU2hhcGUoKTsKLQotICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQotICAg
ICAgICByZXR1cm4gdG87Ci0KLSAgICByZXR1cm4gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3Jl
YXRlKHRvU2hhcGUuYmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcykpOwotfQotCi1zdGF0aWMgaW5s
aW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIFNoYXBlVmFsdWUqIGZyb20sIFNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAg
aWYgKGZyb20tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSB8fCB0by0+dHlwZSgp
ICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBp
ZiAoZnJvbS0+Y3NzQm94KCkgIT0gdG8tPmNzc0JveCgpKQotICAgICAgICByZXR1cm4gdG87Ci0K
LSAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSAqZnJvbS0+c2hhcGUoKTsKLSAgICBj
b25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gKnRvLT5zaGFwZSgpOwotCi0gICAgaWYgKCFmcm9t
U2hhcGUuY2FuQmxlbmQodG9TaGFwZSkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVy
biBTaGFwZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSwg
dG8tPmNzc0JveCgpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
PiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbHRlck9wZXJh
dGlvbiogZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24qIHRvT3AsIGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKLXsKLSAgICBBU1NFUlQodG9PcCk7Ci0gICAg
cmV0dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZpbHRlck9wZXJhdGlv
bnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0gICAgc2l6ZV90IGZyb21TaXpl
ID0gZnJvbS5vcGVyYXRpb25zKCkuc2l6ZSgpOwotICAgIHNpemVfdCB0b1NpemUgPSB0by5vcGVy
YXRpb25zKCkuc2l6ZSgpOwotICAgIHNpemVfdCBzaXplID0gc3RkOjptYXgoZnJvbVNpemUsIHRv
U2l6ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAg
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLm9w
ZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IHRvT3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwotICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gYmxlbmRGdW5j
KGFuaW0sIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21PcCA/IGJs
ZW5kRnVuYyhhbmltLCAwLCBmcm9tT3AuZ2V0KCksIHByb2dyZXNzLCB0cnVlKSA6IDApOwotICAg
ICAgICBpZiAoYmxlbmRlZE9wKQotICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBl
bmQoYmxlbmRlZE9wKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGlkZW50aXR5
T3AgPSBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBp
ZiAocHJvZ3Jlc3MgPiAwLjUpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5h
cHBlbmQodG9PcCA/IHRvT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChmcm9tT3AgPyBm
cm9tT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3Ms
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5RmlsdGVyKQotewotICAgIEZp
bHRlck9wZXJhdGlvbnMgcmVzdWx0OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbHRlciBmdW5j
dGlvbiBsaXN0LCB1c2UgdGhhdCB0byBkbyBhIHBlci1mdW5jdGlvbiBhbmltYXRpb24uCi0gICAg
Ci0gICAgYm9vbCBsaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0t
PmZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRl
cjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmJhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0
c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUFw
cGxlQ29sb3JGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5jb2xvckZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3RzTWF0Y2gpCi0gICAgICAgIHJlc3Vs
dCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotICAg
IGVsc2UgewotICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1h
dGNoLCB3ZSBjb3VsZCB0cnkgdG8gY3Jvc3MtZmFkZSwgYnV0IGRvbid0IHlldCBoYXZlIGEgd2F5
IHRvIHJlcHJlc2VudCB0aGF0IGluIENTUy4KLSAgICAgICAgLy8gRm9yIG5vdyB3ZSdsbCBqdXN0
IGZhaWwgdG8gYW5pbWF0ZS4KLSAgICAgICAgcmVzdWx0ID0gdG87Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
aWx0ZXIoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgQ2FjaGVkSW1hZ2Uq
IGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgRmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwg
ZnJvbSwgdG8sIHByb2dyZXNzKTsKLQotICAgIGF1dG8gaW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZSgqaW1hZ2UpOwotICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcihhbmltLT5jdXJyZW50U3R5bGUoKSwgZmlsdGVyUmVz
dWx0LCBEb05vdEFkanVzdFBpeGVsVmFsdWVzKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2VWYWx1ZSksIFdURk1vdmUoZmlsdGVy
VmFsdWUpKTsKLSAgICByZXN1bHQuZ2V0KCkuc2V0RmlsdGVyT3BlcmF0aW9ucyhmaWx0ZXJSZXN1
bHQpOwotICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShyZXN1
bHQpKTsKLX0KLQotc3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBWaXNpYmlsaXR5IGZyb20sIFZpc2liaWxpdHkg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICAvLyBBbnkgbm9uLXplcm8gcmVzdWx0IG1lYW5z
IHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUgdmlzaWJsZS4gT25seSBhdCAwIGRvIHdlIGNv
bnNpZGVyIHRoZSBvYmplY3QgdG8gYmUKLSAgICAvLyBpbnZpc2libGUuIFRoZSBpbnZpc2libGUg
dmFsdWUgd2UgdXNlIChWaXNpYmlsaXR5OjpIaWRkZW4gdnMuIFZpc2liaWxpdHk6OkNvbGxhcHNl
KSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpZWQgZnJvbS90byB2YWx1ZXMuCi0gICAgZG91YmxlIGZy
b21WYWwgPSBmcm9tID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6IDAuOwotICAgIGRvdWJs
ZSB0b1ZhbCA9IHRvID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6IDAuOwotICAgIGlmIChm
cm9tVmFsID09IHRvVmFsKQotICAgICAgICByZXR1cm4gdG87Ci0gICAgZG91YmxlIHJlc3VsdCA9
IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3MpOwotICAgIHJldHVybiBy
ZXN1bHQgPiAwLiA/IFZpc2liaWxpdHk6OlZpc2libGUgOiAodG8gIT0gVmlzaWJpbGl0eTo6Vmlz
aWJsZSA/IHRvIDogZnJvbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVGV4dFVuZGVybGluZU9mZnNl
dCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3Qg
VGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5pc0xlbmd0aCgpICYmIHRvLmlzTGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoTGVu
Z3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0aFZhbHVlKCks
IHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhB
dXRvKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IFRleHREZWNv
cmF0aW9uVGhpY2tuZXNzJiBmcm9tLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5pc0xlbmd0aCgpICYmIHRvLmlzTGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlV2l0
aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOwotICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3Jl
YXRlV2l0aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aEJveCYgZnJv
bSwgY29uc3QgTGVuZ3RoQm94JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIExlbmd0aEJv
eCByZXN1bHQoYmxlbmRGdW5jKGFuaW0sIGZyb20udG9wKCksIHRvLnRvcCgpLCBwcm9ncmVzcyks
Ci0gICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5yaWdodCgpLCB0by5y
aWdodCgpLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5ib3R0b20oKSwgdG8uYm90dG9tKCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlZnQoKSwgdG8ubGVmdCgpLCBwcm9ncmVzcykpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVmFsdWUgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25zdCBTVkdMZW5ndGhW
YWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17
Ci0gICAgcmV0dXJuIFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tLCB0bywgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwcm9ncmVzcykpOwotfQotCi1zdGF0aWMgaW5saW5lIFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25z
dCBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+JiBmcm9tLCBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoVmFs
dWU+JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHNpemVfdCBmcm9tTGVuZ3RoID0gZnJv
bS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvTGVuZ3RoID0gdG8uc2l6ZSgpOwotICAgIGlmICghZnJv
bUxlbmd0aCkKLSAgICAgICAgcmV0dXJuICFwcm9ncmVzcyA/IGZyb20gOiB0bzsKLSAgICBpZiAo
IXRvTGVuZ3RoKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKLSAg
ICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsKLSAgICBpZiAoZnJvbUxlbmd0aCAh
PSB0b0xlbmd0aCkgewotICAgICAgICBpZiAoIXJlbWFpbmRlcihzdGQ6Om1heChmcm9tTGVuZ3Ro
LCB0b0xlbmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRvTGVuZ3RoKSkpCi0gICAgICAgICAg
ICByZXN1bHRMZW5ndGggPSBzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xlbmd0aCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGggKiB0b0xlbmd0aDsK
LSAgICB9Ci0gICAgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiByZXN1bHQocmVzdWx0TGVuZ3RoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdExlbmd0aDsgKytpKQotICAgICAgICBy
ZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbVtpICUgZnJvbUxlbmd0aF0sIHRv
W2kgJSB0b0xlbmd0aF0sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBjcm9z
c2ZhZGVCbGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgU3R5bGVDYWNoZWRJ
bWFnZSogZnJvbVN0eWxlSW1hZ2UsIFN0eWxlQ2FjaGVkSW1hZ2UqIHRvU3R5bGVJbWFnZSwgZG91
YmxlIHByb2dyZXNzKQotewotICAgIC8vIElmIHByb2dyZXNzIGlzIGF0IG9uZSBvZiB0aGUgZXh0
cmVtZXMsIHdlIHdhbnQgZ2V0Q29tcHV0ZWRTdHlsZSB0byBzaG93IHRoZSBpbWFnZSwKLSAgICAv
LyBub3QgYSBjb21wbGV0ZWQgY3Jvc3MtZmFkZSwgc28gd2UgaGFuZCBiYWNrIG9uZSBvZiB0aGUg
ZXhpc3RpbmcgaW1hZ2VzLgotICAgIGlmICghcHJvZ3Jlc3MpCi0gICAgICAgIHJldHVybiBmcm9t
U3R5bGVJbWFnZTsKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSkKLSAgICAgICAgcmV0dXJuIHRvU3R5
bGVJbWFnZTsKLSAgICBpZiAoIWZyb21TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpIHx8ICF0b1N0
eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpCi0gICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7Ci0K
LSAgICBhdXRvIGZyb21JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCpmcm9tU3R5
bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSk7Ci0gICAgYXV0byB0b0ltYWdlVmFsdWUgPSBDU1NJbWFn
ZVZhbHVlOjpjcmVhdGUoKnRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSk7Ci0gICAgYXV0byBw
ZXJjZW50YWdlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7Ci0KLSAgICBhdXRvIGNyb3NzZmFkZVZhbHVlID0gQ1NTQ3Jv
c3NmYWRlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGZyb21JbWFnZVZhbHVlKSwgV1RGTW92ZSh0b0lt
YWdlVmFsdWUpLCBXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpOwotICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1ZSkpOwotfQotCi1zdGF0
aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgU3R5bGVJbWFnZSogZnJvbSwgU3R5bGVJbWFnZSogdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4g
dG87Ci0KLSAgICBmcm9tID0gZnJvbS0+c2VsZWN0ZWRJbWFnZSgpOwotICAgIHRvID0gdG8tPnNl
bGVjdGVkSW1hZ2UoKTsKLQotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJldHVybiB0
bzsgICAgCi0KLSAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28gZ2VuZXJhdGVkIGltYWdlcy4g
Q3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgotICAgIGlmIChpczxTdHlsZUdlbmVyYXRl
ZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAg
ICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKLSAgICAgICAgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlPigq
dG8pLmltYWdlVmFsdWUoKTsKLQotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
ZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7
Ci0gICAgICAgICAgICAvLyBBbmltYXRpb24gb2YgZ2VuZXJhdGVkIGltYWdlcyBqdXN0IHBvc3Np
YmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1YWwuCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Ug
ZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgQ1NTRmlsdGVy
SW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KGZy
b21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIg
PSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCk7Ci0gICAgICAgICAg
ICBpZiAoZnJvbUZpbHRlci5lcXVhbElucHV0SW1hZ2VzKHRvRmlsdGVyKSAmJiBmcm9tRmlsdGVy
LmNhY2hlZEltYWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0s
IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCks
IHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1ND
cm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NDcm9zc2ZhZGVW
YWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2Vu
ZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRv
d25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCk7Ci0gICAgICAgICAgICBpZiAo
ZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0SW1hZ2VzKHRvQ3Jvc3NmYWRlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0gdG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNy
b3NzZmFkZSwgcHJvZ3Jlc3MpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKCpjcm9zc2ZhZGVCbGVuZCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGFuaW1hdGlvbiBiZXR3
ZWVuIHR3byAqZ3JhZGllbnQoKSBmdW5jdGlvbnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NTYKLSAgICB9IGVsc2UgaWYgKGlzPFN0eWxl
R2VuZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUNhY2hlZEltYWdlPigqdG8pKSB7Ci0g
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxT
dHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmNhY2hlZEltYWdl
KCkgJiYgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKS5jYWNoZWRJbWFnZSgpID09IGZy
b21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0
ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJh
dGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gY3Jvc3MtZmFkZSBhbmQgaW1h
Z2Ugc291cmNlLgotICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pICYm
IGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8p
LmltYWdlVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2Vu
ZXJhdGVkKSkgewotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSBk
b3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCk7Ci0gICAgICAgICAgICBp
ZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigq
ZnJvbSkuY2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpLCBG
aWx0ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3Mp
OwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVu
IGltYWdlIHNvdXJjZSBhbmQgY3Jvc3MtZmFkZS4KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hlZCBhbmQgZ2VuZXJhdGVkIGltYWdlcy4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgyOTMKLSAg
ICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+
KCp0bykpCi0gICAgICAgIHJldHVybiBjcm9zc2ZhZGVCbGVuZChhbmltLCBkb3duY2FzdDxTdHls
ZUNhY2hlZEltYWdlPihmcm9tKSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4odG8pLCBwcm9n
cmVzcyk7Ci0KLSAgICByZXR1cm4gdG87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20uaGFzSW1hZ2UoKSB8fCAhdG8uaGFzSW1hZ2UoKSkK
LSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgLy8gRklYTUUgKDc0MTEyKTogU3VwcG9ydCB0cmFu
c2l0aW9uaW5nIGJldHdlZW4gTmluZVBpZWNlSW1hZ2VzIHRoYXQgZGlmZmVyIGJ5IG1vcmUgdGhh
biBpbWFnZSBjb250ZW50LgotCi0gICAgaWYgKGZyb20uaW1hZ2VTbGljZXMoKSAhPSB0by5pbWFn
ZVNsaWNlcygpIHx8IGZyb20uYm9yZGVyU2xpY2VzKCkgIT0gdG8uYm9yZGVyU2xpY2VzKCkgfHwg
ZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRzZXQoKSB8fCBmcm9tLmZpbGwoKSAhPSB0by5maWxsKCkg
fHwgZnJvbS5ob3Jpem9udGFsUnVsZSgpICE9IHRvLmhvcml6b250YWxSdWxlKCkgfHwgZnJvbS52
ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0aWNhbFJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIHRvOwot
Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gYW5pbS0+cmVuZGVyZXIoKSkgewotICAgICAgICBp
ZiAoZnJvbS5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkgIT0gdG8uaW1hZ2UoKS0+
aW1hZ2VTaXplKHJlbmRlcmVyLCAxLjApKQotICAgICAgICAgICAgcmV0dXJuIHRvOwotICAgIH0K
LQotICAgIHJldHVybiBOaW5lUGllY2VJbWFnZShibGVuZEZ1bmMoYW5pbSwgZnJvbS5pbWFnZSgp
LCB0by5pbWFnZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGZyb20uaW1hZ2VTbGljZXMoKSwgZnJv
bS5maWxsKCksIGZyb20uYm9yZGVyU2xpY2VzKCksIGZyb20ub3V0c2V0KCksIGZyb20uaG9yaXpv
bnRhbFJ1bGUoKSwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotCi1zdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRm9udFZhcmlh
dGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGZyb20uc2l6ZSgpICE9IHRvLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgIEZvbnRWYXJpYXRpb25TZXR0
aW5ncyByZXN1bHQ7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGZyb20uc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgYXV0byYgZnJvbUl0ZW0g
PSBmcm9tLmF0KGkpOwotICAgICAgICBhdXRvJiB0b0l0ZW0gPSB0by5hdChpKTsKLSAgICAgICAg
aWYgKGZyb21JdGVtLnRhZygpICE9IHRvSXRlbS50YWcoKSkKLSAgICAgICAgICAgIHJldHVybiBG
b250VmFyaWF0aW9uU2V0dGluZ3MoKTsKLSAgICAgICAgZmxvYXQgaW50ZXJwb2xhdGVkID0gYmxl
bmRGdW5jKGFuaW0sIGZyb21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1ZSgpLCBwcm9ncmVzcyk7
Ci0gICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50YWcoKSwgaW50ZXJwb2xhdGVkIH0p
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYKLQotc3RhdGljIGlubGlu
ZSBGb250U2VsZWN0aW9uVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIEZvbnRTZWxlY3Rpb25WYWx1ZSBmcm9tLCBGb250U2VsZWN0aW9uVmFsdWUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKGJs
ZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSksIHN0YXRpY19jYXN0PGZsb2F0
Pih0byksIHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Rm9udFNlbGVj
dGlvblZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmcm9tLCBPcHRpb25hbDxGb250U2VsZWN0
aW9uVmFsdWU+IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIEZvbnRTZWxlY3Rp
b25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20udmFsdWUoKSks
IHN0YXRpY19jYXN0PGZsb2F0Pih0by52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKLX0KLQotY2xhc3Mg
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShD
U1NQcm9wZXJ0eUlEIHByb3ApCi0gICAgICAgIDogbV9wcm9wKHByb3ApCi0gICAgewotICAgIH0K
LSAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgPSBkZWZhdWx0Owot
Ci0gICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGRvdWJsZSkgY29uc3QgPSAwOwotICAgIAotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUpIGNvbnN0ID0gMDsK
LSNlbmRpZgotCi0gICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvcDsgfQotCi0gICAgdmlydHVhbCBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9w
OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyR2V0dGVyKENTU1By
b3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QpCi0gICAgICAg
IDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVy
KGdldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEg
fHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAoYS0+Km1f
Z2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0gICAgVCB2YWx1ZShjb25z
dCBSZW5kZXJTdHlsZSogYSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYS0+Km1fZ2V0
dGVyKSgpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5
bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRv
ICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3Bl
Y3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAg
IH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgVCAoUmVuZGVyU3R5bGU6OiptX2dldHRlciko
KSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
Ojoqc2V0dGVyKShUKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4ocHJvcCwg
Z2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dl
dHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCBwcm9n
cmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKFQpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4gewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8VD4mJikpCi0gICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9z
ZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwg
KGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXBy
b3RlY3RlZDoKLSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShSZWZQdHI8VD4mJik7
Ci19OwotCi1jbGFzcyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBj
b25zdCBMZW5ndGgmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKExlbmd0aCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcCwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRl
cikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICByZXR1cm4gIShhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+Ojpt
X2dldHRlcikoKS5pc0F1dG8oKSAmJiAhKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
TGVuZ3RoJj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dl
dHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChSZW5k
ZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5ndGgmJik7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLWNsYXNzIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHBy
b3AsIGNvbnN0IFQmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFQmJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IFQmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUJiYpOwotfTsKLQotY2xhc3MgUHJv
cGVydHlXcmFwcGVyQ2xpcFBhdGggOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxD
bGlwUGF0aE9wZXJhdGlvbj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENTU1Byb3BlcnR5SUQgcHJvcCwgQ2xpcFBh
dGhPcGVyYXRpb24qIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4mJikpCi0gICAgICAgIDog
UmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxDbGlwUGF0aE9wZXJhdGlvbj4ocHJvcCwgZ2V0dGVy
LCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBk
b2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxz
ZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCi0gICAgICAgIGlmIChhID09IGIpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlwUGF0aEEg
PSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBhdGhC
ID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKGNsaXBQYXRoQSA9PSBjbGlwUGF0aEIp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aEEgfHwgIWNs
aXBQYXRoQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpjbGlw
UGF0aEEgPT0gKmNsaXBQYXRoQjsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFZBUklBVElPTl9G
T05UUykKLWNsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyA6IHB1Ymxp
YyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZhcmlhdGlvblNldHRpbmdzPiB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlv
blNldHRpbmdzKENTU1Byb3BlcnR5SUQgcHJvcCwgRm9udFZhcmlhdGlvblNldHRpbmdzIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKEZv
bnRWYXJpYXRpb25TZXR0aW5ncykpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJp
YXRpb25TZXR0aW5ncz4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNv
bnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NBID0gKGEtPiptX2dl
dHRlcikoKTsKLSAgICAgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25T
ZXR0aW5nc0IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICByZXR1cm4gdmFyaWF0aW9uU2V0
dGluZ3NBID09IHZhcmlhdGlvblNldHRpbmdzQjsKLSAgICB9Ci19OwotI2VuZGlmCi0KLWNsYXNz
IFByb3BlcnR5V3JhcHBlclNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8
U2hhcGVWYWx1ZT4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwgU2hhcGVWYWx1ZSogKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
UmVmUHRyPFNoYXBlVmFsdWU+JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBw
ZXI8U2hhcGVWYWx1ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFNo
YXBlVmFsdWUqIHNoYXBlQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIFNoYXBlVmFsdWUq
IHNoYXBlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGlmIChzaGFwZUEgPT0gc2hhcGVC
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghc2hhcGVBIHx8ICFzaGFw
ZUIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAqc2hhcGVBID09
ICpzaGFwZUI7Ci0gICAgfQotfTsKLQotY2xhc3MgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlciA6
IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTdHlsZUltYWdlUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgU3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPFN0eWxlSW1hZ2U+
JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4ocHJv
cCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0eWxl
SW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIFN0eWxlSW1hZ2UqIGlt
YWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1
YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBw
ZXJDb2xvciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3ImPiB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVy
Q29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkK
LSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3ImPihwcm9wLCBnZXR0
ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxl
KiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3Im
Pjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj46
Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
KFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7Ci19OwotCi1jbGFzcyBQcm9w
ZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVy
dHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5KCkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVy
U3R5bGU6OnNldE9wYWNpdHkpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgYW5pbWF0aW9uSXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQg
YmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUq
IGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBkc3QtPnNldE9wYWNpdHko
YmxlbmRGdW5jKGFuaW0sIGEtPm9wYWNpdHkoKSwgYi0+b3BhY2l0eSgpLCBwcm9ncmVzcykpOwot
ICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtIDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4gewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckFj
Y2VsZXJhdGVkVHJhbnNmb3JtKCkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRy
YW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBkc3QtPnNldFRyYW5zZm9ybShibGVuZEZ1bmMoYW5pbSwgYS0+dHJhbnNmb3JtKCksIGItPnRy
YW5zZm9ybSgpLCBwcm9ncmVzcykpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ckZpbHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdy
YXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFw
cGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPihwcm9wZXJ0eUlELCBnZXR0ZXIsIHNldHRlcikK
LSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5
RmlsdGVyCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgIHx8IHByb3Bl
cnR5KCkgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcgotI2VuZGlmCi0gICAgICAg
ICAgICA7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPjo6bV9nZXR0ZXIpKCksIChiLT4q
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPjo6bV9nZXR0ZXIp
KCksIHByb2dyZXNzLCBwcm9wZXJ0eSgpKSk7Ci0gICAgfQotfTsKLQotc3RhdGljIGlubGluZSBz
aXplX3Qgc2hhZG93TGlzdExlbmd0aChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCi17Ci0gICAg
c2l6ZV90IGNvdW50OwotICAgIGZvciAoY291bnQgPSAwOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRv
dy0+bmV4dCgpKQotICAgICAgICArK2NvdW50OwotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3Rh
dGljIGlubGluZSBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dGb3JCbGVuZGluZyhjb25zdCBTaGFk
b3dEYXRhKiBzcmNTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIG90aGVyU2hhZG93KQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0U2hhZG93RGF0YShMYXlv
dXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCBmYWxzZSwgQ29sb3I6OnRyYW5z
cGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZh
dWx0SW5zZXRTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpJbnNl
dCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQo
KSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRX
ZWJLaXRCb3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpJbnNl
dCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotCi0gICAgaWYgKHNyY1NoYWRvdykK
LSAgICAgICAgcmV0dXJuIHNyY1NoYWRvdzsKLQotICAgIGlmIChvdGhlclNoYWRvdy0+c3R5bGUo
KSA9PSBTaGFkb3dTdHlsZTo6SW5zZXQpCi0gICAgICAgIHJldHVybiBvdGhlclNoYWRvdy0+aXNX
ZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0SW5zZXRXZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgp
IDogJmRlZmF1bHRJbnNldFNoYWRvd0RhdGEuZ2V0KCk7Ci0KLSAgICByZXR1cm4gb3RoZXJTaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdFdlYktpdEJveFNoYWRvd0RhdGEuZ2V0
KCkgOiAmZGVmYXVsdFNoYWRvd0RhdGEuZ2V0KCk7Ci19Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
clNoYWRvdyA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTaGFkb3co
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShzdGQ6OnVuaXF1ZV9wdHI8
U2hhZG93RGF0YT4sIGJvb2wpKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcCkKLSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8
fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgIC8vIGVuZCBvZiBib3RoIGxpc3RzCi0gICAgICAgICAgICBpZiAoIXNoYWRv
d0EgJiYgIXNoYWRvd0IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
ICAgIC8vIGVuZCBvZiBqdXN0IG9uZSBvZiB0aGUgbGlzdHMKLSAgICAgICAgICAgIGlmICghc2hh
ZG93QSB8fCAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmICgqc2hhZG93QSAhPSAqc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHNoYWRvd0EgPSBzaGFkb3dBLT5uZXh0KCk7Ci0gICAgICAg
ICAgICBzaGFkb3dCID0gc2hhZG93Qi0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgp
OwotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsK
LQotICAgICAgICBpbnQgZnJvbUxlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgoc2hhZG93QSk7Ci0g
ICAgICAgIGludCB0b0xlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgoc2hhZG93Qik7Ci0KLSAgICAg
ICAgaWYgKGZyb21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21MZW5ndGggPD0gMSAmJiB0b0xl
bmd0aCA8PSAxKSkgewotICAgICAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZFNpbXBsZU9y
TWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFkb3dBLCBzaGFkb3dCKSwgZmFs
c2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgKGRzdC0+Km1f
c2V0dGVyKShibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywgc2hhZG93
QSwgc2hhZG93QiwgZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBmYWxzZSk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNoYWRv
d0RhdGEgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMo
cHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IpIGNvbnN0Ci0gICAgewot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKLSAgICAg
ICAgU2hhZG93RGF0YSogbGFzdFNoYWRvdyA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKHNoYWRvd0Eg
fHwgc2hhZG93QikgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0g
c2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93QSwgc2hhZG93Qik7Ci0gICAgICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBkc3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dCLCBzaGFkb3dB
KTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kZWRTaGFk
b3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsKLSAg
ICAgICAgICAgIFNoYWRvd0RhdGEqIGJsZW5kZWRTaGFkb3dQdHIgPSBibGVuZGVkU2hhZG93Lmdl
dCgpOwotCi0gICAgICAgICAgICBpZiAoIWxhc3RTaGFkb3cpCi0gICAgICAgICAgICAgICAgbmV3
U2hhZG93RGF0YSA9IFdURk1vdmUoYmxlbmRlZFNoYWRvdyk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbGFzdFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKGJsZW5kZWRTaGFkb3cp
KTsKLQotICAgICAgICAgICAgbGFzdFNoYWRvdyA9IGJsZW5kZWRTaGFkb3dQdHI7Ci0KLSAgICAg
ICAgICAgIHNoYWRvd0EgPSBzaGFkb3dBID8gc2hhZG93QS0+bmV4dCgpIDogMDsKLSAgICAgICAg
ICAgIHNoYWRvd0IgPSBzaGFkb3dCID8gc2hhZG93Qi0+bmV4dCgpIDogMDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IsIGludCBmcm9tTGVuZ3RoLCBp
bnQgdG9MZW5ndGgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGUgc2hhZG93cyBpbiBTaGFk
b3dEYXRhIGFyZSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlciwgc28gd2hlbiBhbmltYXRpbmcgbWlz
bWF0Y2hlZCBsaXN0cywKLSAgICAgICAgLy8gcmV2ZXJzZSB0aGVtIGFuZCBtYXRjaCBmcm9tIHRo
ZSBlbmQuCi0gICAgICAgIFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gZnJvbVNoYWRvd3Mo
ZnJvbUxlbmd0aCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tTGVuZ3RoIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgICAgIGZyb21TaGFkb3dzW2ldID0gc2hhZG93QTsKLSAgICAgICAg
ICAgIHNoYWRvd0EgPSBzaGFkb3dBLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0
b3I8Y29uc3QgU2hhZG93RGF0YSosIDQ+IHRvU2hhZG93cyh0b0xlbmd0aCk7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSB0b0xlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICB0b1No
YWRvd3NbaV0gPSBzaGFkb3dCOwotICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdT
aGFkb3dEYXRhOwotCi0gICAgICAgIGludCBtYXhMZW5ndGggPSBzdGQ6Om1heChmcm9tTGVuZ3Ro
LCB0b0xlbmd0aCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFkb3cgPSBpIDwgZnJvbUxl
bmd0aCA/IGZyb21TaGFkb3dzW2ldIDogMDsKLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEq
IHRvU2hhZG93ID0gaSA8IHRvTGVuZ3RoID8gdG9TaGFkb3dzW2ldIDogMDsKLQotICAgICAgICAg
ICAgY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoZnJvbVNo
YWRvdywgdG9TaGFkb3cpOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93
ID0gc2hhZG93Rm9yQmxlbmRpbmcodG9TaGFkb3csIGZyb21TaGFkb3cpOwotCi0gICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhh
bmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgLy8gSW5z
ZXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIuCi0gICAg
ICAgICAgICBibGVuZGVkU2hhZG93LT5zZXROZXh0KFdURk1vdmUobmV3U2hhZG93RGF0YSkpOwot
ICAgICAgICAgICAgbmV3U2hhZG93RGF0YSA9IFdURk1vdmUoYmxlbmRlZFNoYWRvdyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKLSAgICB9Ci0KLSAgICBjb25z
dCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4sIGJv
b2wpOwotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NT
UHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAg
OiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9nZXR0ZXIo
Z2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoYSk7Ci0gICAgICAgIENvbG9y
IHRvQ29sb3IgPSB2YWx1ZShiKTsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkg
JiYgIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+
Y29sb3IoKTsKLSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRv
Q29sb3IgPSBiLT5jb2xvcigpOwotCi0gICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xv
cjsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoYSk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3Ig
PSB2YWx1ZShiKTsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29s
b3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghZnJvbUNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7Ci0gICAg
ICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29s
b3IoKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9y
LCB0b0NvbG9yLCBwcm9ncmVzcykpOwotICAgIH0KLQotICAgIENvbG9yIHZhbHVlKGNvbnN0IFJl
bmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIp
KCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSog
cmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9p
ZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLQotZW51bSBN
YXliZUludmFsaWRDb2xvclRhZyB7IE1heWJlSW52YWxpZENvbG9yIH07Ci1jbGFzcyBQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNv
bnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBDb2xvciYgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oip2aXNp
dGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdy
YXBwZXJDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQotICAgICAgICAsIG1fdmlzaXRlZFdy
YXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRl
ciwgdmlzaXRlZFNldHRlcikpCi0gICAgewotICAgIH0KLSAgICBQcm9wZXJ0eVdyYXBwZXJWaXNp
dGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIE1heWJlSW52YWxpZENvbG9yVGFn
LCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwKLSAgICAgICAgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
dmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKLSAgICAg
ICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3I+KHByb3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQotICAgIHsKLSAg
ICB9Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd3JhcHBlci0+
ZXF1YWxzKGEsIGIpICYmIG1fdmlzaXRlZFdyYXBwZXItPmVxdWFscyhhLCBiKTsKLSAgICB9Ci0g
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fd3JhcHBl
ci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgICAgIG1fdmlzaXRlZFdy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwotICAgIH0KLQotI2lmICFM
T0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgbV93cmFwcGVyLT5sb2dCbGVuZChhLCBi
LCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fd3JhcHBlcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV92aXNp
dGVkV3JhcHBlcjsKLX07Ci0KLS8vIFdyYXBwZXIgYmFzZSBjbGFzcyBmb3IgYW4gYW5pbWF0YWJs
ZSBwcm9wZXJ0eSBpbiBhIEZpbGxMYXllcgotY2xhc3MgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5KQotICAgICAgICA6IG1fcHJvcGVydHkocHJvcGVydHkpCi0gICAgewotICAgIH0KLSAg
ICB2aXJ0dWFsIH5GaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgPSBkZWZh
dWx0OwotCi0gICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydHk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiwgY29u
c3QgRmlsbExheWVyKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwg
Y29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0KLSNpZiAhTE9HX0RJU0FCTEVE
Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLSNlbmRp
ZgotcHJpdmF0ZToKLSAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1
YmxpYyBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXIpOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkg
Y29uc3QpCi0gICAgICAgIDogRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wZXJ0eSkKLSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7Ci0g
ICAgfQotCi0gICAgVCB2YWx1ZShjb25zdCBGaWxsTGF5ZXIqIGxheWVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIChsYXllci0+Km1fZ2V0dGVyKSgpOwotICAgIH0KLQotI2lmICFMT0df
RElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRl
eHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAt
PiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAg
VCAoRmlsbExheWVyOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLWNsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgVCYgKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
RmlsbExheWVyOjoqc2V0dGVyKShUKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEs
IGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgKGItPipGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgcHJvZ3Jl
c3MpKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25z
dCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIq
IGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6cHJvcGVy
dHkoKSkKLSAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGEpCi0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYikKLSAgICAgICAg
ICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgot
ICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShUKTsKLX07Ci0KLWNsYXNzIEZpbGxMYXll
clBvc2l0aW9uUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgRmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgTGVuZ3RoJiAoRmlsbExheWVyOjoqbGVuZ3RoR2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChGaWxsTGF5ZXI6OipsZW5ndGhTZXR0ZXIpKExlbmd0aCksIEVkZ2UgKEZpbGxM
YXllcjo6Km9yaWdpbkdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqb3JpZ2luU2V0
dGVyKShFZGdlKSwgRWRnZSBmYXJFZGdlKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wZXJ0eSwgbGVuZ3RoR2V0dGVyKQotICAgICAg
ICAsIG1fbGVuZ3RoU2V0dGVyKGxlbmd0aFNldHRlcikKLSAgICAgICAgLCBtX29yaWdpbkdldHRl
cihvcmlnaW5HZXR0ZXIpCi0gICAgICAgICwgbV9vcmlnaW5TZXR0ZXIob3JpZ2luU2V0dGVyKQot
ICAgICAgICAsIG1fZmFyRWRnZShmYXJFZGdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVx
dWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikgY29uc3Qgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICBMZW5ndGggdG9MZW5ndGgg
PSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdlID0gKGEtPiptX29yaWdp
bkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3JpZ2luR2V0dGVyKSgp
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZyb21MZW5ndGggPT0gdG9MZW5ndGggJiYgZnJv
bUVkZ2UgPT0gdG9FZGdlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgTGVuZ3Ro
IHRvTGVuZ3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVu
Z3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChh
LT4qbV9vcmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdp
bkdldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChmcm9tRWRnZSAhPSB0b0VkZ2UpIHsK
LSAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJpZ2h0L2JvdHRvbSBpbnRvIGEgY2FsYyBleHBy
ZXNzaW9uLAotICAgICAgICAgICAgaWYgKGZyb21FZGdlID09IG1fZmFyRWRnZSkKLSAgICAgICAg
ICAgICAgICBmcm9tTGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGZyb21M
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAodG9FZGdlID09IG1fZmFyRWRnZSkgewotICAg
ICAgICAgICAgICAgIHRvTGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKHRv
TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAoZHN0LT4qbV9vcmlnaW5TZXR0ZXIpKGZyb21FZGdl
KTsgLy8gTm93IHdlIGhhdmUgYSBjYWxjKDEwMCUgLSBsKSwgaXQncyByZWxhdGl2ZSB0byB0aGUg
bGVmdC90b3AgZWRnZS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIChkc3Qt
PiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBw
cm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxM
YXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRv
ICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3Bl
Y3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAg
IH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9sZW5ndGhT
ZXR0ZXIpKExlbmd0aCk7Ci0gICAgRWRnZSAoRmlsbExheWVyOjoqbV9vcmlnaW5HZXR0ZXIpKCkg
Y29uc3Q7Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9vcmlnaW5TZXR0ZXIpKEVkZ2UpOwotICAg
IEVkZ2UgbV9mYXJFZGdlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBGaWxs
TGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgVCogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVy
Ojoqc2V0dGVyKShSZWZQdHI8VD4mJikpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQqPihwcm9wZXJ0eSwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRl
cikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIChiLT4qRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnByb3BlcnR5KCkpCi0gICAgICAgICAgICA8PCAi
IGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShhKQot
ICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxU
Kj46OnZhbHVlKGIpCi0gICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0
TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlm
Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoUmVmUHRyPFQ+
JiYpOwotfTsKLQotY2xhc3MgRmlsbExheWVyU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlciA6IHB1
YmxpYyBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+IHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJTdHlsZUlt
YWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlSW1hZ2UqIChG
aWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoUmVm
UHRyPFN0eWxlSW1hZ2U+JiYpKQotICAgICAgICA6IEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXI8U3R5bGVJbWFnZT4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXll
ciogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0ZXIpKCk7
Ci0gICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAg
IHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmlt
YXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVy
dHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIg
YXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jl
c3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWNs
YXNzIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBjb25zdCBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVyc0dldHRlcikoKSBj
b25zdDsKLSAgICB0eXBlZGVmIEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzQWNjZXNz
b3IpKCk7Ci0KLSAgICBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJv
cGVydHksIExheWVyc0dldHRlciBnZXR0ZXIsIExheWVyc0FjY2Vzc29yIGFjY2Vzc29yKQotICAg
ICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCi0gICAgICAgICwg
bV9sYXllcnNHZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fbGF5ZXJzQWNjZXNzb3IoYWNjZXNz
b3IpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWDoKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVy
ID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHks
ICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WFBvc2l0aW9uLCAmRmlsbExh
eWVyOjpiYWNrZ3JvdW5kWE9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFhPcmlnaW4s
IEVkZ2U6OlJpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblk6Ci0gICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1h
a2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmls
bExheWVyOjp5UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXllcjo6
YmFja2dyb3VuZFlPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRZT3JpZ2luLCBFZGdl
OjpCb3R0b20pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kU2l6ZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRT
aXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6Ci0gICAgICAgICAg
ICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyPExlbmd0aFNpemU+Pihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6c2l6ZUxlbmd0aCwg
JkZpbGxMYXllcjo6c2V0U2l6ZUxlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKLSAgICAgICAgICAgIG1fZmlsbExheWVy
UHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlX
cmFwcGVyPihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8
fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvKiBmcm9tTGF5
ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAgICAgYXV0byogdG9MYXllciA9ICYo
Yi0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotCi0gICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9M
YXllcikgewotICAgICAgICAgICAgaWYgKCFtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+ZXF1
YWxzKGZyb21MYXllciwgdG9MYXllcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBmcm9tTGF5ZXIgPSBmcm9tTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAg
IHRvTGF5ZXIgPSB0b0xheWVyLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgYXV0byogYUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAg
IGF1dG8qIGJMYXllciA9ICYoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiBk
c3RMYXllciA9ICYoZHN0LT4qbV9sYXllcnNBY2Nlc3NvcikoKTsKLQotICAgICAgICB3aGlsZSAo
YUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgewotICAgICAgICAgICAgbV9maWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdExheWVyLCBhTGF5ZXIsIGJMYXllciwgcHJv
Z3Jlc3MpOwotICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAgIGRzdExheWVyID0gZHN0TGF5
ZXItPm5leHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8sIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKLSAgICB7Ci0gICAgICAgIGF1dG8qIGFMYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0dGVy
KSgpOwotICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0g
ICAgICAgIGF1dG8qIGRzdExheWVyID0gJihyZXN1bHQtPiptX2xheWVyc0dldHRlcikoKTsKLQot
ICAgICAgICB3aGlsZSAoYUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgewotICAgICAgICAg
ICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXItPmxvZ0JsZW5kKGRzdExheWVyLCBhTGF5ZXIs
IGJMYXllciwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7
Ci0gICAgICAgICAgICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAgIGRzdExh
eWVyID0gZHN0TGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlPiBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlcjsKLQotICAgIExheWVyc0dldHRlciBt
X2xheWVyc0dldHRlcjsKLSAgICBMYXllcnNBY2Nlc3NvciBtX2xheWVyc0FjY2Vzc29yOwotfTsK
LQotY2xhc3MgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBWZWN0
b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IGxvbmdoYW5kV3JhcHBlcnMpCi0gICAg
ICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAgICAgLCBt
X3Byb3BlcnR5V3JhcHBlcnMoV1RGTW92ZShsb25naGFuZFdyYXBwZXJzKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBi
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3By
b3BlcnR5V3JhcHBlcnMpIHsKLSAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1YWxzKGEsIGIp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQotICAg
ICAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAg
fQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogZHN0LCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBw
ZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCi0gICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChh
LCBiLCBkc3QsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGNvbnN0IFZlY3RvcjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4mIHByb3BlcnR5V3JhcHBlcnMoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnM7IH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8QW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IG1fcHJvcGVydHlXcmFwcGVyczsKLX07Ci0KLWNs
YXNzIFByb3BlcnR5V3JhcHBlckZsZXggOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVy
dHlXcmFwcGVyRmxleCgpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShD
U1NQcm9wZXJ0eUZsZXgpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVy
biBhLT5mbGV4QmFzaXMoKSA9PSBiLT5mbGV4QmFzaXMoKSAmJiBhLT5mbGV4R3JvdygpID09IGIt
PmZsZXhHcm93KCkgJiYgYS0+ZmxleFNocmluaygpID09IGItPmZsZXhTaHJpbmsoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgZHN0
LT5zZXRGbGV4QmFzaXMoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhCYXNpcygpLCBiLT5mbGV4QmFz
aXMoKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgZHN0LT5zZXRGbGV4R3JvdyhibGVuZEZ1bmMoYW5p
bSwgYS0+ZmxleEdyb3coKSwgYi0+ZmxleEdyb3coKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgZHN0
LT5zZXRGbGV4U2hyaW5rKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4U2hyaW5rKCksIGItPmZsZXhT
aHJpbmsoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
UmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmlt
YXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgZmxleCBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgot
fTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQgOiBwdWJsaWMgQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlJRCBwcm9wLCBTVkdQYWlu
dFR5cGUgKFJlbmRlclN0eWxlOjoqcGFpbnRUeXBlR2V0dGVyKSgpIGNvbnN0LCBDb2xvciAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShj
b25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJv
cCkKLSAgICAgICAgLCBtX3BhaW50VHlwZUdldHRlcihwYWludFR5cGVHZXR0ZXIpCi0gICAgICAg
ICwgbV9nZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkg
IT0gKGItPiptX3BhaW50VHlwZUdldHRlcikoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgYW5pbWF0aW9ucyBiZXR3ZWVuIFNWR1BhaW50
cyB0aGF0IGFyZSBwdXJlIENvbG9yIHZhbHVlcy4KLSAgICAgICAgLy8gRm9yIGV2ZXJ5dGhpbmcg
ZWxzZSB3ZSBtdXN0IHJldHVybiB0cnVlIGZvciB0aGlzIG1ldGhvZCwgb3RoZXJ3aXNlCi0gICAg
ICAgIC8vIHdlIHdpbGwgdHJ5IHRvIGFuaW1hdGUgYmV0d2VlbiB2YWx1ZXMgZm9yZXZlci4KLSAg
ICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgPT0gU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvcikgewotICAgICAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsK
LSAgICAgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotCi0gICAgICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoIWZyb21Db2xvci5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKLSAgICAgICAg
ICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgdG9Db2xvciA9IENv
bG9yKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xvcjsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIp
KCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcgotICAgICAgICAgICAgfHwgKGItPiptX3BhaW50
VHlwZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAg
ICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotCi0gICAgICAgIGlmICghZnJv
bUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJv
bUNvbG9yID0gQ29sb3IoKTsKLSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCBmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNWR1Bh
aW50IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHBy
b2dyZXNzKSk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgU1ZHUGFpbnRUeXBlIChS
ZW5kZXJTdHlsZTo6Km1fcGFpbnRUeXBlR2V0dGVyKSgpIGNvbnN0OwotICAgIENvbG9yIChSZW5k
ZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKGNvbnN0IENvbG9yJik7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5
bGUgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4+
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdy
YXBwZXJGb250U3R5bGUoKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+PihDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgJlJlbmRlclN0eWxlOjpmb250
SXRhbGljLCAmUmVuZGVyU3R5bGU6OnNldEZvbnRJdGFsaWMpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tLT5m
b250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250RGVzY3JpcHRpb24o
KS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0by0+Zm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgfQot
Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBh
dXRvIGRpc2NyZXRlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKLQotICAgICAgICBhdXRv
IGJsZW5kZWRTdHlsZUF4aXMgPSBGb250U3R5bGVBeGlzOjpzbG50OwotICAgICAgICBpZiAoZGlz
Y3JldGUpCi0gICAgICAgICAgICBibGVuZGVkU3R5bGVBeGlzID0gKHByb2dyZXNzIDwgMC41ID8g
ZnJvbSA6IHRvKS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpOwotCi0gICAgICAg
IGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLT5mb250SXRhbGljKCk7Ci0gICAgICAgIGF1dG8g
dG9Gb250SXRhbGljID0gdG8tPmZvbnRJdGFsaWMoKTsKLSAgICAgICAgYXV0byBibGVuZGVkRm9u
dEl0YWxpYyA9IHByb2dyZXNzIDwgMC41ID8gZnJvbUZvbnRJdGFsaWMgOiB0b0ZvbnRJdGFsaWM7
Ci0gICAgICAgIGlmICghZGlzY3JldGUpCi0gICAgICAgICAgICBibGVuZGVkRm9udEl0YWxpYyA9
IGJsZW5kRnVuYyhhbmltLCBmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBwcm9ncmVzcyk7
Ci0KLSAgICAgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9yID0gZHN0LT5mb250
Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwotICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0gZHN0
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKGJsZW5k
ZWRGb250SXRhbGljKTsKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhibGVu
ZGVkU3R5bGVBeGlzKTsKLSAgICAgICAgZHN0LT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShk
ZXNjcmlwdGlvbikpOwotICAgICAgICBkc3QtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRG
b250U2VsZWN0b3IpOwotICAgIH0KLX07Ci0KLWNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uV3Jh
cHBlck1hcCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYgc2luZ2xldG9uKCkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3ZSBz
aG91bGQgcmVmIGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlciBpcyBkZXN0cm95ZWQ/Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
U1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA+IG1hcDsKLSAgICAgICAgcmV0dXJuIG1hcDsK
LSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQotICAgIHsKLSAgICAgICAgaWYgKHByb3Bl
cnR5SUQgPCBmaXJzdENTU1Byb3BlcnR5IHx8IHByb3BlcnR5SUQgPiBsYXN0Q1NTUHJvcGVydHkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1bnNpZ25lZCB3cmFwcGVy
SW5kZXggPSBpbmRleEZyb21Qcm9wZXJ0eUlEKHByb3BlcnR5SUQpOwotICAgICAgICBpZiAod3Jh
cHBlckluZGV4ID09IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXgpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBw
ZXJJbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSogd3JhcHBlckZvckluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX3By
b3BlcnR5V3JhcHBlcnNbaW5kZXhdLmdldCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNpemUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpOwotICAg
IH5DU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKSA9IGRlbGV0ZTsKLQotICAgIHVuc2ln
bmVkIGNoYXImIGluZGV4RnJvbVByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUb0lkTWFwW3Byb3BlcnR5SUQgLSBmaXJz
dENTU1Byb3BlcnR5XTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2U+PiBtX3Byb3BlcnR5V3JhcHBlcnM7Ci0gICAgdW5zaWdu
ZWQgY2hhciBtX3Byb3BlcnR5VG9JZE1hcFtudW1DU1NQcm9wZXJ0aWVzXTsKLQotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXggPSBVQ0hB
Ul9NQVg7Ci0KLSAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA+OwotfTsKLQotQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVy
TWFwOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKQotewotICAgIC8vIGJ1aWxkIHRo
ZSBsaXN0IG9mIHByb3BlcnR5IHdyYXBwZXJzIHRvIGRvIHRoZSBjb21wYXJpc29ucyBhbmQgYmxl
bmRzCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogYW5pbWF0YWJsZUxvbmdoYW5k
UHJvcGVydHlXcmFwcGVyc1tdID0gewotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5TGVmdCwgJlJlbmRlclN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNldExl
ZnQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UmlnaHQs
ICZSZW5kZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQpLAotICAgICAgICBu
ZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VG9wLCAmUmVuZGVyU3R5bGU6OnRv
cCwgJlJlbmRlclN0eWxlOjpzZXRUb3ApLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5Qm90dG9tLCAmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJlbmRlclN0eWxl
OjpzZXRCb3R0b20pLAotCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlXaWR0aCwgJlJlbmRlclN0eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCks
Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5XaWR0aCwg
JlJlbmRlclN0eWxlOjptaW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNaW5XaWR0aCksCi0gICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhXaWR0aCwgJlJlbmRl
clN0eWxlOjptYXhXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNYXhXaWR0aCksCi0KLSAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUhlaWdodCwgJlJlbmRlclN0eWxl
OjpoZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0SGVpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjptaW5IZWln
aHQsICZSZW5kZXJTdHlsZTo6c2V0TWluSGVpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heEhlaWdodCwgJlJlbmRlclN0eWxlOjptYXhIZWlnaHQs
ICZSZW5kZXJTdHlsZTo6c2V0TWF4SGVpZ2h0KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmxleCgpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRXaWR0aCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
UmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoKSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgJlJl
bmRlclN0eWxlOjpib3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BXaWR0
aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjptYXJnaW5MZWZ0LCAmUmVu
ZGVyU3R5bGU6OnNldE1hcmdpbkxlZnQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQsICZS
ZW5kZXJTdHlsZTo6c2V0TWFyZ2luUmlnaHQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5TWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6Om1hcmdpblRvcCwgJlJl
bmRlclN0eWxlOjpzZXRNYXJnaW5Ub3ApLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6Om1hcmdpbkJvdHRvbSwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20pLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ0xl
ZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnBhZGRp
bmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3ApLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20pLAotCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNh
cmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDYXJl
dENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ2FyZXRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRWaXNpdGVkTGlua0NhcmV0Q29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2xvciksCi0KLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5r
QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQmFja2dyb3VuZENv
bG9yKSwKLQotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRJbWFnZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6Omxp
c3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNldExpc3RTdHlsZUltYWdlKSwKLSAgICAgICAg
bmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2Us
ICZSZW5kZXJTdHlsZTo6bWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tJbWFnZSksCi0K
LSAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJJbWFnZVNvdXJjZSksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVy
dHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckltYWdlU2xpY2VzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU2xp
Y2VzKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94
PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVdpZHRoKSwKLSAgICAgICAgbmV3IExl
bmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckltYWdlT3V0c2V0KSwKLQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxl
OjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlU291cmNl
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBOaW5lUGllY2VJbWFnZSY+KENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFnZSwg
JlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2UpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJz
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgJlJlbmRlclN0
eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXll
cnMpLAotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRQb3NpdGlvblksICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRl
clN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpi
YWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAot
ICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tncm91bmRTaXplLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHls
ZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0KLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YLCAmUmVuZGVyU3R5bGU6
Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFza0xheWVycyksCi0gICAgICAgIG5l
dyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
WSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXll
cnMpLAotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tTaXplLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5z
dXJlTWFza0xheWVycyksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlGb250U2l6ZSwgJlJlbmRlclN0eWxlOjpjb21wdXRlZEZvbnRTaXplLCAmUmVuZGVy
U3R5bGU6OnNldEZvbnRTaXplKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlDb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1u
UnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVXaWR0aCksCi0gICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPEdhcExlbmd0aD4oQ1NTUHJvcGVydHlDb2x1
bW5HYXAsICZSZW5kZXJTdHlsZTo6Y29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkdh
cCksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPEdhcExlbmd0aD4o
Q1NTUHJvcGVydHlSb3dHYXAsICZSZW5kZXJTdHlsZTo6cm93R2FwLCAmUmVuZGVyU3R5bGU6OnNl
dFJvd0dhcCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENT
U1Byb3BlcnR5Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uQ291bnQpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtbldpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbldpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgJlJlbmRlclN0
eWxlOjpob3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRIb3Jpem9udGFs
Qm9yZGVyU3BhY2luZyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnZlcnRpY2Fs
Qm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlaSW5kZXgsICZSZW5k
ZXJTdHlsZTo6c3BlY2lmaWVkWkluZGV4LCAmUmVuZGVyU3R5bGU6OnNldFNwZWNpZmllZFpJbmRl
eCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5T3JwaGFu
cywgJlJlbmRlclN0eWxlOjpvcnBoYW5zLCAmUmVuZGVyU3R5bGU6OnNldE9ycGhhbnMpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdpZG93cywgJlJlbmRl
clN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0V2lkb3dzKSwKLSAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6
c3BlY2lmaWVkTGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lSGVpZ2h0KSwKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZU9mZnNl
dCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGlu
ZVdpZHRoLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eUxldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxl
OjpzZXRMZXR0ZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldFdvcmRTcGFjaW5nKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVRleHRJbmRlbnQsICZSZW5kZXJTdHlsZTo6dGV4dEluZGVudCwgJlJlbmRl
clN0eWxlOjpzZXRUZXh0SW5kZW50KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlLCAm
UmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpwZXJz
cGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmVPcmlnaW5YKSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3Jp
Z2luWSwgJlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0
UGVyc3BlY3RpdmVPcmlnaW5ZKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2lu
WCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5YKSwKLSAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZKSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlUcmFuc2Zvcm1P
cmlnaW5aLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6c2V0
VHJhbnNmb3JtT3JpZ2luWiksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFw
cGVyPExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0
eWxlOjpib3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcExlZnRS
YWRpdXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhT
aXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRl
clRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKSwK
LSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRv
bUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyksCi0g
ICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+KENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFZpc2liaWxpdHk+KENTU1Byb3BlcnR5VmlzaWJp
bGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZpc2liaWxp
dHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20s
ICZSZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRlclN0eWxlOjpzZXRab29tV2l0aG91dFJldHVyblZh
bHVlKSwKLQotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhC
b3g+KENTU1Byb3BlcnR5Q2xpcCwgJlJlbmRlclN0eWxlOjpjbGlwLCAmUmVuZGVyU3R5bGU6OnNl
dENsaXApLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHko
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtKCksCi0g
ICAgICAgIAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5Rmls
dGVyLCAmUmVuZGVyU3R5bGU6OmZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRGaWx0ZXIpLAotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0
ZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciwgJlJlbmRlclN0eWxlOjpiYWNrZHJv
cEZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZHJvcEZpbHRlciksCi0jZW5kaWYKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXIs
ICZSZW5kZXJTdHlsZTo6YXBwbGVDb2xvckZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRBcHBsZUNv
bG9yRmlsdGVyKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJv
cGVydHlDbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpzZXRD
bGlwUGF0aCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5
U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpz
ZXRTaGFwZU91dHNpZGUpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5U2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6c2hhcGVNYXJnaW4sICZSZW5kZXJTdHls
ZTo6c2V0U2hhcGVNYXJnaW4pLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eVNoYXBlSW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2hhcGVJbWFnZVRo
cmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUltYWdlVGhyZXNob2xkKSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2x1
bW5SdWxlQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1
bW5SdWxlQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsIE1heWJlSW52YWxpZENvbG9y
LCAmUmVuZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ry
b2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IpLAotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0Rmls
bENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtU
ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0
eWxlOjp2aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0JvcmRlckxlZnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIE1heWJlSW52YWxpZENv
bG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yKSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVy
VG9wQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rQm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJUb3BD
b2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21Db2xv
ciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIE1h
eWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtPdXRsaW5lQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtPdXRsaW5lQ29sb3IpLAotCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlCb3hTaGFkb3csICZSZW5kZXJTdHls
ZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyksCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csICZSZW5kZXJT
dHlsZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlUZXh0U2hhZG93LCAmUmVuZGVyU3R5
bGU6OnRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0VGV4dFNoYWRvdyksCi0KLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5RmlsbCwgJlJlbmRlclN0eWxl
OjpmaWxsUGFpbnRUeXBlLCAmUmVuZGVyU3R5bGU6OmZpbGxQYWludENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldEZpbGxQYWludENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlGaWxsT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpmaWxsT3BhY2l0eSwgJlJl
bmRlclN0eWxlOjpzZXRGaWxsT3BhY2l0eSksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
clNWR1BhaW50KENTU1Byb3BlcnR5U3Ryb2tlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50VHlw
ZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQYWludENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFN0cm9r
ZVBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eVN0cm9rZU9wYWNpdHksICZSZW5kZXJTdHlsZTo6c3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0
eWxlOjpzZXRTdHJva2VPcGFjaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWZWN0
b3I8U1ZHTGVuZ3RoVmFsdWU+PihDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheSwgJlJlbmRlclN0
eWxlOjpzdHJva2VEYXNoQXJyYXksICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaEFycmF5KSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdHJva2VNaXRl
cmxpbWl0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU1pdGVyTGltaXQsICZSZW5kZXJTdHlsZTo6c2V0
U3Ryb2tlTWl0ZXJMaW1pdCksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eUN4LCAmUmVuZGVyU3R5bGU6OmN4LCAmUmVuZGVyU3R5bGU6OnNldEN4KSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUN5LCAmUmVuZGVyU3R5
bGU6OmN5LCAmUmVuZGVyU3R5bGU6OnNldEN5KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVIsICZSZW5kZXJTdHlsZTo6ciwgJlJlbmRlclN0eWxlOjpzZXRS
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJ4LCAmUmVu
ZGVyU3R5bGU6OnJ4LCAmUmVuZGVyU3R5bGU6OnNldFJ4KSwKLSAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJ5LCAmUmVuZGVyU3R5bGU6OnJ5LCAmUmVuZGVyU3R5
bGU6OnNldFJ5KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVN0cm9rZURhc2hvZmZzZXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaE9mZnNldCwgJlJlbmRl
clN0eWxlOjpzZXRTdHJva2VEYXNoT2Zmc2V0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVdpZHRo
LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZVdpZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVgsICZSZW5kZXJTdHlsZTo6eCwgJlJlbmRlclN0eWxlOjpz
ZXRYKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVksICZS
ZW5kZXJTdHlsZTo6eSwgJlJlbmRlclN0eWxlOjpzZXRZKSwKLQotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpm
bG9vZE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RPcGFjaXR5KSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Rmxvb2RDb2xvciwg
JlJlbmRlclN0eWxlOjpmbG9vZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEZsb29kQ29sb3IpLAot
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3RvcE9wYWNp
dHksICZSZW5kZXJTdHlsZTo6c3RvcE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0U3RvcE9wYWNp
dHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJv
cGVydHlTdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFN0b3BDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yKENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvciwgJlJlbmRlclN0eWxlOjpsaWdodGluZ0NvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldExpZ2h0aW5nQ29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8U1ZHTGVuZ3RoVmFsdWU+KENTU1Byb3BlcnR5QmFzZWxpbmVTaGlmdCwgJlJlbmRl
clN0eWxlOjpiYXNlbGluZVNoaWZ0VmFsdWUsICZSZW5kZXJTdHlsZTo6c2V0QmFzZWxpbmVTaGlm
dFZhbHVlKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NT
UHJvcGVydHlLZXJuaW5nLCAmUmVuZGVyU3R5bGU6Omtlcm5pbmcsICZSZW5kZXJTdHlsZTo6c2V0
S2VybmluZyksCi0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUZvbnRWYXJpYXRpb25T
ZXR0aW5ncywgJlJlbmRlclN0eWxlOjpmb250VmFyaWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHls
ZTo6c2V0Rm9udFZhcmlhdGlvblNldHRpbmdzKSwKLSNlbmRpZgotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAmUmVu
ZGVyU3R5bGU6OmZvbnRXZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0Rm9udFdlaWdodCksCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZv
bnRTdHJldGNoLCAmUmVuZGVyU3R5bGU6OmZvbnRTdHJldGNoLCAmUmVuZGVyU3R5bGU6OnNldEZv
bnRTdHJldGNoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSgpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHREZWNvcmF0aW9uVGhpY2tuZXNzPihDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnRleHREZWNvcmF0aW9u
VGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0VW5kZXJsaW5lT2Zmc2V0PihDU1NQcm9wZXJ0
eVRleHRVbmRlcmxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZU9mZnNldCwg
JlJlbmRlclN0eWxlOjpzZXRUZXh0VW5kZXJsaW5lT2Zmc2V0KSwKLSAgICB9OwotICAgIGNvbnN0
IHVuc2lnbmVkIGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCA9IFdURl9BUlJBWV9M
RU5HVEgoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVycyk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgQ1NTUHJvcGVydHlJRCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc1tdID0gewot
ICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmQsIC8vIGZvciBiYWNrZ3JvdW5kLWNvbG9yLCBi
YWNrZ3JvdW5kLXBvc2l0aW9uLCBiYWNrZ3JvdW5kLWltYWdlCi0gICAgICAgIENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uLAotICAgICAgICBDU1NQcm9wZXJ0eUZvbnQsIC8vIGZvciBmb250
LXNpemUsIGZvbnQtd2VpZ2h0Ci0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFzaywgLy8gZm9y
IG1hc2stcG9zaXRpb24KLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sCi0g
ICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyVG9wLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0LCBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0LAotICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlckNvbG9yLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1cywKLSAg
ICAgICAgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aCwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXIs
Ci0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyU3BhY2luZywKLSAgICAgICAgQ1NTUHJvcGVydHlMaXN0U3R5bGUsIC8vIGZvciBsaXN0LXN0
eWxlLWltYWdlCi0gICAgICAgIENTU1Byb3BlcnR5TWFyZ2luLAotICAgICAgICBDU1NQcm9wZXJ0
eU91dGxpbmUsCi0gICAgICAgIENTU1Byb3BlcnR5UGFkZGluZywKLSAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U3Ryb2tlLAotICAgICAgICBDU1NQcm9wZXJ0eUNvbHVtblJ1bGUsCi0gICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLAotICAgICAgICBDU1NQcm9wZXJ0eVRy
YW5zZm9ybU9yaWdpbgotICAgIH07Ci0gICAgY29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZVNob3J0
aGFuZFByb3BlcnRpZXNDb3VudCA9IFdURl9BUlJBWV9MRU5HVEgoYW5pbWF0YWJsZVNob3J0aGFu
ZFByb3BlcnRpZXMpOwotCi0gICAgLy8gVE9ETzoKLSAgICAvLwotICAgIC8vICBDU1NQcm9wZXJ0
eVZlcnRpY2FsQWxpZ24KLSAgICAvLwotICAgIC8vIENvbXBvdW5kIHByb3BlcnRpZXMgdGhhdCBo
YXZlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgYW5pbWF0YWJsZToKLSAgICAvLwotICAgIC8v
ICBDU1NQcm9wZXJ0eUNvbHVtbnMKLSAgICAvLyAgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0
Ci0KLSAgICAvLyBNYWtlIHN1cmUgdW51c2VkIHNsb3RzIGhhdmUgYSB2YWx1ZQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBtX3Byb3BlcnR5
VG9JZE1hcFtpXSA9IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXg7Ci0KLSAgICBDT01QSUxF
X0FTU0VSVChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllc0NvdW50IDwgVUNIQVJfTUFYLCBudW1iZXJPZkFuaW1hdGFibGVQcm9w
ZXJ0aWVzTXVzdEJlTGVzc1RoYW5VQ2hhck1heCk7Ci0gICAgbV9wcm9wZXJ0eVdyYXBwZXJzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsg
YW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCk7Ci0KLSAgICAvLyBGaXJzdCB3ZSBw
dXQgdGhlIG5vbi1zaG9ydGhhbmQgcHJvcGVydHkgd3JhcHBlcnMgaW50byB0aGUgbWFwLCBzbyB0
aGUgc2hvcnRoYW5kLWJ1aWxkaW5nCi0gICAgLy8gY29kZSBjYW4gZmluZCB0aGVtLgotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIg
PSBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzW2ldOwotICAgICAgICBtX3Byb3Bl
cnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlPih3cmFwcGVyKSk7Ci0gICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQo
d3JhcHBlci0+cHJvcGVydHkoKSkgPSBpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudDsgKytpKSB7Ci0gICAgICAg
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVz
W2ldOwotICAgICAgICBhdXRvIHNob3J0aGFuZCA9IHNob3J0aGFuZEZvclByb3BlcnR5KHByb3Bl
cnR5SUQpOwotICAgICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4g
bG9uZ2hhbmRXcmFwcGVyczsKLSAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNob3J0aGFuZC5sZW5ndGgoKSk7Ci0gICAgICAgIGZvciAoYXV0byBsb25naGFu
ZCA6IHNob3J0aGFuZCkgewotICAgICAgICAgICAgdW5zaWduZWQgd3JhcHBlckluZGV4ID0gaW5k
ZXhGcm9tUHJvcGVydHlJRChsb25naGFuZCk7Ci0gICAgICAgICAgICBpZiAod3JhcHBlckluZGV4
ID09IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXgpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0p
OwotICAgICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobV9wcm9wZXJ0
eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9w
cm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFNob3J0aGFuZFByb3Bl
cnR5V3JhcHBlcj4ocHJvcGVydHlJRCwgV1RGTW92ZShsb25naGFuZFdyYXBwZXJzKSkpOwotICAg
ICAgICBpbmRleEZyb21Qcm9wZXJ0eUlEKHByb3BlcnR5SUQpID0gYW5pbWF0YWJsZUxvbmdoYW5k
UHJvcGVydGllc0NvdW50ICsgaTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGdhdGhlckVuY2xv
c2luZ1Nob3J0aGFuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJv
cGVydHlTZXQpCi17Ci0gICAgaWYgKCF3cmFwcGVyLT5pc1Nob3J0aGFuZFdyYXBwZXIoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKiBzaG9y
dGhhbmRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKj4od3Jh
cHBlcik7Ci0gICAgYm9vbCBjb250YWluZWQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIGN1cnJX
cmFwcGVyIDogc2hvcnRoYW5kV3JhcHBlci0+cHJvcGVydHlXcmFwcGVycygpKSB7Ci0gICAgICAg
IGlmIChnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKHByb3BlcnR5LCBjdXJyV3Jh
cHBlciwgcHJvcGVydHlTZXQpIHx8IGN1cnJXcmFwcGVyLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5
KQotICAgICAgICAgICAgY29udGFpbmVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoY29udGFp
bmVkKQotICAgICAgICBwcm9wZXJ0eVNldC5hZGQod3JhcHBlci0+cHJvcGVydHkoKSk7Ci0KLSAg
ICByZXR1cm4gY29udGFpbmVkOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCB0byBz
dGFydCBhbmltYXRpb24gdGltZXJzCi12b2lkIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFBy
b3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgQ1NTUHJvcGVy
dHlJRCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBBU1NFUlQocHJvcCAhPSBD
U1NQcm9wZXJ0eUludmFsaWQpOwotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSog
d3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3Jh
cHBlckZvclByb3BlcnR5KHByb3ApOwotICAgIGlmICh3cmFwcGVyKSB7Ci0gICAgICAgIHdyYXBw
ZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwotI2lmICFMT0dfRElTQUJMRUQK
LSAgICAgICAgd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7Ci0jZW5kaWYK
LSAgICB9Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmltYXRh
YmxlKENTU1Byb3BlcnR5SUQgcHJvcCkKLXsKLSAgICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRp
b25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci19Ci0K
LWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJh
dGVkKENTU1Byb3BlcnR5SUQgcHJvcCkKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24o
KS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVy
LT5hbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgOiBmYWxzZTsKLX0KLQotLy8gTm90ZTogdGhpcyBp
cyBpbmVmZmljaWVudC4gSXQncyBvbmx5IGNhbGxlZCBmcm9tIHBhdXNlVHJhbnNpdGlvbkF0VGlt
ZSgpLgotSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0
YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQot
ewotICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYgbWFwID0gQ1NTUHJvcGVydHlB
bmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKLQotICAgIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4gZm91bmRQcm9wZXJ0aWVzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMo
cHJvcGVydHksIG1hcC53cmFwcGVyRm9ySW5kZXgoaSksIGZvdW5kUHJvcGVydGllcyk7Ci0KLSAg
ICByZXR1cm4gZm91bmRQcm9wZXJ0aWVzOwotfQotCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9u
Ojpwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9u
KCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlci0+ZXF1YWxzKGEsIGIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1Byb3Bl
cnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQot
ewotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9w
KTsKLSAgICBpZiAod3JhcHBlcikKLSAgICAgICAgcmV0dXJuIHdyYXBwZXItPmNhbkludGVycG9s
YXRlKGEsIGIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ1NTUHJvcGVydHlJRCBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6Z2V0UHJvcGVydHlBdEluZGV4KGludCBpLCBPcHRpb25hbDxib29sPiYg
aXNTaG9ydGhhbmQpCi17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAg
PSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgaWYg
KGkgPCAwIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSA+PSBtYXAuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOwotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9IG1hcC53cmFwcGVyRm9ySW5kZXgoaSk7Ci0gICAgaXNTaG9ydGhh
bmQgPSB3cmFwcGVyLT5pc1Nob3J0aGFuZFdyYXBwZXIoKTsKLSAgICByZXR1cm4gd3JhcHBlci0+
cHJvcGVydHkoKTsKLX0KLQotaW50IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXROdW1Qcm9wZXJ0
aWVzKCkKLXsKLSAgICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5n
bGV0b24oKS5zaXplKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjZGUyYzg3NTgzMjM4MGM1M2Y1MGE1NWYwZWQ0NGVmNmQ4NDQ0MTliLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1jbGFzcyBDU1NQcm9wZXJ0
eUFuaW1hdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFi
bGUoQ1NTUHJvcGVydHlJRCk7Ci0gICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCk7Ci0gICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0Vx
dWFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYik7Ci0gICAgc3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9w
ZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOwotICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJv
b2w+JiBpc1Nob3J0aGFuZCk7Ci0gICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7Ci0K
LSAgICBzdGF0aWMgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0Fm
ZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQpOwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYg
d2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCi0gICAgc3RhdGljIHZv
aWQgYmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQ
cm9wZXJ0eUlELCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNjNDliY2Y2ZDkx
ZjRkY2RmNTQ2NzE0YTU0MzY4M2UxMmQ0Nzk3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJJbXBsaWNpdEFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgotI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQ29tcG9zaXRlQW5pbWF0aW9uOjpDb21wb3NpdGVBbmltYXRpb24oQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgOiBtX2FuaW1h
dGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKLXsKLSAgICBtX3N1c3BlbmRlZCA9
IG1fYW5pbWF0aW9uQ29udHJvbGxlci5pc1N1c3BlbmRlZCgpICYmICFtX2FuaW1hdGlvbkNvbnRy
b2xsZXIuYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCk7Ci19Ci0KLUNvbXBvc2l0
ZUFuaW1hdGlvbjo6fkNvbXBvc2l0ZUFuaW1hdGlvbigpCi17Ci0gICAgLy8gVG9zcyB0aGUgcmVm
cyB0byBhbGwgYW5pbWF0aW9ucywgYnV0IG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhlbSBmcm9tCi0g
ICAgLy8gYW55IHdhaXRpbmcgbGlzdHMgZmlyc3QuCi0KLSAgICBjbGVhckVsZW1lbnQoKTsKLSAg
ICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7Ci0gICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIo
KTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVudCgpCi17Ci0gICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBDbGVhciB0aGUgcmVu
ZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3ZSBhcmUgaW4gdGhl
IG1pZGRsZSBvZgotICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCi0gICAgICAgIGZvciAoYXV0
byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFuc2l0aW9uKTsK
LSAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1h
dGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKLSAg
ICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJn
ZXRTdHlsZSkKLXsKLSAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCBvciB0aGVyZSBhcmUg
bm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lwIGl0Ci0gICAgaWYgKCFjdXJyZW50
U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS50cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJh
bnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3Rp
dmUgb25lcwotICAgIC8vIGluIHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0
aGF0IGRpZG4ndCBnZXQgbWFya2VkLgotICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJh
bnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldEFjdGl2ZShmYWxzZSk7
Ci0gICAgICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbW9kaWZpZWRDdXJy
ZW50U3R5bGU7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gdXBkYXRl
IHRoZSBhY3RpdmUgdHJhbnNpdGlvbnMKLSAgICBpZiAodGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMo
KSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLnRyYW5zaXRp
b25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJn
ZXRTdHlsZS50cmFuc2l0aW9ucygpLT5hbmltYXRpb24oaSk7Ci0gICAgICAgICAgICBib29sIGlz
QWN0aXZlVHJhbnNpdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxh
eSgpID4gMDsKLQotICAgICAgICAgICAgYXV0byBtb2RlID0gYW5pbWF0aW9uLnByb3BlcnR5KCku
bW9kZTsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6
Ok5vbmUgfHwgbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpVbmtub3duUHJvcGVy
dHkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIENTU1Byb3BlcnR5
SUQgcHJvcCA9IGFuaW1hdGlvbi5wcm9wZXJ0eSgpLmlkOwotCi0gICAgICAgICAgICBib29sIGFs
bCA9IG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6QWxsOwotCi0gICAgICAgICAg
ICAvLyBIYW5kbGUgYm90aCB0aGUgJ2FsbCcgYW5kIHNpbmdsZSBwcm9wZXJ0eSBjYXNlcy4gRm9y
IHRoZSBzaW5nbGUgcHJvcCBjYXNlLCB3ZSBtYWtlIG9ubHkgb25lIHBhc3MKLSAgICAgICAgICAg
IC8vIHRocm91Z2ggdGhlIGxvb3AuCi0gICAgICAgICAgICBmb3IgKGludCBwcm9wZXJ0eUluZGV4
ID0gMDsgcHJvcGVydHlJbmRleCA8IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXROdW1Qcm9wZXJ0
aWVzKCk7ICsrcHJvcGVydHlJbmRleCkgewotICAgICAgICAgICAgICAgIGlmIChhbGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBuZXh0IHByb3BlcnR5IHdoaWNoIGlzIG5vdCBh
IHNob3J0aGFuZC4KLSAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNTaG9ydGhh
bmQ7Ci0gICAgICAgICAgICAgICAgICAgIHByb3AgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0
UHJvcGVydHlBdEluZGV4KHByb3BlcnR5SW5kZXgsIGlzU2hvcnRoYW5kKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzU2hvcnRoYW5kICYmICppc1Nob3J0aGFuZCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmIChwcm9wID09IENTU1Byb3BlcnR5SW52YWxpZCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFyZSBhbHdheXMgaGFzaGVkIGJ5IGFj
dHVhbCBwcm9wZXJ0aWVzLCBuZXZlciBhbmltYXRlQWxsLgotICAgICAgICAgICAgICAgIEFTU0VS
VChwcm9wID49IGZpcnN0Q1NTUHJvcGVydHkgJiYgcHJvcCA8IChmaXJzdENTU1Byb3BlcnR5ICsg
bnVtQ1NTUHJvcGVydGllcykpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBy
dW5uaW5nIGFuaW1hdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSwgdGhlIHRyYW5zaXRpb24gaXMgb3Zl
cnJpZGRlbgotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmlt
YXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2UgZG8gdGhlIHRlc3QKLSAgICAgICAgICAg
ICAgICAvLyBhZ2FpbnN0IHRoZSB1bmFuaW1hdGVkIHN0eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJp
ZGUiIHRoZSB0cmFuc2l0aW9uIGxhdGVyLgotICAgICAgICAgICAgICAgIGF1dG8qIGtleWZyYW1l
QW5pbWF0aW9uID0gYW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICAgICAg
YXV0byogZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltYXRpb24gPyAma2V5ZnJhbWVBbmltYXRpb24t
PnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxlOwotCi0gICAgICAgICAgICAgICAgLy8g
U2VlIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0cmFuc2l0aW9uIGZvciB0aGlzIHByb3AKLSAgICAg
ICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdl
dChwcm9wKTsKLSAgICAgICAgICAgICAgICBib29sIGVxdWFsID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgICAgIGlmIChpbXBsQW5pbSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUg
cG9zdCBhY3RpdmUgZG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlIGFjdGl2ZSBmbGFnLiBUaGlzIHdp
bGwgY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBhbmltYXRpb24gdG8gZ2V0IHJl
bW92ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWltcGxBbmltLT5wb3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBs
QW5pbS0+c2V0QWN0aXZlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBhIHRyYW5zaXRpb24gdGhhdCBpcyBqdXN0IGZpbmlz
aGluZy4gVGhhdCB3b3VsZCBiZSB0aGUgY2FzZQotICAgICAgICAgICAgICAgICAgICAvLyBpZiBp
dCB3ZXJlIHBvc3RBY3RpdmUuIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNoZWNrIGZvciBlcXVhbGl0
eSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGl0IGNvdWxkIGJlIGp1c3QgZmluaXNo
aW5nIEFORCBjaGFuZ2luZyB0byBhIG5ldyBnb2FsIHN0YXRlLgotICAgICAgICAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxBbmltIG1pZ2h0IGFsc28gbm90
IGJlIGFuIGFscmVhZHkgcnVubmluZyB0cmFuc2l0aW9uLiBJdCBtaWdodCBiZQotICAgICAgICAg
ICAgICAgICAgICAvLyBuZXdseSBhZGRlZCB0byB0aGUgbGlzdCBpbiBhIHByZXZpb3VzIGl0ZXJh
dGlvbi4gVGhpcyB3b3VsZCBoYXBwZW4gaWYKLSAgICAgICAgICAgICAgICAgICAgLy8geW91IGhh
dmUgYm90aCBhbiBleHBsaWNpdCB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCAnYWxsJyBpbiB0aGUg
c2FtZQotICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0
ZXIgb25lIG92ZXJyaWRlcyB0aGUgZWFybGllciBvbmUsIHNvIHdlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGJlaGF2ZSBhcyB0aG91Z2ggdGhpcyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5n
IHJlcGxhY2VkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFBy
b3BlcnR5RXF1YWwocHJvcCwgJnRhcmdldFN0eWxlKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRm9yIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgd2UgbmVlZCB0byByZXR1cm4gYSBuZXcg
UmVuZGVyU3R5bGUgd2l0aCB0aGUgX2N1cnJlbnRfIHZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGUgcHJvcGVydHksIHNvIHRoYXQgcmVzdGFydGVkIHRyYW5zaXRpb25zIHVz
ZSB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
cHJvcCkgJiYgaW1wbEFuaW0tPmlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbW9kaWZpZWRDdXJyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZGlmaWVkQ3VycmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpjdXJyZW50U3R5bGUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbEFuaW0t
PmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50U3R5bGUuZ2V0
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
TE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBleGlzdGluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBm
b3IgcHJvcGVydHkgJXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVydHlOYW1lKHByb3ApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVS
ZW1vdmVkKCppbXBsQW5pbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25z
LnJlbW92ZShwcm9wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0IGEgdHJhbnNpdGlvbiBpZiBpdCBpcyBhY3Rp
dmUgYW5kIHRoZSBwcm9wZXJ0aWVzIGRvbid0IG1hdGNoCi0gICAgICAgICAgICAgICAgICAgIGVx
dWFsID0gIWlzQWN0aXZlVHJhbnNpdGlvbiB8fCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVy
dGllc0VxdWFsKHByb3AsIGZyb21TdHlsZSwgJnRhcmdldFN0eWxlKSB8fCAhQ1NTUHJvcGVydHlB
bmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcCwgZnJvbVN0eWxlLCAmdGFy
Z2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdlIGNh
biBiZSBpbiB0aGlzIGxvb3Agd2l0aCBhbiBpbmFjdGl2ZSB0cmFuc2l0aW9uICghaXNBY3RpdmVU
cmFuc2l0aW9uKS4gV2UgbmVlZAotICAgICAgICAgICAgICAgIC8vIHRvIGRvIHRoYXQgdG8gY2hl
Y2sgdG8gc2VlIGlmIHdlIGFyZSBjYW5jZWxpbmcgYSB0cmFuc2l0aW9uLiBCdXQgd2UgZG9uJ3Qg
d2FudCB0bwotICAgICAgICAgICAgICAgIC8vIHN0YXJ0IG9uZSBvZiB0aGUgaW5hY3RpdmUgdHJh
bnNpdGlvbnMuIFNvIHNob3J0IGNpcmN1aXQgdGhhdCBoZXJlLiAoU2VlCi0gICAgICAgICAgICAg
ICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc4Nz4KLSAg
ICAgICAgICAgICAgICBpZiAoIWVxdWFsICYmIGlzQWN0aXZlVHJhbnNpdGlvbikgewotICAgICAg
ICAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW1wbGljaXRBbmltYXRpb24gPSBJbXBsaWNpdEFuaW1hdGlvbjo6Y3JlYXRlKGFu
aW1hdGlvbiwgcHJvcCwgZWxlbWVudCwgKnRoaXMsIG1vZGlmaWVkQ3VycmVudFN0eWxlID8gKm1v
ZGlmaWVkQ3VycmVudFN0eWxlIDogKmZyb21TdHlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX3N1c3BlbmRlZCAmJiBpbXBsaWNpdEFuaW1hdGlvbi0+aGFzU3R5bGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGltcGxpY2l0QW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0
aW9uUGxheVN0YXRlOjpQYXVzZWQpOwotCi0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRp
b25zLCAiQ3JlYXRlZCBJbXBsaWNpdEFuaW1hdGlvbiAlcCBvbiBlbGVtZW50ICVwIGZvciBwcm9w
ZXJ0eSAlcyBkdXJhdGlvbiAlLjJmIGRlbGF5ICUuMmYiLCBpbXBsaWNpdEFuaW1hdGlvbi5wdHIo
KSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFtZShwcm9wKSwgYW5pbWF0aW9uLmR1cmF0aW9uKCks
IGFuaW1hdGlvbi5kZWxheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5z
ZXQocHJvcCwgV1RGTW92ZShpbXBsaWNpdEFuaW1hdGlvbikpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCBvbmUgcGFzcyBmb3IgdGhlIHNpbmds
ZSBwcm9wIGNhc2UKLSAgICAgICAgICAgICAgICBpZiAoIWFsbCkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNYWtl
IGEgbGlzdCBvZiB0cmFuc2l0aW9ucyB0byBiZSByZW1vdmVkCi0gICAgVmVjdG9yPGludD4gdG9C
ZVJlbW92ZWQ7Ci0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoIXRyYW5zaXRpb24tPmFjdGl2ZSgpKSB7Ci0gICAgICAgICAg
ICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJhbnNpdGlv
bik7Ci0gICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQodHJhbnNpdGlvbi0+YW5pbWF0aW5n
UHJvcGVydHkoKSk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxp
Y2l0QW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCBmb3IgcHJvcGVydHkgJXMiLCB0cmFuc2l0
aW9uLmdldCgpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHRyYW5zaXRpb24tPmFuaW1hdGlu
Z1Byb3BlcnR5KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyByZW1vdmUgdGhl
IHRyYW5zaXRpb25zIGZyb20gdGhlIGxpc3QKLSAgICBmb3IgKGF1dG8gcHJvcGVydHlUb1JlbW92
ZSA6IHRvQmVSZW1vdmVkKQotICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wZXJ0eVRv
UmVtb3ZlKTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5p
bWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpCi17Ci0gICAgLy8gTm90aGluZyB0byBk
byBpZiB3ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJl
Zm9yZQotICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0
eWxlLmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIAotICAgIGlmIChjdXJyZW50U3R5bGUg
JiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0U3R5bGUuaGFzQW5pbWF0
aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoodGFyZ2V0U3R5bGUu
YW5pbWF0aW9ucygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQW5pbWF0aW9uTmFtZU1hcCBu
ZXdBbmltYXRpb25zOwotCi0gICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KLSAg
ICBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuY2xlYXIoKTsKLQotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbm9uZSgibm9uZSIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAKLSAgICAvLyBOb3cgbWFyayBhbnkg
c3RpbGwgYWN0aXZlIGFuaW1hdGlvbnMgYXMgYWN0aXZlIGFuZCBhZGQgYW55IG5ldyBhbmltYXRp
b25zLgotICAgIGlmICh0YXJnZXRTdHlsZS5hbmltYXRpb25zKCkpIHsKLSAgICAgICAgaW50IG51
bUFuaW1zID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpLT5zaXplKCk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewotICAgICAgICAgICAgYXV0byYgYW5pbWF0
aW9uID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7Ci0gICAgICAgICAg
ICBBdG9tU3RyaW5nIGFuaW1hdGlvbk5hbWUoYW5pbWF0aW9uLm5hbWUoKSk7Ci0KLSAgICAgICAg
ICAgIGlmICghYW5pbWF0aW9uLmlzVmFsaWRBbmltYXRpb24oKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEg
Y3VycmVudCBhbmltYXRpb24gZm9yIHRoaXMgbmFtZS4KLSAgICAgICAgICAgIFJlZlB0cjxLZXlm
cmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KGFu
aW1hdGlvbk5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0pIHsKLSAg
ICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLmFkZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBs
KCksIGtleWZyYW1lQW5pbSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltLT5w
b3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICAgICAgLy8gQW5pbWF0aW9ucyBtYXRjaCwgYnV0IHBsYXkgc3RhdGVzIG1heSBkaWZmZXIuIFVw
ZGF0ZSBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5
U3RhdGUoYW5pbWF0aW9uLnBsYXlTdGF0ZSgpKTsKLQotICAgICAgICAgICAgICAgIC8vIFNldCB0
aGUgc2F2ZWQgYW5pbWF0aW9uIHRvIHRoaXMgbmV3IG9uZSwganVzdCBpbiBjYXNlIHRoZSBwbGF5
IHN0YXRlIGhhcyBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0QW5p
bWF0aW9uKGFuaW1hdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChhbmltYXRpb24uZHVy
YXRpb24oKSB8fCBhbmltYXRpb24uZGVsYXkoKSkgJiYgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50
KCkgJiYgYW5pbWF0aW9uTmFtZSAhPSBub25lKSB7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWVB
bmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIGVsZW1lbnQsICp0aGlz
LCB0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJDcmVhdGlu
ZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiBlbGVtZW50ICVwIHdpdGgga2V5ZnJhbWVzICVzLCBk
dXJhdGlvbiAlLjJmLCBkZWxheSAlLjJmLCBpdGVyYXRpb25zICUuMmYiLCBrZXlmcmFtZUFuaW0u
Z2V0KCksICZlbGVtZW50LCBhbmltYXRpb24ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIGFuaW1hdGlv
bi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50
KCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1fc3VzcGVuZGVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6
UGF1c2VkKTsKLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIgIChjcmVhdGVk
IGluIHN1c3BlbmRlZC9wYXVzZWQgc3RhdGUpIik7Ci0gICAgICAgICAgICAgICAgfQotI2lmICFM
T0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IGtleWZy
YW1lQW5pbS0+a2V5ZnJhbWVzKCkucHJvcGVydGllcygpKQotICAgICAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiAgcHJvcGVydHkgJXMiLCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlJ
RCkpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLnNldChrZXlmcmFt
ZUFuaW0tPm5hbWUoKS5pbXBsKCksIGtleWZyYW1lQW5pbSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBhbmltYXRpb24gb3JkZXIg
bWFwLgotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkKLSAgICAgICAgICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBhIGxpc3Qgb2YgYW5pbWF0
aW9ucyB0byBiZSByZW1vdmVkLgotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFt
ZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKCFuZXdBbmltYXRpb25zLmNvbnRh
aW5zKGFuaW1hdGlvbi0+bmFtZSgpLmltcGwoKSkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwotICAgICAgICAg
ICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1v
dmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAiLCBhbmltYXRpb24uZ2V0
KCksICZlbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnN3YXAobmV3
QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFuaW1hdGlvbnMpOwotfQotCi1BbmltYXRpb25VcGRhdGUg
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsK
LSAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1
cnJlbnRTdHlsZSAob24gc3RhcnR1cCkuCi0gICAgdXBkYXRlVHJhbnNpdGlvbnMoZWxlbWVudCwg
Y3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25z
KGVsZW1lbnQsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBh
Y3Q+IGltYXBjdDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRT
dHlsZTsKLQotICAgIGlmIChjdXJyZW50U3R5bGUpIHsKLSAgICAgICAgLy8gTm93IHRoYXQgd2Ug
aGF2ZSB0cmFuc2l0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5l
dyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCi0gICAgICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5k
ZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVkLgotICAgICAgICBib29sIGNoZWNrRm9yU3RhY2tpbmdD
b250ZXh0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNp
dGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY2hhbmdlcyA9IHRyYW5zaXRpb24t
PmFuaW1hdGUoKnRoaXMsIHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAg
IGlmIChjaGFuZ2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCkpCi0gICAg
ICAgICAgICAgICAgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQgfD0gV2lsbENoYW5nZURhdGE6OnBy
b3BlcnR5Q3JlYXRlc1N0YWNraW5nQ29udGV4dCh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0
eSgpKTsKLQotICAgICAgICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6
UnVubmluZ1N0YXRlQ2hhbmdlKSAmJiB0cmFuc2l0aW9uLT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9w
ZXJ0eSgpKQotICAgICAgICAgICAgICAgIGltYXBjdC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1
aXJlc1JlY29tcG9zaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhbmltYXRlZFN0eWxl
ICYmIGNoZWNrRm9yU3RhY2tpbmdDb250ZXh0KSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBpcyBzaW1pbGFyIHRvIGNvZGUgaW4gU3R5bGU6OkFkanVzdGVyOjphZGp1c3QoKSBidXQg
b25seSBuZWVkcyB0byBjb25zdWx0Ci0gICAgICAgICAgICAvLyBhbmltYXRhYmxlIHByb3BlcnRp
ZXMgdGhhdCBjYW4gdHJpZ2dlciBzdGFja2luZyBjb250ZXh0LgotICAgICAgICAgICAgaWYgKGFu
aW1hdGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRl
ZFN0eWxlLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQotICAgICAgICAgICAgICAgIHx8
IGFuaW1hdGVkU3R5bGUtPmhhc01hc2soKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5
bGUtPmNsaXBQYXRoKCkKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0eWxlLT5ib3hSZWZs
ZWN0KCkKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0eWxlLT5oYXNGaWx0ZXIoKQotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRTdHls
ZS0+aGFzQmFja2Ryb3BGaWx0ZXIoKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgKQotICAgICAg
ICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGFuaW1hdGlvbiBv
YmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdl
IHdhbnQgdGhlbQotICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVl
ZGVkLgotICAgIGZvciAoYXV0byYgbmFtZSA6IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcCkg
ewotICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmdldChuYW1lKTsKLSAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewot
ICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0ga2V5ZnJhbWVBbmltLT5hbmltYXRlKCp0aGlzLCB0
YXJnZXRTdHlsZSwgYW5pbWF0ZWRTdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250
YWlucyhBbmltYXRlQ2hhbmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIGtleWZyYW1lQW5pbS0+
YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICBpbWFwY3QuYWRk
KEFuaW1hdGlvbkltcGFjdDo6UmVxdWlyZXNSZWNvbXBvc2l0ZSk7Ci0KLSAgICAgICAgICAgIGlm
IChjaGFuZ2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCkgJiYga2V5ZnJh
bWVBbmltLT50cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgIGltYXBj
dC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpGb3JjZXNTdGFja2luZ0NvbnRleHQpOwotCi0gICAgICAg
ICAgICBtX2hhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQgfD0ga2V5ZnJhbWVBbmltLT5k
ZXBlbmRzT25MYXlvdXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7IFdURk1v
dmUoYW5pbWF0ZWRTdHlsZSksIGltYXBjdCB9OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHlsZTsKLSAgICBmb3IgKGF1
dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKQotICAgICAgICB0cmFuc2l0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLQotICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGZvciAoYXV0byYgbmFtZSA6IG1fa2V5
ZnJhbWVBbmltYXRpb25PcmRlck1hcCkgewotICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRp
b24+IGtleWZyYW1lQW5pbWF0aW9uID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwot
ICAgICAgICBpZiAoa2V5ZnJhbWVBbmltYXRpb24pCi0gICAgICAgICAgICBrZXlmcmFtZUFuaW1h
dGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiByZXN1bHRTdHlsZTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gQ29tcG9zaXRlQW5pbWF0
aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJucyB0aGUgdGlt
ZSBhdCB3aGljaCBuZXh0IHNlcnZpY2UgaXMgcmVxdWlyZWQuIFdURjo6bnVsbG9wdCBtZWFucyBu
byBzZXJ2aWNlIGlzIHJlcXVpcmVkLiAwIG1lYW5zCi0gICAgLy8gc2VydmljZSBpcyByZXF1aXJl
ZCBub3csIGFuZCA+IDAgbWVhbnMgc2VydmljZSBpcyByZXF1aXJlZCB0aGF0IG1hbnkgc2Vjb25k
cyBpbiB0aGUgZnV0dXJlLgotICAgIE9wdGlvbmFsPFNlY29uZHM+IG1pblQ7Ci0gICAgCi0gICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5z
aXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxT
ZWNvbmRzPiB0ID0gdHJhbnNpdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAg
IGlmICghdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghbWlu
VCB8fCB0LnZhbHVlKCkgPCBtaW5ULnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWluVCA9IHQu
dmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChtaW5ULnZhbHVlKCkgPT0gMF9zKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwX3M7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0
ID0gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAgICAgICAgaWYgKCF0KQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFtaW5UIHx8IHQudmFs
dWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtaW5UID0gdC52YWx1ZSgpOwot
ICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtaW5UOwotfQotCi1LZXlm
cmFtZUFuaW1hdGlvbiogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRpb25Gb3JQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIEtleWZyYW1lQW5pbWF0aW9uKiBy
ZXN1bHQgPSBudWxscHRyOwotCi0gICAgLy8gV2Ugd2FudCB0byBzZW5kIGJhY2sgdGhlIGxhc3Qg
YW5pbWF0aW9uIHdpdGggdGhlIHByb3BlcnR5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZXMuCi0gICAg
Ly8gU28gd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGFuaW1hdGlvbnMKLSAgICBpZiAo
IW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9u
IDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmlt
YXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBhbmltYXRpb24uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9m
VHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICAvLyBJ
ZiBtb3JlIHRoYW4gb25lIHRyYW5zaXRpb24gYW5kIGFuaW1hdGlvbiBhZmZlY3QgdHJhbnNmb3Jt
LCBnaXZlIHVwLgotICAgIGJvb2wgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwotICAg
IAotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KENT
U1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
IChzZWVuVHJhbnNmb3JtQW5pbWF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHNlZW5UcmFuc2Zvcm1BbmltYXRpb24gPSB0cnVlOwotCi0gICAgICAgIGlmICghYW5p
bWF0aW9uLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24g
OiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpICE9IENTU1Byb3BlcnR5VHJhbnNmb3JtIHx8ICF0cmFuc2l0aW9uLT5o
YXNTdHlsZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHNlZW5UcmFu
c2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KCF0cmFuc2l0aW9uLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCi17Ci0g
ICAgaWYgKG1fc3VzcGVuZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1c3BlbmRlZCA9
IHRydWU7Ci0KLSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZv
ciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpCi0gICAg
ICAgICAgICBhbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBh
dXNlZCk7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0g
ICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+aGFzU3R5bGUoKSkKLSAgICAgICAgICAgICAgICB0
cmFuc2l0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5p
bWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3N1c3BlbmRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9u
cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGFuaW1hdGlvbi0+cGxheVN0YXRlUGxheWlu
ZygpKQotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlv
blBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1f
dHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNT
dHlsZSgpKQotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmlt
YXRpb25QbGF5U3RhdGU6OlBsYXlpbmcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKLXsKLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAg
ICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5
KQotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldE92ZXJyaWRkZW4odHJ1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlk
ZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi17Ci0gICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRp
b24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlv
bi0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9v
bCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2tleWZy
YW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMu
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5
ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5p
c0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5z
aXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3Ry
YW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+aXNBbmlt
YXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9t
U3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1l
QW5pbSA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdldChuYW1lLmltcGwoKSk7Ci0gICAgaWYgKCFr
ZXlmcmFtZUFuaW0gfHwgIWtleWZyYW1lQW5pbS0+cnVubmluZygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBrZXlmcmFtZUFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBpZiAoKHByb3BlcnR5
IDwgZmlyc3RDU1NQcm9wZXJ0eSkgfHwgKHByb3BlcnR5ID49IGZpcnN0Q1NTUHJvcGVydHkgKyBu
dW1DU1NQcm9wZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW1wbGljaXRB
bmltYXRpb24qIGltcGxBbmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcGVydHkpOwotICAgIGlm
ICghaW1wbEFuaW0pIHsKLSAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcHJvcGVydHkg
aXMgYmVpbmcgYW5pbWF0ZWQgdmlhIGEgc2hvcnRoYW5kLgotICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgb25seSB1c2VkIGZvciB0ZXN0aW5nLCBzbyBwZXJmb3JtYW5jZSBpcyBub3QgY3JpdGljYWwg
aGVyZS4KLSAgICAgICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBzaG9ydGhhbmRQcm9wZXJ0aWVz
ID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJv
cGVydHkocHJvcGVydHkpOwotICAgICAgICBib29sIGFueVBhdXNlZCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IHNob3J0aGFuZFByb3BlcnRpZXMpIHsKLSAgICAgICAg
ICAgIGlmIChwYXVzZVRyYW5zaXRpb25BdFRpbWUocHJvcGVydHlJRCwgdCkpCi0gICAgICAgICAg
ICAgICAgYW55UGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYW55UGF1
c2VkOwotICAgIH0KLQotICAgIGlmICghaW1wbEFuaW0tPnJ1bm5pbmcoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCh0ID49IDAuMCkgJiYgKHQgPD0gaW1wbEFuaW0tPmR1cmF0
aW9uKCkpKSB7Ci0gICAgICAgIGltcGxBbmltLT5mcmVlemVBdFRpbWUodCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAotewotICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5p
bWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYW5pbWF0aW9uLT5ydW5uaW5nKCkpCi0g
ICAgICAgICAgICArK2NvdW50OwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6
IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPnJ1bm5p
bmcoKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb3Vu
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTQyMjY5MjM5NmQyZmJhNjg4MGQxY2Q5ZjljOGQ2OWI4MmU3YjBjNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkltcGxpY2l0QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRp
b24uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTsKLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBSZW5k
ZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLS8vIEEgQ29tcG9zaXRlQW5pbWF0aW9u
IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGFuaW1hdGlvbnMgdGhhdCBhcmUgcnVubmluZwot
Ly8gb24gYSBzaW5nbGUgUmVuZGVyRWxlbWVudCwgc3VjaCBhcyBhIG51bWJlciBvZiBwcm9wZXJ0
aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KLWNsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbiA6IHB1
YmxpYyBSZWZDb3VudGVkPENvbXBvc2l0ZUFuaW1hdGlvbj4gewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29tcG9zaXRlQW5pbWF0aW9uPiBj
cmVhdGUoQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wb3NpdGVBbmltYXRpb24o
YW5pbWF0aW9uQ29udHJvbGxlcikpOwotICAgIH07Ci0KLSAgICB+Q29tcG9zaXRlQW5pbWF0aW9u
KCk7Ci0gICAgCi0gICAgdm9pZCBjbGVhckVsZW1lbnQoKTsKLQotICAgIEFuaW1hdGlvblVwZGF0
ZSBhbmltYXRlKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9m
VHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdDsKLQotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3Q7Ci0gICAgCi0gICAgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KLQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsK
LSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICBib29sIGlzU3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9zdXNwZW5kZWQ7IH0KLSAgICAKLSAgICBib29sIGhhc0FuaW1hdGlvbnMo
KSBjb25zdCAgeyByZXR1cm4gIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpIHx8ICFtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLQotICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3Q7Ci0KLSAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0K
LSAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQpOwotICAg
IHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEKTsK
LQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwg
ZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKENTU1Byb3BlcnR5SUQs
IGRvdWJsZSk7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3Q7
Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQ7IH0KLQotcHJpdmF0ZToKLSAg
ICBDb21wb3NpdGVBbmltYXRpb24oQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmKTsKLQot
ICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgdm9pZCB1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQ
dHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwotCi0gICAgYm9vbCBtX3N1
c3BlbmRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0FuaW1hdGlvblRoYXREZXBlbmRzT25M
YXlvdXQgeyBmYWxzZSB9OwotCi0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIG1f
YW5pbWF0aW9uQ29udHJvbGxlcjsKLSAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwIG1fdHJh
bnNpdGlvbnM7Ci0gICAgQW5pbWF0aW9uTmFtZU1hcCBtX2tleWZyYW1lQW5pbWF0aW9uczsKLSAg
ICBWZWN0b3I8QXRvbVN0cmluZ0ltcGwqPiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ1MzlmNmE1M2VjNTE1MGM5MDczN2QyMGUxYmIyYTViYjQwYTA5YTguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltcGxpY2l0QW5pbWF0aW9uLmgiCi0K
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNT
U1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlICJDb250ZW50Q2hhbmdlT2JzZXJ2ZXIu
aCIKLSNlbmRpZgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCi0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKGNvbnN0
IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwg
RWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tU3R5bGUpCi0gICAgOiBBbmltYXRpb25CYXNlKHRyYW5z
aXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAsIG1fZnJvbVN0eWxlKFJl
bmRlclN0eWxlOjpjbG9uZVB0cihmcm9tU3R5bGUpKQotICAgICwgbV90cmFuc2l0aW9uUHJvcGVy
dHkodHJhbnNpdGlvbi5wcm9wZXJ0eSgpLmlkKQotICAgICwgbV9hbmltYXRpbmdQcm9wZXJ0eShh
bmltYXRpbmdQcm9wZXJ0eSkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVsZW1l
bnQuZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRBZGRUcmFuc2l0aW9uKGVs
ZW1lbnQsIHRyYW5zaXRpb24pOwotI2VuZGlmCi0gICAgQVNTRVJUKGFuaW1hdGluZ1Byb3BlcnR5
ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci19Ci0KLUltcGxpY2l0QW5pbWF0aW9uOjp+SW1wbGlj
aXRBbmltYXRpb24oKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGF1dG8q
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCku
Y29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxlbWVudCwgbV9h
bmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICAvLyAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0
aGUgcmVuZGVyZXIgdGhhdCB3ZSBhcmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBh
Y2NlbGVyYXRlZCBhbmltYXRpb25zIGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgp
KQotICAgICAgICBlbmRBbmltYXRpb24oKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3Rl
bmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5kb2N1bWVudCgpLmhhc0xp
c3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7Ci19Ci0KLU9wdGlvblNldDxBbmltYXRlQ2hhbmdl
PiBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0
ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQotewotICAgIC8vIElmIHdlIGdldCB0aGlz
IGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcg
dXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBTbyBqdXN0IHJldHVybi4gRXZl
cnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVhbmVkIHVwLgotICAgIGlmIChwb3N0QWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0
YXRlKCk7Ci0KLSAgICAvLyBSZXNldCB0byBzdGFydCB0aGUgdHJhbnNpdGlvbiBpZiB3ZSBhcmUg
bmV3Ci0gICAgaWYgKGlzTmV3KCkpCi0gICAgICAgIHJlc2V0KHRhcmdldFN0eWxlLCBjb21wb3Np
dGVBbmltYXRpb24pOwotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgotICAgIC8v
IFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYg
bmVlZGVkCi0gICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0g
UmVuZGVyU3R5bGU6OmNsb25lUHRyKHRhcmdldFN0eWxlKTsKLQotICAgIENTU1Byb3BlcnR5QW5p
bWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgbV9hbmltYXRpbmdQcm9wZXJ0eSwgYW5pbWF0
ZWRTdHlsZS5nZXQoKSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJvZ3Jl
c3MoKSk7Ci0gICAgLy8gRklYTUU6IHdlIGFsc28gbmVlZCB0byBkZXRlY3QgY2FzZXMgd2hlcmUg
d2UgaGF2ZSB0byBzb2Z0d2FyZSBhbmltYXRlIGZvciBvdGhlciByZWFzb25zLAotICAgIC8vIHN1
Y2ggYXMgYSBjaGlsZCB1c2luZyBpbmhlcml0aW5nIHRoZSB0cmFuc2Zvcm0uIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkwMgotCi0gICAgLy8gRmlyZSB0aGUgc3Rh
cnQgdGltZW91dCBpZiBuZWVkZWQKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsK
LQotICAgIE9wdGlvblNldDxBbmltYXRlQ2hhbmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5
bGVCbGVuZGVkKTsKLSAgICBpZiAoc3RhdGUoKSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdl
LmFkZChBbmltYXRlQ2hhbmdlOjpTdGF0ZUNoYW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3Rh
dGUob2xkU3RhdGUpIHx8IGlzUnVubmluZ1N0YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3Rh
dGUoc3RhdGUoKSkgfHwgaXNSdW5uaW5nU3RhdGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2Uu
YWRkKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hh
bmdlOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgaWYgKCFhbmlt
YXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCptX3RvU3R5bGUpOwotCi0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGll
cyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21T
dHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygpKTsKLX0KLQotYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJl
Y3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzU3R5bGUoKSk7Ci0KLSAgICBpZiAo
IWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBOb24t
Ym94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgQVNTRVJUKG1fYW5pbWF0aW5nUHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwotCi0gICAgUmVuZGVyQm94JiBib3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcigpKTsKLSAgICBGbG9hdFJlY3QgcmVuZGVyZXJC
b3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJveC5ib3JkZXJCb3hSZWN0KCksIGJveC5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotCi0gICAgTGF5b3V0UmVjdCBzdGFydEJvdW5k
cyA9IGJvdW5kczsKLSAgICBMYXlvdXRSZWN0IGVuZEJvdW5kcyA9IGJvdW5kczsKLQotICAgIGlm
ICh0cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkgewotICAgICAgICBpZiAoIWNvbXB1dGVU
cmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICptX2Zyb21TdHls
ZSwgc3RhcnRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlm
ICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwg
Km1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChy
ZW5kZXJlckJveCwgKm1fZnJvbVN0eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRy
aXgocmVuZGVyZXJCb3gsICptX3RvU3R5bGUsIGVuZEJvdW5kcykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm91bmRzID0gdW5pb25SZWN0KHN0YXJ0Qm91bmRzLCBl
bmRCb3VuZHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9u
OjphZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENTU1By
b3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChtX2FuaW1h
dGluZ1Byb3BlcnR5KTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c3RhcnRBbmltYXRp
b24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydFRyYW5zaXRpb24odGlt
ZU9mZnNldCwgbV9hbmltYXRpbmdQcm9wZXJ0eSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHls
ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjpwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVu
ZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+dHJhbnNpdGlvblBh
dXNlZCh0aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSAgICAvLyBSZXN0b3JlIHRo
ZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICBpZiAoIXBhdXNlZCgpKQotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQoKSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OmNsZWFyKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChhdXRv
KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgp
LmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZFJlbW92ZVRyYW5zaXRpb24oKmVsZW1lbnQsIG1f
YW5pbWF0aW5nUHJvcGVydHkpOwotI2VuZGlmCi0gICAgQW5pbWF0aW9uQmFzZTo6Y2xlYXIoKTsK
LX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wpCi17Ci0gICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIt
PnRyYW5zaXRpb25GaW5pc2hlZChtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLX0KLQotdm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQotewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVt
ZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuY29udGVudENoYW5nZU9ic2VydmVy
KCkuZGlkRmluaXNoVHJhbnNpdGlvbigqZWxlbWVudCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0j
ZW5kaWYKLSAgICAvLyBJZiB3ZSBoYXZlIGEga2V5ZnJhbWUgYW5pbWF0aW9uIG9uIHRoaXMgcHJv
cGVydHksIHRoaXMgdHJhbnNpdGlvbiBpcyBiZWluZyBvdmVycmlkZGVuLiBUaGUga2V5ZnJhbWUK
LSAgICAvLyBhbmltYXRpb24ga2VlcHMgYW4gdW5hbmltYXRlZCBzdHlsZSBpbiBjYXNlIGEgdHJh
bnNpdGlvbiBzdGFydHMgd2hpbGUgdGhlIGtleWZyYW1lIGFuaW1hdGlvbiBpcwotICAgIC8vIHJ1
bm5pbmcuIEJ1dCBub3cgdGhhdCB0aGUgdHJhbnNpdGlvbiBoYXMgY29tcGxldGVkLCB3ZSBuZWVk
IHRvIHVwZGF0ZSB0aGlzIHN0eWxlIHdpdGggaXRzIG5ldwotICAgIC8vIGRlc3RpbmF0aW9uLiBJ
ZiB3ZSBkaWRuJ3QsIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB3ZSB3b3VsZCB0aGluayBhIHRyYW5z
aXRpb24gaGFkIHN0YXJ0ZWQKLSAgICAvLyAoY29tcGFyaW5nIHRoZSBvbGQgdW5hbmltYXRlZCBz
dHlsZSB3aXRoIHRoZSBuZXcgZmluYWwgc3R5bGUgb2YgdGhlIHRyYW5zaXRpb24pLgotICAgIGlm
IChhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uRm9yUHJv
cGVydHkobV9hbmltYXRpbmdQcm9wZXJ0eSkpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0VW5hbmlt
YXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqbV90b1N0eWxlKSk7Ci0KLSAgICBzZW5k
VHJhbnNpdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQsIGVsYXBzZWRU
aW1lKTsKLSAgICBlbmRBbmltYXRpb24oKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2VuZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBl
bGFwc2VkVGltZSkKLXsKLSAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0
aW9uZW5kRXZlbnQpIHsKLSAgICAgICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5
cGUgPSBEb2N1bWVudDo6VFJBTlNJVElPTkVORF9MSVNURU5FUjsKLQotICAgICAgICBpZiAoc2hv
dWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewotICAgICAgICAgICAgU3Ry
aW5nIHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZVN0cmluZyhtX2FuaW1hdGluZ1Byb3Bl
cnR5KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBldmVu
dAotICAgICAgICAgICAgYXV0byBlbGVtZW50ID0gbWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkp
OwotCi0gICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5i
YWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hl
KTsKLSAgICAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIC8vIFNjaGVkdWxlIGV2ZW50IGhhbmRsaW5nCi0gICAgICAgICAg
ICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEV2ZW50VG9E
aXNwYXRjaCgqZWxlbWVudCwgZXZlbnRUeXBlLCBwcm9wZXJ0eU5hbWUsIGVsYXBzZWRUaW1lKTsK
LQotICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxl
Ci0gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5k
RXZlbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKGVsZW1lbnQuZ2V0KCkpOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
RGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7IC8vIERpZG4ndCBkaXNwYXRjaCBhbiBldmVudAotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0
aW9uOjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSYgdG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uKQotewotICAgIEFTU0VSVChtX2Zyb21TdHlsZSk7Ci0KLSAgICBtX3Rv
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodG8pOwotCi0gICAgaWYgKGVsZW1lbnQoKSkK
LSAgICAgICAgU3R5bGU6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCptX3RvU3R5bGUsIGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKSwgZWxlbWVudCgpKTsKLQotICAgIC8vIFJlc3RhcnQgdGhlIHRyYW5zaXRp
b24uCi0gICAgaWYgKG1fZnJvbVN0eWxlICYmIG1fdG9TdHlsZSAmJiAhY29tcG9zaXRlQW5pbWF0
aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0KLSAgICAvLyBTZXQgdGhlIHRyYW5z
Zm9ybSBhbmltYXRpb24gbGlzdC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgp
OwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYgRU5BQkxF
KEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5j
dGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5j
dGlvbkxpc3RzKCk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnNldE92ZXJyaWRkZW4o
Ym9vbCBiKQotewotICAgIGlmIChiID09IG1fb3ZlcnJpZGRlbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9vdmVycmlkZGVuID0gYjsKLSAgICB1cGRhdGVTdGF0ZU1hY2hpbmUobV9vdmVycmlk
ZGVuID8gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGF1c2VPdmVycmlkZSA6IEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlJlc3VtZU92ZXJyaWRlLCAtMSk7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRpb246
OmFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIHJl
dHVybiAobV9hbmltYXRpbmdQcm9wZXJ0eSA9PSBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgSW1wbGlj
aXRBbmltYXRpb246OmlzVGFyZ2V0UHJvcGVydHlFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBXZSBjYW4gZ2V0IGhlcmUg
Zm9yIGEgdHJhbnNpdGlvbiB0aGF0IGhhcyBub3Qgc3RhcnRlZCB5ZXQuIFRoaXMgd291bGQgbWFr
ZSBtX3RvU3R5bGUgdW5zZXQgYW5kIG51bGwuIAotICAgIC8vIFNvIHdlIGNoZWNrIHRoYXQgaGVy
ZSAoc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY3MDY+KQot
ICAgIGlmICghbV90b1N0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIENT
U1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLmdldCgp
LCB0YXJnZXRTdHlsZSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVy
dHlWYWx1ZUluU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlKQotewotICAgIC8vIFdlIHNob3VsZCBuZXZlciBhZGQgYSB0cmFuc2l0aW9uIHdpdGggYSAw
IGR1cmF0aW9uIGFuZCBkZWxheS4gQnV0IGlmIHdlIGV2ZXIgZGlkCi0gICAgLy8gaXQgd291bGQg
aGF2ZSBhIG51bGwgdG9TdHlsZS4gU28ganVzdCBpbiBjYXNlLCBsZXQncyBjaGVjayB0aGF0IGhl
cmUuIChTZWUKLSAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI0Nzg3PgotICAgIGlmICghbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcCwgY3Vy
cmVudFN0eWxlLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygp
KTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlv
bkxpc3QoKQotewotICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9ICZtX2Zyb21T
dHlsZS0+dHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG9WYWwg
PSAmbV90b1N0eWxlLT50cmFuc2Zvcm0oKTsKLQotICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHZhbCA9IHRvVmFsOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0aW9u
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBBbiBlbXB0
eSB0cmFuc2Zvcm0gbGlzdCBtYXRjaGVzIGFueXRoaW5nLgotICAgIGlmICh2YWwgIT0gdG9WYWwg
JiYgIXRvVmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpICYmICF2YWwtPm9wZXJhdGlvbnNNYXRj
aCgqdG9WYWwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUcmFuc2Zvcm0gbGlzdHMgbWF0
Y2guCi0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSB0cnVlOwotfQotCi1zdGF0
aWMgYm9vbCBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZnJv
bU9wZXJhdGlvbnMsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvT3BlcmF0aW9ucykKLXsKLSAg
ICBpZiAoZnJvbU9wZXJhdGlvbnMtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGZy
b21PcGVyYXRpb25zID0gJnRvT3BlcmF0aW9uczsKLQotICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+
b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGZyb21PcGVyYXRpb25zICE9ICZ0b09wZXJhdGlvbnMgJiYgIXRvT3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpICYmICFmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9uc01hdGNoKHRvT3Bl
cmF0aW9ucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25M
aXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsKLQotICAg
IGlmICghbV9mcm9tU3R5bGUgfHwgIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJv
bVN0eWxlLT5maWx0ZXIoKSwgbV90b1N0eWxlLT5maWx0ZXIoKSk7Ci19Ci0KLSNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGlu
Z0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90
b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2JhY2tkcm9wRmlsdGVyRnVuY3Rpb25M
aXN0c01hdGNoID0gZmlsdGVyT3BlcmF0aW9uc01hdGNoKCZtX2Zyb21TdHlsZS0+YmFja2Ryb3BG
aWx0ZXIoKSwgbV90b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKTsKLX0KLSNlbmRpZgotCi12b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxp
c3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotCi0gICAg
aWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmlsdGVyT3BlcmF0aW9uc01hdGNoKCZt
X2Zyb21TdHlsZS0+YXBwbGVDb2xvckZpbHRlcigpLCBtX3RvU3R5bGUtPmFwcGxlQ29sb3JGaWx0
ZXIoKSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IEltcGxpY2l0QW5pbWF0aW9uOjp0aW1lVG9O
ZXh0U2VydmljZSgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4gdCA9IEFuaW1hdGlvbkJhc2U6
OnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgaWYgKCF0IHx8IHQudmFsdWUoKSAhPSAwX3MgfHwg
cHJlQWN0aXZlKCkpCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgX01TQ19WRVIgPj0gMTkyMAotICAg
ICAgICByZXR1cm4gV1RGTW92ZSh0KTsKLSNlbHNlCi0gICAgICAgIHJldHVybiB0OwotI2VuZGlm
Ci0KLSAgICAvLyBBIHJldHVybiB2YWx1ZSBvZiAwIG1lYW5zIHdlIG5lZWQgc2VydmljZS4gQnV0
IGlmIHRoaXMgaXMgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9uIHdlIAotICAgIC8vIG9ubHkgbmVl
ZCBzZXJ2aWNlIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zaXRpb24uCi0gICAgaWYgKENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChtX2FuaW1hdGlu
Z1Byb3BlcnR5KSAmJiBpc0FjY2VsZXJhdGVkKCkpIHsKLSAgICAgICAgYm9vbCBpc0xvb3Bpbmc7
Ci0gICAgICAgIGdldFRpbWVUb05leHRFdmVudCh0LnZhbHVlKCksIGlzTG9vcGluZyk7Ci0gICAg
fQotICAgIHJldHVybiB0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzJiODRhZGNlY2Y5MjhkODRlMTVhNDBjNWM4ODU3NjA1ZjNl
NjQ2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyRWxlbWVudDsKLQotLy8gQW4gSW1w
bGljaXRBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhIHRyYW5zaXRpb24gb2YgYSBzcGVj
aWZpYyBDU1MgcHJvcGVydHkKLS8vIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3Mg
SW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5p
bWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBFbGVtZW50JiBlbGVtZW50
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5
bGUmIGZyb21TdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltcGxp
Y2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVydHksIGVsZW1lbnQsIGNvbXBv
c2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7Ci0gICAgfTsKLSAgICAKLSAgICBDU1NQcm9wZXJ0
eUlEIHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNpdGlvblByb3Bl
cnR5OyB9Ci0gICAgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW5nUHJvcGVydHk7IH0KLQotICAgIHZvaWQgb25BbmltYXRpb25FbmQoZG91
YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJs
ZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0
aW1lT2Zmc2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZEFuaW1hdGlvbihib29sIGZpbGxpbmdG
b3J3YXJkcyA9IGZhbHNlKSBvdmVycmlkZTsKLQotICAgIE9wdGlvblNldDxBbmltYXRlQ2hhbmdl
PiBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRT
dHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7Ci0gICAg
dm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBDb21wb3NpdGVBbmltYXRpb24mKTsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNm
b3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgYWZm
ZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0T3ZlcnJpZGRl
bihib29sKTsKLSAgICBib29sIG92ZXJyaWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X292ZXJyaWRkZW47IH0KLQotICAgIGJvb2wgYWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBoYXNTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJvbVN0eWxlICYmIG1fdG9TdHlsZTsgfQotCi0gICAgYm9vbCBpc1RhcmdldFByb3BlcnR5RXF1
YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqKTsKLQotICAgIHZvaWQgYmxlbmRQ
cm9wZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlELCBSZW5kZXJTdHlsZSopOwotCi0gICAg
T3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBvdmVycmlkZTsKLSAgICAKLSAg
ICBib29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlOyB9Ci0gICAgdm9pZCBzZXRB
Y3RpdmUoYm9vbCBiKSB7IG1fYWN0aXZlID0gYjsgfQotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUm
IHVuYW5pbWF0ZWRTdHlsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2Zyb21TdHlsZTsg
fQotCi0gICAgdm9pZCBjbGVhcigpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBz
aG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlKSBjb25zdDsg
ICAgCi0gICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmLCBkb3Vi
bGUgZWxhcHNlZFRpbWUpOwotCi0gICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlz
dCgpOwotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tk
cm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2VuZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNo
aW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLXByaXZhdGU6Ci0gICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgRWxlbWVudCYsIENvbXBv
c2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0gICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKTsKLQotICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5k
aW5nLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9mcm9tU3R5bGU7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3RvU3R5bGU7Ci0KLSAgICBDU1NQcm9wZXJ0
eUlEIG1fdHJhbnNpdGlvblByb3BlcnR5OyAvLyBUcmFuc2l0aW9uIHByb3BlcnR5IGFzIHNwZWNp
ZmllZCBpbiB0aGUgUmVuZGVyU3R5bGUuCi0gICAgQ1NTUHJvcGVydHlJRCBtX2FuaW1hdGluZ1By
b3BlcnR5OyAvLyBTcGVjaWZpYyBwcm9wZXJ0eSBmb3IgdGhpcyBJbXBsaWNpdEFuaW1hdGlvbgot
Ci0gICAgYm9vbCBtX2FjdGl2ZSB7IHRydWUgfTsgLy8gVXNlZCBmb3IgY3VsbGluZyB0aGUgbGlz
dCBvZiB0cmFuc2l0aW9ucy4KLSAgICBib29sIG1fb3ZlcnJpZGRlbiB7IGZhbHNlIH07IC8vIFRy
dWUgd2hlbiB0aGVyZSBpcyBhIGtleWZyYW1lIGFuaW1hdGlvbiB0aGF0IG92ZXJyaWRlcyB0aGUg
dHJhbnNpdGlvbmluZyBwcm9wZXJ0eQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWI1NzE1MDc3MjM4NzdiNWViZjMzMmJi
MDhjODUwOTc3Nzk4OGM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24u
aCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlN0eWxlUGVuZGluZ1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKLSNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiV2lsbENoYW5nZURhdGEuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1LZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5p
bWF0aW9uJiBhbmltYXRpb24sIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYg
Y29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQot
ICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlv
bikKLSAgICAsIG1fa2V5ZnJhbWVzKGFuaW1hdGlvbi5uYW1lKCkpCi0gICAgLCBtX3VuYW5pbWF0
ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodW5hbmltYXRlZFN0eWxlKSkKLXsKLSAgICBy
ZXNvbHZlS2V5ZnJhbWVTdHlsZXMoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgbV90cmFuc2Zvcm1G
dW5jdGlvbkxpc3RWYWxpZCBmbGFnIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGxpc3Rz
IGluIHRoZSBrZXlmcmFtZXMgbWF0Y2guCi0gICAgdmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxp
c3QoKTsKLSAgICBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwotI2VuZGlmCi0gICAgY2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwotCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1l
cy5wcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgaWYgKFdpbGxDaGFuZ2VEYXRhOjpwcm9wZXJ0eUNy
ZWF0ZXNTdGFja2luZ0NvbnRleHQocHJvcGVydHlJRCkpCi0gICAgICAgICAgICBtX3RyaWdnZXJz
U3RhY2tpbmdDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkp
Ci0gICAgICAgICAgICBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgPSB0cnVlOwotICAgICAgICAK
LSAgICAgICAgaWYgKG1fdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQgJiYgbV9oYXNBY2NlbGVyYXRl
ZFByb3BlcnR5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY29tcHV0ZUxheW91
dERlcGVuZGVuY3koKTsKLX0KLQotS2V5ZnJhbWVBbmltYXRpb246On5LZXlmcmFtZUFuaW1hdGlv
bigpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRvIHRlbGwgdGhlIHJlbmRlcmVyIHRoYXQgd2UgYXJl
IGVuZGluZy4gVGhpcyB3aWxsIG1ha2Ugc3VyZSBhbnkgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBh
cmUgcmVtb3ZlZC4KLSAgICBpZiAoIXBvc3RBY3RpdmUoKSkKLSAgICAgICAgZW5kQW5pbWF0aW9u
KCk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmNvbXB1dGVMYXlvdXREZXBlbmRlbmN5
KCkKLXsKLSAgICBpZiAoIW1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlU
cmFuc2Zvcm0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0g
bV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJh
bWVzOyBpKyspIHsKLSAgICAgICAgYXV0byoga2V5ZnJhbWVTdHlsZSA9IG1fa2V5ZnJhbWVzW2ld
LnN0eWxlKCk7Ci0gICAgICAgIGlmICgha2V5ZnJhbWVTdHlsZSkgewotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoa2V5ZnJhbWVTdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgICAgIGF1
dG8mIHRyYW5zZm9ybU9wZXJhdGlvbnMgPSBrZXlmcmFtZVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3BlcmF0aW9uIDogdHJhbnNmb3JtT3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uLT5pc1RyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRv
IHRyYW5zbGF0aW9uID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPihvcGVy
YXRpb24uZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24tPngoKS5p
c1BlcmNlbnQoKSB8fCB0cmFuc2xhdGlvbi0+eSgpLmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2RlcGVuZHNPbkxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
JiB0b1N0eWxlLCBkb3VibGUmIHByb2cpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IG51bUtleWZyYW1l
cyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAgICBpZiAoIW51bUtleWZyYW1lcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qga2V5Ci0gICAgZG91YmxlIGVsYXBzZWRU
aW1lID0gZ2V0RWxhcHNlZFRpbWUoKTsKLSAgICBpZiAobV9hbmltYXRpb24tPmR1cmF0aW9uKCkg
JiYgbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25D
b3VudEluZmluaXRlKQotICAgICAgICBlbGFwc2VkVGltZSA9IHN0ZDo6bWluKGVsYXBzZWRUaW1l
LCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
KTsKLQotICAgIGNvbnN0IGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IHRoaXMtPmZyYWN0aW9uYWxU
aW1lKDEsIGVsYXBzZWRUaW1lLCAwKTsKLSAgICBBU1NFUlQoIW1fa2V5ZnJhbWVzWzBdLmtleSgp
KTsKLSAgICBBU1NFUlQobV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMV0ua2V5KCkg
PT0gMSk7Ci0KLSAgICBpbnQgcHJldkluZGV4ID0gLTE7Ci0gICAgaW50IG5leHRJbmRleCA9IC0x
OwotICAgIC8vIEZJWE1FOiB3aXRoIGEgbG90IG9mIGtleXMsIHRoaXMgbGluZWFyIHNlYXJjaCB3
aWxsIGJlIHNsb3cuIFdlIGNvdWxkIGJpbmFyeSBzZWFyY2guCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVl
JiBjdXJyS2V5RnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKLQotICAgICAgICBpZiAoIWN1cnJLZXlG
cmFtZS5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IGN1cnJLZXlGcmFtZS5rZXkoKSkgewotICAg
ICAgICAgICAgbmV4dEluZGV4ID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIHByZXZJbmRleCA9IGk7Ci0gICAgfQotCi0gICAgaWYgKHByZXZJbmRleCA9PSAtMSkK
LSAgICAgICAgcHJldkluZGV4ID0gMDsKLSAgICBpZiAobmV4dEluZGV4ID09IC0xKQotICAgICAg
ICBuZXh0SW5kZXggPSBtX2tleWZyYW1lcy5zaXplKCkgLSAxOwotCi0gICAgY29uc3QgS2V5ZnJh
bWVWYWx1ZSYgcHJldktleWZyYW1lID0gbV9rZXlmcmFtZXNbcHJldkluZGV4XTsKLSAgICBjb25z
dCBLZXlmcmFtZVZhbHVlJiBuZXh0S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tuZXh0SW5kZXhdOwot
Ci0gICAgZnJvbVN0eWxlID0gcHJldktleWZyYW1lLnN0eWxlKCk7Ci0gICAgdG9TdHlsZSA9IG5l
eHRLZXlmcmFtZS5zdHlsZSgpOwotCi0gICAgZG91YmxlIG9mZnNldCA9IHByZXZLZXlmcmFtZS5r
ZXkoKTsKLSAgICBkb3VibGUgc2NhbGUgPSAxLjAgLyAobmV4dEluZGV4ID09IHByZXZJbmRleCA/
ICAxIDogKG5leHRLZXlmcmFtZS5rZXkoKSAtIHByZXZLZXlmcmFtZS5rZXkoKSkpOwotCi0gICAg
cHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZLZXlmcmFtZS50aW1pbmdGdW5jdGlv
bigpKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IEtleWZyYW1lQW5pbWF0aW9uOjph
bmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCi17Ci0gICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBzdGF0ZSgpOwotCi0g
ICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBmaXJlIHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZCAo
RklYTUU6IHRoaXMgZnVuY3Rpb24gbmVlZHMgYSBiZXR0ZXIgbmFtZSkuCi0gICAgZmlyZUFuaW1h
dGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vdCB5ZXQgc3RhcnRl
ZCwgd2Ugd2lsbCBub3QgaGF2ZSBhIHZhbGlkIHN0YXJ0IHRpbWUsIHNvIGp1c3Qgc3RhcnQgdGhl
IGFuaW1hdGlvbiBpZiBuZWVkZWQuCi0gICAgaWYgKGlzTmV3KCkpIHsKLSAgICAgICAgaWYgKG1f
YW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltYXRpb25QbGF5U3RhdGU6OlBsYXlpbmcgJiYg
IWNvbXBvc2l0ZUFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAg
ICAgIGVsc2UgaWYgKG1fYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltYXRpb25QbGF5U3Rh
dGU6OlBhdXNlZCkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQsIC0xKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQg
dGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFu
aW5nIHVwIGEganVzdC1maW5pc2hlZCBhbmltYXRpb24uCi0gICAgLy8gSWYgc28sIHdlIG5lZWQg
dG8gc2VuZCBiYWNrIHRoZSB0YXJnZXRTdHlsZS4KLSAgICBpZiAocG9zdEFjdGl2ZSgpKSB7Ci0g
ICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotICAgICAgICByZXR1cm4geyB9Owot
ICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIsIHdl
IGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBzdHlsZSB5ZXQuCi0gICAgLy8gU3BlY2lhbCBjYXNl
IDEgLSBpZiB0aGUgZGVsYXkgdGltZSBpcyAwLCB0aGVuIHdlIGRvIHdhbnQgdG8gc2V0IHRoZSBm
aXJzdCBmcmFtZSBvZiB0aGUKLSAgICAvLyBhbmltYXRpb24gcmlnaHQgYXdheS4gVGhpcyBhdm9p
ZHMgYSBmbGFzaCB3aGVuIHRoZSBhbmltYXRpb24gc3RhcnRzLgotICAgIC8vIFNwZWNpYWwgY2Fz
ZSAyIC0gaWYgdGhlcmUgaXMgYSBiYWNrd2FyZHMgZmlsbCBtb2RlLCB0aGVuIHdlIHdhbnQgdG8g
Y29udGludWUKLSAgICAvLyB0aHJvdWdoIHRvIHRoZSBzdHlsZSBibGVuZCBzbyB0aGF0IHdlIGdl
dCB0aGUgZnJvbVN0eWxlLgotICAgIGlmICh3YWl0aW5nVG9TdGFydCgpICYmIG1fYW5pbWF0aW9u
LT5kZWxheSgpID4gMCAmJiAhbV9hbmltYXRpb24tPmZpbGxzQmFja3dhcmRzKCkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgCi0gICAgLy8gSWYgd2UgaGF2ZSBubyBrZXlmcmFtZXMsIGRvbid0
IGFuaW1hdGUuCi0gICAgaWYgKCFtX2tleWZyYW1lcy5zaXplKCkpIHsKLSAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbiwgLTEpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlv
bi4KLSAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1h
a2Ugb25lIGlmIG5lZWRlZC4KLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1h
dGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gYmUgbW9yZSBlZmZpY2llbnQgYWJvdXQgZGV0ZXJtaW5pbmcgd2hp
Y2gga2V5ZnJhbWVzIHdlIGFyZSBhbmltYXRpbmcgYmV0d2Vlbi4KLSAgICAvLyBXZSBzaG91bGQg
Y2FjaGUgdGhlIGxhc3QgcGFpciBvciBzb21ldGhpbmcuCi0gICAgZm9yIChhdXRvIHByb3BlcnR5
SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gR2V0IHRoZSBmcm9t
L3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3MgYmV0d2VlbgotICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbVN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5
bGUgPSBudWxscHRyOwotICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwOwotICAgICAgICBmZXRj
aEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkocHJvcGVydHlJRCwgZnJvbVN0eWxlLCB0b1N0
eWxlLCBwcm9ncmVzcyk7Ci0KLSAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJv
cGVydGllcyh0aGlzLCBwcm9wZXJ0eUlELCBhbmltYXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUs
IHRvU3R5bGUsIHByb2dyZXNzKTsKLSAgICB9Ci0KLSAgICBPcHRpb25TZXQ8QW5pbWF0ZUNoYW5n
ZT4gY2hhbmdlKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCk7Ci0gICAgaWYgKHN0YXRlKCkg
IT0gb2xkU3RhdGUpCi0gICAgICAgIGNoYW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6U3RhdGVDaGFu
Z2UpOwotCi0gICAgaWYgKChpc1BhdXNlZFN0YXRlKG9sZFN0YXRlKSB8fCBpc1J1bm5pbmdTdGF0
ZShvbGRTdGF0ZSkpICE9IChpc1BhdXNlZFN0YXRlKHN0YXRlKCkpIHx8IGlzUnVubmluZ1N0YXRl
KHN0YXRlKCkpKSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpSdW5uaW5nU3Rh
dGVDaGFuZ2UpOwotCi0gICAgcmV0dXJuIGNoYW5nZTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlKQotewotICAgIC8vIElmIHdlJ3JlIGRvbmUsIG9yIGluIHRoZSBkZWxheSBwaGFz
ZSBhbmQgd2UncmUgbm90IGJhY2t3YXJkcyBmaWxsaW5nLCB0ZWxsIHRoZSBjYWxsZXIgdG8gdXNl
IHRoZSBjdXJyZW50IHN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZlKCkgfHwgKHdhaXRpbmdUb1N0
YXJ0KCkgJiYgbV9hbmltYXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNC
YWNrd2FyZHMoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9rZXlmcmFtZXMuc2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAg
IGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIoKS0+c3R5bGUo
KSk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMo
KSkgewotICAgICAgICAvLyBHZXQgdGhlIGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3
ZWVuCi0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJs
ZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAgIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlELCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFu
aW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0K
LX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5p
bWF0aW9uKExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBBU1NFUlQobV9rZXlmcmFt
ZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpOwotCi0gICAgaWYgKCFp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTm9uLWJv
eGVzIGRvbid0IGdldCB0cmFuc2Zvcm1lZDsKLQotICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIGF1dG8gcmVuZGVyZXJCb3ggPSBzbmFwUmVjdFRv
RGV2aWNlUGl4ZWxzKGJveC5ib3JkZXJCb3hSZWN0KCksIGJveC5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOwotCi0gICAgTGF5b3V0UmVjdCBjdW11bGF0aXZlQm91bmRzOwotCi0gICAg
Zm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5ZnJhbWVzLmtleWZyYW1lcygpKSB7Ci0gICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBrZXlmcmFtZVN0eWxlID0ga2V5ZnJhbWUuc3R5bGUoKTsKLQot
ICAgICAgICBpZiAoIWtleWZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zv
cm0pKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3Qga2V5ZnJhbWUgaXMgbWlzc2luZyB0
cmFuc2Zvcm0gc3R5bGUsIHVzZSB0aGUgY3VycmVudCBzdHlsZS4KLSAgICAgICAgICAgIGlmICgh
a2V5ZnJhbWUua2V5KCkpCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVTdHlsZSA9ICZib3guc3R5
bGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGF1dG8ga2V5ZnJhbWVCb3VuZHMgPSBib3VuZHM7Ci0gICAgICAgIAot
ICAgICAgICBib29sIGNhbkNvbXB1dGU7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1GdW5jdGlvbkxp
c3RzTWF0Y2goKSkKLSAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21wdXRlVHJhbnNmb3JtZWRF
eHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVyQm94LCAqa2V5ZnJhbWVTdHlsZSwga2V5ZnJh
bWVCb3VuZHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5Db21wdXRlID0gY29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4KHJlbmRlcmVyQm94LCAqa2V5ZnJhbWVTdHlsZSwg
a2V5ZnJhbWVCb3VuZHMpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFjYW5Db21wdXRlKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgY3VtdWxhdGl2ZUJvdW5k
cy51bml0ZShrZXlmcmFtZUJvdW5kcyk7Ci0gICAgfQotCi0gICAgYm91bmRzID0gY3VtdWxhdGl2
ZUJvdW5kczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6
aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSk7Ci19Ci0K
LWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0
KQotewotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJldHVybiByZW5kZXJlci0+c3RhcnRBbmltYXRpb24odGltZU9mZnNldCwgbV9hbmltYXRpb24s
IG1fa2V5ZnJhbWVzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmICghZWxl
bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uUGF1c2VkKHRpbWVPZmZz
ZXQsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSk7Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBv
cmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQoKSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRp
b246OmVuZEFuaW1hdGlvbihib29sIGZpbGxpbmdGb3J3YXJkcykKLXsKLSAgICBpZiAoIWVsZW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPmFuaW1hdGlvbkZpbmlzaGVkKG1fa2V5ZnJh
bWVzLmFuaW1hdGlvbk5hbWUoKSk7Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5h
bmltYXRlZCkgc3R5bGUKLSAgICBpZiAoIWZpbGxpbmdGb3J3YXJkcyAmJiAhcGF1c2VkKCkpCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotYm9vbCBLZXlmcmFt
ZUFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVy
VHlwZSBsaXN0ZW5lclR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKS5oYXNMaXN0ZW5lclR5cGUobGlzdGVuZXJUeXBlKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6b25BbmltYXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgc2Vu
ZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50LCBlbGFwc2Vk
VGltZSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om9uQW5pbWF0aW9uSXRlcmF0aW9u
KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1l
cygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50LCBlbGFwc2VkVGltZSk7Ci19Ci0KLXZvaWQgS2V5
ZnJhbWVBbmltYXRpb246Om9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAg
ICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50LCBlbGFw
c2VkVGltZSk7Ci0gICAgZW5kQW5pbWF0aW9uKG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkp
OwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3Qg
QXRvbVN0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgRG9jdW1l
bnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5cGU7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVudCkKLSAgICAgICAgbGlzdGVuZXJUeXBl
ID0gRG9jdW1lbnQ6OkFOSU1BVElPTklURVJBVElPTl9MSVNURU5FUjsKLSAgICBlbHNlIGlmIChl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQpCi0gICAgICAgIGxpc3RlbmVy
VHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05FTkRfTElTVEVORVI7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvblN0YXJ0
RXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50KTsK
LSAgICAgICAgaWYgKG1fc3RhcnRFdmVudERpc3BhdGNoZWQpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIG1fc3RhcnRFdmVudERpc3BhdGNoZWQgPSB0cnVlOwotICAgICAgICBs
aXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OU1RBUlRfTElTVEVORVI7Ci0gICAgfQot
Ci0gICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3RlbmVyVHlwZSkpIHsKLSAg
ICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50Ci0gICAgICAgIGF1dG8gZWxlbWVudCA9IG1ha2VS
ZWZQdHIodGhpcy0+ZWxlbWVudCgpKTsKLQotICAgICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxl
bWVudC0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90
SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNjaGVkdWxlIGV2ZW50IGhhbmRsaW5nCi0gICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRXZlbnRU
b0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUo
KSwgZWxhcHNlZFRpbWUpOwotCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFu
aW1hdGVkKSBzdHlsZQotICAgICAgICBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Vi
a2l0QW5pbWF0aW9uRW5kRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRp
b25lbmRFdmVudCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIERp
ZCBkaXNwYXRjaCBhbiBldmVudAotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsgLy8gRGlkIG5v
dCBkaXNwYXRjaCBhbiBldmVudAotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvdmVycmlk
ZUFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCBvdmVycmlkZSBpbXBsaWNpdCBhbmlt
YXRpb25zIHRoYXQgbWF0Y2ggdGhlIHByb3BlcnRpZXMgaW4gdGhlIGtleWZyYW1lIGFuaW1hdGlv
bgotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygpKQot
ICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMo
cHJvcGVydHlJRCk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRk
ZW5BbmltYXRpb25zKCkKLXsKLSAgICAvLyBUaGlzIHdpbGwgcmVzdW1lIG92ZXJyaWRkZW4gaW1w
bGljaXQgYW5pbWF0aW9ucwotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMu
cHJvcGVydGllcygpKQotICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+cmVzdW1lT3ZlcnJp
ZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhwcm9wZXJ0eUlEKTsKLX0KLQotYm9vbCBLZXlmcmFtZUFu
aW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpOwotfQot
Ci12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpyZXNvbHZlS2V5ZnJhbWVTdHlsZXMoKQotewotICAg
IGlmICghZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogc3R5bGVT
Y29wZSA9IFN0eWxlOjpTY29wZTo6Zm9yT3JkaW5hbCgqZWxlbWVudCgpLCBtX2FuaW1hdGlvbi0+
bmFtZVN0eWxlU2NvcGVPcmRpbmFsKCkpKQotICAgICAgICBzdHlsZVNjb3BlLT5yZXNvbHZlcigp
LmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKCplbGVtZW50KCksIG1fdW5hbmltYXRlZFN0eWxl
LmdldCgpLCBtX2tleWZyYW1lcyk7Ci0KLSAgICAvLyBFbnN1cmUgcmVzb3VyY2UgbG9hZHMgZm9y
IGFsbCB0aGUgZnJhbWVzLgotICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX2tleWZyYW1lcy5r
ZXlmcmFtZXMoKSkgewotICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBjb25zdF9jYXN0PFJlbmRl
clN0eWxlKj4oa2V5ZnJhbWUuc3R5bGUoKSkpCi0gICAgICAgICAgICBTdHlsZTo6bG9hZFBlbmRp
bmdSZXNvdXJjZXMoKnN0eWxlLCBlbGVtZW50KCktPmRvY3VtZW50KCksIGVsZW1lbnQoKSk7Ci0g
ICAgfQotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0
aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsK
LSAgICAKLSAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29u
dGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEVtcHR5IHRyYW5zZm9ybXMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhlIGZpcnN0
IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCi0gICAgc2l6ZV90IG51bUtleWZyYW1l
cyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAgICBzaXplX3QgZmlyc3ROb25FbXB0eVRyYW5zZm9y
bUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1
cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBpZiAoY3VycmVudEtleWZy
YW1lLnN0eWxlKCktPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXplKCkpIHsKLSAgICAgICAg
ICAgIGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID0gaTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJzdE5vbkVtcHR5VHJh
bnNmb3JtS2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZmlyc3RWYWwgPSAmbV9rZXlm
cmFtZXNbZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXhdLnN0eWxlKCktPnRyYW5z
Zm9ybSgpOwotICAgIAotICAgIC8vIFNlZSBpZiB0aGUga2V5ZnJhbWVzIGFyZSB2YWxpZAotICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7
IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBj
dXJyZW50S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKLSAgICAgICAgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogdmFsID0gJmN1cnJlbnRLZXlmcmFtZS5zdHlsZSgpLT50cmFuc2Zvcm0oKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEFuIGVtdHB5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55
dGhpbmcuCi0gICAgICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZmlyc3RWYWwtPm9wZXJhdGlv
bnNNYXRjaCgqdmFsKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRp
b246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgY29uc3Qgc3RkOjpmdW5jdGlvbjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiAoY29u
c3QgUmVuZGVyU3R5bGUmKT4mIGZpbHRlcnNHZXR0ZXIpIGNvbnN0Ci17Ci0gICAgaWYgKG1fa2V5
ZnJhbWVzLnNpemUoKSA8IDIgfHwgIW1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkocHJvcGVy
dHlJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVtcHR5IGZpbHRlcnMgbWF0
Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhlIGZpcnN0IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVm
ZXJlbmNlCi0gICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAg
ICBzaXplX3QgZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGlm
IChmaWx0ZXJzR2V0dGVyKCptX2tleWZyYW1lc1tpXS5zdHlsZSgpKS5vcGVyYXRpb25zKCkuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IGk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoZmlyc3ROb25F
bXB0eUtleWZyYW1lSW5kZXggPT0gbnVtS2V5ZnJhbWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiBmaXJzdFZhbCA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ZpcnN0
Tm9uRW1wdHlLZXlmcmFtZUluZGV4XS5zdHlsZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXggKyAxOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kp
IHsKLSAgICAgICAgYXV0byYgdmFsdWUgPSBmaWx0ZXJzR2V0dGVyKCptX2tleWZyYW1lc1tpXS5z
dHlsZSgpKTsKLQotICAgICAgICAvLyBBbiBlbXRweSBmaWx0ZXIgbGlzdCBtYXRjaGVzIGFueXRo
aW5nLgotICAgICAgICBpZiAodmFsdWUub3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghZmlyc3RWYWwub3BlcmF0aW9uc01hdGNoKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1
bmN0aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gY2hlY2tG
b3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlGaWx0ZXIsIFtdIChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAg
ICAgcmV0dXJuIHN0eWxlLmZpbHRlcigpOwotICAgIH0pOwotfQotCi0jaWYgRU5BQkxFKEZJTFRF
UlNfTEVWRUxfMikKLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdCYWNr
ZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKQotewotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlv
bkxpc3RzTWF0Y2ggPSBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCBbXSAoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSAt
PiBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB7Ci0gICAgICAgIHJldHVybiBzdHlsZS5iYWNrZHJv
cEZpbHRlcigpOwotICAgIH0pOwotfQotI2VuZGlmCi0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246
OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKQotewotICAgIG1fY29s
b3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rp
b25MaXN0cyhDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0
eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKTsKLSAgICB9KTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4g
S2V5ZnJhbWVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxT
ZWNvbmRzPiB0ID0gQW5pbWF0aW9uQmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAo
IXQgfHwgdC52YWx1ZSgpICE9IDBfcyB8fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZD
KSAmJiBfTVNDX1ZFUiA+PSAxOTIwCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UK
LSAgICAgICAgcmV0dXJuIHQ7Ci0jZW5kaWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAg
bWVhbnMgd2UgbmVlZCBzZXJ2aWNlLiBCdXQgaWYgd2Ugb25seSBoYXZlIGFjY2VsZXJhdGVkIGFu
aW1hdGlvbnMgd2UgCi0gICAgLy8gb25seSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUg
dHJhbnNpdGlvbi4KLSAgICBib29sIGFjY2VsZXJhdGVkUHJvcGVydGllc09ubHkgPSB0cnVlOwot
ICAgIAotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygp
KSB7Ci0gICAgICAgIGlmICghQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVy
dHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpIHx8ICFpc0FjY2VsZXJhdGVkKCkpIHsKLSAgICAg
ICAgICAgIGFjY2VsZXJhdGVkUHJvcGVydGllc09ubHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFjY2VsZXJhdGVkUHJvcGVydGllc09u
bHkpIHsKLSAgICAgICAgYm9vbCBpc0xvb3Bpbmc7Ci0gICAgICAgIGdldFRpbWVUb05leHRFdmVu
dCh0LnZhbHVlKCksIGlzTG9vcGluZyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTJl
MzkxNTVjNGE5Yjc4YzFjNmQ2ZmVlMWMyZWUzZTBiYjZiZjM4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBLZXlmcmFtZUFu
aW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFuaW1hdGlvbiBmb3IgYSBz
aW5nbGUgUmVuZGVyRWxlbWVudC4KLWNsYXNzIEtleWZyYW1lQW5pbWF0aW9uIGZpbmFsIDogcHVi
bGljIEFuaW1hdGlvbkJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVBbmlt
YXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVu
dCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlJiB1bmFuaW1hdGVkU3R5bGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlv
biwgdW5hbmltYXRlZFN0eWxlKSk7Ci0gICAgfQotICAgIAotICAgIE9wdGlvblNldDxBbmltYXRl
Q2hhbmdlPiBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB0
YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7
Ci0gICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
KSBvdmVycmlkZTsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9u
KExheW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IEtleWZyYW1lTGlzdCYg
a2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7IH0KLQotICAgIGNvbnN0IEF0
b21TdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1l
KCk7IH0KLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkg
Y29uc3Q7Ci0KLSAgICBib29sIHRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dDsgfQotICAgIGJvb2wgZGVwZW5kc09uTGF5b3V0
KCkgY29uc3QgeyByZXR1cm4gbV9kZXBlbmRzT25MYXlvdXQ7IH0KLSAgICBib29sIGFmZmVjdHNB
Y2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBY2NlbGVyYXRlZFByb3Bl
cnR5OyB9Ci0KLSAgICB2b2lkIHNldFVuYW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlKSB7IG1fdW5hbmltYXRlZFN0eWxlID0gV1RGTW92ZShzdHlsZSk7IH0K
LSAgICBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gKm1fdW5hbmltYXRlZFN0eWxlOyB9Ci0KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0
aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEtleWZyYW1lQW5p
bWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIEVsZW1lbnQmLCBDb21wb3NpdGVBbmltYXRpb24mLCBj
b25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKTsKLSAgICB2aXJ0dWFsIH5LZXlmcmFt
ZUFuaW1hdGlvbigpOwotCi0gICAgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2Vk
VGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBz
ZWRUaW1lKSBvdmVycmlkZTsKLSAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zm
c2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZEFuaW1hdGlvbihib29sIGZpbGxpbmdGb3J3YXJkcyA9
IGZhbHNlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIG92ZXJyaWRlOwotCi0g
ICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBl
IGluTGlzdGVuZXJUeXBlKSBjb25zdDsKLSAgICBib29sIHNlbmRBbmltYXRpb25FdmVudChjb25z
dCBBdG9tU3RyaW5nJiwgZG91YmxlIGVsYXBzZWRUaW1lKTsKLQotICAgIGJvb2wgYWZmZWN0c1By
b3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRl
RXh0ZW50T2ZBbmltYXRpb25Gb3JNYXRyaXhBbmltYXRpb24oY29uc3QgRmxvYXRSZWN0JiByZW5k
ZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZB
bmltYXRpb25Gb3JNYXRjaGluZ1RyYW5zZm9ybUxpc3RzKGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVy
ZXJCb3gsIExheW91dFJlY3QmKSBjb25zdDsKLQotICAgIHZvaWQgY29tcHV0ZUxheW91dERlcGVu
ZGVuY3koKTsKLSAgICB2b2lkIHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotICAgIHZvaWQgdmFs
aWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKTsKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICB2
b2lkIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRp
ZgotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
ICAgIGJvb2wgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlJ
RCwgY29uc3Qgc3RkOjpmdW5jdGlvbjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiAoY29uc3QgUmVu
ZGVyU3R5bGUmKT4mKSBjb25zdDsKLSAgICAKLSAgICAvLyBHZXQgdGhlIHN0eWxlcyBmb3IgdGhl
IGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1hdGlvbiB0aW1lIGFu
ZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgotICAgIHZvaWQgZmV0Y2hJbnRlcnZhbEVuZHBv
aW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZ3Jlc3MpIGNvbnN0
OwotCi0gICAgS2V5ZnJhbWVMaXN0IG1fa2V5ZnJhbWVzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7IC8vIFRoZSBzdHlsZSBqdXN0IGJlZm9yZSB3
ZSBzdGFydGVkIGFuaW1hdGlvbgotCi0gICAgYm9vbCBtX3N0YXJ0RXZlbnREaXNwYXRjaGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNBY2NlbGVyYXRlZFByb3BlcnR5IHsgZmFsc2UgfTsKLSAgICBib29sIG1f
ZGVwZW5kc09uTGF5b3V0IHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApp
bmRleCA3ZTRmZTNmZDAwY2E1OWQ5Yjc4MmE4YTA0MGY0ZDViNzkxODA5ZmU2Li5lZTM0N2JhODUz
MjYxYzk2MmVhOTk0MmI2ODNmMmEyZGE5MTJhZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC00NzQsOSArNDc0LDcgQEAgcHVi
bGljOgogICAgIC8vIFRyYW5zaXRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGEgc3BlY2lhbCBhbmlt
YXRpb24gbmFtZSB0aGF0IGNhbm5vdCBjbGFzaCB3aXRoIGEga2V5ZnJhbWUgaWRlbnRpZmllci4K
ICAgICBzdGF0aWMgU3RyaW5nIGFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJv
cGVydHlJRCk7CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIGlzIGhhbmRs
ZWQgYnkgdGhlIGNvbXBvc2l0aW5nIHN5c3RlbS4gSWYgdGhpcyByZXR1cm5zCi0gICAgLy8gZmFs
c2UsIHRoZSBhbmltYXRpb24gd2lsbCBiZSBydW4gYnkgQ1NTQW5pbWF0aW9uQ29udHJvbGxlci4K
LSAgICAvLyBUaGVzZSBtZXRob2RzIGhhbmRsZSBib3RoIHRyYW5zaXRpb25zIGFuZCBrZXlmcmFt
ZSBhbmltYXRpb25zLgorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMgaGFu
ZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLgogICAgIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBGbG9hdFNpemUmIC8qYm94U2l6
ZSovLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBk
b3VibGUgLyp0aW1lT2Zmc2V0Ki8pICB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3VibGUg
Lyp0aW1lT2Zmc2V0Ki8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29u
c3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLykgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA0NzIw
ZTEyOTllYTY0YjRjYmJkZjlmZTBlYzJiNDNkZmNlNWI0YjFlLi41ZTk2NDdmZmFjODAxM2Y5MjQz
N2Y1ZGFlYjEwYTg3YjU1YWU0MzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTMwNDAsOSArMzA0MCw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c05lZWRzRGlzcGxheSgpCiAK
IHN0YXRpYyBib29sIGlzS2V5ZnJhbWUoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGxpc3QpCiB7
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbGlzdC5zaXpl
KCkgPiAxOwotICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDI7CisgICAgcmV0dXJuIGxpc3Quc2l6
ZSgpID4gMTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUFuaW1hdGlvbkZyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgU2Vjb25kcyB0aW1l
T2Zmc2V0KQpAQCAtMzI5MywzOSArMzI5MSwyOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
dXBBbmltYXRpb24oUGxhdGZvcm1DQUFuaW1hdGlvbiogcHJvcGVydHlBbmltLCBjb25zdCBBbgog
ICAgIHByb3BlcnR5QW5pbS0+c2V0QWRkaXRpdmUoYWRkaXRpdmUpOwogICAgIHByb3BlcnR5QW5p
bS0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTE4Ci0gICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2Nl
bmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQotICAgICAgICAvLyBp
dHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgZG9uJ3Qgc2V0
IHRoZSBhbmltYXRpb24td2lkZQotICAgICAgICAvLyB0aW1pbmcgZnVuY3Rpb24gdG8gd29yayBh
cm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgotICAgICAgICBpZiAoYW5pbS0+cHJv
cGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5
KQotICAgICAgICAgICAgcHJvcGVydHlBbmltLT5zZXRUaW1pbmdGdW5jdGlvbihhbmltLT50aW1p
bmdGdW5jdGlvbigpKTsKLSAgICB9CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKKyAgICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRo
ZSBvbmx5IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlvbjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKKyAg
ICAvLyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgZG9u
J3Qgc2V0IHRoZSBhbmltYXRpb24td2lkZQorICAgIC8vIHRpbWluZyBmdW5jdGlvbiB0byB3b3Jr
IGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24uCisgICAgaWYgKGFuaW0tPnByb3Bl
cnR5KCkubW9kZSAhPSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkK
KyAgICAgICAgcHJvcGVydHlBbmltLT5zZXRUaW1pbmdGdW5jdGlvbihhbmltLT50aW1pbmdGdW5j
dGlvbigpKTsKIH0KIAogY29uc3QgVGltaW5nRnVuY3Rpb24mIEdyYXBoaWNzTGF5ZXJDQTo6dGlt
aW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25WYWx1ZSYgYW5pbVZh
bHVlLCBjb25zdCBBbmltYXRpb24mIGFuaW0pCiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGlmIChhbmltLnByb3BlcnR5KCkubW9kZSA9PSBBbmltYXRpb246OlRy
YW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSAmJiBhbmltLnRpbWluZ0Z1bmN0aW9uKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTE4Ci0gICAgICAgICAgICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRoZSBvbmx5
IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlvbjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKLSAgICAgICAg
ICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBj
aG9zZSBub3QgdG8gc2V0IHNldCB0aGUKLSAgICAgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRp
bWluZyBmdW5jdGlvbiwgc28gd2Ugc2V0IGl0IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2
YWwKLSAgICAgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRh
dGlvbi4KLSAgICAgICAgICAgIHJldHVybiAqYW5pbS50aW1pbmdGdW5jdGlvbigpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKSkKLSAgICAgICAgICAg
IHJldHVybiAqYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIGlmIChhbmltLmRl
ZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZyYW1lcygpKQotICAgICAgICAgICAgcmV0dXJuICph
bmltLmRlZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZyYW1lcygpOwotICAgICAgICByZXR1cm4g
TGluZWFyVGltaW5nRnVuY3Rpb246OnNoYXJlZExpbmVhclRpbWluZ0Z1bmN0aW9uKCk7CisgICAg
aWYgKGFuaW0ucHJvcGVydHkoKS5tb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNp
bmdsZVByb3BlcnR5ICYmIGFuaW0udGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAorICAgICAg
ICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRoZSBvbmx5IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlv
bjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKKyAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmds
ZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQorICAg
ICAgICAvLyBhbmltYXRpb24td2lkZSB0aW1pbmcgZnVuY3Rpb24sIHNvIHdlIHNldCBpdCBvbiB0
aGUgc2luZ2xlIGtleWZyYW1lIGludGVydmFsCisgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIGEg
Q29yZSBBbmltYXRpb24gbGltaXRhdGlvbi4KKyAgICAgICAgcmV0dXJuICphbmltLnRpbWluZ0Z1
bmN0aW9uKCk7CiAgICAgfQotCiAgICAgaWYgKGFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQog
ICAgICAgICByZXR1cm4gKmFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpOwotICAgIGlmIChhbmlt
LmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgcmV0dXJuICphbmltLnRpbWluZ0Z1bmN0
aW9uKCk7Ci0gICAgcmV0dXJuIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1p
bmdGdW5jdGlvbigpOworICAgIGlmIChhbmltLmRlZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZy
YW1lcygpKQorICAgICAgICByZXR1cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5
ZnJhbWVzKCk7CisgICAgcmV0dXJuIExpbmVhclRpbWluZ0Z1bmN0aW9uOjpzaGFyZWRMaW5lYXJU
aW1pbmdGdW5jdGlvbigpOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9u
RW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiBiYXNpY0FuaW0pCkBAIC0zMzQ2
LDExICszMzM0LDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbkVuZHBvaW50
cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIta2V5ZnJhbWUgYW5pbWF0
aW9ucywgc28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFydAotICAgIC8vIGZvciBh
IHRpbWluZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFuaW1hdGlvbiBjYXNlLCB0
aGUgZmlyc3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5jdGlvbi4KLSAgICBpZiAo
IVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBiYXNpY0FuaW0tPnNldFRpbWluZ0Z1bmN0
aW9uKCZ0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5hdCgwKSwgKmFu
aW1hdGlvbiksICFmb3J3YXJkcyk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzQ0MCwx
MSArMzQyMyw2IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFuc2Zvcm1BbmltYXRpb25F
bmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIta2V5ZnJhbWUgYW5pbWF0aW9ucywg
c28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFydAotICAgIC8vIGZvciBhIHRpbWlu
ZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFuaW1hdGlvbiBjYXNlLCB0aGUgZmly
c3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5jdGlvbi4KLSAgICBpZiAoIVJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBiYXNpY0FuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKCZ0
aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5hdCgwKSwgKmFuaW1hdGlv
biksICFmb3J3YXJkcyk7Ci0KICAgICBhdXRvIHZhbHVlRnVuY3Rpb24gPSBnZXRWYWx1ZUZ1bmN0
aW9uTmFtZUZvclRyYW5zZm9ybU9wZXJhdGlvbih0cmFuc2Zvcm1PcFR5cGUpOwogICAgIGlmICh2
YWx1ZUZ1bmN0aW9uICE9IFBsYXRmb3JtQ0FBbmltYXRpb246Ok5vVmFsdWVGdW5jdGlvbikKICAg
ICAgICAgYmFzaWNBbmltLT5zZXRWYWx1ZUZ1bmN0aW9uKHZhbHVlRnVuY3Rpb24pOwpAQCAtMzU1
MSwxMSArMzUyOSw2IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRGaWx0ZXJBbmltYXRpb25F
bmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlCiAgICAgYmFzaWNBbmltLT5z
ZXRGcm9tVmFsdWUoZnJvbU9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsK
ICAgICBiYXNpY0FuaW0tPnNldFRvVmFsdWUodG9PcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJv
cGVydHlJbmRleCk7CiAKLSAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIta2V5ZnJh
bWUgYW5pbWF0aW9ucywgc28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFydAotICAg
IC8vIGZvciBhIHRpbWluZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFuaW1hdGlv
biBjYXNlLCB0aGUgZmlyc3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5jdGlvbi4K
LSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBiYXNpY0FuaW0tPnNldFRp
bWluZ0Z1bmN0aW9uKCZ0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5h
dCgwKSwgKmFuaW1hdGlvbiksICFmb3J3YXJkcyk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGQ2MzU4MTE5
YjRjYzcxNGUxZGU1ODE2NDYzODVjYmVlMzJkYzg1MDMuLmRmZDBiZDk5MTAzZDBjOWQzYWQ3Zjcx
NmQ3OGIxY2YwYzdkNDgwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIkNvbnRlbnREYXRh
LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VGltZWxpbmUu
aCIKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNjYsNiArNjcsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNlbmRpZgogI2luY2x1ZGUgIlJlbmRlckZy
YWdtZW50Q29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMjI5MCw0ICsyMjkyLDE3IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6cmVzZXRUZXh0QXV0b3NpemluZygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRf
QVVUT1NJWklORykKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50
OjphbmltYXRlZFN0eWxlKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJl
c3VsdDsKKworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50VGltZWxpbmUoKSkKKyAg
ICAgICAgcmVzdWx0ID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqdGhpcyk7
CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmNsb25l
UHRyKHN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggZTBhNjJkMGVlMjYwYzc0ODQzZDBlOWUx
NGYyZjJmMzdiMzJkNDgyYy4uYmEzNDhiN2E1MzkwOGY5MTA5ZDc1YTQ0ZmUwZWJhYTE3NWQ1NTQ4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBAIC0zMCw2ICsz
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRyb2xTdGF0ZXM7CiBjbGFzcyBL
ZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlclN0eWxlOwogY2xh
c3MgUmVuZGVyVHJlZUJ1aWxkZXI7CiAKIGNsYXNzIFJlbmRlckVsZW1lbnQgOiBwdWJsaWMgUmVu
ZGVyT2JqZWN0IHsKQEAgLTIyNiwxNSArMjI3LDEyIEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmpl
Y3QqIGF0dGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGRldGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyT2JqZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQcm9wZXJ0eUlE
LCBjb25zdCBSZW5kZXJTdHlsZSogLyogZnJvbVN0eWxlICovLCBjb25zdCBSZW5kZXJTdHlsZSog
LyogdG9TdHlsZSAqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNp
dGlvblBhdXNlZChkb3VibGUgLyogdGltZU9mZnNldCAqLywgQ1NTUHJvcGVydHlJRCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKSB7IH0KLQog
ICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLyogdGltZU9mZnNldCAqLywg
Y29uc3QgQW5pbWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0JikgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICov
LCBjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25GaW5pc2hlZChjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNUaW1lKCkpIHsg
fQorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZSgpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZW51bSBCYXNlVHlwZUZsYWcgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggN2QwN2NkYmQ4NDk3MDI4NTNlMWI5MjVhMGJiYzk4ZDdk
ZGFmYTc2Ni4uYTBlMGUyM2U4Y2Y4ZDZlMjY4OWYxY2JiNjI2YzlhYWFkNWU1ZDRhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCi0jaW5jbHVk
ZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTEzMjcs
MjEgKzEzMjYsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OmN1cnJlbnRU
cmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKIAogICAgIGF1dG8mIHJlbmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIo
KS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+aXNSdW5u
aW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5
VHJhbnNmb3JtKSkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJU
cmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBz
dHlsZSA9IHRpbWVsaW5lLT5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NC
b3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0o
Y3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmlnaW4pOwotICAg
ICAgICAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRl
cjNEVHJhbnNmb3JtcygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25S
ZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKKyAgICBpZiAoYXV0
byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgeworICAgICAgICBp
ZiAodGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5k
ZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRlZFN0
eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRlZFN0eWxlKCk7CiAgICAgICAg
ICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQ
aXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5
bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOwogICAgICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zvcm0s
IHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAgICAgIG1ha2VN
YXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsK
QEAgLTEzNDksMTEgKzEzMzcsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6
OmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKICAgICAgICAg
fQogICAgIH0KIAotCiAgICAgLy8gbV90cmFuc2Zvcm0gaW5jbHVkZXMgdHJhbnNmb3JtLW9yaWdp
biwgc28gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHRyYW5zZm9ybSBoZXJlLgogICAgIGlmIChh
cHBseU9yaWdpbiA9PSBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdpbikgewogICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3JtOwotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24o
KS5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGVkU3R5bGUoKTsK
ICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBl
KHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKICAgICAgICAgcmVuZGVyQm94LnN0eWxlKCkuYXBwbHlUcmFuc2Zvcm0oY3Vy
clRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVU
cmFuc2Zvcm1PcmlnaW4pOwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNm
b3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC02MTY1LDIwICs2MTUyLDEzIEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmdldE92ZXJsYXBCb3VuZHNJbmNsdWRpbmdDaGlsZHJlbkFjY291bnRp
bmdGb3JUcmFuc2Zvcm1BbmltYXRpCiAgICAgYm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMo
dGhpcywgTGF5b3V0U2l6ZSgpLCBib3VuZHNGbGFncyk7CiAgICAgCiAgICAgTGF5b3V0UmVjdCBh
bmltYXRlZEJvdW5kcyA9IGJvdW5kczsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5l
KCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9u
KHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewotICAgICAgICAgICAgICAgIGJvdW5kcyA9
IGFuaW1hdGVkQm91bmRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkubGVn
YWN5QW5pbWF0aW9uKCkuY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1h
dGVkQm91bmRzKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1l
bnRUaW1lbGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9mQW5p
bWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewogICAgICAgICAgICAgYm91bmRz
ID0gYW5pbWF0ZWRCb3VuZHM7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0ZDU0N2M0YjdmZGQxYWU0
MDlhNmNlNmY4MjkyZjZhNmNkMzAzMjZmLi4yZjdiNTg5MjMyZmE3MjIzNDZmNzAyYThkNDJkZTEz
M2JkZTdlZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgpAQCAtMTI1
MSwxMSArMTI1MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShj
b25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgIGNvbnN0IGF1dG8gZGV2
aWNlU2NhbGVGYWN0b3IgPSB0aGlzLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogCiAgICAgYm9vbCBp
c1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5k
ZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkKLSAgICAgICAgICAgIGlzUnVubmluZ0FjY2VsZXJh
dGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5p
bWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0g
cmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlv
bk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOworICAgIGlmIChh
dXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQorICAgICAgICBp
c1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5lLT5pc1J1bm5p
bmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlU
cmFuc2Zvcm0pOwogCiAgICAgdXBkYXRlVHJhbnNmb3JtKHN0eWxlKTsKICAgICB1cGRhdGVPcGFj
aXR5KHN0eWxlKTsKQEAgLTM2NDgsOTcgKzM2NDQsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6YW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG1f
b3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKQotewotICAgIGJvb2wgZGlkQW5pbWF0ZSA9IGZhbHNl
OwotCi0gICAgQVNTRVJUKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBp
ZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlPcGFjaXR5KSB7Ci0gICAgICAgIGNvbnN0IEFuaW1h
dGlvbiogb3BhY2l0eUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJv
cGVydHlPcGFjaXR5KTsKLSAgICAgICAgaWYgKG9wYWNpdHlBbmltICYmICFvcGFjaXR5QW5pbS0+
aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0
IG9wYWNpdHlWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAgICAgICAgb3Bh
Y2l0eVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCBjb21w
b3NpdGluZ09wYWNpdHkoZnJvbVN0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICBvcGFj
aXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDEsIGNvbXBv
c2l0aW5nT3BhY2l0eSh0b1N0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICAvLyBUaGUg
Ym94U2l6ZSBwYXJhbSBpcyBvbmx5IHVzZWQgZm9yIHRyYW5zZm9ybSBhbmltYXRpb25zICh3aGlj
aCBjYW4gb25seSBydW4gb24gUmVuZGVyQm94ZXMpLCBzbyB3ZSBwYXNzIGFuIGVtcHR5IHNpemUg
aGVyZS4KLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihvcGFj
aXR5VmVjdG9yLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1h
dGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgdGltZU9mZnNl
dCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBvcGFj
aXR5IGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5h
bCBvcGFjaXR5LgotICAgICAgICAgICAgICAgIHVwZGF0ZU9wYWNpdHkoKnRvU3R5bGUpOwotICAg
ICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNmb3JtICYmIG1f
b3duaW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uKiB0
cmFuc2Zvcm1BbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5
VHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUFuaW0gJiYgIXRyYW5zZm9ybUFuaW0t
PmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlz
dCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAgICAgICAg
ICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWU+KDAsIGZyb21TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVZl
Y3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZT4oMSwgdG9TdHls
ZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFu
aW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0KCkpLnNpemUoKSwgdHJhbnNmb3JtQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0
aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSksIHRpbWVPZmZz
ZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHJh
bnNmb3JtIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBm
aW5hbCB0cmFuc2Zvcm0uCi0gICAgICAgICAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCp0b1N0eWxl
KTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUZpbHRlciAm
JiBtX293bmluZ0xheWVyLmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbiog
ZmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUZp
bHRlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJBbmltICYmICFmaWx0ZXJBbmltLT5pc0VtcHR5T3Ja
ZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmlsdGVyVmVj
dG9yKEFuaW1hdGVkUHJvcGVydHlGaWx0ZXIpOwotICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmlu
c2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5bGUtPmZpbHRl
cigpKSk7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVy
QW5pbWF0aW9uVmFsdWU+KDEsIHRvU3R5bGUtPmZpbHRlcigpKSk7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmlsdGVyVmVjdG9yLCBGbG9hdFNpemUoKSwg
ZmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5p
bWF0ZWRQcm9wZXJ0eUZpbHRlciksIHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5p
bWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAg
dXBkYXRlRmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoRklMVEVS
U19MRVZFTF8yKQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9w
RmlsdGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzQmFja2Ryb3BGaWx0ZXIoKSkgewotICAgICAgICBj
b25zdCBBbmltYXRpb24qIGJhY2tkcm9wRmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25G
b3JQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAgICAgICAgaWYg
KGJhY2tkcm9wRmlsdGVyQW5pbSAmJiAhYmFja2Ryb3BGaWx0ZXJBbmltLT5pc0VtcHR5T3JaZXJv
RHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgYmFja2Ryb3BGaWx0
ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAgICAgICAg
ICAgIGJhY2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlv
blZhbHVlPigwLCBmcm9tU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGJh
Y2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVl
PigxLCB0b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aGljc0xheWVyLT5hZGRBbmltYXRpb24oYmFja2Ryb3BGaWx0ZXJWZWN0b3IsIEZsb2F0U2l6ZSgp
LCBiYWNrZHJvcEZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFu
c2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciksIHRpbWVPZmZzZXQp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgYmFja2Ry
b3AgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRo
ZSBmaW5hbCBiYWNrZHJvcCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgdXBkYXRlQmFja2Ryb3BG
aWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKGRpZEFuaW1h
dGUpCi0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdV
cGRhdGUoKTsKLQotICAgIHJldHVybiBkaWRBbmltYXRlOwotfQotCi12b2lkIFJlbmRlckxheWVy
QmFja2luZzo6dHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9
IGNzc1RvR3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQ
cm9wZXJ0eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKLSAgICAgICAgbV9ncmFwaGljc0xh
eWVyLT5wYXVzZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNp
dGlvbihhbmltYXRlZFByb3BlcnR5KSwgdGltZU9mZnNldCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsK
LSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9IGNzc1RvR3JhcGhpY3NM
YXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQcm9wZXJ0eSAhPSBBbmlt
YXRlZFByb3BlcnR5SW52YWxpZCkgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnJlbW92ZUFu
aW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihhbmltYXRl
ZFByb3BlcnR5KSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29t
cG9zaXRpbmdVcGRhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpu
b3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcm
LCBNb25vdG9uaWNUaW1lIHRpbWUpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgY29uc3QgU3RyaW5nJiwgTW9ub3Rv
bmljVGltZSkKIHsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZW5k
ZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQocmVuZGVyZXIo
KSwgdGltZSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlGbHVzaFJlcXVp
cmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCmluZGV4IDljNzY0N2JiMjY3NmIzZmMxZjkyNmZhZDkyODQ3ZDhm
OGVhN2MwZjAuLjVjMTEyNTI4NzMxOTIwMmNhMDRkMjgyOTVkYTIyYTdjMWYyZGJjYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTE4NCwx
MSArMTg0LDcgQEAgcHVibGljOgogICAgIC8vIE5vdGlmaWNhdGlvbiBmcm9tIHRoZSByZW5kZXJl
ciB0aGF0IGl0cyBjb250ZW50IGNoYW5nZWQuCiAgICAgdm9pZCBjb250ZW50Q2hhbmdlZChDb250
ZW50Q2hhbmdlVHlwZSk7CiAKLSAgICAvLyBJbnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3Vz
cGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zCi0gICAgYm9vbCBzdGFy
dFRyYW5zaXRpb24oZG91YmxlLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogZnJv
bVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
UGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHRyYW5z
aXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKTsKLQorICAgIC8vIEludGVyZmFjZSB0byBzdGFy
dCwgZmluaXNoLCBzdXNwZW5kIGFuZCByZXN1bWUgYW5pbWF0aW9ucwogICAgIGJvb2wgc3RhcnRB
bmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiYsIGNvbnN0IEtleWZy
YW1lTGlzdCYpOwogICAgIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBj
b25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKaW5kZXggMTg0MWY5NmYwYjYyOThjYTUyM2VkN2YxZTY5ODlmMmMyNzZk
ZGQ3NS4uZjIzOWM0YTQ0ODBhZWU3MmEzOTJiMzZjNTI0NWI3Y2Q0MWQ2MmQzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKIAogI2lu
Y2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTU2MCw5
ICs1NTksNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7Ci0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lVmlldy5mcmFtZSgpLmxlZ2Fj
eUFuaW1hdGlvbigpKTsKLQogICAgIEFTU0VSVCghbV9mbHVzaGluZ0xheWVycyk7CiAgICAgewog
ICAgICAgICBTZXRGb3JTY29wZTxib29sPiBmbHVzaGluZ0xheWVyc1Njb3BlKG1fZmx1c2hpbmdM
YXllcnMsIHRydWUpOwpAQCAtODE5LDggKzgxNSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRl
CiAKICAgICArK21fY29tcG9zaXRpbmdVcGRhdGVDb3VudDsKIAotICAgIEFuaW1hdGlvblVwZGF0
ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJh
bWUoKS5sZWdhY3lBbmltYXRpb24oKSk7Ci0KICAgICBTZXRGb3JTY29wZTxib29sPiBwb3N0TGF5
b3V0Q2hhbmdlKG1faW5Qb3N0TGF5b3V0VXBkYXRlLCB0cnVlKTsKIAogI2lmICFMT0dfRElTQUJM
RUQKQEAgLTI5NzcsMTcgKzI5NzEsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVx
dWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBhbmltQ29udHJvbGxlciA9IHJlbmRlcmVyLmxlZ2FjeUFu
aW1hdGlvbigpOwotICAgIHJldHVybiAoYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9u
T25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAmJiAodXNl
c0NvbXBvc2l0aW5nKCkgfHwgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6
QW5pbWF0ZWRPcGFjaXR5VHJpZ2dlcikpKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1
bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUZpbHRlcikKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1
bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tk
cm9wRmlsdGVyKQotI2VuZGlmCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0Fu
aW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBj
b25zdApAQCAtMzUxNSwxMCArMzQ5OSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpp
c1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICAgICAg
ICAgICAgIHJldHVybiBlZmZlY3RzU3RhY2stPmlzQ3VycmVudGx5QWZmZWN0aW5nUHJvcGVydHko
Q1NTUHJvcGVydHlUcmFuc2Zvcm0pOwogICAgIH0KIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyLmxlZ2Fj
eUFuaW1hdGlvbigpLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1By
b3BlcnR5VHJhbnNmb3JtKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIElmIGFuIGVsZW1l
bnQgaGFzIGNvbXBvc2l0ZWQgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRy
ZW4gcmVuZGVyIGluIGZyb250IG9mIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IGNmZWNhZTQ0ZDNkZDg4NmFkNjQ3
NDk3YjlhMTFiODQwZTRkMTVkNmIuLmNhZThmNzJmMzZjZDg1MzJhMjU5OGI0OGI2YmViZjgzNTM4
ZjQ0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAKQEAgLTI1MCwyNyArMjUwLDYgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0Ojpjb21wdXRlUmVwYWludExheW91dFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmoKICAgICAgICAgc2V0UmVwYWludExheW91dFJlY3RzKFJlcGFpbnRMYXlvdXRSZWN0cygqdGhp
cywgcmVwYWludENvbnRhaW5lciwgZ2VvbWV0cnlNYXApKTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJZCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvU3R5bGUpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNr
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+YmFja2lu
ZygpLT5zdGFydFRyYW5zaXRpb24odGltZU9mZnNldCwgcHJvcGVydHlJZCwgZnJvbVN0eWxlLCB0
b1N0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9uUGF1
c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAg
aWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBsYXllcigpLT5iYWNraW5nKCktPnRyYW5zaXRpb25QYXVzZWQodGltZU9mZnNldCwgcHJvcGVy
dHlJZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlz
aGVkKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxh
eWVyKCktPmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGxheWVyKCktPmJhY2tpbmco
KS0+dHJhbnNpdGlvbkZpbmlzaGVkKHByb3BlcnR5SWQpOwotfQotCiBib29sIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmlt
YXRpb24mIGFuaW1hdGlvbiwgY29uc3QgS2V5ZnJhbWVMaXN0JiBrZXlmcmFtZXMpCiB7CiAgICAg
aWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1
MDQzNzcxM2RiNzJlYTIyYjYzMWZmZTJkYmE3Li5kOTc4MWNlY2M4OTdjMzU4NjlhNzcyOWJhMWNk
MGU3NmUxOTQxZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmgKQEAgLTY5LDEwICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFJlcGFpbnRMYXlvdXRSZWN0cyhjb25zdCBSZXBhaW50TGF5b3V0UmVjdHMmKTsKICAgICB2b2lk
IGNsZWFyUmVwYWludExheW91dFJlY3RzKCk7CiAKLSAgICBib29sIHN0YXJ0VHJhbnNpdGlvbihk
b3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJh
bnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0K
ICAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRp
b24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblBh
dXNlZChkb3VibGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKICAg
ICB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYTc5MDRhM2QyMmVhZjgw
NGMyMzc0YTg4OTAxMTBlMWRjNWJkNDMyYS4uMjJmMzJiZTc3NGIwNWE0NGRhNTE4NWVlMWNiZDc5
ZTZjNGVlYzhkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAt
NDYsNyArNDYsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyOwogY2xh
c3MgQ29sb3I7CiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTcwNCw3ICs3MDMs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5n
ZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIHsgfQogCi0gICAg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0aW9uKCkgY29uc3Q7CiAgICAgRG9j
dW1lbnRUaW1lbGluZSogZG9jdW1lbnRUaW1lbGluZSgpIGNvbnN0OwogCiAgICAgLy8gTWFwIHBv
aW50cyBhbmQgcXVhZHMgdGhyb3VnaCBlbGVtZW50cywgcG90ZW50aWFsbHkgdmlhIDNkIHRyYW5z
Zm9ybXMuIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBjYWxsIHRoZXNlIGRpcmVjdGx5OyB1c2UK
QEAgLTk3MSwxMSArOTY5LDYgQEAgaW5saW5lIFBhZ2UmIFJlbmRlck9iamVjdDo6cGFnZSgpIGNv
bnN0CiAgICAgcmV0dXJuICpmcmFtZSgpLnBhZ2UoKTsKIH0KIAotaW5saW5lIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXImIFJlbmRlck9iamVjdDo6bGVnYWN5QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKTsKLX0KLQogaW5saW5lIERvY3VtZW50
VGltZWxpbmUqIFJlbmRlck9iamVjdDo6ZG9jdW1lbnRUaW1lbGluZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZXhpc3RpbmdUaW1lbGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXgg
ZjM5OTNmMDM4Zjc0ZmQzYTBjODk4NWNmOThlMzFhZjJkZjdlZTA4NC4uNTZhZTBlZTdhMDZkYmQ1
NWUyYThkMTE0M2Y5ZjIwNDA2NWYyZmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC0yNyw3ICsyNyw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Q29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTU0NSw3ICs1NDQsNiBAQCB2b2lk
IFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVycyhFbGVtZW50JiByb290LCBUZWFy
ZG93blR5cGUgdGVhcmRvd25UeQogCiAgICAgYXV0byYgZG9jdW1lbnQgPSByb290LmRvY3VtZW50
KCk7CiAgICAgYXV0byogdGltZWxpbmUgPSBkb2N1bWVudC5leGlzdGluZ1RpbWVsaW5lKCk7Ci0g
ICAgYXV0byYgYW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFu
aW1hdGlvbigpOyAgICAKIAogICAgIGF1dG8gcG9wID0gWyZdICh1bnNpZ25lZCBkZXB0aCkgewog
ICAgICAgICB3aGlsZSAodGVhcmRvd25TdGFjay5zaXplKCkgPiBkZXB0aCkgewpAQCAtNTY0LDcg
KzU2Miw2IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1l
bnQmIHJvb3QsIFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRlYXJkb3duVHlwZSA9PSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2Vs
aW5nQW5pbWF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5jYW5jZWxE
ZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsIFdlYkFuaW1hdGlvbjo6U2ls
ZW50bHk6Ok5vKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9u
Q29udHJvbGxlci5jYW5jZWxBbmltYXRpb25zKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlOgogICAg
ICAgICAgICAgICAgIGlmICh0aW1lbGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQWRqdXN0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rl
ci5jcHAKaW5kZXggOGNlMDc1MmE2MzY2ZDgzMzAwMjYyYjAyZWUwODNlZTU5ZmMxMDczOC4uYTNl
YmY2ZmI2N2YxZmE2MTJiZjA2NDY3YTdkNThkODlhM2ViOTlhNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVBZGp1c3Rlci5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25CYXNl
LmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgor
I2luY2x1ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBTdHlsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRy
ZWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5j
cHAKaW5kZXggYjg1Y2Y0NjZjMTczYjg4MDNmNzVlMzc2MjViZjAyNTg2ZWY5MGFlNS4uZjdmZmQ0
NGY5YWE0Yjk3MWRkOWYxYjY2YWM1MmUwMzNlZjY3ZmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2Vk
VHJlZUl0ZXJhdG9yLmgiCkBAIC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVk
ZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMTIs
MjYgKzMxMiwyMyBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRF
bGVtZW50VXBkYXRlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdAogCiAgICAgT3B0aW9uU2V0PEFu
aW1hdGlvbkltcGFjdD4gYW5pbWF0aW9uSW1wYWN0OwogCi0gICAgLy8gTmV3IGNvZGUgcGF0aCBm
b3IgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
YXQgYW55IG5ldyBDU1MgYW5pbWF0aW9uIG9jY3VyaW5nIG9uIHRoaXMgZWxlbWVudCBoYXMgYSBt
YXRjaGluZyBXZWJBbmltYXRpb24KLSAgICAgICAgLy8gb24gdGhlIGRvY3VtZW50IHRpbWVsaW5l
LiBOb3RlIHRoYXQgd2UgZ2V0IHRpbWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhlcmUgYmVjYXVz
ZSB3ZSBuZWVkIGEgdGltZWxpbmUgY3JlYXRlZAotICAgICAgICAvLyBpbiBjYXNlIG5vIFdlYiBB
bmltYXRpb25zIGhhdmUgYmVlbiBjcmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KLSAgICAgICAg
aWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlICYmICFlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmll
dygpLT5wcmludGluZygpKSB7Ci0gICAgICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxl
LT5oYXNUcmFuc2l0aW9ucygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKLSAgICAg
ICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JF
bGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5ld1N0eWxlKTsKLQotICAgICAgICAgICAgLy8g
VGhlIG9yZGVyIGluIHdoaWNoIENTUyBUcmFuc2l0aW9ucyBhbmQgQ1NTIEFuaW1hdGlvbnMgYXJl
IHVwZGF0ZWQgbWF0dGVycyBzaW5jZSBDU1MgVHJhbnNpdGlvbnMgZGVmaW5lIHRoZSBhZnRlci1j
aGFuZ2Ugc3R5bGUKLSAgICAgICAgICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZp
bmVkIGluIHRoZSBwcmV2aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0
ZSBDU1MgQW5pbWF0aW9ucyBhZnRlciBDU1MgVHJhbnNpdGlvbnMKLSAgICAgICAgICAgIC8vIHN1
Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlv
bnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBl
dmVudC4KLSAgICAgICAgICAgIGlmICgob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc0FuaW1hdGlv
bnMoKSkgfHwgbmV3U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIGFuZCBwYXNzIHRoZSBwYXJlbnQgc3R5bGUgdmlhIHVw
ZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50LgotICAgICAgICAgICAgICAgIHNjb3BlKCkucmVz
b2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7
Ci0KLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTQW5pbWF0
aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgb2xkU3R5bGUsICpuZXdTdHlsZSk7Ci0KLSAgICAgICAg
ICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktleWZyYW1l
cyhudWxscHRyKTsKLSAgICAgICAgICAgIH0KKyAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtl
IHN1cmUgdGhhdCBhbnkgbmV3IENTUyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50
IGhhcyBhIG1hdGNoaW5nIFdlYkFuaW1hdGlvbgorICAgIC8vIG9uIHRoZSBkb2N1bWVudCB0aW1l
bGluZS4gTm90ZSB0aGF0IHdlIGdldCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVudCBoZXJlIGJl
Y2F1c2Ugd2UgbmVlZCBhIHRpbWVsaW5lIGNyZWF0ZWQKKyAgICAvLyBpbiBjYXNlIG5vIFdlYiBB
bmltYXRpb25zIGhhdmUgYmVlbiBjcmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KKyAgICBpZiAo
ZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkt
PnByaW50aW5nKCkpIHsKKyAgICAgICAgaWYgKG9sZFN0eWxlICYmIChvbGRTdHlsZS0+aGFzVHJh
bnNpdGlvbnMoKSB8fCBuZXdTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSkpCisgICAgICAgICAgICBt
X2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1l
bnQsICpvbGRTdHlsZSwgKm5ld1N0eWxlKTsKKworICAgICAgICAvLyBUaGUgb3JkZXIgaW4gd2hp
Y2ggQ1NTIFRyYW5zaXRpb25zIGFuZCBDU1MgQW5pbWF0aW9ucyBhcmUgdXBkYXRlZCBtYXR0ZXJz
IHNpbmNlIENTUyBUcmFuc2l0aW9ucyBkZWZpbmUgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZQorICAg
ICAgICAvLyB0byB1c2UgQ1NTIEFuaW1hdGlvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMg
c3R5bGUgY2hhbmdlIGV2ZW50LiBBcyBzdWNoLCB3ZSB1cGRhdGUgQ1NTIEFuaW1hdGlvbnMgYWZ0
ZXIgQ1NTIFRyYW5zaXRpb25zCisgICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0
aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBk
dXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4KKyAgICAgICAgaWYgKChvbGRT
dHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0
aW9ucygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBhbmQgcGFz
cyB0aGUgcGFyZW50IHN0eWxlIHZpYSB1cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudC4KKyAg
ICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJh
bWVzKCZwYXJlbnQoKS5zdHlsZSk7CisKKyAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUo
KS51cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0
eWxlKTsKKworICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5
bGVGb3JLZXlmcmFtZXMobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0NywxNyAr
MzQ0LDYgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVu
dFVwZGF0ZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3QKICAgICB9IGVsc2UKICAgICAgICAgZWxl
bWVudC5zZXRMYXN0U3R5bGVDaGFuZ2VFdmVudFN0eWxlKG51bGxwdHIpOwogCi0gICAgLy8gT2xk
IGNvZGUgcGF0aCBmb3IgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucy4KLSAgICBp
ZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8mIGFuaW1hdGlvbkNvbnRy
b2xsZXIgPSBtX2RvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOwotCi0gICAgICAg
IGF1dG8gYW5pbWF0aW9uVXBkYXRlID0gYW5pbWF0aW9uQ29udHJvbGxlci51cGRhdGVBbmltYXRp
b25zKGVsZW1lbnQsICpuZXdTdHlsZSwgb2xkU3R5bGUpOwotICAgICAgICBhbmltYXRpb25JbXBh
Y3QuYWRkKGFuaW1hdGlvblVwZGF0ZS5pbXBhY3QpOwotCi0gICAgICAgIGlmIChhbmltYXRpb25V
cGRhdGUuc3R5bGUpCi0gICAgICAgICAgICBuZXdTdHlsZSA9IFdURk1vdmUoYW5pbWF0aW9uVXBk
YXRlLnN0eWxlKTsKLSAgICB9Ci0KICAgICBpZiAoYW5pbWF0aW9uSW1wYWN0KQogICAgICAgICBB
ZGp1c3Rlcjo6YWRqdXN0QW5pbWF0ZWRTdHlsZSgqbmV3U3R5bGUsIHBhcmVudEJveFN0eWxlKCks
IGFuaW1hdGlvbkltcGFjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuY3BwCmluZGV4IGIzNzZiZjZjMTc1ZDU0NTlhNGUwYjQ2M2NhNDhiOWJmMGNhNjY3OTku
LjZhNWI2ZjRhZTQyMDI5Y2U2NjA4YzA0YmM5MjY0ZmQwMzZmZWQ4ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcApAQCAtMTAyOSwxMSArMTAyOSw2IEBA
IHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0Rm9yY2VkU3VwcG9ydHNIaWdoRHluYW1pY1Jhbmdl
VmFsdWUoSW50ZXJuYWxTZXR0aW5nczo6CiAgICAgc2V0dGluZ3MoKS5zZXRGb3JjZWRTdXBwb3J0
c0hpZ2hEeW5hbWljUmFuZ2VWYWx1ZShpbnRlcm5hbFNldHRpbmdzVG9TZXR0aW5nc1ZhbHVlKHZh
bHVlKSk7CiB9CiAKLWJvb2wgSW50ZXJuYWxTZXR0aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQot
CiB2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24o
Ym9vbCBzaG91bGQpCiB7CiAjaWYgRU5BQkxFKFZJREVPKSB8fCBFTkFCTEUoV0VCX0FVRElPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBiNTI3ZTE1NWM5
MGQ0NjY4ZTMxMjRjNWU5YjQ4YmZlMGQwZTM5NTcyLi5mNjVhNzQxMzQ5ZmZjYTI5YjE5NTVjNjc0
YWE0ODMzZDcyMzY1NzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFsU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuaApAQCAtMTM1LDggKzEzNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRQaWN0
dXJlSW5QaWN0dXJlQVBJRW5hYmxlZChib29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRGZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQoYm9vbCk7CiAKLSAgICBzdGF0aWMgYm9vbCB3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci0KICAgICB2b2lkIHNldFNob3VsZERlYWN0aXZhdGVB
dWRpb1Nlc3Npb24oYm9vbCk7CiAgICAgCiAgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJUGVy
UGFnZVNjb3BlRW5hYmxlZChib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaWRsCmluZGV4IDQxYTI3ZDYyZTI3NjQ2NGFhZTVlMTI4YjhlOWJlMWVjZjkxZmVk
ZmYuLjVjYzYyZjMyNWEyZjY4OTYwMGUzYmY4OGNlYTA1YzY1NmZhZTRlZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbApAQCAtMTE3LDggKzExNyw2IEBA
IGVudW0gRm9udExvYWRUaW1pbmdPdmVycmlkZSB7ICJCbG9jayIsICJTd2FwIiwgIkZhaWx1cmUi
IH07CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgc2V0U2hvdWxkTWFuYWdlQXVk
aW9TZXNzaW9uQ2F0ZWdvcnkoYm9vbGVhbiBzaG91bGQpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gdW5kZWZpbmVkIHNldEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZChib29sZWFuIGVuYWJs
ZWQpOwogCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9uc10gYm9vbGVhbiB3ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci0KICAgICB1bmRlZmluZWQgc2V0U2hv
dWxkRGVhY3RpdmF0ZUF1ZGlvU2Vzc2lvbihib29sZWFuIHNob3VsZERlYWN0aXZhdGUpOwogICAg
IAogICAgIHVuZGVmaW5lZCBzZXRTdG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChi
b29sZWFuIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFk
MTRkNzBlZDhmMTJhMWU2ZDNkMGYyNTVjYjFiYTBmNTA3ODNlOGMuLjdjNGRmMDNlNWUxODRiNWI1
OWM5MGQ0NmY2NmVjZTEwNjhkNmZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5j
bHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTS2V5ZnJh
bWVzUnVsZS5oIgogI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5UGFyc2VyLmgiCkBAIC0xMDY5LDkgKzEwNjgsNyBAQCBib29sIEludGVybmFsczo6YW5pbWF0
aW9uV2l0aElkRXhpc3RzKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiAKIHVuc2lnbmVkIEludGVy
bmFsczo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1l
bGluZSgpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4g
ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1l
KCktPmRvY3VtZW50KCkpOworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGlu
ZSgpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogRXhjZXB0aW9u
T3I8Ym9vbD4gSW50ZXJuYWxzOjphbmltYXRpb25zQXJlU3VzcGVuZGVkKCkgY29uc3QKQEAgLTEw
ODAsOSArMTA3Nyw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6YW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZCgpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1l
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAot
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5l
bnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwotICAg
IHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVu
c3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7CiB9CiAK
IGRvdWJsZSBJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCgpIGNvbnN0CkBAIC0xMDkxLDE1
ICsxMDg2LDkgQEAgZG91YmxlIEludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QK
ICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gSU5GSU5JVFk7CiAKLSAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBkb2N1
bWVudC0+ZXhpc3RpbmdUaW1lbGluZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5h
bmltYXRpb25JbnRlcnZhbCgpLnNlY29uZHMoKTsKLSAgICAgICAgcmV0dXJuIElORklOSVRZOwot
ICAgIH0KLQotICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBJTkZJ
TklUWTsKLSAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLmFu
aW1hdGlvbkludGVydmFsKCkudmFsdWUoKTsKKyAgICBpZiAoYXV0byB0aW1lbGluZSA9IGRvY3Vt
ZW50LT5leGlzdGluZ1RpbWVsaW5lKCkpCisgICAgICAgIHJldHVybiB0aW1lbGluZS0+YW5pbWF0
aW9uSW50ZXJ2YWwoKS5zZWNvbmRzKCk7CisgICAgcmV0dXJuIElORklOSVRZOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKQEAgLTEx
MDgsMTkgKzEwOTcsMTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzdXNwZW5kQW5p
bWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGlt
ZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGlt
ZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuc3Vz
cGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci0KLSAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRp
b24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQor
ICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlv
bnMoKTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50
LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB9
CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTEzMiw3MyArMTExMiwxNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAg
ICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFuaW1hdGlv
bnMoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgp
LT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQp
OwotCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRv
Y3VtZW50KTsKLSAgICAgICAgfQorICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9s
bGVyKCkucmVzdW1lQW5pbWF0aW9ucygpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVB
bmltYXRpb25zKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8
Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCku
cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgQXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwg
cGF1c2VUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQp
Ci17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBw
c2V1ZG9JZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07Ci0KLSAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRv
SWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQu
YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICByZXR1cm4gZnJh
bWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUoKnBzZXVkb0VsZW1l
bnQsIEF0b21TdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlv
bk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50
KQotewotICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlv
bigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGlt
ZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRp
bWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYg
KHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKLQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAi
YWZ0ZXIiKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
Ci0KLSAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9y
ZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9F
bGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5
QW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKCpwc2V1ZG9FbGVtZW50LCBwcm9wZXJ0
eSwgcGF1c2VUaW1lKTsKLX0KLQogVmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRp
b24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50KQogewotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KICAgICBWZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYW5p
bWF0aW9uczsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFuaW1hdGlvbkFzUGFpciA6IGVsZW1lbnQu
ZG9jdW1lbnQoKS50aW1lbGluZSgpLmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxl
bWVudCkpCiAgICAgICAgIGFuaW1hdGlvbnMuYXBwZW5kKHsgYW5pbWF0aW9uQXNQYWlyLmZpcnN0
LCBhbmltYXRpb25Bc1BhaXIuc2Vjb25kIH0pOwpAQCAtMTIwNyw5ICsxMTMxLDcgQEAgVmVjdG9y
PEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRB
bmltYXRpb25zRm9yRWxlbWUKIAogdW5zaWduZWQgSW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlv
blRpbWVsaW5lSW52YWxpZGF0aW9ucygpIGNvbnN0CiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5u
dW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1i
ZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogZG91
YmxlIEludGVybmFsczo6dGltZVRvTmV4dEFuaW1hdGlvblRpY2soV2ViQW5pbWF0aW9uJiBhbmlt
YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCAzNzExNzZmNmMy
YTNjNzg3ZTAzNmY1MjI2NjI1ODM1ZmRjMTNlZThhLi5kMTdjZGVkMWQyMTllNjUzOGNjMTQ4MTMz
YzU2ZWZiMTJhYWM1YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTIzMywx
NCArMjMzLDggQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPGJvb2w+IGFuaW1hdGlvbnNBcmVT
dXNwZW5kZWQoKSBjb25zdDsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzdXNwZW5kQW5pbWF0aW9u
cygpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlc3VtZUFuaW1hdGlvbnMoKSBjb25z
dDsKLSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmKTsK
LSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVu
dChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQm
LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKTsKICAgICBkb3VibGUgYW5pbWF0aW9uc0ludGVydmFs
KCkgY29uc3Q7CiAKLSAgICAvLyBDU1MgVHJhbnNpdGlvbiB0ZXN0aW5nLgotICAgIEV4Y2VwdGlv
bk9yPGJvb2w+IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYpOwotICAgIEV4Y2VwdGlvbk9y
PGJvb2w+IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcm
IHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwc2V1
ZG9JZCk7Ci0KICAgICAvLyBXZWIgQW5pbWF0aW9ucyB0ZXN0aW5nLgogICAgIHN0cnVjdCBBY2Nl
bGVyYXRlZEFuaW1hdGlvbiB7CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCA4ZDFhZDQyZmQ1YTdiNTAwNGNiMDhmYTY2ZWVmNzRh
YmM0NjQ4ZDQzLi5mZDY3ZTcxMjJhY2Q0MTZiY2RkNzA0ZWE1ZDAwMzU1ZjljNjhiMDQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0zMTUsMTQgKzMxNSw4IEBAIGVudW0g
Q29udGVudFNpemVDYXRlZ29yeSB7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQg
c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBy
ZXN1bWVBbmltYXRpb25zKCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGFuaW1h
dGlvbnNBcmVTdXNwZW5kZWQoKTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoRE9NU3RyaW5nIGFuaW1hdGlvbk5hbWUsIHVucmVz
dHJpY3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChE
T01TdHJpbmcgYW5pbWF0aW9uTmFtZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgZG91YmxlIGFuaW1hdGlvbnNJbnRlcnZhbDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRl
c3RpbmcuCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudChET01TdHJpbmcgcHJvcGVydHlOYW1lLCB1bnJlc3RyaWN0ZWQgZG91Ymxl
IHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJv
b2xlYW4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KERPTVN0cmluZyBwcm9w
ZXJ0eSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9N
U3RyaW5nIHBzZXVkb0lkKTsKLQogICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAg
c2VxdWVuY2U8QWNjZWxlcmF0ZWRBbmltYXRpb24+IGFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVs
ZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKICAgICB1bnNpZ25lZCBsb25nIG51bWJlck9mQW5pbWF0
aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCBmMzU2YWUyNzBhMTkyM2Jj
NzMyNDU4YzZhMWVlNTU5MWVmOTljNDdjLi5lMDVmMzBlMWI3OTYyNTNlZGQ4ZDMzMTQ4MmIzZjlk
OTMxNDA2Y2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzRXhwZXJpbWVudGFsLnlhbWwKQEAgLTI4MCwyMiArMjgwLDYgQEAgQ1NTT01WaWV3U21vb3Ro
U2Nyb2xsaW5nRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxlIERP
TSBBUEkgYW5kIENTUyBwcm9wZXJ0eSBmb3IgJ3Ntb290aCcgc2Nyb2xsIGJlaGF2aW9yIgogICBj
YXRlZ29yeTogZXhwZXJpbWVudGFsCiAKLVdlYkFuaW1hdGlvbnNFbmFibGVkOgotICB0eXBlOiBi
b29sCi0gIGRlZmF1bHRWYWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxlTmFtZTogIldlYiBBbmlt
YXRpb25zIgotICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJXZWIgQW5pbWF0aW9ucyBwcm90
b3R5cGUiCi0gIGNhdGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29yZUJpbmRpbmc6IFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMKLQotV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDoK
LSAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJsZU5hbWU6
ICJDU1MgQW5pbWF0aW9ucyB2aWEgV2ViIEFuaW1hdGlvbnMiCi0gIGh1bWFuUmVhZGFibGVEZXNj
cmlwdGlvbjogIkV4cG9zZSBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIHRocm91
Z2ggZ2V0QW5pbWF0aW9ucygpIgotICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCi0gIHdlYmNvcmVC
aW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KIFdlYkFuaW1hdGlvbnNDb21wb3NpdGVP
cGVyYXRpb25zRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBkZWZhdWx0VmFsdWU6IERFRkFVTFRf
RVhQRVJJTUVOVEFMX0ZFQVRVUkVTX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZjRjNTViYmM1N2Y5OTAxM2IzNTY0ODhk
OWI4M2M5NWFiNTEwYjYxZC4uM2JmMzBlODQ4N2I5ODM1ZGY3OWI0YmJkODg4ZjhkMzI5ZjNmYWM3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5j
cHAKQEAgLTQ4NiwyNiArNDg2LDYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWQy
RENhbnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKICAgICByZXR1
cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKTsK
IH0KIAotdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewotICAgIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJl
ZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBbmltYXRp
b25zRW5hYmxlZCgpOwotfQotCi12b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZmxhZykKLXsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9v
bCBmbGFnKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKaW5kZXggYWY3ZGQxZDVjOGUzNGM4ZjI3Y2Qw
OTQ3NDRiMDFmYzM0YjliNjRmZS4uYTdiMWQ1NWJiMTU2ZWZhNzU3NDI3YzFhMjgzMmZlMmEzOTdm
NGI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1By
ZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCkBAIC05NywxNCArOTcsNiBAQCBXS19FWFBPUlQgYm9vbCBX
S1ByZWZlcmVuY2VzR2V0V2ViR0xFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogV0tfRVhQT1JU
IHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFjY2VsZXJh
dGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogCi0vLyBEZWZhdWx0cyB0byBm
YWxzZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KLS8vIERlZmF1
bHRzIHRvIGZhbHNlCi1XS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwotV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KIC8vIERlZmF1bHRzIHRvIGZhbHNlLgogV0tfRVhQ
T1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVy
ZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldE5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQppbmRleCAxM2E4ODEwYzNhZjRi
NzNmZTJlMGIyYmJkZDdlOGI1NzY4NjEyZGE2Li5kYWRhOTEzM2ZjZDk3M2JmNWZiNjYwMDJiNTM5
MTk5NmUyMDllY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlcy5tbQpAQCAtMTQzMCwxNiArMTQzMCw2IEBAIC0gKEJPT0wpX3ZpZGVv
UXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZAogICAgIHJldHVybiBfcHJl
ZmVyZW5jZXMtPnZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZCgp
OwogfQogCi0tICh2b2lkKV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOihC
T09MKWVuYWJsZWQKLXsKLSAgICBfcHJlZmVyZW5jZXMtPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLS0gKEJPT0wpX3dlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIC0gKHZvaWQpX3NldERldmljZU9yaWVu
dGF0aW9uRXZlbnRFbmFibGVkOihCT09MKWVuYWJsZWQKIHsKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJlZmVyZW5jZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBhMzQ5ODk1NjkyNjk0NDc4NTM2YzRhNDQ0
NWU1YTgwZTQ0M2YxODcyLi41ODQwNGE2ODQ1ZDdhNDljOGE3NmFhZWFmODg0ZGYyYTBlMzNjZGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtMTUxLDcgKzE1MSw2IEBAIHR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIF9XS0VkaXRhYmxlTGlua0JlaGF2aW9yKSB7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZDopIEJPT0wg
X2xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9z
ZXRTaG91bGRJZ25vcmVNZXRhVmlld3BvcnQ6KSBCT09MIF9zaG91bGRJZ25vcmVNZXRhVmlld3Bv
cnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBv
c2l0aW5nRW5hYmxlZDopIEJPT0wgX3ZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0
aW5nRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwot
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZDopIEJPT0wgX3dlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgc2V0dGVyPV9zZXREZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZDopIEJPT0wgX2Rl
dmljZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQu
NCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXROZWVkc1Np
dGVTcGVjaWZpY1F1aXJrczopIEJPT0wgX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRJdHBEZWJ1Z01vZGVFbmFibGVkOikgQk9PTCBfaXRwRGVidWdNb2RlRW5h
YmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCmluZGV4IGMzZGRkZmU1ZDcxZDA1MGNhMTMyNTBhMTdjYTU1NjQ0ZmExNmE2ZWQu
LjBhMjhlZTRjMjM4Mjc5NTVkOTVjMTVhMzQ2ZTZmNDg4MDg0YmNlNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcApAQCAtMTg3LDEyICsxODcsNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpvdmVycmlk
ZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihXZWJQYWdlR3JvdXBQcm94eSogcGFnZQogICAg
IH0KICNlbmRpZgogCi0gICAgaWYgKHByZWZlcmVuY2UgPT0gIldlYktpdFdlYkFuaW1hdGlvbnNF
bmFibGVkIikKLSAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChlbmFibGVkKTsKLQotICAgIGlmIChwcmVmZXJlbmNl
ID09ICJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIikKLSAgICAgICAg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotCiAgICAgaWYgKHByZWZlcmVuY2UgPT0g
IldlYktpdENhY2hlQVBJRW5hYmxlZCIpCiAgICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKGVuYWJsZWQpOwogCkBAIC01ODQs
MTYgKzU3OCw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50cyhXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJsZWQpCiAgICAgcGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGVuYWJsZWQpOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRp
b25zRW5hYmxlZChlbmFibGVkKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRB
Y2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAjaWYgRU5B
QkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXggMDlh
MTI1Y2E0Yzk2Y2MzYTAzMmFlNThhNGViYmMyYmM0M2M3NWZiZi4uYzAxZGU4MGZjY2JjZTNkMzVi
ZTMyYWY3YTBkYTRiM2MzYzFkZjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAgLTE0Miw4ICsxNDIs
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhX
ZWJQYWdlKiwgYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVk
KGJvb2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9p
ZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGJvb2wpOwogICAgIHZvaWQg
c2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBkaXNw
YXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKaW5kZXggYmQw
MzA5MjAxZTI0YTBmYmE4N2E0MzA1MDFiZDBkYTNkNDE4YjU2ZS4uY2RjYzc4YmRhYTkwZjQ5YWZk
MTc2YTI1NTZkNzc5YWQ4NjEyY2QwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC01Miw3ICs1
Miw2IEBACiAjZGVmaW5lIFdlYktpdEphdmFFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEph
dmFFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZFByZWZlcmVuY2VLZXkg
QCJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SmF2YVNjcmlwdE1hcmt1
cEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdE1hcmt1cEVuYWJsZWQiCi0j
ZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YkFuaW1hdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRl
T3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBv
c2l0ZU9wZXJhdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJs
ZVRpbWVsaW5lc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc011dGFi
bGVUaW1lbGluZXNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5k
VmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5k
VmFsdWVzRW5hYmxlZCIKQEAgLTIwNCw3ICsyMDMsNiBAQAogI2RlZmluZSBXZWJLaXRDb2xvckZp
bHRlckVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q29sb3JGaWx0ZXJFbmFibGVkIgogI2Rl
ZmluZSBXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlUHJlZmVyZW5jZUtl
eSBAIldlYktpdFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiCiAjZGVmaW5lIFdl
YktpdEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRGZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQiCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3Jh
dGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJ
bnRlZ3JhdGlvbkVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYlNRTEVuYWJsZWRQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0V2ViU1FMRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0VXNlckdlc3R1cmVQcm9t
aXNlUHJvcGFnYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXJHZXN0dXJlUHJv
bWlzZVByb3BhZ2F0aW9uRW5hYmxlZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCmluZGV4IGE2M2IwMGM2YjgyYmQ5NThiMmE0ZDZjMmRk
ODVkN2E0MmUwZDczYmUuLjQ1NTU3MjZiZjZiZDZmMDNjNzM3MzljYTA2NjMxNmI3Mzc3N2Q0ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
cy5tbQpAQCAtNjM2LDcgKzYzNiw2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBATk8s
IFdlYktpdERpYWxvZ0VsZW1lbnRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQE5PLCBX
ZWJLaXRIaWdobGlnaHRBUElFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2Vi
S2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVT
LCBXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSwK
ICAgICAgICAgQFlFUywgV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVu
YWJsZWRQcmVmZXJlbmNlS2V5LAogCiAjaWYgRU5BQkxFKFdFQkdMMikKQEAgLTY1OCw3ICs2NTcs
NiBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgQE5PLCBXZWJLaXREb3dubG9hZEF0dHJp
YnV0ZUVuYWJsZWRQcmVmZXJlbmNlS2V5LAogI2VuZGlmCiAgICAgICAgIEBOTywgV2ViS2l0RGly
ZWN0b3J5VXBsb2FkRW5hYmxlZFByZWZlcmVuY2VLZXksCi0gICAgICAgIEBZRVMsIFdlYktpdFdl
YkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0U3lu
dGhldGljRWRpdGluZ0NvbW1hbmRzRW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpAQCAtMzE3NCwxNiArMzE3Miw2IEBAIC0gKHZvaWQpc2V0Q1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZDooQk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTpmbGFnIGZvcktleTpXZWJLaXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkUHJlZmVy
ZW5jZUtleV07CiB9CiAKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0VuYWJsZWQKLXsKLSAgICByZXR1
cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZl
cmVuY2VLZXldOwotfQotCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNFbmFibGVkOihCT09MKWZs
YWcKLXsKLSAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1h
dGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KIC0gKEJPT0wpd2ViQW5pbWF0aW9uc0Nv
bXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVG
b3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVy
ZW5jZUtleV07CkBAIC0zMjQ0LDE2ICszMjMyLDYgQEAgLSAodm9pZClzZXRNb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZDooQk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZv
cktleTpXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQog
Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1
cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTpmbGFnIGZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJl
ZmVyZW5jZUtleV07Ci19Ci0KIC0gKEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkCiB7
CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0SW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbmFibGVkUHJlZmVyZW5jZUtleV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCAxZWNiZDc2MjM1
YjA5MDRlZDcxMThkMmMyODc5MTU1Yjg3MzNkYjkwLi4wMGExYjZkYzdlNDBiYjgyYTNjZmFmZGRj
MDVjMTZjZTJjODAxMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTU2NCw5ICs1NjQsNiBAQCBleHRl
cm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlm
aWNhdGlvbiBXRUJLSVRfREVQUgogLSAodm9pZClzZXREaXJlY3RvcnlVcGxvYWRFbmFibGVkOihC
T09MKWZsYWc7CiAtIChCT09MKWRpcmVjdG9yeVVwbG9hZEVuYWJsZWQ7CiAKLS0gKHZvaWQpc2V0
V2ViQW5pbWF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0Vu
YWJsZWQ7Ci0KIC0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFi
bGVkOihCT09MKWZsYWc7CiAtIChCT09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25z
RW5hYmxlZDsKIApAQCAtNTg1LDkgKzU4Miw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVy
ZW5jZXNDYWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAt
ICh2b2lkKXNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOihCT09MKWZsYWc7CiAtIChCT09M
KW1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZDsKLQogLSAodm9pZClzZXRJbnRlcnNlY3Rpb25PYnNlcnZlckVu
YWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYTQyNWNj
ZjFjNWM5ZTc3OTk3NDRjNWJlNTM5Mzc0ZGZmODI3YjY5ZS4uYTlmZGIyYTZiMTgwYzc5NTU5MzY1
NzA4MWExYmRlMDlkYjc3ZWNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtMTMyLDcgKzEzMiw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0JhY2tGb3J3YXJkQ2FjaGUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVTdG9y
YWdlUHJvdmlkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0NvbG9yTWFjLmg+CkBAIC0zMzM0LDcgKzMzMzMsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNl
c0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKIAogICAgIHNldHRpbmdzLnNl
dEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKFtzZWxmIGludGVyYWN0aXZlRm9ybVZh
bGlkYXRpb25FbmFibGVkXSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbcHJlZmVyZW5jZXMgbW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWRdKTsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoW3ByZWZl
cmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRdKTsKIAogICAgIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKFtw
cmVmZXJlbmNlcyBjYWNoZUFQSUVuYWJsZWRdKTsKIApAQCAtMzM1OCw3ICszMzU2LDYgQEAgLSAo
dm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAg
ICAgc2V0dGluZ3Muc2V0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkKFtwcmVmZXJlbmNlcyBkb3du
bG9hZEF0dHJpYnV0ZUVuYWJsZWRdKTsKICNlbmRpZgogCi0gICAgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChbcHJlZmVyZW5j
ZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxl
ZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkXSk7
CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmlt
YXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNN
dXRhYmxlVGltZWxpbmVzRW5hYmxlZF0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAppbmRleCBmZTIyODExYzg2
ZWM1Y2Q4ZTMzMWM2N2UxNmYzY2Q5MzFiMjNkMzA3Li5kZjdjMTdmN2Y5YjA1ZjE4ZDY2MTliODg2
OWQwNjY3MzU2OTYwNDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRl
cmZhY2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0ludGVyZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGwKQEAgLTg0LDEwICs4NCw2IEBAIGludGVy
ZmFjZSBJV2ViRnJhbWVQcml2YXRlIDogSVVua25vd24KIAogICAgIEhSRVNVTFQgZWxlbWVudERv
ZXNBdXRvQ29tcGxldGUoW2luXSBJRE9NRWxlbWVudCogZWxlbWVudCwgW291dCwgcmV0dmFsXSBC
T09MKiByZXN1bHQpOwogCi0gICAgSFJFU1VMVCBwYXVzZUFuaW1hdGlvbihbaW5dIEJTVFIgYW5p
bWF0aW9uTmFtZSwgW2luXSBJRE9NTm9kZSogbm9kZSwgW2luXSBkb3VibGUgc2Vjb25kc0Zyb21O
b3csIFtvdXQsIHJldHZhbF0gQk9PTCogYW5pbWF0aW9uV2FzUnVubmluZyk7Ci0gICAgSFJFU1VM
VCBwYXVzZVRyYW5zaXRpb24oW2luXSBCU1RSIHByb3BlcnR5TmFtZSwgW2luXSBJRE9NTm9kZSog
bm9kZSwgW2luXSBkb3VibGUgc2Vjb25kc0Zyb21Ob3csIFtvdXQsIHJldHZhbF0gQk9PTCogdHJh
bnNpdGlvbldhc1J1bm5pbmcpOwotICAgIEhSRVNVTFQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KFtvdXQsIHJldHZhbF0gVUlOVCogbnVtYmVyKTsKLQogICAgIEhSRVNVTFQgaXNEaXNwbGF5aW5n
U3RhbmRhbG9uZUltYWdlKFtvdXQsIHJldHZhbF0gQk9PTCogcmVzdWx0KTsKIAogICAgIEhSRVNV
TFQgYWxsb3dzRm9sbG93aW5nTGluayhbaW5dIEJTVFIgdXJsLCBbb3V0LCByZXR2YWxdIEJPT0wq
IHJlc3VsdCk7CkBAIC0xMTAsOSArMTA2LDYgQEAgaW50ZXJmYWNlIElXZWJGcmFtZVByaXZhdGUg
OiBJVW5rbm93bgogCiAgICAgSFJFU1VMVCB1bnVzZWQ1KCk7CiAKLSAgICBIUkVTVUxUIHN1c3Bl
bmRBbmltYXRpb25zKCk7Ci0gICAgSFJFU1VMVCByZXN1bWVBbmltYXRpb25zKCk7IAotCiAgICAg
SFJFU1VMVCBsb2FkUGxhaW5UZXh0U3RyaW5nKFtpbl0gQlNUUiBzdHJpbmcsIFtpbl0gQlNUUiB1
cmwpOwogCiAgICAgSFJFU1VMVCBjbGVhck9wZW5lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5p
ZGwKaW5kZXggOWE4NzVkNDc5ZTdiZmFkNzM2MWE2ZjJmOGE0ZDMxOTMzN2VlNTdmMi4uYjBiZDA1
ZjI1MDU4MmUxNDdhNmE3ZmJkYTNiNmRiZjRiNmFiNjA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsCkBAIC0xODMsMTYgKzE4MywxMiBAQCBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2VzUHJp
dmF0ZTMgOiBJV2ViUHJlZmVyZW5jZXNQcml2YXRlMgogICAgIEhSRVNVTFQgc2V0Q3VzdG9tRWxl
bWVudHNFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKICAgICBIUkVTVUxUIG1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7CiAgICAgSFJFU1VM
VCBzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7Ci0gICAg
SFJFU1VMVCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtvdXQsIHJldHZhbF0g
Qk9PTCogZW5hYmxlZCk7Ci0gICAgSFJFU1VMVCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKIH0KIAogW3V1aWQoRjk1ODJENzItNjM0OC00
NUIxLUFCMDktMzlFMzM0NTlCNUI5KV0KIGludGVyZmFjZSBJV2ViUHJlZmVyZW5jZXNQcml2YXRl
NCA6IElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzCiB7CiAgICAgSFJFU1VMVCBzZXRBcHBsaWNhdGlv
bklkKFtpbl0gQlNUUiBhcHBsaWNhdGlvbklkKTsKLSAgICBIUkVTVUxUIHdlYkFuaW1hdGlvbnNF
bmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9u
c0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQpOwogICAgIEhSRVNVTFQgdXNlclRpbWluZ0VuYWJs
ZWQoW291dCwgcmV0dmFsXSBCT09MKik7CiAgICAgSFJFU1VMVCBzZXRVc2VyVGltaW5nRW5hYmxl
ZChbaW5dIEJPT0wgZW5hYmxlZCk7CiAgICAgSFJFU1VMVCByZXNvdXJjZVRpbWluZ0VuYWJsZWQo
W291dCwgcmV0dmFsXSBCT09MKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKaW5k
ZXggZjA2MjliYmUzNzJjYmE5OGQzNmRkOGM4ZjI0MDFkNzYxNWViZjc1OC4uOGM4ZTU4NWE3YmM3
YjkzNGI4Y2EwYWZkMGNjNzM4ZDJkYmJiNjY5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZy
YW1lLmNwcApAQCAtMTE3Nyw2NCArMTE3Nyw2IEBAIEhSRVNVTFQgV2ViRnJhbWU6OmVsZW1lbnRE
b2VzQXV0b0NvbXBsZXRlKF9Jbl9vcHRfIElET01FbGVtZW50ICplbGVtZW50LCBfT3V0XyBCCiAg
ICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViRnJhbWU6OnJlc3VtZUFuaW1hdGlvbnMo
KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKLQotICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5yZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2Vi
RnJhbWU6OnN1c3BlbmRBbmltYXRpb25zKCkKLXsKLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHRo
aXMpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7Ci0KLSAg
ICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICByZXR1
cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJGcmFtZTo6cGF1c2VBbmltYXRpb24oX0luXyBCU1RS
IGFuaW1hdGlvbk5hbWUsIF9Jbl9vcHRfIElET01Ob2RlKiBub2RlLCBkb3VibGUgc2Vjb25kc0Zy
b21Ob3csIF9PdXRfIEJPT0wqIGFuaW1hdGlvbldhc1J1bm5pbmcpCi17Ci0gICAgaWYgKCFub2Rl
IHx8ICFhbmltYXRpb25XYXNSdW5uaW5nKQotICAgICAgICByZXR1cm4gRV9QT0lOVEVSOwotCi0g
ICAgKmFuaW1hdGlvbldhc1J1bm5pbmcgPSBGQUxTRTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNv
cmUodGhpcyk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsK
LQotICAgIENPTVB0cjxET01Ob2RlPiBkb21Ob2RlKFF1ZXJ5LCBub2RlKTsKLSAgICBpZiAoIWRv
bU5vZGUpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICAqYW5pbWF0aW9uV2FzUnVubmlu
ZyA9IGZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5wYXVzZUFuaW1hdGlvbkF0VGltZShkb3duY2Fz
dDxFbGVtZW50PigqZG9tTm9kZS0+bm9kZSgpKSwgU3RyaW5nKGFuaW1hdGlvbk5hbWUsIFN5c1N0
cmluZ0xlbihhbmltYXRpb25OYW1lKSksIHNlY29uZHNGcm9tTm93KTsKLSAgICByZXR1cm4gU19P
SzsKLX0KLQotSFJFU1VMVCBXZWJGcmFtZTo6cGF1c2VUcmFuc2l0aW9uKF9Jbl8gQlNUUiBwcm9w
ZXJ0eU5hbWUsIF9Jbl9vcHRfIElET01Ob2RlKiBub2RlLCBkb3VibGUgc2Vjb25kc0Zyb21Ob3cs
IF9PdXRfIEJPT0wqIHRyYW5zaXRpb25XYXNSdW5uaW5nKQotewotICAgIGlmICghbm9kZSB8fCAh
dHJhbnNpdGlvbldhc1J1bm5pbmcpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICAq
dHJhbnNpdGlvbldhc1J1bm5pbmcgPSBGQUxTRTsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUo
dGhpcyk7Ci0gICAgaWYgKCFmcmFtZSkKLSAgICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKLQot
ICAgIENPTVB0cjxET01Ob2RlPiBkb21Ob2RlKFF1ZXJ5LCBub2RlKTsKLSAgICBpZiAoIWRvbU5v
ZGUpCi0gICAgICAgIHJldHVybiBFX0ZBSUw7Ci0KLSAgICAqdHJhbnNpdGlvbldhc1J1bm5pbmcg
PSBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKGRvd25jYXN0
PEVsZW1lbnQ+KCpkb21Ob2RlLT5ub2RlKCkpLCBTdHJpbmcocHJvcGVydHlOYW1lLCBTeXNTdHJp
bmdMZW4ocHJvcGVydHlOYW1lKSksIHNlY29uZHNGcm9tTm93KTsKLSAgICByZXR1cm4gU19PSzsK
LX0KLQogSFJFU1VMVCBXZWJGcmFtZTo6dmlzaWJsZUNvbnRlbnRSZWN0KF9PdXRfIFJFQ1QqIHJl
Y3QpCiB7CiAgICAgaWYgKCFyZWN0KQpAQCAtMTI1MywyMSArMTE5NSw2IEBAIEhSRVNVTFQgV2Vi
RnJhbWU6OnZpc2libGVDb250ZW50UmVjdChfT3V0XyBSRUNUKiByZWN0KQogICAgIHJldHVybiBT
X09LOwogfQogCi1IUkVTVUxUIFdlYkZyYW1lOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoX091
dF8gVUlOVCogbnVtYmVyKQotewotICAgIGlmICghbnVtYmVyKQotICAgICAgICByZXR1cm4gRV9Q
T0lOVEVSOwotCi0gICAgKm51bWJlciA9IDA7Ci0KLSAgICBGcmFtZSogZnJhbWUgPSBjb3JlKHRo
aXMpOwotICAgIGlmICghZnJhbWUpCi0gICAgICAgIHJldHVybiBFX1VORVhQRUNURUQ7Ci0KLSAg
ICAqbnVtYmVyID0gZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLm51bWJlck9mQWN0aXZlQW5pbWF0
aW9ucyhmcmFtZS0+ZG9jdW1lbnQoKSk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNVTFQg
V2ViRnJhbWU6OmlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZShfT3V0XyBCT09MKiByZXN1bHQp
CiB7CiAgICAgaWYgKCFyZXN1bHQpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJGcmFtZS5oIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuaAppbmRleCA3
NjcyNzQxNTdhOGRlMjAzYmQwYTMwYjUyM2Q5OWNlYjExMTQ4MjYxLi40MDYyMzU0Njk2NmIxZDVl
NzJhYjQ3OWZkYTgzMDQ5NDRlMzY3ZDM2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5
L3dpbi9XZWJGcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmgK
QEAgLTEzNiw5ICsxMzYsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIHBhaW50RG9jdW1lbnRSZWN0VG9Db250ZXh0KFJFQ1QsIF9Jbl8gSERDKTsKICAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcGFpbnRTY3JvbGxWaWV3UmVjdFRv
Q29udGV4dEF0UG9pbnQoUkVDVCwgUE9JTlQsIF9Jbl8gSERDKTsKICAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgZWxlbWVudERvZXNBdXRvQ29tcGxldGUoX0luX29wdF8gSURP
TUVsZW1lbnQqLCBfT3V0XyBCT09MKik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENB
TExUWVBFIHBhdXNlQW5pbWF0aW9uKF9Jbl8gQlNUUiBhbmltYXRpb25OYW1lLCBfSW5fb3B0XyBJ
RE9NTm9kZSosIGRvdWJsZSBzZWNvbmRzRnJvbU5vdywgX091dF8gQk9PTCogYW5pbWF0aW9uV2Fz
UnVubmluZyk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHBhdXNlVHJh
bnNpdGlvbihfSW5fIEJTVFIgcHJvcGVydHlOYW1lLCBfSW5fb3B0XyBJRE9NTm9kZSosIGRvdWJs
ZSBzZWNvbmRzRnJvbU5vdywgX091dF8gQk9PTCogdHJhbnNpdGlvbldhc1J1bm5pbmcpOwotICAg
IHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBudW1iZXJPZkFjdGl2ZUFuaW1hdGlv
bnMoX091dF8gVUlOVCopOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBs
b2FkUGxhaW5UZXh0U3RyaW5nKF9Jbl8gQlNUUiwgX0luXyBCU1RSIHVybCk7CiAgICAgdmlydHVh
bCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGlzRGlzcGxheWluZ1N0YW5kYWxvbmVJbWFnZShf
T3V0XyBCT09MKik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGFsbG93
c0ZvbGxvd2luZ0xpbmsoX0luXyBCU1RSLCBfT3V0XyBCT09MKik7CkBAIC0xNTAsOCArMTQ3LDYg
QEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBjbGVhck9w
ZW5lcigpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRUZXh0RGly
ZWN0aW9uKF9Jbl8gQlNUUik7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHVudXNlZDQoKSB7IHJldHVybiBFX05PVElNUEw7IH0KLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RE
TUVUSE9EQ0FMTFRZUEUgcmVzdW1lQW5pbWF0aW9ucygpOwotICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBzdXNwZW5kQW5pbWF0aW9ucygpOwogICAgIHZpcnR1YWwgSFJFU1VM
VCBTVERNRVRIT0RDQUxMVFlQRSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2VudGF0aW9uKHVu
c2lnbmVkIG9wdGlvbnMsIF9EZXJlZl9vcHRfb3V0XyBCU1RSKiByZXN1bHQpOwogICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZW5kZXJUcmVlQXNFeHRlcm5hbFJlcHJlc2Vu
dGF0aW9uRm9yUHJpbnRpbmcoX0RlcmVmX29wdF9vdXRfIEJTVFIqIHJlc3VsdCk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKaW5k
ZXggMmEyMTIxYWRiOTY4Njk4NDEyMWMwZTRiYThkYWZmY2E3YmNjNmNhYi4uOTIxN2I4NWU0OTdk
YTEzZGE3NjgyMjk1YjJkZTc2MmEyZGU3MTY1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKKysrIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKQEAgLTE4OCwxNCArMTg4LDEwIEBA
CiAKICNkZWZpbmUgV2ViS2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5
ICJXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCIKIAotI2RlZmluZSBXZWJLaXRXZWJB
bmltYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVk
IgotCiAjZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxl
ZFByZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5h
YmxlZCIKIAogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJs
ZWRQcmVmZXJlbmNlS2V5ICJXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJs
ZWQiCiAKLSNkZWZpbmUgV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZFBy
ZWZlcmVuY2VLZXkgIldlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiCi0K
ICNkZWZpbmUgV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWRQcmVmZXJl
bmNlS2V5ICJXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZCIKIAogI2Rl
ZmluZSBXZWJLaXRVc2VyVGltaW5nRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdFVzZXJUaW1p
bmdFbmFibGVkIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVy
ZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuY3BwCmlu
ZGV4IGE4ZWY5MGMxNzMwMzkxZGI5ZDgwNTFkMzY2NmZlNWQ5ZWZmYzlhNjMuLmIwYWQ2Y2NlNmU2
NWE5NGM2ZWU4Yjg2NWI0ZTAyZWRlMDg4MDhhZjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRM
ZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlcy5jcHAKQEAgLTMxMSwxNCArMzExLDEwIEBAIHZvaWQgV2ViUHJlZmVy
ZW5jZXM6OmluaXRpYWxpemVEZWZhdWx0U2V0dGluZ3MoKQogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRk
VmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdEN1c3RvbUVsZW1lbnRzRW5hYmxlZFByZWZlcmVu
Y2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVm
YXVsdHMsIENGU1RSKFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtD
RkJvb2xlYW5UcnVlKTsKLQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNU
UihXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNl
S2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1
bHRzLCBDRlNUUihXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWRQcmVm
ZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAotICAgIENGRGljdGlvbmFyeUFkZFZhbHVl
KGRlZmF1bHRzLCBDRlNUUihXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
UHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7Ci0KICAgICBDRkRpY3Rpb25hcnlBZGRW
YWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0Vu
YWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhbkZhbHNlKTsKIAogICAgIENGRGljdGlvbmFy
eUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJLaXRVc2VyVGltaW5nRW5hYmxlZFByZWZlcmVu
Y2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwpAQCAtMjEzNiwyMCArMjEzMiw2IEBAIEhSRVNVTFQg
V2ViUHJlZmVyZW5jZXM6Om1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKF9PdXRfIEJPT0wqIGVu
YWJsZWQpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6Ondl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKLXsK
LSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmVuYWJs
ZWQgPSBib29sVmFsdWVGb3JLZXkoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZFByZWZlcmVuY2VLZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFdlYlBy
ZWZlcmVuY2VzOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKEJPT0wgZW5h
YmxlZCkKLXsKLSAgICBzZXRCb29sVmFsdWUoV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBTX09LOwotfQot
CiBIUkVTVUxUIFdlYlByZWZlcmVuY2VzOjpmZXRjaEFQSUtlZXBBbGl2ZUVuYWJsZWQoX091dF8g
Qk9PTCogZW5hYmxlZCkKIHsKICAgICBpZiAoIWVuYWJsZWQpCkBAIC0yMzM3LDIwICsyMzE5LDYg
QEAgSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0QXBwbGljYXRpb25JZChCU1RSIGFwcGxpY2F0
aW9uSWQpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKEJPT0wgZW5hYmxlZCkKLXsKLSAgICBzZXRCb29sVmFsdWUo
V2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKLSAgICBy
ZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0Vu
YWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKLXsKLSAgICBpZiAoIWVuYWJsZWQpCi0gICAgICAg
IHJldHVybiBFX1BPSU5URVI7Ci0gICAgKmVuYWJsZWQgPSBib29sVmFsdWVGb3JLZXkoV2ViS2l0
V2ViQW5pbWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KTsKLSAgICByZXR1cm4gU19PSzsKLX0K
LQogSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJh
dGlvbnNFbmFibGVkKEJPT0wgZW5hYmxlZCkKIHsKICAgICBzZXRCb29sVmFsdWUoV2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwgZW5hYmxl
ZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5o
IGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaAppbmRleCAyNDM3YjBl
NzYyODk1MDZjMjY0MDQ4ODZiZDJjMDNmNTgzMjUzYzUxLi4yMTI5MDVjYjFiYTYwMDk0MDM4Njk1
MzkxNzhhM2ZlYTcwM2EzOGU4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9X
ZWJQcmVmZXJlbmNlcy5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVu
Y2VzLmgKQEAgLTIzNiwxMyArMjM2LDkgQEAgcHVibGljOgogICAgIHZpcnR1YWwgSFJFU1VMVCBT
VERNRVRIT0RDQUxMVFlQRSBzZXRDdXN0b21FbGVtZW50c0VuYWJsZWQoQk9PTCk7CiAgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIG1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVk
KF9PdXRfIEJPT0wqKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0
TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoQk9PTCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNU
RE1FVEhPRENBTExUWVBFIHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoX091dF8g
Qk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKEJPT0wpOwogICAgIAogICAgIC8vIElXZWJQcmVm
ZXJlbmNlc1ByaXZhdGU0CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNl
dEFwcGxpY2F0aW9uSWQoQlNUUik7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHdlYkFuaW1hdGlvbnNFbmFibGVkKF9PdXRfIEJPT0wqKTsKLSAgICB2aXJ0dWFsIEhSRVNV
TFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoQk9PTCk7CiAgICAg
dmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHVzZXJUaW1pbmdFbmFibGVkKF9PdXRf
IEJPT0wqKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0VXNlclRp
bWluZ0VuYWJsZWQoQk9PTCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBF
IHJlc291cmNlVGltaW5nRW5hYmxlZChfT3V0XyBCT09MKik7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9XZWJWaWV3LmNwcCBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dl
YlZpZXcuY3BwCmluZGV4IGUyNTgzMmFhNDBhMDU0N2RkZTFmNjNiYjRlMGIxOGNkNzk1MzQ2NDYu
LmRhZDY0ZGVmMzM2MjJmNjNmMmViNGEyMmQ1ODJkYTYzOWExYmY5YzcgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdh
Y3kvd2luL1dlYlZpZXcuY3BwCkBAIC01MjQ0LDExICs1MjQ0LDYgQEAgSFJFU1VMVCBXZWJWaWV3
Ojpub3RpZnlQcmVmZXJlbmNlc0NoYW5nZWQoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9u
KQogICAgICAgICByZXR1cm4gaHI7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVk
RmVhdHVyZXMoKS5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0g
ICAgaHIgPSBwcmVmc1ByaXZhdGUtPndlYkFuaW1hdGlvbnNFbmFibGVkKCZlbmFibGVkKTsKLSAg
ICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAgIFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoISFlbmFi
bGVkKTsKLQogICAgIGhyID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zQ29tcG9zaXRlT3Bl
cmF0aW9uc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICBy
ZXR1cm4gaHI7CkBAIC01MjU5LDExICs1MjU0LDYgQEAgSFJFU1VMVCBXZWJWaWV3Ojpub3RpZnlQ
cmVmZXJlbmNlc0NoYW5nZWQoSVdlYk5vdGlmaWNhdGlvbiogbm90aWZpY2F0aW9uKQogICAgICAg
ICByZXR1cm4gaHI7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQoISFlbmFibGVkKTsKIAot
ICAgIGhyID0gcHJlZnNQcml2YXRlLT53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
KCZlbmFibGVkKTsKLSAgICBpZiAoRkFJTEVEKGhyKSkKLSAgICAgICAgcmV0dXJuIGhyOwotICAg
IFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCghIWVuYWJsZWQpOwotCiAgICAgaHIgPSBwcmVmc1ByaXZh
dGUtPkNTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkKCZlbmFibGVkKTsKICAgICBp
ZiAoRkFJTEVEKGhyKSkKICAgICAgICAgcmV0dXJuIGhyOwpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hh
bmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDc3ODA3ZTJmYjg1NWJkN2VkMjE1YzIyYWFk
OTU0NzlhZGQ2MzBlMGYuLjFiNWI2YzFmMWNkNGE1ZWViMzYwYTViOWE4ZjQ3MDJjMjNjYWMyMTMg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwyMSBAQAorMjAyMC0wOS0xNyAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS9U
ZXN0T3B0aW9ucy5jcHA6CisgICAgICAgIChUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMpOgorICAg
ICAgICAoVGVzdE9wdGlvbnM6OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyBjb25zdCk6
CisgICAgICAgICogRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaDoKKyAgICAgICAgKiBEdW1w
UmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW06CisgICAgICAgIChlbmFibGVFeHBlcmlt
ZW50YWxGZWF0dXJlcyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25z
KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwOgorICAg
ICAgICAoZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMpOgorICAgICAgICAoc2V0V2ViUHJlZmVy
ZW5jZXNGb3JUZXN0T3B0aW9ucyk6CisKIDIwMjAtMDktMTYgIEZ1amlpIEhpcm9ub3JpICA8SGly
b25vcmkuRnVqaWlAc29ueS5jb20+CiAKICAgICAgICAgW0NNYWtlXSBBZGQgYSBuZXcgbGlicmFy
eSB0YXJnZXQgVGVzdFJ1bm5lclNoYXJlZApkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRy
ZWUvVGVzdE9wdGlvbnMuY3BwIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3Bw
CmluZGV4IGU0MDlhOTJjNWE2MGYxOWNjNDMwNTE5MjgyNTcyNTBlZjcxMThmY2UuLjEyNWFkZGUz
YzIzNGY3YTRhYWI2M2U5ZDMwMDUzNzg4YWMwYWRlMmIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0
T3B0aW9ucy5jcHAKQEAgLTEyNCw4ICsxMjQsNiBAQCBUZXN0T3B0aW9uczo6VGVzdE9wdGlvbnMo
Y29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpzdHJpbmcmIGFic29sdQog
ICAgICAgICAgICAgZHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyID0gcGFyc2VCb29sZWFuVGVzdEhl
YWRlclZhbHVlKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJhbGxvd0Nyb3NzT3Jp
Z2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyIpCiAgICAgICAgICAgICBhbGxvd0Ny
b3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IHBhcnNlQm9vbGVhblRl
c3RIZWFkZXJWYWx1ZSh2YWx1ZSk7Ci0gICAgICAgIGVsc2UgaWYgKGtleSA9PSAiZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQiKQotICAgICAgICAgICAgZW5h
YmxlV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZh
bHVlKHZhbHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJpbnRlcm5hbDpzZWxlY3Rpb25B
Y3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCIpCiAgICAgICAgICAgICBlbmFibGVTZWxlY3Rp
b25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZh
bHVlKTsKICAgICAgICAgZWxzZSBpZiAoa2V5ID09ICJlbmFibGVDb2xvckZpbHRlciIpCkBAIC0x
NjUsNiArMTYzLDUgQEAgVGVzdE9wdGlvbnM6OlRlc3RPcHRpb25zKGNvbnN0IHN0ZDo6c3RyaW5n
JiBwYXRoT3JVUkwsIGNvbnN0IHN0ZDo6c3RyaW5nJiBhYnNvbHUKIGJvb2wgVGVzdE9wdGlvbnM6
OndlYlZpZXdJc0NvbXBhdGlibGVXaXRoT3B0aW9ucyhjb25zdCBUZXN0T3B0aW9ucyYgb3RoZXIp
IGNvbnN0CiB7CiAgICAgcmV0dXJuIG90aGVyLmxheWVyQmFja2VkV2ViVmlldyA9PSBsYXllckJh
Y2tlZFdlYlZpZXcKLSAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zCi0g
ICAgICAgICYmIG90aGVyLmVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiA9PSBlbmFi
bGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb247CisgICAgICAgICYmIG90aGVyLmpzY09wdGlv
bnMgPT0ganNjT3B0aW9uczsKIH0KZGlmZiAtLWdpdCBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rl
c3RPcHRpb25zLmggYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCmluZGV4IGQy
OTliYTI4MGZhY2IzMTYyOTYzZjgxZGI2MmQyNmRkNmY3YzA2ZTIuLmYzMWM0MGMzM2I3ZmJjNjMx
M2UxODUxZDU1ZjAyYzI5MTQ0NzJlYTMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVl
L1Rlc3RPcHRpb25zLmgKKysrIGIvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaApA
QCAtMjksNyArMjksNiBAQAogCiBzdHJ1Y3QgVGVzdE9wdGlvbnMgewogICAgIGJvb2wgZW5hYmxl
QXR0YWNobWVudEVsZW1lbnQgeyBmYWxzZSB9OwotICAgIGJvb2wgZW5hYmxlV2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uIHsgdHJ1ZSB9OwogICAgIGJvb2wgdXNlQWNjZWxlcmF0ZWREcmF3aW5n
IHsgZmFsc2UgfTsKICAgICBib29sIGVuYWJsZUludGVyc2VjdGlvbk9ic2VydmVyIHsgZmFsc2Ug
fTsKICAgICBib29sIHVzZUVwaGVtZXJhbFNlc3Npb24geyBmYWxzZSB9OwpkaWZmIC0tZ2l0IGEv
VG9vbHMvRHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tIGIvVG9vbHMvRHVtcFJl
bmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCmluZGV4IGUwY2JlYzE1OThiYjY2YTU3NDMz
NjdkN2M5ZmNjYzJmZjIwOTc1NGIuLjk0YWJiMzgzOWYxMmRiZTA1OWRhOGU5YmRmZGE2MzQxMWQ2
NjIzMDMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJl
ZS5tbQorKysgYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRyZWUubW0KQEAg
LTgxNCw3ICs4MTQsNiBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxGZWF0dXJlcyhX
ZWJQcmVmZXJlbmNlcyogcHJlZmVyZW5jZXMpCiAgICAgW3ByZWZlcmVuY2VzIHNldE1lZGlhUHJl
bG9hZGluZ0VuYWJsZWQ6WUVTXTsKICAgICAvLyBGSVhNRTogSW5wdXRFdmVudHMKICAgICBbcHJl
ZmVyZW5jZXMgc2V0RmV0Y2hBUElLZWVwQWxpdmVFbmFibGVkOllFU107Ci0gICAgW3ByZWZlcmVu
Y2VzIHNldFdlYkFuaW1hdGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJl
bmNlcyBzZXRXZWJBbmltYXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQ6WUVTXTsKICAgICBb
cHJlZmVyZW5jZXMgc2V0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQ6WUVTXTsK
QEAgLTk3Nyw3ICs5NzYsNiBAQCBzdGF0aWMgdm9pZCBzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RP
cHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvcHRpb25zKQogICAgIHByZWZlcmVuY2VzLm1vZGVy
bk1lZGlhQ29udHJvbHNFbmFibGVkID0gb3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xz
OwogICAgIHByZWZlcmVuY2VzLmluc3BlY3RvckFkZGl0aW9uc0VuYWJsZWQgPSBvcHRpb25zLmVu
YWJsZUluc3BlY3RvckFkZGl0aW9uczsKICAgICBwcmVmZXJlbmNlcy5hbGxvd0Nyb3NzT3JpZ2lu
U3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVkZW50aWFscyA9IG9wdGlvbnMuYWxsb3dDcm9zc09yaWdp
blN1YnJlc291cmNlc1RvQXNrRm9yQ3JlZGVudGlhbHM7Ci0gICAgcHJlZmVyZW5jZXMud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlV2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uOwogICAgIHByZWZlcmVuY2VzLmNvbG9yRmlsdGVyRW5hYmxlZCA9IG9w
dGlvbnMuZW5hYmxlQ29sb3JGaWx0ZXI7CiAgICAgcHJlZmVyZW5jZXMuc2VsZWN0aW9uQWNyb3Nz
U2hhZG93Qm91bmRhcmllc0VuYWJsZWQgPSBvcHRpb25zLmVuYWJsZVNlbGVjdGlvbkFjcm9zc1No
YWRvd0JvdW5kYXJpZXM7CiAgICAgcHJlZmVyZW5jZXMud2ViR1BVRW5hYmxlZCA9IG9wdGlvbnMu
ZW5hYmxlV2ViR1BVOwpkaWZmIC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvd2luL0R1bXBS
ZW5kZXJUcmVlLmNwcCBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5j
cHAKaW5kZXggOTYzZmMwYTJmNGY5MmZiNzlmMDJkNjYzOTJlMDkyNDEwNDUyNmY1NC4uNjMyOWRj
NGFiODcyZDhhY2RlMDU0MjZlN2M0MTBmNDBkNDkwZjUzMiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAorKysgYi9Ub29scy9EdW1wUmVuZGVy
VHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwCkBAIC03OTYsNyArNzk2LDYgQEAgc3RhdGljIHZv
aWQgZW5hYmxlRXhwZXJpbWVudGFsRmVhdHVyZXMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNl
cykKICAgICBwcmVmc1ByaXZhdGUtPnNldFZpc3VhbFZpZXdwb3J0QVBJRW5hYmxlZChUUlVFKTsK
ICAgICBwcmVmc1ByaXZhdGUtPnNldENTU09NVmlld1Njcm9sbGluZ0FQSUVuYWJsZWQoVFJVRSk7
CiAgICAgcHJlZnNQcml2YXRlLT5zZXRSZXNpemVPYnNlcnZlckVuYWJsZWQoVFJVRSk7Ci0gICAg
cHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1By
aXZhdGUtPnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZChUUlVFKTsK
ICAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxl
ZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldENTU0N1c3RvbVByb3BlcnRpZXNBbmRWYWx1
ZXNFbmFibGVkKFRSVUUpOwpAQCAtOTA5LDcgKzkwOCw2IEBAIHN0YXRpYyB2b2lkIHNldFdlYlBy
ZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoSVdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNlcywgY29u
c3QKIHsKICAgICBDT01QdHI8SVdlYlByZWZlcmVuY2VzUHJpdmF0ZTg+IHByZWZzUHJpdmF0ZSB7
IFF1ZXJ5LCBwcmVmZXJlbmNlcyB9OwogCi0gICAgcHJlZnNQcml2YXRlLT5zZXRXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKG9wdGlvbnMuZW5hYmxlV2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldE1lbnVJdGVtRWxlbWVudEVuYWJsZWQo
b3B0aW9ucy5lbmFibGVNZW51SXRlbUVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0S2V5
Z2VuRWxlbWVudEVuYWJsZWQob3B0aW9ucy5lbmFibGVLZXlnZW5FbGVtZW50KTsKICAgICBwcmVm
c1ByaXZhdGUtPnNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkKG9wdGlvbnMuZW5hYmxlTW9k
ZXJuTWVkaWFDb250cm9scyk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggM2Y1NzE1ZmUwNTQ4MDA4MzdhZmYwMzJlNGRmOGEw
ZThmOTNjNWY4NC4uOGQ5OGU5M2ZlOWYyMTFlNmQxMzlhZTgyMDM0YTNjMjc1MjJmNTkzYSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDg5IEBACisyMDIwLTA5LTE3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3
ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGFuaW1hdGlv
bnMvbGVnYWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIGFuaW1h
dGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgIChwYXVz
ZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudCk6CisgICAgICAgICogaHR0cC90ZXN0cy9jb250ZW50
ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWw6CisgICAgICAgICogaW1w
b3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5z
aXRpb25zLWluc2lkZS1pZnJhbWUtaW5uZXIuaHRtbDogUmVtb3ZlZC4KKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2Ns
aXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xp
cC1wYXRoLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC10cmFu
c2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXByZW11bHRpcGxp
ZWQuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5n
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdl
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRt
bDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0
bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVu
Z3RoLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRy
YW5zZm9ybS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0
aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvZGVsYXkuaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMv
Zm9udC1mYW1pbHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvaW50
ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9sb25n
aGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21h
c2stdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRo
LWhlaWdodC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNo
ZWQtc2hhZG93LXN0eWxlcy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21pc21hdGNoZWQt
c2hhZG93LXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWl4ZWQtdHlw
ZS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0
aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJh
bnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5z
aXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRyYW5z
aXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpz
OgorICAgICAgICAqIHRyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvc3RlcHMtdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90ZXh0LWlu
ZGVudC10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9w
LWxpc3QtbWF0Y2guaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlz
dC1uby1tYXRjaC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2
ZW50LXJlbmRlcmluZy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0
LXRlc3QtdHJhbnNmb3JtLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1o
aXQtdGVzdC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24taW4tZGVsYXkt
cGhhc2UuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQt
d2l0aC1jb250ZW50Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9y
dGhhbmQtZGVsYXkuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWlu
Zy1mdW5jdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJv
bS1hdXRvLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVu
ZGVmaW5lZC5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1sOgor
ICAgICAgICAqIHRyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1z
dGFydC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9u
LWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25z
L2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9u
Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3Vz
cGVuc2lvbi5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNp
dGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMv
YWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVj
dC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1h
ZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWw6CisgICAgICAg
ICogd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1h
bmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3Nz
LWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5o
dG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbDoKKyAgICAg
ICAgKiB3ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2Nl
bGVyYXRlZC5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNy
YXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJh
bnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlv
bnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWw6
CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXBy
b3BlcnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbDoKKwogMjAyMC0wOS0x
NSAgU2VyZ2lvIFZpbGxhciBTZW5pbiAgPHN2aWxsYXJAaWdhbGlhLmNvbT4KIAogICAgICAgICBb
Y3NzLWZsZXhdIFJlbW92ZSBmbGV4Ym94J3Mgc3BlY2lmaWMgY29tcHV0ZVByZWZlcnJlZExvZ2lj
YWxXaWR0aHMoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9sZWdhY3ktZW5j
b2RpbmctdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2Fj
eS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA0MDJmOThlYTMxMTVhYTFkNzc2
ZmFmODhlZWRiOTFhMjg3NTFmOTczLi4wOGViYzQ0YzRkMTZkYTY5MjVkNjVlZGMxMzE5NGQ4YWQz
MjU2NDc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1lbmNvZGlu
Zy10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2Fj
eS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RSBodG1sPiA8IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPWZhbHNlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxo
dG1sPgogPGhlYWQ+CiAgICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvYW5pbWF0
aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL2Fu
aW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlvbi10ZXN0LWhlbHBlcnMuanMKaW5kZXggMThhNWEw
MTI5ZmY3ZjJhZTI0YmQzM2UzMTllNjA2ZjU3OWFhNDE5ZS4uNmRlMDhkMzg1NTE4NDQzNjcxMTdm
MDA3MjI1NzA5MDNlYWY1YmNmZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9y
ZXNvdXJjZXMvYW5pbWF0aW9uLXRlc3QtaGVscGVycy5qcworKysgYi9MYXlvdXRUZXN0cy9hbmlt
YXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC01MTQsMTEgKzUx
NCw2IEBAIGZ1bmN0aW9uIGNoZWNrRXhwZWN0ZWRWYWx1ZUNhbGxiYWNrKGV4cGVjdGVkLCBpbmRl
eCkKIAogZnVuY3Rpb24gcGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoYW5pbWF0aW9uTmFt
ZSwgdGltZSwgZWxlbWVudCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlbid0IG9wdGVkIGludG8gQ1NT
IEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucyBhcyBXZWIgQW5pbWF0aW9ucywgdXNlIHRo
ZSBpbnRlcm5hbCBBUEkuCi0gICAgaWYgKCdpbnRlcm5hbHMnIGluIHdpbmRvdyAmJiAhaW50ZXJu
YWxzLnNldHRpbmdzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIGludGVybmFscy5wYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChhbmltYXRp
b25OYW1lLCB0aW1lLCBlbGVtZW50KTsKLQotICAgIC8vIE90aGVyd2lzZSwgdXNlIHRoZSBXZWIg
QW5pbWF0aW9ucyBBUEkuCiAgICAgY29uc3QgYW5pbWF0aW9ucyA9IGVsZW1lbnQuZ2V0QW5pbWF0
aW9ucygpOwogICAgIGZvciAobGV0IGFuaW1hdGlvbiBvZiBhbmltYXRpb25zKSB7CiAgICAgICAg
IGlmIChhbmltYXRpb24gaW5zdGFuY2VvZiBDU1NBbmltYXRpb24gJiYgYW5pbWF0aW9uLmFuaW1h
dGlvbk5hbWUgPT0gYW5pbWF0aW9uTmFtZSkgewpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9jb250ZW50ZXh0ZW5zaW9ucy9jc3MtZGlzcGxheS1ub25lLWtleWZyYW1lLmh0bWwg
Yi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5v
bmUta2V5ZnJhbWUuaHRtbAppbmRleCBjMWM2ZmQ2NzJjNGQwZWY3OWY4YmU3YmE4ODE5NDlmYjI2
ZDk0Yzk5Li5hNWNlMzQyZDUyZWJmYjAwNWZkMDQxYjc4OGZiYjExNmIxNjdmNmRmIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5
LW5vbmUta2V5ZnJhbWUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRl
eHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRSBIVE1MPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9ZmFsc2UgXSAtLT4KKzwhRE9DVFlQRSBI
VE1MPgogPHNjcmlwdD4KIGlmICh3aW5kb3cudGVzdFJ1bm5lcikgewogICAgIHRlc3RSdW5uZXIu
ZHVtcEFzVGV4dCgpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJh
bnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1p
ZnJhbWUtaW5uZXIuaHRtbCBiL0xheW91dFRlc3RzL2ltcG9ydGVkL2JsaW5rL3RyYW5zaXRpb25z
L3Jlc291cmNlcy9vcGFjaXR5LXRyYW5zZm9ybS10cmFuc2l0aW9ucy1pbnNpZGUtaWZyYW1lLWlu
bmVyLmh0bWwKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGNiNDFjYmM4YmZjNzg0M2Mz
YmI5ODkzMmZjOWVjOTk3M2JjNTA3MjQuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvTGF5b3V0VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVz
b3VyY2VzL29wYWNpdHktdHJhbnNmb3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUtaW5uZXIu
aHRtbAorKysgL2Rldi9udWxsCkBAIC0xLDc3ICswLDAgQEAKLTwhRE9DVFlQRT4KLTxodG1sPgot
PGhlYWQ+Ci08c3R5bGU+Ci0gICAgI2JhY2tncm91bmQgewotICAgICAgICB3aWR0aDogMjAwcHg7
Ci0gICAgICAgIGhlaWdodDogMjAwcHg7Ci0gICAgICAgIGRpc3BsYXk6IGJsb2NrOwotICAgICAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsKLSAgICB9Ci0gICAgLm92ZXJsYXkgewotICAgICAg
ICB3aWR0aDogNTBweDsKLSAgICAgICAgaGVpZ2h0OiA1MHB4OwotICAgICAgICBiYWNrZ3JvdW5k
LWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDEpOwotICAgICAgICAtd2Via2l0LXRyYW5zaXRp
b246IG9wYWNpdHkgMXM7Ci0gICAgfQotCi0gICAgI3BvcHVwIHsKLSAgICAgICAgd2lkdGg6IDIw
cHg7Ci0gICAgICAgIGhlaWdodDogMjBweDsKLSAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVk
OwotICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7Ci0gICAgICAgIC13ZWJraXQtdHJhbnNpdGlv
bjogLXdlYmtpdC10cmFuc2Zvcm0gMXM7Ci0gICAgfQotCi0gICAgLnRyYW5zcGFyZW50IHsKLSAg
ICAgICAgb3BhY2l0eTogMDsKLSAgICB9Ci0KLSAgICBbaGlkZGVuXSB7Ci0gICAgICAgIGRpc3Bs
YXk6IG5vbmU7Ci0gICAgfQotCi0gICAgLm92ZXJsYXkudHJhbnNwYXJlbnQgLnBhZ2UgewotICAg
ICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMHB4KTsKLSAgICB9Ci0KLTwvc3R5
bGU+Ci08c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgY2hhcnNldD0idXRmLTgiPgotICAg
IGZ1bmN0aW9uIHJ1blRlc3QoKQotICAgIHsKLSAgICAgICAgdmFyIHNvbGlkX2NvbG9yX292ZXJs
YXkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgic29saWRfY29sb3Jfb3ZlcmxheSIpOwotICAg
ICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7Ci0KLSAg
ICAgICAgdmFyIHBvcHVwID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInBvcHVwIik7Ci0gICAg
ICAgIHBvcHVwLnJlbW92ZUF0dHJpYnV0ZSgnaGlkZGVuJyk7Ci0KLSAgICAgICAgLy8gTk9URTog
VGhpcyBpcyBhIGhhY2t5IHdheSB0byBmb3JjZSB0aGUgY29udGFpbmVyIHRvIGxheW91dCB3aGlj
aAotICAgICAgICAvLyB3aWxsIGFsbG93IHVzIHRvIHRyaWdnZXIgdGhlIHdlYmtpdCB0cmFuc2l0
aW9uLgotICAgICAgICAvLyBTZWUgY3JidWcuY29tLzMyNDY4NQotICAgICAgICBzb2xpZF9jb2xv
cl9vdmVybGF5LnNjcm9sbFRvcDsKLSAgICAgICAgc29saWRfY29sb3Jfb3ZlcmxheS5jbGFzc0xp
c3QucmVtb3ZlKCd0cmFuc3BhcmVudCcpOwotCi0gICAgICAgIC8vIGR1bXAgdGhlIHBpeGVsIGlu
IHRoZSBtaWRkbGUgb2YgdGhlIHRyYW5zaXRpb24KLSAgICAgICAgaWYgKHdpbmRvdy5pbnRlcm5h
bHMpIHsKLSAgICAgICAgICAgIHdpbmRvdy5pbnRlcm5hbHMuZm9yY2VDb21wb3NpdGluZ1VwZGF0
ZShkb2N1bWVudCk7Ci0gICAgICAgICAgICB3aW5kb3cuaW50ZXJuYWxzLnBhdXNlQW5pbWF0aW9u
cygwLjUpOwotICAgICAgICB9Ci0gICAgICAgIHRyaWdnZXJQaXhlbFJlc3VsdHMoKTsKLSAgICB9
Ci0KLSAgICBmdW5jdGlvbiB0cmlnZ2VyUGl4ZWxSZXN1bHRzKCkKLSAgICB7Ci0gICAgICAgIHBh
cmVudC5wb3N0TWVzc2FnZSgiVHJpZ2dlclBpeGVsUmVzdWx0cyIsICcqJyk7Ci0gICAgfQotCi0g
ICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLCBydW5UZXN0LCBmYWxzZSk7Ci08L3Nj
cmlwdD4KLTwvaGVhZD4KLTxib2R5PgotPGRpdiBpZD0iYmFja2dyb3VuZCI+Ci0gICAgPGRpdiBp
ZD0ic29saWRfY29sb3Jfb3ZlcmxheSIgY2xhc3M9Im92ZXJsYXkgdHJhbnNwYXJlbnQiIGhpZGRl
bj10cnVlPgotICAgICAgICA8ZGl2IGlkPSJwb3B1cCIgY2xhc3M9InBhZ2UiIGhpZGRlbj10cnVl
PjwvZGl2PgotICAgIDwvZGl2PgotPC9kaXY+Ci08L2JvZHk+Ci08L2h0bWw+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25z
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5z
aXRpb25zLmh0bWwKaW5kZXggNjAxY2Q1YTg3ZjIwNDEwNjJmMWE5ZDA5ODAwOWM1NDdmNTJmMzQ1
ZS4uZDkxNGZjYmJlODFkNDdjZGJiMWFlZWJhY2I3OTVhMzc5MzFhNGExYiAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJh
bnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBhODM3
ZTA1N2RiYzExOGM3NGFiYmI2MDNlZWM1NTZlN2M4ODdlNWE4Li5iYTQwMGNhYzllYmZlMWNhMTBl
MjkwYTc5OGU5OWQ3MmIzNDg4MGJhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRp
b25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMu
aHRtbAppbmRleCA4OTdjYjQ3ODkwZWNmNDhlMWZkMDA1ODhkNGI4OGM5MTcyYjI2MTAzLi5hNWJm
YTI3ZDNhZDMyMTk5MjA4OTIxNjE1MzBiNWQ3M2UxOWQ1Njk2IDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
IGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9ib3JkZXItcmFkaXVzLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2JvcmRlci1yYWRpdXMtdHJhbnNpdGlvbi5odG1sCmluZGV4IGI4YTNmYjUzZTdiZDZiYjA2
ZDE5OWQ5NTVlNDAzYzkxMzcwN2Q1ODkuLjU2M2JhOWM4ZmY0ZjhhYzJkYjNkNTE0YWIxYjM2MTYy
NGNjZTMzMGMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1yYWRp
dXMtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1y
YWRpdXMtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC1wYXRoLXRyYW5zaXRpb25z
Lmh0bWwKaW5kZXggZmYyM2ZhMDQ1MTIzZWQzMTA1N2U4MjdkNzFhYWRjOTg4ZDIxMmQ3OC4uYzFm
YWE1Y2Y0MjEyMTgwMzViNDEwZTJhZWMyYmQ2MjNiNzQwYTc2ZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2NsaXAtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY2xpcC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKaW5kZXggYjU1ZWRmYjdlYTg0
NTU1ZDhhYzQ0YmNhZmZjYTg0MGM3NTc4ZWY1Ni4uNWU2NjQ0YTg4NGZjY2Q2MDdiYjc2MGIxOThk
OTkwZjcxZTI5YWZkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1w
YXRoLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1w
YXRoLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFk
PgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC10cmFuc2l0aW9uLmh0
bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbAppbmRleCAz
YzdlMjlmMTk3MDEyZGZkZWE0MzA0M2NjMDQyYTcyMWRlMDgxM2UxLi5mZGUxZjE3M2FiYzk2Yjkx
YWE0NmJlZjk3YThmOTA5ZWNmN2QwMWI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
bGlwLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFs
bC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1hbGwuaHRt
bAppbmRleCAzM2M1OTgwZTY4N2FiM2UwMmU3ZTNmMjU3NzZjODczZmQ1ZGU4YWI5Li5hNDkyZTcx
MzM5NDQwMGMyNmQzNDdlODhhZTFkMTNjMzE3ZTNkYzdmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFu
c2l0aW9uLXByZW11bHRpcGxpZWQuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9y
LXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCmluZGV4IGM3M2ZkNGFhODNjZmFkOTViNTBi
NmU2MzU5MWU5YWU2Nzk4OTU2ZGQuLjU3YzYzZWM5YThjMWFlMDdkYWQ4YzM3ODVkZjNiODE0NGI5
MjhmMjAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRp
b24tcHJlbXVsdGlwbGllZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9y
LXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRy
YW5zaXRpb24tcm91bmRpbmcuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRy
YW5zaXRpb24tcm91bmRpbmcuaHRtbAppbmRleCA2ZTc1NmJmMzM3ODNmZDcyMWYzM2E2N2M4ZmJk
NmYyOGYxNTVlNWIwLi5jYWFhMTE1NzlmOWIwZGY4NmUwODE5NGMwZDkwZjFkZGY4YjUwMzE3IDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5k
aW5nLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1y
b3VuZGluZy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1iYWNrZ3JvdW5kLWltYWdlLmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbApp
bmRleCA3NmU5ZGIyNmEzYjE0ZDRhMzhhM2NkYWYwMGVmNjZiZmY4ZWRkYjY0Li5iOGQ3MGEyNzkz
NTE1NWJlYWIyOGU3ODVjYWVmOGYyNTM4ZGM5NTZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
cm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sCmluZGV4IDRkYmRmN2E2YjEzZjhhZWUwM2E3Nzg5
YjM2OGMxMDhlM2QxYTRkZGYuLjg3ZGMwMDdlZGY1ZmI3NmZmMTQ1MWNhOWFmZjhjYjljYWFhNDE4
OTUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVy
LWltYWdlLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3Jk
ZXItaW1hZ2UuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwK
aW5kZXggYjc2ZWI2NWFlZDMzYzg0NmM0ZGNlYzQ1Yjk3ZDU0MWEwMzhjZTdiYS4uNzQ3NGY2NmQx
MTZjNmYyYTIzYTJhZjYzM2E1MDQ0ZTI4YzJiNzY3MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
ZG9jdHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIg
dmFsdWUgb3ZlcmZsb3c6IENvbG9yczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctbGVuZ3RoLmh0bWwKaW5kZXggNjZm
ZWJhY2ZmOTdlNDJhNjczYjFkYTU5YWFjMGY2MzcxZjllYzVhZC4uMWI1ZGRhZmRmNjQ4ZDlmMTBm
MGVjOGYyMGQ5NDliYTM2MTZmZTg0ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LWxlbmd0aC5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbApAQCAtMSw0ICsxLDQg
QEAKLTwhZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBl
IGh0bWw+CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBv
dmVyZmxvdzogTGVuZ3RoczwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWwKaW5kZXggYTk5YTRkYmE3
MzZhZmIyZjk1ODA1YWU4ODg1ZTAyYmUwYzBhNzNmOC4uMGJjY2E4OGU4NzE3ZGFkZjU5ZTNjZWJk
MDY5MTljZWFjNGEyYTc2ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Vi
aWMtYmV6aWVyLW92ZXJmbG93LXNoYWRvdy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zaGFkb3cuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
ZG9jdHlwZSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+
CiA8aHRtbD4KICAgPGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxv
dzogU2hhZG93czwvdGl0bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbAppbmRleCA3MjAyNDY4
MWIzYzNhN2NkZDE5YTI4ZjRjMjgzOGU2MDRhZDViN2NiLi4zNTU1MzAzOWZjOWRhOGRiNmVlYTMy
OTU2ZDkxYWMxZTY0MmNhMWQzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctc3ZnLWxlbmd0aC5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmctbGVuZ3RoLmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IWRvY3R5cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9j
dHlwZSBodG1sPgogPGh0bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFs
dWUgb3ZlcmZsb3c6IFNWRyBMZW5ndGhzPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy10cmFuc2Zvcm0uaHRtbApp
bmRleCA2NjA5NzI1MzRkYzY2MmJjM2I4MGZmNzY0OTM2ZmZiNGFkYTVmMjY4Li42NTI5MTEyYjEx
ZDY0ZjFlYzQwYWJhYzU3NWE2ODY4MTU0MDVkNTc1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8dGl0bGU+Y3ViaWMt
YmV6aWVyIHZhbHVlIG92ZXJmbG93OiBUcmFuc2Zvcm1zPC90aXRsZT4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDc5
ODNmZGNlZDIyNjM3MGUxYTM0NDkwMTNlMGM5ODVlMGQ2ZTI4NmMuLjM1MDg3YzM2NGEzZjFjOThl
NDQwZDlhNzk5ZTBiZGQwY2JmMDAwYWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2RlZmF1bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWxh
eS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbAppbmRleCA5OWMzMWVh
ODdkYTA5MWQ1ZDY3ZGE1OWYxMWIzZjI2OTNhMGZmNGMwLi4zYTAyYjYyNzk4MTA1YTM2ZDYwZWVh
MTgyMWFmNzAzODBlY2NlYTJkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9k
ZWxheS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4K
ICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFu
c2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IDlmYzQ2NjAzN2E1Mzk1MmZkYjkwMGRjMGU5NjNmNDM1MmU5MTY5NDUuLjYxZjQ1
NmFjZTkxNzMwZTdiMjRjZmY2YzU0MThmNzIwNWQ3NTNjZDcgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiA8aHRtbD4KIDxoZWFk
PgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1p
bHktZHVyaW5nLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQt
ZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2RjZDIwZjE1NzQ5MzdkOWFiY2I3
NjZmMmU5MjA3ZGM3OGZkY2M3OC4uMDNmOTUyZGExYjczM2U4NDk2OTE0YzVhMTc2OWE4MDE3YmM2
YzhmZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVy
aW5nLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZh
bWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0
bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+
CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1p
bmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmct
ZnVuY3Rpb24uaHRtbAppbmRleCAzMGZlY2M2ZDUxZDRjMDZlNjRlYzdhZWYwMDA5ODUwNDZiYjVm
MDhhLi5lOGIxNjIxMGVhNzY1N2U0NzBiMGRhMjgxNDAzOWY4NTUyMmE0MzA5IDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCkBA
IC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBl
eHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+
Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5odG1sCmluZGV4IDdk
NDczZTkxMjE0NjU4M2Y4MTEwOTNkZTI5N2JlM2FhZjUzOGJiNDguLjllNjZjZDRmOTI2MTRlMWU1
MDdmMmNmYTY0MjNmN2QyZTYxMDA5ZGQgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2ludGVycnVwdGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0
bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9sb25naGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5kLWluaXRpYWwuaHRtbAppbmRleCA2MDk5MzNmNjA0
YTcxNTI4Y2VmNDMxYTdiYTQ5NThiYTcyZTQ3OTVmLi4yMDJlNjRkNjQ0ZGY1YzhkNWY1ZTRmOTkx
ODdiNDc3YTNhOGZiZDFlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9sb25n
aGFuZC12cy1zaG9ydGhhbmQtaW5pdGlhbC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFsLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5z
aXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5zaXRpb25zLmh0
bWwKaW5kZXggYmM3YzcxODNlYWYzZjlkOWI0YzA2ODdkYmI5NzY0ZDNhOTcyZjUwOC4uMGMzZDM5
YWI5ZjIxYWQxZmIwOTc4NjJmMDNlZDEyZWU1ZmNhMTZiMyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVp
Z2h0LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdp
ZHRoLWhlaWdodC10cmFuc2l0aW9ucy5odG1sCmluZGV4IDEyMDQxMTdiY2MzMjBjMTJhODFlZTJi
ZWVlMjI4ZTQxMWY5OWI5YzcuLjlkZGYzOTM4YTI5YmYzZTEwYzhjOGI2Yjc0NmUzMWIwM2Q3NDI2
MGIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVp
Z2h0LXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWluLW1h
eC13aWR0aC1oZWlnaHQtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+
CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNo
ZWQtc2hhZG93LXN0eWxlcy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hl
ZC1zaGFkb3ctc3R5bGVzLmh0bWwKaW5kZXggZTJlNWNiMDcyOWQ4MTNkOTg0NjBiODk4NGE0MTIw
YjRmYjllZGUyNy4uODcyM2MyNzQxNjg4YmVkNDkwM2M3OGM4Mjk2ODRiNDVkNGNjNzYwMSAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVz
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5
bGVzLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRp
b25zLmh0bWwKaW5kZXggY2I2ZDM0ZDg0NzViZmE2MTEzNmIzNjMzOGJiYzc4N2UwZThlYzUwOC4u
Njg3ZDEwZjEyMDhhODM1Y2QyNWZlOTAwOWQ0NTM3ZDRhMDhjNjcwNCAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9u
cy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbWl4ZWQtdHlwZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bWl4ZWQtdHlwZS5odG1sCmluZGV4IDI0ZmIxMWZlZjRlMTg3MmYxNDJiMGY1NzJkZjU1MWMwNzM5
M2IxYmQuLjMzMzIzNjhkNmU0NDg1MjBmYjgxNjgzN2Q0OWY3Yzk3OGU0NDg5ZmEgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVkLXR5cGUuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPHN0
eWxlPgogI2JveCB7CiAgICAgd2lkdGg6IDEwJTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL21vdmUtYWZ0ZXItdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWwKaW5kZXggY2VkMmQ1YTIyMjI4MDcwMTdl
NTM2OWFkMDFlMTNkYjYxNWYzZTcyZi4uZGM0NDU4ZjJkNTI3Njc2YzhjZDczMmUwZTJiZWM5NjBl
ZDhiM2I2ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10
cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10
cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC1zaXpl
LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNr
Z3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCAyMTNlMjFhZGNlZDY2YTdhYWQ2N2Vj
OGI1Zjk1NjhjN2Y3YmVmZjI0Li4xNGQ3NTFjNjQ5NzMzYzFjMzBhMDdiZGM0ZmZiOGVlMzYxYzUy
MDI5IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3Jv
dW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9t
dWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxl
LWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211
bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiMjllZTczZDM1MGQ5NWIz
N2I3MjE3MTg2ZWFhOWJjMjkzMTgwNmM1Li41MDMwNjdjMTY0Y2E2MDc5NTdhZDU4ZjM2NmRmZmRh
Mjc0ZTc1ODU3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1i
YWNrZ3JvdW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
bXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFE
T0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4K
IDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFz
ay10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtbWFz
ay10cmFuc2l0aW9ucy5odG1sCmluZGV4IDM5MjNkOTNjNmQ4NDUzNGU1ZjdkNzhlYjlmM2UzNmFk
YTRmZDMwMmMuLjVjYmU2OWZjMDQ3NTcyZWFiZTYwYTA0ODdmMTUzNjVhNGNhOWE5MTkgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRp
b25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCmluZGV4
IDM0YTBhZDI2M2NhOWYxNThkNzQ5OTA1YTRjNWRmYzY1NTFlOTNlYjYuLjRhOWQ0ZWM1NjRmMzNj
NTU0NzMzMTdlMTE4ZjRmOTA3ZWNlNzUwODggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL211bHRpcGxlLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbmVn
YXRpdmUtZGVsYXkuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5
Lmh0bWwKaW5kZXggYzc1YmU3ZjNjYzZkNTkzY2ZkMTA2MmE3NzU2NTc2YjViYWE2YTZiNi4uZDMz
ZTRiNTc2MGY1NTNjN2NjZDcwYjdkNGM3ZDgzNjY1NTNkMWY0ZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1s
PgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbAppbmRleCBkODYzNzA1OWVmNzBmZTdhMjJl
YjBjZDIwOTU2ZTdhYmRkODc3MThlLi44NjJiYTAyYjE1ZjYyZWIzNDI4N2ZhNThmNDRjYjVlYjQ3
ZjljOWI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5z
aXRpb24temluZGV4Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10
cmFuc2l0aW9uLXppbmRleC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0
aW9uLXRlc3QtaGVscGVycy5qcyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Jlc291cmNlcy90
cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCA3ZTc5ZDBjOWUxYjQ5YThlNzgxNjkzZTg0
YmZmNDA5MTgzMjViZmM2Li5mMzU3MzFiNjVmYTRjNzUyZmQxMjYwMmQ3MDFmYzA5Yjg2MGQwN2Vh
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlv
bi10ZXN0LWhlbHBlcnMuanMKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2Vz
L3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzCkBAIC0zODEsMTQgKzM4MSw5IEBAIGNvbnN0IHBy
b3BlcnRpZXNSZXF1aXJpbmdQcmVmaXggPSBbIi13ZWJraXQtdGV4dC1zdHJva2UtY29sb3IiLCAi
LXdlYmtpdC10ZXh0LWZpCiAKIGZ1bmN0aW9uIHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVu
dCh0cmFuc2l0aW9uUHJvcGVydHksIHRpbWUsIGVsZW1lbnQpCiB7Ci0gICAgLy8gSWYgd2UgaGF2
ZW4ndCBvcHRlZCBpbnRvIENTUyBBbmltYXRpb25zIGFuZCBDU1MgVHJhbnNpdGlvbnMgYXMgV2Vi
IEFuaW1hdGlvbnMsIHVzZSB0aGUgaW50ZXJuYWwgQVBJLgotICAgIGlmICgnaW50ZXJuYWxzJyBp
biB3aW5kb3cgJiYgIWludGVybmFscy5zZXR0aW5ncy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBpbnRlcm5hbHMucGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25FbGVtZW50KHRyYW5zaXRpb25Qcm9wZXJ0eSwgdGltZSwgZWxlbWVudCk7Ci0KICAgICBp
ZiAodHJhbnNpdGlvblByb3BlcnR5LnN0YXJ0c1dpdGgocHJlZml4KSAmJiAhcHJvcGVydGllc1Jl
cXVpcmluZ1ByZWZpeC5pbmNsdWRlcyh0cmFuc2l0aW9uUHJvcGVydHkpKQogICAgICAgICB0cmFu
c2l0aW9uUHJvcGVydHkgPSB0cmFuc2l0aW9uUHJvcGVydHkuc3Vic3RyKHByZWZpeC5sZW5ndGgp
OwogCi0gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIFdlYiBBbmltYXRpb25zIEFQSS4KICAgICBj
b25zdCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zKCk7CiAgICAgZm9yIChsZXQg
YW5pbWF0aW9uIG9mIGFuaW1hdGlvbnMpIHsKICAgICAgICAgaWYgKGFuaW1hdGlvbiBpbnN0YW5j
ZW9mIENTU1RyYW5zaXRpb24gJiYgYW5pbWF0aW9uLnRyYW5zaXRpb25Qcm9wZXJ0eSA9PSB0cmFu
c2l0aW9uUHJvcGVydHkpIHsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3No
YXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3No
YXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbAppbmRleCA3MDg4MWZlOTAyMWM4OTUwMTEwNTNm
NDJmMWNiYmFhYzQzMjg2MjRkLi5hZWZjOWEwNTM4ZmViMDRmODNhZTE1ZTQ4YjI1MjM5OWRkODE2
NWYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRy
YW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lk
ZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXItdHJh
bnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC1ib3JkZXIt
dHJhbnNpdGlvbnMuaHRtbAppbmRleCAzNWM5ZTMyOTFmYWExMjYyMjJkNDQxMGUyYTJmZTNlNzQ0
OWU3ZjljLi5mYWE3NDVjMWIxZTdlMWEzOTFkNjI0Y2ViMWY1MTU0YzNkMDA4NzI4IDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25z
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFu
c2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Nob3J0aGFuZC10cmFuc2l0aW9ucy5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKaW5k
ZXggZDMyMmI0ZTFmNDFjNTVlMDRkMzA5OTM3ZmRkY2JiMTE2NWY5OTdjYy4uYjU1MWEyY2JjNzY0
YmNlMmVjZmRiNTcxNjJiNGExN2EyNGQzMTZkMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3Rl
cHMtdGltaW5nLWZ1bmN0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10
aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCAzZWU1NWUwMGE0Y2NjMjdkYTQ3Nzk1NTdjYTNmOTZm
ZTcwZWNiZmVmLi5iYjk2MmJjYjk3MDQzMjI5NjI5Yjg0YTkyZTRhMGNlMDU4MDE1NDFlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3N2Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCmluZGV4IDE0NWQ4M2Ew
MmIwMjJjNjFlNmZhODhkOTQ2NzAzZmJhYTRhYTE5NTEuLjAwNThhYjVkMTQxNmRhNGI3Y2RlYmJk
MmQxNGVhZDI4NjBmN2JjYmUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2
Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2
Zy1sYXlvdXQtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRp
b24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0
aW9uLmh0bWwKaW5kZXggM2ZjYWQzODgwNmNhNjAwN2JhNzhmNWYwYjQyMDI4MDE1NDIzYTY1Zi4u
NTc5N2U1ZWRlM2RlYWRkNzJkM2MzYWEzNTE1NmExMmExMDRjN2FhYiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiAgICAgPHN0eWxlPgpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbAppbmRleCA4ZjNkODJmNGU3
NWQzNGQ1YWI2ZmIzODdiNDNlZDhiMzViOGVjNGMxLi5hYTM5ODgwNzhmYzllZGNhNmUyMGUyMjU4
ZjEzZWM5ZTE5ZTlkZTc3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmct
dHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmctdHJhbnNp
dGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
CiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwKaW5kZXggNDc0NGI1ODVjZWVmYjgxNDVl
YjJlNDljNzk2MDFhNjE5MzFkZDFlMS4uMTZmOGFmMTg4MmE1YTc2Y2FkM2NmNzM1NDRhZjU5M2E5
ZjIwMDcxYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQt
dHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50
LXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10
ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiAgIDxzdHlsZT4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNo
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5o
dG1sCmluZGV4IDBmOWM0ODczNGRkZmVkY2Y2ZmNmZmI3ZTM5Nzg5MDU4YWViODE1NDIuLjBkM2Yz
M2VkMTUyNzkzNDAzMTU5YzMyMjYwZDJiMmZkODAyZDYzNWYgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKKysrIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0Y2guaHRtbAppbmRleCA4NmRlYTdlMGZh
NWViZDM1NjdiYzIxNDA4YzA3N2YyYTQ3MjgyYTI3Li5iZjZkMzBkZDNkYTZhMjhjNzgxNTgwZDY0
MWY3YmQyYzJlYzBhOTllIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2Zvcm0tb3AtbGlzdC1uby1tYXRjaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbAppbmRleCAwMDdjZThkZDA1ODUzNTY3
MjdkZTkxNjUxNWZiYjNjYzQyN2IxN2JkLi45NTlhZmQ2MGQwOWIwMTFiY2UzYWUxMDZkNjc5Y2E5
YjZkMGMzYTlmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9u
LWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbAppbmRleCAzZDMyOWY0NjAyMTk2YWEx
ZjQ5MzQwMDg4MmM4ODgwY2Y0NTgyMzdjLi5lZjgwNmM3MTFhMWUxNWFiZGQzNzk2YzVhNTg3MWI2
OTEyZGM3ZDM4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9u
LWhpdC10ZXN0LXRyYW5zZm9ybS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8
aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNp
dGlvbi1oaXQtdGVzdC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1o
aXQtdGVzdC5odG1sCmluZGV4IGQ5ZGY4NWMxNDQ3ZjA5YWRlNTJhYWE0MmIwMWYyMjM4Y2JjYmUz
YzcuLjgzYTYwYTZlMmU1NTNmMzdhN2Y1OWU2NzIxYjk4NWJlZDczYTAxNjUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QuaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwKQEAgLTEsNCAr
MSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1l
bnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9D
VFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sCmluZGV4IDkzZTA0ZjJhMzI4
ZmYyY2RhMTY1NmE0MzQ5MTA0ZjIxNDIxMDNhYjAuLmZjMmNlOTk1MTBhZGU3MmQ2Y2U4MTU2OTE3
NDViOTkwMDgwYTY4MmMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5z
aXRpb24taW4tZGVsYXktcGhhc2UuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90
cmFuc2l0aW9uLWluLWRlbGF5LXBoYXNlLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtp
dC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29u
dGVudC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50
LXdpdGgtY29udGVudC5odG1sCmluZGV4IDFmMDNlZWE3NzQ5NmY3YjczZmFlYTdmMmMwY2M3ZDY3
ZDg0YTJiYWIuLjNjNDcyOTQ5MTY3ZDY4MzIyYTI3MzcxZWEwNzFmMjc2MTFmNjUzNjkgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRo
LWNvbnRlbnQuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9u
LWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1k
ZWxheS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQt
ZGVsYXkuaHRtbAppbmRleCA2ODczMjI5ZDE0ZDc5NDYzY2UwZjQ0ZGY0NDkwYWI0OTg3ZGNiYzNj
Li5kZjA5ODlkOWY2NGZhN2RlNGU0ZWIzNTA4M2FlOGQ0NDliZWY0NmY2IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCisr
KyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5k
ZXggOTExNzQ5MmIwYmIzYTEyYjgxMDM3ZWQyMjlmYzU5ZTBiNmVjZmQ5OS4uMDUwYzUyZDMxNzFj
ODYyOTZmYzI3NjU1Y2IxMzQzYTU0NGYxOWJmNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxz
dHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8t
ZnJvbS1hdXRvLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZy
b20tYXV0by5odG1sCmluZGV4IDRlMzdlMTY3ZjQxZjEyM2JlZGVkYjAyODBlMjFiMDBjOTE2YjA4
ZWYuLmQ4NDU5YjcxZDRjODNhOWMzZDdlMzY5MTUzNmY1OGJhNjkwOTRiYTQgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbApA
QCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsg
ZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0t
PgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWwKaW5k
ZXggMTRlNzhjNTAxNjFkZTgyNDI2ZGFjMmY3OWY0NjQ2OGYwNDI0ZWNlMC4uNjI4Y2YyNjg1MmVh
YThmOTM1NjYyNGQ5MTE5YzZlODc4ZWJhZjc4OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLXVuZGVmaW5lZC5odG1sCisrKyBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy92aXNpdGVkLWxpbmstY29sb3IuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Zpc2l0ZWQtbGluay1jb2xvci5odG1sCmluZGV4IDJlYTQ0NmM2YjJmOTVhYTJjZjNkZWQz
NjY3NjFlNDA2NTgzNjJjMmUuLmIxODc4ZDMxOTA1MjE3NjhlNjNiYTVlNWFkN2M2ZDUzMmRlZTcz
ZTEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xv
ci5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1jb2xvci5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1s
PgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96
ZXJvLWR1cmF0aW9uLWluLWxpc3QuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8t
ZHVyYXRpb24taW4tbGlzdC5odG1sCmluZGV4IGU2NmFkZjNiMTkwYzllMGQ4NWVhNzgwMmMxZDk3
MWQzOGExY2ZlMmQuLmIyYmNiZjUyNTk3ZGRiM2Q2ZWRmZTg5MGNkZDYwNTZmNTBlMmQ3ZGIgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5o
dG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5u
ZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVl
IF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24td2l0aC1ub24temVyby1kZWxheS1z
dGFydC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5v
bi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKaW5kZXggNjY2MWY5MWE0MDlhOTFhYmQzYjljMDVlMTRi
YTQ3NDQxMDUzMjQ1MC4uNjA4ZTAwM2Y1YzBkZTdmNjMwMzU4YTZiMDQ3M2E0MzU5NTQ1YzIyNiAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi13aXRoLW5v
bi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVy
by1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9uZS5odG1s
IGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJy
dXB0aW9uLWRpc3BsYXktbm9uZS5odG1sCmluZGV4IDljN2ExM2I0NWI2NDUzYTg0NWQ1OGUyMDVj
OWI0ZTNlYzg1NDY1NGMuLmQxMTVjOTUxMTg0N2NjNWIxYThmNjg4NDk5MzU3ZTZlYjBhMjAwYmMg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0
aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJh
bmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlzcGxheS1ub25l
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJl
bW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNv
bXBsZXRpb24uaHRtbAppbmRleCBiMzc2NjgxN2NmNDBlM2Q5ZGFlNjVlNDM5Y2EyZGZmM2M2OWU1
YmI2Li5hMWM4NDhhM2ExNTZhMGEwNGMwMGRiM2Q5Mjc2NGI0ZDA3OWI2MTIzIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1yZW1vdmFs
LXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29t
cGxldGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1h
dGlvbi1zdXNwZW5zaW9uLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJh
dGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwKaW5kZXggMDY1NGE2OTVmNWIyNGJjNDJmY2E3
ZjFkMjM4MWRhMGY3MmFiNjg4Yy4uZWZhYTU0MzlkNGZiNzQwYWI1Yzc0MzEwZDE0NzY4ODgzYzM2
OGZlZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1h
bmltYXRpb24tc3VzcGVuc2lvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
YWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwg
Yi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVt
b3ZpbmctcHJvcGVydHkuaHRtbAppbmRleCBiZWYwODA4ZTk0N2M5NmEwNTRjMzE4YjkxZDU5YTUy
NDAyMWUzYjI3Li5mMzQwMWI2Y2U2NjBmYjYyMDdkOGI5MWYzYzUyNmViZjZjNmMwN2Q2IDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5zaXRpb24t
YnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2FjY2VsZXJhdGVkLXRyYW5zaXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbApAQCAtMSw0
ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJp
bWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFE
T0NUWVBFIGh0bWw+CiA8Ym9keT4KIDxzdHlsZT4KICAgICBkaXYgewpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWNsZWFy
aW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZl
Y3QuaHRtbAppbmRleCBiNjA1YzA4OTExYmE2OTMxYjBjZjM4MzViNzljY2IwYzRmZjUzNjc0Li45
ZGQ1NjE4YmI2NzUwMWVmOTA5ZjYzNzJkMWYxMTkxZjVhZWM5MjY3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJp
bmctY3NzLWFuaW1hdGlvbi1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1l
ZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04PgogPHRp
dGxlPkNyYXNoIGFjY2Vzc2luZyBhIENTU0FuaW1hdGlvbidzIGN1cnJlbnQgdGltZSBhZnRlciBz
ZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItZmlu
aXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmlt
YXRpb24tdGFyZ2V0LXJlbW92YWwuaHRtbAppbmRleCA1OGY2YzQ5YjljOGMwODJkZjhjZTkxNmQ4
YzYxNjhhMGQ4OThjZTNmLi40MzA2YTE5ZWJiZDNjY2Y4ZGU5OTFiNWM1ODMyYjRiMTNmN2QwYTFi
IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJyZW50
LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1sCisr
KyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRl
ci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBhY2Nlc3NpbmcgYSBD
U1NBbmltYXRpb24ncyBjdXJyZW50IHRpbWUgYWZ0ZXIgcmVtb3ZhbCBvZiBpdHMgdGFyZ2V0PC90
aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3Nz
LWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jh
c2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3Qt
dGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbAppbmRleCBkOTgw
ZDM1NjI4ZTRhYTM5YTE4MzQwMzVkNTdlNDdhZjBjZDFjYmI3Li42NmZiYTU1MmY4NWRkM2MyODE3
ZDcyMTE5ODM3NTYzMmI4ZDY5OTJlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1v
dmFsLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0
aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1s
CkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2Ut
YW5kLWdldC1rZXlmcmFtZXMtY3Jhc2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
Y3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFz
aC5odG1sCmluZGV4IDU2MDg3MjEzYTQ1ZWRkNDc2YTA4ZWQ5MzljYzE2YjA4ZjUxNGNjN2IuLjll
NTUzYmRmYmE0YmY2ZTVmMTExM2U4MTg5ZmMyYTAxMzc3NDE4NzYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1h
bmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvY3NzLWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1j
cmFzaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0eWxlPgogCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwKaW5kZXggODNmZTk1Y2E3
ZGYxNjYzYWQ1OTA4YWJlMDRhMzZiZjU3MWE1NTFhZS4uZTVmOTUyMDAwYzZhNGVlZTVlZmRiMjFh
YTZlN2U0NzdkNTliYmEwYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9j
c3MtYW5pbWF0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFu
aW1hdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0
LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0Zi04Pgog
PHRpdGxlPkNTUyBBbmltYXRpb25zPC90aXRsZT4KIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyIgbWVk
aWE9InNjcmVlbiI+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10
cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sIGIvTGF5b3V0VGVz
dHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJzYWwtYWNjZWxl
cmF0ZWQuaHRtbAppbmRleCAzMDc4M2E4YmZmMGJiMDFhNGVmYjQwNThiYWRjNzA5MThhMmU5NzBm
Li4wNGRiYWE1M2NhMWQyMzZmZDk4MGJjY2Q3MWNhOGI5YTNhZjkyODc3IDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFuc2l0aW9uLWluLWZsaWdodC1yZXZlcnNh
bC1hY2NlbGVyYXRlZC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLXRy
YW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPG1ldGEgY2hhcnNldD0idXRmLTgiPgogPHRpdGxlPlJldmVyc2FsIG9mIGFjY2Vs
ZXJhdGVkIGluLWZsaWdodCBDU1MgVHJhbnNpdGlvbnM8L3RpdGxlPgogPHN0eWxlIHR5cGU9InRl
eHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNoLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sCmluZGV4IDYwYWMzNjVmMzA1NjU0M2EzZjE4
NjU0YjlmN2MyZjNlMTI0N2M1NjIuLjBmNWZmYjNmMjcwODY3YjNhNjNlZTAzMWEzMjViYmFiYWE0
MTc3ZDMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJh
bWVzLWNyYXNoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlm
cmFtZXMtY3Jhc2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8aHRtbD4KIDxoZWFkPgogPHN0
eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxl
cmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1w
cm9wZXJ0eS5odG1sCmluZGV4IDRkYmY3MDZlNDE3NGYyOWFiMTk1YjhlMmZmNTYyYTlkMDkzN2Fm
N2EuLmZhM2M4NTVkYmNiMjZlOGQ5OTdjMTI1MjQyODgzMmM5MTExODdjOGYgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5zaXRpb24t
YnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25z
L3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBb
IGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAt
LT4KKzwhRE9DVFlQRSBodG1sPgogPGJvZHk+CiA8cHJlIGlkPSJyZXN1bHRzIj48L3ByZT4KIDxk
aXYgaWQ9InRhcmdldCIgc3R5bGU9InBvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwOyBsZWZ0OiAw
OyB3aWR0aDogMTAwcHg7IGhlaWdodDogMTAwcHg7IGJhY2tncm91bmQtY29sb3I6IGJsYWNrOyI+
PC9kaXY+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3Nz
LWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sIGIvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1hZnRlci1jbGVhcmluZy1l
ZmZlY3QuaHRtbAppbmRleCBiZDI0MDY4YmNjNDVkYzM4MjkwODg5ZmQ3YzNhMzQ2NGNmMjAxN2Vi
Li5mODBiMDQ3ZjI2NTZmZTU5MTg4MTViMDMyYzg3NTU0ODZlMDdiZmJhIDEwMDY0NAotLS0gYS9M
YXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi1ub25lLWFmdGVy
LWNsZWFyaW5nLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0
dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRsZT5DcmFzaCBzZXR0aW5n
IGEgQ1NTIEFuaW1hdGlvbiB0byAibm9uZSIgYWZ0ZXIgc2V0dGluZyBpdHMgZWZmZWN0IHRvIG51
bGw8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3BlcnR5LXZpYS1zdHlsZS1hZnRlci1j
bGVhcmluZy1lZmZlY3QuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1j
c3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZm
ZWN0Lmh0bWwKaW5kZXggNGIxNTA0YWJjYWQzZTdkYjA0MTNjZGRiZjMzMzYxZWE0OTQ1NGFmMS4u
OTMyYmM5MWE3NmVhMTU1ZjlhYjg2ZDhjOTA0ZDhmZWI1MzVjNzc2YiAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3Bl
cnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlh
LXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxt
ZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggc2V0dGluZyBhIENTU0FuaW1hdGlvbidz
IHByb3BlcnR5IHZpYSBzdHlsZSBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0
bGU+CiA8c3R5bGU+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409020</attachid>
            <date>2020-09-17 04:12:44 -0700</date>
            <delta_ts>2020-10-01 12:17:03 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216608-20200917131242.patch</filename>
            <type>text/plain</type>
            <size>533223</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3MTg0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNDM2MDcyNDVhYzdjZTNl
MGEyZGYzNjMwMzQzNTA5NDI4YmY0MmI0Yy4uMWM3YmUwYmQ5Njk4NDJiYWZjYzlmZDk4OWY4MDE5
NmVmZGVkNDkyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzMCBAQAorMjAyMC0wOS0xNyAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxl
Z2FjeSBhbmltYXRpb24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBIZWFkZXJzLmNtYWtlOgor
ICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIFdlYkNvcmUueGNvZGVwcm9qL3Byb2pl
Y3QucGJ4cHJvajoKKyAgICAgICAgKiBhbmltYXRpb24vQW5pbWF0YWJsZS5pZGw6CisgICAgICAg
ICogYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0Fu
aW1hdGlvblBsYXliYWNrRXZlbnQuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGw6CisgICAgICAgICogYW5pbWF0aW9uL0FuaW1hdGlvblRpbWVs
aW5lLmlkbDoKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbDoKKyAgICAgICAg
KiBhbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwOiBSZW5hbWVkIGZyb20gU291cmNl
L1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwLgorICAgICAg
ICAoV2ViQ29yZTo6UHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3I6OlByb3BlcnR5
V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKToKKyAgICAgICAgKiBhbmltYXRpb24vQ1NTUHJv
cGVydHlBbmltYXRpb24uaDogUmVuYW1lZCBmcm9tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmguCisgICAgICAgICogYW5pbWF0aW9uL0NTU1RyYW5z
aXRpb24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsOgor
ICAgICAgICAqIGFuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbDoKKyAgICAgICAgKiBhbmlt
YXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRp
b24uaWRsOgorICAgICAgICAqIGFuaW1hdGlvbi9XZWJBbmltYXRpb25UeXBlcy5oOgorICAgICAg
ICAqIGNzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6Y29tcHV0ZVJlbmRlclN0eWxlRm9yUHJvcGVydHkpOgorICAgICAgICAqIGRvbS9Eb2N1bWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkRvY3VtZW50OjpkaWRCZWNvbWVDdXJyZW50RG9jdW1lbnRJbkZyYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OkRvY3VtZW50Ojp3aWxsQmVSZW1vdmVkRnJvbUZyYW1lKToKKyAg
ICAgICAgKFdlYkNvcmU6OkRvY3VtZW50OjppbXBsaWNpdENsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkRvY3VtZW50OjpyZXN1bWUpOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnJlbW92ZWRGcm9tQW5jZXN0b3IpOgorICAgICAgICAqIGRv
bS9Qc2V1ZG9FbGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBzZXVkb0VsZW1lbnQ6OmNs
ZWFySG9zdEVsZW1lbnQpOgorICAgICAgICAqIGhpc3RvcnkvQ2FjaGVkRnJhbWUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q2FjaGVkRnJhbWU6OmRlc3Ryb3kpOgorICAgICAgICAqIHBhZ2UvRnJh
bWUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWU6OkZyYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpjbGVhclRpbWVycyk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMpOgorICAgICAgICAqIHBhZ2UvRnJhbWUuaDoK
KyAgICAgICAgKiBwYWdlL0ZyYW1lVmlldy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVZp
ZXc6OmRpZERlc3Ryb3lSZW5kZXJUcmVlKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlldzo6
dXBkYXRlTGF5b3V0QW5kU3R5bGVJZk5lZWRlZFJlY3Vyc2l2ZSk6CisgICAgICAgICogcGFnZS9G
cmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lVmlld0xh
eW91dENvbnRleHQ6OmxheW91dCk6CisgICAgICAgICogcGFnZS9QYWdlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlBhZ2U6OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZSk6CisgICAgICAgIChXZWJD
b3JlOjpQYWdlOjpzZXRJc1Zpc2libGVJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpQYWdl
OjpoaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvblN0YXRlQ2hhbmdlZCk6CisgICAgICAg
ICogcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmg6CisgICAgICAgIChXZWJDb3JlOjpSdW50
aW1lRW5hYmxlZEZlYXR1cmVzOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQuCisg
ICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjp3ZWJBbmltYXRpb25zRW5h
YmxlZCBjb25zdCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OndlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQgY29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHBhZ2UvYW5p
bWF0aW9uL0FuaW1hdGlvbkJhc2UuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvYW5pbWF0
aW9uL0FuaW1hdGlvbkJhc2UuaDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1hdGlvbi9D
U1NBbmltYXRpb25Db250cm9sbGVyLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBwYWdlL2FuaW1h
dGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFnZS9h
bmltYXRpb24vQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaDogUmVtb3ZlZC4KKyAgICAg
ICAgKiBwYWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uY3BwOiBSZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0NvbXBvc2l0ZUFuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNwcDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwYWdlL2FuaW1hdGlvbi9LZXlmcmFtZUFuaW1hdGlvbi5oOiBSZW1vdmVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
aXNLZXlmcmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZVRy
YW5zZm9ybUFuaW1hdGlvbnNGcm9tS2V5ZnJhbWVzKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVu
ZGVyRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJFbGVtZW50OjphbmltYXRl
ZFN0eWxlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6c3RhcnRUcmFuc2l0aW9uKTogRGVsZXRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlbmRlckVsZW1lbnQ6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVuZGVyRWxlbWVudDo6dHJhbnNpdGlvbkZpbmlzaGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmN1cnJlbnRUcmFuc2Zvcm0gY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVuZGVyTGF5ZXI6OmNhbGN1bGF0ZUNsaXBSZWN0cyBjb25zdCk6CisgICAgICAgICog
cmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5k
ZXJMYXllckJhY2tpbmc6OnVwZGF0ZUdlb21ldHJ5KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
ckxheWVyQmFja2luZzo6bm90aWZ5QW5pbWF0aW9uU3RhcnRlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJMYXllckJhY2tpbmc6OnN0YXJ0VHJhbnNpdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpSZW5kZXJMYXllckJhY2tpbmc6OnRyYW5zaXRpb25QYXVzZWQpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJCYWNraW5nOjp0cmFuc2l0aW9uRmluaXNo
ZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaDoK
KyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJDb21wb3NpdG9yLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJDaGFuZ2Vz
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6dXBkYXRlQ29tcG9z
aXRpbmdMYXllcnMpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpy
ZXF1aXJlc0NvbXBvc2l0aW5nRm9yQW5pbWF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlbmRlckxheWVyQ29tcG9zaXRvcjo6aXNSdW5uaW5nVHJhbnNmb3JtQW5pbWF0aW9uIGNvbnN0
KToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVsT2JqZWN0OjpzdGFydFRyYW5zaXRpb24pOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNp
dGlvblBhdXNlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJMYXllck1vZGVs
T2JqZWN0Ojp0cmFuc2l0aW9uRmluaXNoZWQpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmlu
Zy9SZW5kZXJMYXllck1vZGVsT2JqZWN0Lmg6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyT2JqZWN0OjpsZWdhY3lBbmltYXRpb24g
Y29uc3QpOiBEZWxldGVkLgorICAgICAgICAqIHJlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVl
VXBkYXRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUcmVlVXBkYXRlcjo6dGVhckRv
d25SZW5kZXJlcnMpOgorICAgICAgICAqIHN0eWxlL1N0eWxlQWRqdXN0ZXIuY3BwOgorICAgICAg
ICAqIHN0eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
OjpUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVudFVwZGF0ZSk6CisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFs
U2V0dGluZ3M6OndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQpOiBEZWxldGVkLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5oOgorICAgICAgICAqIHRlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5pZGw6CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjphbmltYXRpb25zQXJlU3VzcGVuZGVk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFs
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c3VzcGVuZEFuaW1hdGlvbnMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXN1bWVBbmltYXRpb25zIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25z
Rm9yRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6Om51bWJlck9mQW5pbWF0
aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cGF1c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudCk6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnBh
dXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudCk6IERlbGV0ZWQuCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAgICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisK
IDIwMjAtMDktMTUgIFNlcmdpbyBWaWxsYXIgU2VuaW4gIDxzdmlsbGFyQGlnYWxpYS5jb20+CiAK
ICAgICAgICAgW2Nzcy1mbGV4XSBSZW1vdmUgZmxleGJveCdzIHNwZWNpZmljIGNvbXB1dGVQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
IGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKaW5kZXggNmM4ZTE2NmNjYzYyZmI4OTVhNDg5NWVi
NmY4N2NhNjEzMGY1YTA0MC4uYjU0ZDdkODI4NjU1YzQwNzVkMzFjMGUwODg0ZTA2MDkxZTU2MmQ3
NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktp
dC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNyBAQAorMjAyMC0wOS0xNyAgQW50b2luZSBRdWludCAg
PGdyYW91dHNAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgdGhlIGxlZ2FjeSBhbmltYXRp
b24gY29kZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjE2NjA4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBTaGFyZWQvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbDoKKyAgICAgICAgKiBVSVBy
b2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHA6CisgICAgICAgIChXS1ByZWZlcmVuY2VzU2V0
V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAoV0tQcmVmZXJlbmNlc0dl
dFdlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKFdLUHJlZmVyZW5jZXNT
ZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KFdLUHJlZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUu
aDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW06CisgICAg
ICAgICgtW1dLUHJlZmVyZW5jZXMgX3NldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ6XSk6IERlbGV0ZWQuCisgICAgICAgICgtW1dLUHJlZmVyZW5jZXMgX3dlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWRdKTogRGVsZXRlZC4KKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL1dLUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9Jbmpl
Y3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVk
QnVuZGxlOjpvdmVycmlkZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcik6CisgICAgICAgIChX
ZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZCk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJLaXQ6OkluamVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAgKiBXZWJQcm9jZXNzL0luamVjdGVk
QnVuZGxlL0luamVjdGVkQnVuZGxlLmg6CisKIDIwMjAtMDktMTYgIFNhbSBXZWluaWcgIDx3ZWlu
aWdAYXBwbGUuY29tPgogCiAgICAgICAgIFdlYlByZWZlcmVuY2VzLnlhbWwgaXMgb3ZlcndoZWxt
aW5nLCB3aGF0IGlmIHdlIHNwbGl0IGl0IHVwIGEgYml0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L21hYy9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9DaGFuZ2VM
b2cKaW5kZXggZjRkYjBjMTFjOTZjMWE4ZThhNWNiMmJiMTQ5NzFhZjA5MmM5ODIyMy4uZGM2Mzcw
ZGQ4YThjN2IzOWQwNDkwNDJmNGVjMWYxMmRiNTVmMzhiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS9tYWMvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL0No
YW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA5LTE3ICBBbnRvaW5lIFF1aW50ICA8Z3Jh
b3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBj
b2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2
MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJQ
cmVmZXJlbmNlcy5tbToKKyAgICAgICAgKCtbV2ViUHJlZmVyZW5jZXMgaW5pdGlhbGl6ZV0pOgor
ICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyB3ZWJBbmltYXRpb25zRW5hYmxlZF0pOiBEZWxldGVk
LgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRXZWJBbmltYXRpb25zRW5hYmxlZDpdKTog
RGVsZXRlZC4KKyAgICAgICAgKC1bV2ViUHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZF0pOiBEZWxldGVkLgorICAgICAgICAoLVtXZWJQcmVmZXJlbmNlcyBzZXRX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOl0pOiBEZWxldGVkLgorICAgICAgICAq
IFdlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmg6CisgICAgICAgICogV2ViVmlldy9XZWJW
aWV3Lm1tOgorICAgICAgICAoLVtXZWJWaWV3IF9wcmVmZXJlbmNlc0NoYW5nZWQ6XSk6CisKIDIw
MjAtMDktMTYgIFNhbSBXZWluaWcgIDx3ZWluaWdAYXBwbGUuY29tPgogCiAgICAgICAgIFJlbW92
ZSBydW50aW1lIHNldHRpbmcgZm9yIGVuYWJsaW5nL2Rpc2FibGluZyBDU1Mgc2hhZG93IHBhcnRz
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cgYi9Tb3VyY2Uv
V2ViS2l0TGVnYWN5L3dpbi9DaGFuZ2VMb2cKaW5kZXggY2U4MWYwZGQzOTY5ZjE0ZDE2MDE5Zjhh
OWRmYTY4ZjY3OTQ1MjcyMi4uNzkzYzBiNjg3ZTQ1ODFmZDA5NzM0MDA1NDZmZjk4ZjZjN2JjM2Q2
MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0NoYW5nZUxvZwpAQCAtMSwzICsxLDMwIEBACisyMDIwLTA5
LTE3ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92
ZSB0aGUgbGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICAqIEludGVyZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGw6Cisg
ICAgICAgICogSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbDoKKyAgICAgICAg
KiBXZWJGcmFtZS5jcHA6CisgICAgICAgIChXZWJGcmFtZTo6cmVzdW1lQW5pbWF0aW9ucyk6IERl
bGV0ZWQuCisgICAgICAgIChXZWJGcmFtZTo6c3VzcGVuZEFuaW1hdGlvbnMpOiBEZWxldGVkLgor
ICAgICAgICAoV2ViRnJhbWU6OnBhdXNlQW5pbWF0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKFdl
YkZyYW1lOjpwYXVzZVRyYW5zaXRpb24pOiBEZWxldGVkLgorICAgICAgICAoV2ViRnJhbWU6Om51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyk6IERlbGV0ZWQuCisgICAgICAgICogV2ViRnJhbWUuaDoK
KyAgICAgICAgKiBXZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaDoKKyAgICAgICAgKiBXZWJQcmVm
ZXJlbmNlcy5jcHA6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1bHRT
ZXR0aW5ncyk6CisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJQcmVmZXJlbmNlczo6c2V0V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJQ
cmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQpOiBEZWxldGVkLgorICAgICAgICAo
V2ViUHJlZmVyZW5jZXM6OndlYkFuaW1hdGlvbnNFbmFibGVkKTogRGVsZXRlZC4KKyAgICAgICAg
KiBXZWJQcmVmZXJlbmNlcy5oOgorICAgICAgICAqIFdlYlZpZXcuY3BwOgorICAgICAgICAoV2Vi
Vmlldzo6bm90aWZ5UHJlZmVyZW5jZXNDaGFuZ2VkKToKKwogMjAyMC0wOS0xNiAgU2FtIFdlaW5p
ZyAgPHdlaW5pZ0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHJ1bnRpbWUgc2V0dGluZyBm
b3IgZW5hYmxpbmcvZGlzYWJsaW5nIHRoZSBpc1NlY3VyZUNvbnRleHQgQVBJPwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxp
c3RzLnR4dAppbmRleCA0Y2IzNWM5N2ZiNTBlOGUzNjdlZTQ4NjZhNTZkYzI3NTg5OGUzZTFiLi5h
NDMwY2Y3MGMxMjJmYWViYTA1YWVkYTViN2RlOTM0NzkyMmYwZTE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMTIxLDcgKzEyMSw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJF
Q1RPUklFUwogICAgICIke1dFQkNPUkVfRElSfS9sb2FkZXIvaWNvbiIKICAgICAiJHtXRUJDT1JF
X0RJUn0vbWF0aG1sIgogICAgICIke1dFQkNPUkVfRElSfS9wYWdlIgotICAgICIke1dFQkNPUkVf
RElSfS9wYWdlL2FuaW1hdGlvbiIKICAgICAiJHtXRUJDT1JFX0RJUn0vcGFnZS9jc3AiCiAgICAg
IiR7V0VCQ09SRV9ESVJ9L3BhZ2Uvc2Nyb2xsaW5nIgogICAgICIke1dFQkNPUkVfRElSfS9wbGF0
Zm9ybSIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UgYi9Tb3VyY2Uv
V2ViQ29yZS9IZWFkZXJzLmNtYWtlCmluZGV4IGNjOGU3YWNmM2I5MDg0Nzk2ZDViNmQzNzVhMDg4
NTYyMzhiN2FiYmUuLjQ2YjY1ZDBlYTViNDU2N2E0YWM2NzU5NWY3Yzk5NGU1MTc2MmQyYmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0hlYWRlcnMuY21ha2UKKysrIGIvU291cmNlL1dlYkNv
cmUvSGVhZGVycy5jbWFrZQpAQCAtODkwLDkgKzg5MCw2IEBAIHNldChXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKICAgICBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5oCiAgICAg
cGFnZS9XaW5kb3dGZWF0dXJlcy5oCiAKLSAgICBwYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNl
LmgKLSAgICBwYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKLQogICAgIHBh
Z2UvY3NwL0NvbnRlbnRTZWN1cml0eVBvbGljeS5oCiAgICAgcGFnZS9jc3AvQ29udGVudFNlY3Vy
aXR5UG9saWN5Q2xpZW50LmgKICAgICBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lIYXNo
LmgKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL1dlYkNv
cmUvU291cmNlcy50eHQKaW5kZXggN2ZkMWE0N2M2NTAzODJjYzdlOWViMGEwZDZhYmViZjczNmI0
NmRiNS4uYzBmZTk0MDFjMDNmMDhlMWEwYzEzZmExMjQ3ZjcwYzJmODQyYjZmNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL1dlYkNvcmUvU291cmNl
cy50eHQKQEAgLTQ0MSw2ICs0NDEsNyBAQCBhbmltYXRpb24vQW5pbWF0aW9uRXZlbnRCYXNlLmNw
cAogYW5pbWF0aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuY3BwCiBhbmltYXRpb24vQW5pbWF0
aW9uVGltZWxpbmUuY3BwCiBhbmltYXRpb24vQ1NTQW5pbWF0aW9uLmNwcAorYW5pbWF0aW9uL0NT
U1Byb3BlcnR5QW5pbWF0aW9uLmNwcAogYW5pbWF0aW9uL0NTU1RyYW5zaXRpb24uY3BwCiBhbmlt
YXRpb24vRGVjbGFyYXRpdmVBbmltYXRpb24uY3BwCiBhbmltYXRpb24vRG9jdW1lbnRUaW1lbGlu
ZS5jcHAKQEAgLTE2NzYsMTIgKzE2NzcsNiBAQCBwYWdlL1doZWVsRXZlbnRUZXN0TW9uaXRvci5j
cHAKIHBhZ2UvV2luZG93RmVhdHVyZXMuY3BwCiBwYWdlL1dpbmRvd0ZvY3VzQWxsb3dlZEluZGlj
YXRvci5jcHAKIHBhZ2UvV29ya2VyTmF2aWdhdG9yLmNwcAotcGFnZS9hbmltYXRpb24vQW5pbWF0
aW9uQmFzZS5jcHAKLXBhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCi1w
YWdlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0Nv
bXBvc2l0ZUFuaW1hdGlvbi5jcHAKLXBhZ2UvYW5pbWF0aW9uL0ltcGxpY2l0QW5pbWF0aW9uLmNw
cAotcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3BwCiBwYWdlL2NzcC9Db250ZW50
U2VjdXJpdHlQb2xpY3kuY3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lDbGllbnQu
Y3BwCiBwYWdlL2NzcC9Db250ZW50U2VjdXJpdHlQb2xpY3lEaXJlY3RpdmUuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9T
b3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGZi
YTIwMjcwMzNjOGU2ZjIyNTdjZDVhYjVjMTkxOTg2MWRjYzhjNi4uOTlhNzdkNzZiOGU5ZmQ2N2Y5
OTIwMWExYTc5ZTA5ZmY5YWNjZGQ5ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCisrKyBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpAQCAtMjc2LDcgKzI3Niw2IEBACiAJCTBGMTE3ODE4
MjJFM0M0N0YwMDhCRDU3MCAvKiBGcmFtZUlkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTE3ODE2MjJFM0M0N0UwMDhCRDU3MCAvKiBG
cmFtZUlkZW50aWZpZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjExQTU0RjBGMzkyMzMxMDBDMzc4ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5m
by5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxMUE1
NEUwRjM5MjMzMTAwQzM3ODg0IC8qIFJlbmRlclNlbGVjdGlvbkluZm8uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjEzMTYzRTE2RUQwQ0M4MDAz
NUNDMDQgLyogUGxhdGZvcm1DQUZpbHRlcnMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNB
RmlsdGVycy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
Ci0JCTBGMTVEQThBMEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJp
dmF0ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYx
NURBODkwRjNBQUVFNzAwMDBDRTQ3IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgg
Ki87IH07CiAJCTBGMTVFRDVDMUI3RUM3QzUwMEVEREZFQiAvKiBXaWxsQ2hhbmdlRGF0YS5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxNUVENUExQjdF
QzdDNTAwRURERkVCIC8qIFdpbGxDaGFuZ2VEYXRhLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYxNzc0ODAxMzc4Qjc3MjAwOURBNzZBIC8qIFNj
cm9sbEFuaW1hdG9ySU9TLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjE3NzQ3RTEzNzhCNzcxMDA5REE3NkEgLyogU2Nyb2xsQW5pbWF0b3JJT1MuaCAq
LzsgfTsKIAkJMEYxQTBDMzgyMjlBNDgxODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYxQTBDMzYyMjlBNDgx
ODAwRDM3QURCIC8qIFZlbG9jaXR5RGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CkBAIC05MTUsMTEgKzkxNCw2IEBACiAJCTMxNkRFNzAyMUU4M0FF
MUQwMDg0QzI2MSAvKiBSVENEYXRhQ2hhbm5lbFN0YXRlLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZERTcwMTFFODNBRTFEMDA4NEMyNjEgLyogUlRD
RGF0YUNoYW5uZWxTdGF0ZS5oICovOyB9OwogCQkzMTZGRTA3MjBFNkNDQkVFMDBCRjYwODggLyog
SlNDU1NLZXlmcmFtZVJ1bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxNkZFMDZFMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tleWZyYW1lUnVsZS5o
ICovOyB9OwogCQkzMTZGRTA3NDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTA3
MDBFNkNDQkVFMDBCRjYwODggLyogSlNDU1NLZXlmcmFtZXNSdWxlLmggKi87IH07Ci0JCTMxNkZF
MTEyMEU2RTFEQTcwMEJGNjA4OCAvKiBBbmltYXRpb25CYXNlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTEwODBFNkUxREE3MDBCRjYwODggLyog
QW5pbWF0aW9uQmFzZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07Ci0JCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9s
bGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZG
RTEwQTBFNkUxREE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07Ci0JCTMxNkZFMTE2MEU2RTFE
QTcwMEJGNjA4OCAvKiBDb21wb3NpdGVBbmltYXRpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMxNkZFMTBDMEU2RTFEQTcwMEJGNjA4OCAvKiBDb21w
b3NpdGVBbmltYXRpb24uaCAqLzsgfTsKLQkJMzE2RkUxMTgwRTZFMURBNzAwQkY2MDg4IC8qIElt
cGxpY2l0QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAq
LzsgfTsKLQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAzMTZGRTExMDBF
NkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRpb24uaCAqLzsgfTsKIAkJMzE3NDFBQUQx
NjYzNjYwOTAwOEE1QjdFIC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMzE3NDFBQUIxNjYzNUU0NTAwOEE1QjdF
IC8qIFNpbXVsYXRlZENsaWNrT3B0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTMxN0QzRkYzMjE1NTk5RjQwMDM0RTNCOSAvKiBQb2ludGVy
RXZlbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDMx
N0QzRkYyMjE1NTk5RTMwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkzMTgxNUEzMTFGOUE2QzhGMDBGQ0JG
ODkgLyogSW1hZ2VCaXRtYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDMxRDI2QkJGMUY4NkQxODkwMDhGRjI1NSAvKiBJbWFnZUJpdG1hcC5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0yMTU4LDYgKzIx
NTIsNyBAQAogCQk3MUUyQzQyNjIxQzkzNTI4MDAyNEY4QzggLyogQW5pbWF0aW9uRWZmZWN0UGhh
c2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDcxRTJD
NDI0MjFDOTM1MUQwMDI0RjhDOCAvKiBBbmltYXRpb25FZmZlY3RQaGFzZS5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcxRUFEQ0Q4MjIwODdFNzIw
MDY1QTQ1RiAvKiBQb2ludGVySUQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDcxRUFEQ0Q2MjIwODdFNkQwMDY1QTQ1RiAvKiBQb2ludGVySUQuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MUVGQ0VEQzIw
MkIzOEE5MDBEN0M0MTEgLyogQW5pbWF0aW9uRWZmZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUVGQ0VENzIwMkIzODhEMDBEN0M0MTEgLyogQW5p
bWF0aW9uRWZmZWN0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKKwkJNzFGMDVGODAyNTEyNDQyRTAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9u
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3MUYwNUY3
RTI1MTI0NDBDMDA3MUU2OTMgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCAqLzsgc2V0dGluZ3Mg
PSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk3MjE0NDMzMzIyM0VDOEIwMDBG
MTJGRjcgLyogU1ZHUHJvcGVydHkuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDU1RUU1MzYzMjIzQjJBMjQwMEZCQTk0NCAvKiBTVkdQcm9wZXJ0eS5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTcyMTQ0MzM0
MjIzRUM5MTYwMEYxMkZGNyAvKiBTVkdQcm9wZXJ0eU93bmVyLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA1NUVFNTM2MDIyM0IyQTIxMDBGQkE5NDQgLyog
U1ZHUHJvcGVydHlPd25lci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTcyMjgzRjBFMjMwQjI2OEMwMEY1RDgyOCAvKiBJbWFnZVBhaW50aW5nT3B0
aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzJD
MThBM0YyMzBCMDRCNzAwNjg0N0M3IC8qIEltYWdlUGFpbnRpbmdPcHRpb25zLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxOTQsNyArMjE4OSw2
IEBACiAJCTc3RDUxMDFDMUVENzIyQkYwMERBNEM4NyAvKiBKU0NyZWRlbnRpYWxzQ29udGFpbmVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA3N0Q1MTAx
QjFFRDcyMkI1MDBEQTRDODcgLyogSlNDcmVkZW50aWFsc0NvbnRhaW5lci5oICovOyB9OwogCQk3
N0Q1MTAyNTFFRDc0QjU4MDBEQTRDODcgLyogSlNOYXZpZ2F0b3JDcmVkZW50aWFscy5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdENTEwMjQxRUQ3NEI1
NTAwREE0Qzg3IC8qIEpTTmF2aWdhdG9yQ3JlZGVudGlhbHMuaCAqLzsgfTsKIAkJNzdFRjYyRjQx
MkY5REI3NDAwQzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNzdFRjYyRjIxMkY5REI3NDAw
Qzc3QkQyIC8qIEpTV2ViR0xWZXJ0ZXhBcnJheU9iamVjdE9FUy5oICovOyB9OwotCQk3OEQwMkJD
NjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJvcGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDc4RDAyQkM0MTU0QTE4REYwMEI2MkQw
NSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovOyB9OwogCQk3OUFDOTIxOTEwOTk0NUM4MDAy
MTI2NkUgLyogSlNDb21wb3NpdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA3OUFDOTIxNzEwOTk0NUM4MDAyMTI2NkUgLyogSlNDb21wb3Np
dGlvbkV2ZW50LmggKi87IH07CiAJCTc5RjJGNUEyMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3Np
dGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSA3OUYyRjU5RjEwOTE5MzlBMDAwRDg3Q0IgLyogQ29tcG9zaXRpb25FdmVudC5oICovOyB9Owog
CQk3QTA5Q0VGMTFGMDIwNjlCMDBFOTNCREIgLyogRmlsZU1vbml0b3IuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDdBMDlDRUVDMUYwMUNDOTMwMEU5M0JE
QiAvKiBGaWxlTW9uaXRvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC01ODY2LDcgKzU4NjAsNiBAQAogCQkwRjExQTU0RTBGMzkyMzMxMDBDMzc4
ODQgLyogUmVuZGVyU2VsZWN0aW9uSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBSZW5kZXJTZWxlY3Rpb25JbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGMTMxNjNEMTZFRDBDQzgwMDM1Q0MwNCAvKiBQbGF0Zm9ybUNBRmlsdGVycy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQbGF0Zm9ybUNBRmlsdGVycy5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRjEzMTYzRjE2RUQwQ0RFMDAzNUNDMDQgLyogUGxhdGZvcm1D
QUZpbHRlcnNDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFBsYXRmb3JtQ0FGaWx0ZXJzQ29jb2EubW07IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGMTVEQTg5MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NBbmltYXRpb25Db250cm9s
bGVyUHJpdmF0ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjE1RUQ1OTFCN0VD
N0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gV2lsbENoYW5nZURhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwogCQkwRjE1RUQ1QTFCN0VDN0M1MDBFRERGRUIgLyogV2lsbENoYW5nZURhdGEuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2lsbENoYW5nZURhdGEuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYxNkJFRDkyMzA0RjA1MzAwQjRBMTY3IC8qIEdQVUJhc2Vk
Q2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBHUFVCYXNlZENh
bnZhc1JlbmRlcmluZ0NvbnRleHQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAt
NzIxNCwxNiArNzIwNyw2IEBACiAJCTMxNkZFMDcwMEU2Q0NCRUUwMEJGNjA4OCAvKiBKU0NTU0tl
eWZyYW1lc1J1bGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDU1NLZXlm
cmFtZXNSdWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZFMDkxMEU2Q0NE
N0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZVJ1bGUuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9
IENTU0tleWZyYW1lUnVsZS5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxNkZF
MDkyMEU2Q0NEN0YwMEJGNjA4OCAvKiBDU1NLZXlmcmFtZXNSdWxlLmlkbCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRl
eHQ7IHBhdGggPSBDU1NLZXlmcmFtZXNSdWxlLmlkbDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKLQkJMzE2RkUxMDcwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uQmFzZS5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTMxNkZFMTA4MEU2RTFEQTcwMEJGNjA4OCAvKiBBbmlt
YXRpb25CYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEFuaW1hdGlvbkJh
c2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMDkwRTZFMURBNzAwQkY2
MDg4IC8qIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07Ci0JCTMxNkZFMTBBMEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25D
b250cm9sbGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU0FuaW1hdGlv
bkNvbnRyb2xsZXIuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEIwRTZF
MURBNzAwQkY2MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBDb21wb3NpdGVBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwotCQkzMTZGRTEwQzBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5p
bWF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBvc2l0ZUFuaW1h
dGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkzMTZGRTEwRDBFNkUxREE3MDBC
RjYwODggLyogSW1wbGljaXRBbmltYXRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwotCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRpb24uaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW1wbGljaXRBbmltYXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2RkUxMEYwRTZFMURBNzAwQkY2MDg4IC8qIEtl
eWZyYW1lQW5pbWF0aW9uLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEtleWZyYW1lQW5pbWF0aW9uLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJMzE2
RkUxMTAwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1lQW5pbWF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEtleWZyYW1lQW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTMxNzQxQUFCMTY2MzVFNDUwMDhBNUI3RSAvKiBTaW11bGF0ZWRDbGlj
a09wdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2ltdWxhdGVkQ2xpY2tPcHRpb25zLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTMxN0QzRkVGMjE1NTk5RTEwMDM0RTNCOSAvKiBQb2lu
dGVyRXZlbnQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVU
eXBlID0gdGV4dDsgcGF0aCA9IFBvaW50ZXJFdmVudC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTMxN0QzRkYxMjE1NTk5RTIwMDM0RTNCOSAvKiBQb2ludGVyRXZlbnQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUG9pbnRlckV2ZW50LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTk4ODQsNiArOTg2Nyw4IEBACiAJCTcxRUZDRUQ3MjAyQjM4OEQwMEQ3QzQxMSAv
KiBBbmltYXRpb25FZmZlY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQW5p
bWF0aW9uRWZmZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRUZDRURBMjAy
QjM4OEYwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gQW5pbWF0aW9uRWZmZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJNzFFRkNFREUyMDJCMzlDNzAwRDdDNDExIC8qIEpTQW5pbWF0aW9uRWZmZWN0
Q3VzdG9tLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTQW5pbWF0
aW9uRWZmZWN0Q3VzdG9tLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNzFGMDVG
N0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENTU1Byb3BlcnR5QW5pbWF0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CisJCTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0
eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTcxRjkz
NkY3MURENEY5OUIwMDkyMkNDNyAvKiB0cmFja3Mtc3VwcG9ydC5qcyAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuamF2YXNjcmlwdDsgcGF0aCA9ICJ0cmFja3Mtc3VwcG9ydC5qcyI7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTcxRkY4NTE4MjJBM0Y4MUYwMDVENTk1OSAvKiBOYXZpZ2F0b3JN
YXhUb3VjaFBvaW50cy5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gTmF2aWdhdG9yTWF4VG91
Y2hQb2ludHMuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3MjE0NDM0NTIyNDBD
OEJBMDBGMTJGRjcgLyogU1ZHQW5pbWF0ZWRWYWx1ZVByb3BlcnR5LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9
IFNWR0FuaW1hdGVkVmFsdWVQcm9wZXJ0eS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtOTk5Miw4ICs5OTc3LDYgQEAKIAkJNzdENTEwMjQxRUQ3NEI1NTAwREE0Qzg3IC8qIEpTTmF2
aWdhdG9yQ3JlZGVudGlhbHMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNO
YXZpZ2F0b3JDcmVkZW50aWFscy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3N0VG
NjJGMTEyRjlEQjc0MDBDNzdCRDIgLyogSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTV2ViR0xWZXJ0ZXhBcnJheU9i
amVjdE9FUy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc3RUY2MkYyMTJGOURC
NzQwMEM3N0JEMiAvKiBKU1dlYkdMVmVydGV4QXJyYXlPYmplY3RPRVMuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gSlNXZWJHTFZlcnRleEFycmF5T2JqZWN0T0VTLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQ
cm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTc4RDAyQkM0MTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk3OUFDOTIxNjEwOTk0NUM4MDAyMTI2NkUgLyogSlND
b21wb3NpdGlvbkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IEpTQ29tcG9zaXRpb25FdmVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTc5
QUM5MjE3MTA5OTQ1QzgwMDIxMjY2RSAvKiBKU0NvbXBvc2l0aW9uRXZlbnQuaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSlNDb21wb3NpdGlvbkV2ZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTc5RjJGNTlFMTA5MTkzOUEwMDBEODdDQiAvKiBDb21wb3NpdGlv
bkV2ZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBvc2l0
aW9uRXZlbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTg3MTQsMjYgKzE4
Njk3LDYgQEAKIAkJCXBhdGggPSB3b3JrZXJzOwogCQkJc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsK
IAkJfTsKLQkJMzE2RkUxMDYwRTZFMUQ4NDAwQkY2MDg4IC8qIGFuaW1hdGlvbiAqLyA9IHsKLQkJ
CWlzYSA9IFBCWEdyb3VwOwotCQkJY2hpbGRyZW4gPSAoCi0JCQkJMzE2RkUxMDcwRTZFMURBNzAw
QkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuY3BwICovLAotCQkJCTMxNkZFMTA4MEU2RTFEQTcwMEJG
NjA4OCAvKiBBbmltYXRpb25CYXNlLmggKi8sCi0JCQkJMzE2RkUxMEIwRTZFMURBNzAwQkY2MDg4
IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5jcHAgKi8sCi0JCQkJMzE2RkUxMEMwRTZFMURBNzAwQkY2
MDg4IC8qIENvbXBvc2l0ZUFuaW1hdGlvbi5oICovLAotCQkJCTMxNkZFMTA5MEU2RTFEQTcwMEJG
NjA4OCAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyLmNwcCAqLywKLQkJCQkzMTZGRTEwQTBFNkUx
REE3MDBCRjYwODggLyogQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oICovLAotCQkJCTBGMTVEQTg5
MEYzQUFFRTcwMDAwQ0U0NyAvKiBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oICovLAot
CQkJCTc4RDAyQkMzMTU0QTE4REYwMEI2MkQwNSAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAg
Ki8sCi0JCQkJNzhEMDJCQzQxNTRBMThERjAwQjYyRDA1IC8qIENTU1Byb3BlcnR5QW5pbWF0aW9u
LmggKi8sCi0JCQkJMzE2RkUxMEQwRTZFMURBNzAwQkY2MDg4IC8qIEltcGxpY2l0QW5pbWF0aW9u
LmNwcCAqLywKLQkJCQkzMTZGRTEwRTBFNkUxREE3MDBCRjYwODggLyogSW1wbGljaXRBbmltYXRp
b24uaCAqLywKLQkJCQkzMTZGRTEwRjBFNkUxREE3MDBCRjYwODggLyogS2V5ZnJhbWVBbmltYXRp
b24uY3BwICovLAotCQkJCTMxNkZFMTEwMEU2RTFEQTcwMEJGNjA4OCAvKiBLZXlmcmFtZUFuaW1h
dGlvbi5oICovLAotCQkJKTsKLQkJCXBhdGggPSBhbmltYXRpb247Ci0JCQlzb3VyY2VUcmVlID0g
Ijxncm91cD4iOwotCQl9OwogCQkzMzNGNzAzRDBGQjQ5QzE2MDA4RTEyQTYgLyogbm90aWZpY2F0
aW9ucyAqLyA9IHsKIAkJCWlzYSA9IFBCWEdyb3VwOwogCQkJY2hpbGRyZW4gPSAoCkBAIC0yMTQz
Myw3ICsyMTM5Niw2IEBACiAJCTY1QkYwMjE4MDk3NDgwNjMwMEM0MzE5NiAvKiBwYWdlICovID0g
ewogCQkJaXNhID0gUEJYR3JvdXA7CiAJCQljaGlsZHJlbiA9ICgKLQkJCQkzMTZGRTEwNjBFNkUx
RDg0MDBCRjYwODggLyogYW5pbWF0aW9uICovLAogCQkJCTVENTk3NUI1MTk2MzYyQkUwMEQwMDg3
OCAvKiBjb2NvYSAqLywKIAkJCQlDRTE3QUQxNDFDNTg1MjJGMDA1RjQ3OTkgLyogY3NwICovLAog
CQkJCTE4QTZDRDZGMEQ4RjIwMjUwMDFEQzNDRSAvKiBpb3MgKi8sCkBAIC0yMTg3OCw2ICsyMTg0
MCw4IEBACiAJCQkJNzFDMjlFMkUyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5jcHAg
Ki8sCiAJCQkJNzFDMjlFMzAyMDNDRTc2QjAwOEYzNkQyIC8qIENTU0FuaW1hdGlvbi5oICovLAog
CQkJCTcxQzI5RTMxMjAzQ0U3NkMwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaWRsICovLAorCQkJ
CTcxRjA1RjdGMjUxMjQ0MEQwMDcxRTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgKi8s
CisJCQkJNzFGMDVGN0UyNTEyNDQwQzAwNzFFNjkzIC8qIENTU1Byb3BlcnR5QW5pbWF0aW9uLmgg
Ki8sCiAJCQkJNzEzMTcxMzIxRkJFNzhDNTAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQuaCAqLywKIAkJCQk3MTIzQzE4NzIwNDczOUJCMDA3ODkzOTIgLyogQ1NTVHJhbnNpdGlv
bi5jcHAgKi8sCiAJCQkJNzEyM0MxODYyMDQ3MzlCQTAwNzg5MzkyIC8qIENTU1RyYW5zaXRpb24u
aCAqLywKQEAgLTMwMzE5LDcgKzMwMjgzLDYgQEAKIAkJCQkzMUE3OTVDNzE4ODhCQ0IyMDAzODJG
OTAgLyogQU5HTEVJbnN0YW5jZWRBcnJheXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTQ5MDcwN0U3
MTIxOUMwNDMwMEQ5MEU1MSAvKiBBTkdMRVdlYktpdEJyaWRnZS5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJNDlFOTEyQUIwRUZBQzkwNjAwOUQwQ0FGIC8qIEFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8s
Ci0JCQkJMzE2RkUxMTIwRTZFMURBNzAwQkY2MDg4IC8qIEFuaW1hdGlvbkJhc2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTcxRUZDRURDMjAyQjM4QTkwMEQ3QzQxMSAvKiBBbmltYXRpb25FZmZlY3Qu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcxRTJDNDI2MjFDOTM1MjgwMDI0RjhDOCAvKiBBbmltYXRp
b25FZmZlY3RQaGFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMzE5ODQ4MDExQTFEODE3QjAwQTEz
MzE4IC8qIEFuaW1hdGlvbkV2ZW50LmggaW4gSGVhZGVycyAqLywKQEAgLTMwNzAyLDcgKzMwNjY1
LDYgQEAKIAkJCQlDMkY0RTc4QzFFNDVDM0VGMDA2RDcxMDUgLyogQ29tcGxleFRleHRDb250cm9s
bGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNEJBNTA5MDFCQ0ZCRDk1MDBFMzRFRjcgLyogQ29t
cG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ0RkExODUx
QkNBNkI1QTAwOTFCNkVGIC8qIENvbXBvc2VkVHJlZUl0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
LQkJCQkzMTZGRTExNjBFNkUxREE3MDBCRjYwODggLyogQ29tcG9zaXRlQW5pbWF0aW9uLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwOURERDA5OUU2NDkyMDA1NkU1ODEgLyogQ29tcG9zaXRlRWRp
dENvbW1hbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMjQ3RTM3MUZFQTVGODYwMDhDMDhDRSAv
KiBDb21wb3NpdGVPcGVyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTcxMTEyNDNFMjE2RkE3
MTEwMEVCN0I2NyAvKiBDb21wb3NpdGVPcGVyYXRpb25PckF1dG8uaCBpbiBIZWFkZXJzICovLApA
QCAtMzA4NDIsOCArMzA4MDQsNiBAQAogCQkJCTdDOUFDQUE4MUYzQ0NFQjQwMEYzQUEwOSAvKiBD
cnlwdG9Sc2FIYXNoZWRLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICovLAogCQkJCTdDOUFDQUE0
MUYzQ0NFNjkwMEYzQUEwOSAvKiBDcnlwdG9Sc2FLZXlBbGdvcml0aG0uaCBpbiBIZWFkZXJzICov
LAogCQkJCTcxQzI5RTMyMjAzQ0U3ODEwMDhGMzZEMiAvKiBDU1NBbmltYXRpb24uaCBpbiBIZWFk
ZXJzICovLAotCQkJCTMxNkZFMTE0MEU2RTFEQTcwMEJGNjA4OCAvKiBDU1NBbmltYXRpb25Db250
cm9sbGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRjE1REE4QTBGM0FBRUU3MDAwMENFNDcgLyog
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUNBRTlG
OTEwMTQ2NDQxRjAwMEMyNDVCMCAvKiBDU1NBc3BlY3RSYXRpb1ZhbHVlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk5NERFNUM4MjFEN0YzQTE0MDAxNjRGMkEgLyogQ1NTQXRSdWxlSUQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUZCRDZBRjg4MTVFRjI1QzkwMDhCNzExMCAvKiBDU1NCYXNpY1NoYXBlcy5o
IGluIEhlYWRlcnMgKi8sCkBAIC0zMDkxMiw3ICszMDg3Miw3IEBACiAJCQkJQTgwRTZDRTYwQTE5
ODlDQTAwN0ZCOEM1IC8qIENTU1ByaW1pdGl2ZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQlF
MUVEOEFDMzBDQzQ5QkUwMDBCRkM1NTcgLyogQ1NTUHJpbWl0aXZlVmFsdWVNYXBwaW5ncy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTgwRTZDRkYwQTE5ODlDQTAwN0ZCOEM1IC8qIENTU1Byb3BlcnR5
LmggaW4gSGVhZGVycyAqLywKLQkJCQk3OEQwMkJDNjE1NEExOERGMDBCNjJEMDUgLyogQ1NTUHJv
cGVydHlBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAorCQkJCTcxRjA1RjgwMjUxMjQ0MkUwMDcx
RTY5MyAvKiBDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzEzMTcx
MzQxRkJFNzhEQjAwRjc1OERFIC8qIENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTY1NjU4MEY0MDlEMTJCMjAwMDBFNjFENyAvKiBDU1NQcm9wZXJ0eU5hbWVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NDZEMzc0NjFENkQwMUQ0MDA3NzA4NEYgLyogQ1NTUHJv
cGVydHlQYXJzZXIuaCBpbiBIZWFkZXJzICovLApAQCAtMzE3MzUsNyArMzE2OTUsNiBAQAogCQkJ
CTU1QkJENDI5MjREQjU2MDQwMEJCNkUwQyAvKiBJbWFnZVV0aWxpdGllcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMjZGNzU2QjMxQjNCNjZGNzAwMDVERDc5IC8qIEltbXV0YWJsZU5GQS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMjZGNzU2QjUxQjNCNjhGMjAwMDVERDc5IC8qIEltbXV0YWJsZU5GQU5v
ZGVCdWlsZGVyLmggaW4gSGVhZGVycyAqLywKLQkJCQkzMTZGRTExODBFNkUxREE3MDBCRjYwODgg
LyogSW1wbGljaXRBbmltYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUJFOTYxQzU1MThBRDMz
OEMwMEQwN0RDNSAvKiBJbmJhbmREYXRhVGV4dFRyYWNrLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
Nzg2MzNFOTIzRkYzNDdCMDA4N0FFMjEgLyogSW5iYW5kR2VuZXJpY0N1ZS5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMDcwNkEwRDkyNDA4MzBBNzAwRTkzODE4IC8qIEluYmFuZEdlbmVyaWNDdWVJZGVu
dGlmaWVyLmggaW4gSGVhZGVycyAqLywKQEAgLTMyNzEzLDcgKzMyNjcyLDYgQEAKIAkJCQk1MTdB
NjNDNjFCNzQzMTkyMDBFN0RDREMgLyogS2V5ZWRFbmNvZGVyQ0YuaCBpbiBIZWFkZXJzICovLAog
CQkJCUE1MTNCM0Q3MTE0QjE2NjYwMDFDNDI5QiAvKiBLZXlFdmVudENvY29hLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkyNjU1NDEzOTE0ODk4MTFDMDAwREZDNUQgLyogS2V5RXZlbnRDb2Rlc0lPUy5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMzE2RkUxMUEwRTZFMURBNzAwQkY2MDg4IC8qIEtleWZyYW1l
QW5pbWF0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTI0N0UzOTFGRUE1Rjg2MDA4QzA4Q0Ug
LyogS2V5ZnJhbWVBbmltYXRpb25PcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MTU1NkNC
NDFGOUYwOUJBMDBFNzhEMDggLyogS2V5ZnJhbWVFZmZlY3QuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTcxMjQ3RTNBMUZFQTVGODYwMDhDMDhDRSAvKiBLZXlmcmFtZUVmZmVjdE9wdGlvbnMuaCBpbiBI
ZWFkZXJzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFi
bGUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGFibGUuaWRsCmluZGV4IDE0
NjQ3MTAwMDY1MTY4ZjgyOWZiNmEyNGFhNjgzMDgxZjNhZTcwMDEuLjRmYThjYzYyNTkwODg1M2M1
NjIyZWNhZTNkYmFhNGIyNjFkYTVkZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRhYmxlLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0
YWJsZS5pZGwKQEAgLTI0LDkgKzI0LDcgQEAKICAqLwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3
Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jdGhlLWFuaW1hdGFibGUtaW50ZXJmYWNlLW1peGluCi1b
Ci0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGludGVyZmFjZSBtaXhpbiBB
bmltYXRhYmxlIHsKK2ludGVyZmFjZSBtaXhpbiBBbmltYXRhYmxlIHsKICAgICBbTWF5VGhyb3dF
eGNlcHRpb24sIENhbGxXaXRoPUdsb2JhbE9iamVjdF0gV2ViQW5pbWF0aW9uIGFuaW1hdGUob2Jq
ZWN0PyBrZXlmcmFtZXMsIG9wdGlvbmFsICh1bnJlc3RyaWN0ZWQgZG91YmxlIG9yIEtleWZyYW1l
QW5pbWF0aW9uT3B0aW9ucykgb3B0aW9ucyk7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBn
ZXRBbmltYXRpb25zKG9wdGlvbmFsIEdldEFuaW1hdGlvbnNPcHRpb25zIG9wdGlvbnMpOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25FZmZlY3QuaWRs
IGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKaW5kZXggZGJk
ZjFmZTJjNjRiNGMzNmM1OTQ5ODY3OTY1ZTkzNDI1YTFjODcwNy4uZmRhNDExYTI4MmZhMjcwMjlh
M2M1MTIzMjg3YmI3MDhlN2NhYTI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvbkVmZmVjdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0Fu
aW1hdGlvbkVmZmVjdC5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBbCi0gICAgRW5hYmxl
ZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93LAogICAgIEN1c3Rv
bVRvSlNPYmplY3QKIF0gaW50ZXJmYWNlIEFuaW1hdGlvbkVmZmVjdCB7CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwgYi9Tb3Vy
Y2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uUGxheWJhY2tFdmVudC5pZGwKaW5kZXggYjk2
OTFiNDg1MzY0NjIwMjJmYWQ1ZGVmMDRhN2E1MDI4OGFlMjNjOS4uZTc5ZjhjZjBhNWM5OWZmMzVl
MWUwZTgzMmM4ZjBkZWNlNWEzNWQxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvblBsYXliYWNrRXZlbnQuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1h
dGlvbi9BbmltYXRpb25QbGF5YmFja0V2ZW50LmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAK
IFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3NlZD1XaW5k
b3csCiBdIGludGVyZmFjZSBBbmltYXRpb25QbGF5YmFja0V2ZW50IDogRXZlbnQgewogICAgIGNv
bnN0cnVjdG9yKERPTVN0cmluZyB0eXBlLCBvcHRpb25hbCBBbmltYXRpb25QbGF5YmFja0V2ZW50
SW5pdCBldmVudEluaXREaWN0KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9BbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdC5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRp
b24vQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQuaWRsCmluZGV4IDg4NzEyZDkyZjJlMjcwNzBl
ODIxZGI0N2YzNjNiMTc5ZWNiNzRhMWMuLjdhYTFiYmFjY2M4MTg0OTUxM2UzMTkwYmZjNDMyNDFi
YjI2MDdjY2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25Q
bGF5YmFja0V2ZW50SW5pdC5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0FuaW1h
dGlvblBsYXliYWNrRXZlbnRJbml0LmlkbApAQCAtMjMsOSArMjMsNyBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KICAqLwogCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zCi1dIGRpY3Rp
b25hcnkgQW5pbWF0aW9uUGxheWJhY2tFdmVudEluaXQgOiBFdmVudEluaXQgeworZGljdGlvbmFy
eSBBbmltYXRpb25QbGF5YmFja0V2ZW50SW5pdCA6IEV2ZW50SW5pdCB7CiAgICAgZG91YmxlPyBj
dXJyZW50VGltZSA9IG51bGw7CiAgICAgZG91YmxlPyB0aW1lbGluZVRpbWUgPSBudWxsOwogfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5p
ZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQW5pbWF0aW9uVGltZWxpbmUuaWRsCmluZGV4
IDA0ZmE5NTlkYjVkNTVhNjUzNWI0YjliZGIyZmRkZWY2MWNlMzlkNTUuLmQ1YmVmMTBlOWY5NTIx
NDNlZmM4NWE0N2FiNTE2OWE5ZDQyMDZjOTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9BbmltYXRpb25UaW1lbGluZS5pZGwKKysrIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0
aW9uL0FuaW1hdGlvblRpbWVsaW5lLmlkbApAQCAtMjQsNyArMjQsNiBAQAogICovCiAKIFsKLSAg
ICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMsCiAgICAgRXhwb3J0TWFjcm89V0VCQ09S
RV9FWFBPUlQsCiAgICAgQ3VzdG9tVG9KU09iamVjdAogXSBpbnRlcmZhY2UgQW5pbWF0aW9uVGlt
ZWxpbmUgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NTU0FuaW1hdGlv
bi5pZGwgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTQW5pbWF0aW9uLmlkbAppbmRleCAx
ZTViODg0YTlhNjdjYTUyOTE3NmUzOWVmNjgyOTVhZjhmNjE1Y2I0Li5iYTNlNjJhNTQwZWZmN2M5
NmY5YmU5NmI5ODRhNzFjZGI5YTdlYTYzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmlt
YXRpb24vQ1NTQW5pbWF0aW9uLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NT
QW5pbWF0aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01T
dHJpbmc7CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbiwKICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTQW5pbWF0aW9uIDogV2Vi
QW5pbWF0aW9uIHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgQ1NTT01TdHJpbmcgYW5pbWF0aW9u
TmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NQcm9wZXJ0eUFu
aW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRp
b24uY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjc4MTVhYTBkMDlkMWEyY2NiOWNiOTM4N2FjMjZlMDlmN2RlMjZm
YTUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTUHJvcGVy
dHlBbmltYXRpb24uY3BwCkBAIC0wLDAgKzEsMTg3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCwgMjAwOSwgMjAxMywgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIsIDIwMTMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0
ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKyAqIDIuICBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqIDMuICBOZWl0
aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKKyAq
ICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBw
cm9kdWN0cyBkZXJpdmVkCisgKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lm
aWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQor
ICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0Yg
VVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICog
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVy
dHlBbmltYXRpb24uaCIKKworI2luY2x1ZGUgIkNTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5o
IgorI2luY2x1ZGUgIkNTU0Nyb3NzZmFkZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTRmlsdGVySW1h
Z2VWYWx1ZS5oIgorI2luY2x1ZGUgIkNTU0ltYWdlR2VuZXJhdG9yVmFsdWUuaCIKKyNpbmNsdWRl
ICJDU1NJbWFnZVZhbHVlLmgiCisjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKKyNpbmNs
dWRlICJDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50LmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlO
YW1lcy5oIgorI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiQ2FsY3VsYXRpb25W
YWx1ZS5oIgorI2luY2x1ZGUgIkNsaXBQYXRoT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiQ29sb3JC
bGVuZGluZy5oIgorI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgorI2luY2x1ZGUgIkZvbnRD
YXNjYWRlLmgiCisjaW5jbHVkZSAiRm9udFNlbGVjdGlvbkFsZ29yaXRobS5oIgorI2luY2x1ZGUg
IkZvbnRUYWdnZWRTZXR0aW5ncy5oIgorI2luY2x1ZGUgIkdhcExlbmd0aC5oIgorI2luY2x1ZGUg
IklkZW50aXR5VHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgorI2lu
Y2x1ZGUgIk1hdHJpeDNEVHJhbnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiTWF0cml4VHJh
bnNmb3JtT3BlcmF0aW9uLmgiCisjaW5jbHVkZSAiUmVuZGVyQm94LmgiCisjaW5jbHVkZSAiUmVu
ZGVyU3R5bGUuaCIKKyNpbmNsdWRlICJTdHlsZUNhY2hlZEltYWdlLmgiCisjaW5jbHVkZSAiU3R5
bGVHZW5lcmF0ZWRJbWFnZS5oIgorI2luY2x1ZGUgIlN0eWxlUHJvcGVydHlTaG9ydGhhbmQuaCIK
KyNpbmNsdWRlICJTdHlsZVJlc29sdmVyLmgiCisjaW5jbHVkZSA8YWxnb3JpdGhtPgorI2luY2x1
ZGUgPG1lbW9yeT4KKyNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9O
ZXZlckRlc3Ryb3llZC5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9Qb2ludGVyQ29tcGFyaXNvbi5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvVGV4dFN0cmVhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBpbmxpbmUgaW50IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiwgaW50IGZyb20sIGludCB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBi
bGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSBibGVu
ZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGRvdWJsZSBmcm9tLCBkb3Vi
bGUgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICByZXR1cm4gYmxlbmQoZnJvbSwgdG8sIHBy
b2dyZXNzKTsKK30KKworc3RhdGljIGlubGluZSBmbG9hdCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJv
cGVydHlCbGVuZGluZ0NsaWVudCosIGZsb2F0IGZyb20sIGZsb2F0IHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCit7CisgICAgcmV0dXJuIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQoZnJvbSArICh0byAtIGZy
b20pICogcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIENvbG9yIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgQ29sb3ImIGZyb20sIGNvbnN0IENv
bG9yJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywg
cHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IExlbmd0aCYgZnJvbSwgY29uc3QgTGVuZ3Ro
JiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJv
Z3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIEdhcExlbmd0aCBibGVuZEZ1bmMoY29uc3QgQ1NT
UHJvcGVydHlCbGVuZGluZ0NsaWVudCosIGNvbnN0IEdhcExlbmd0aCYgZnJvbSwgY29uc3QgR2Fw
TGVuZ3RoJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiAoZnJvbS5pc05vcm1h
bCgpIHx8IHRvLmlzTm9ybWFsKCkpID8gdG8gOiBibGVuZChmcm9tLmxlbmd0aCgpLCB0by5sZW5n
dGgoKSwgcHJvZ3Jlc3MpOworfQorCitzdGF0aWMgaW5saW5lIExlbmd0aFNpemUgYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aFNpemUm
IGZyb20sIGNvbnN0IExlbmd0aFNpemUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0
dXJuIHsgYmxlbmRGdW5jKGFuaW0sIGZyb20ud2lkdGgsIHRvLndpZHRoLCBwcm9ncmVzcyksIGJs
ZW5kRnVuYyhhbmltLCBmcm9tLmhlaWdodCwgdG8uaGVpZ2h0LCBwcm9ncmVzcykgfTsKK30KKwor
c3RhdGljIGlubGluZSBTaGFkb3dTdHlsZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgU2hhZG93U3R5bGUgZnJvbSwgU2hhZG93U3R5bGUgdG8sIGRvdWJs
ZSBwcm9ncmVzcykKK3sKKyAgICBpZiAoZnJvbSA9PSB0bykKKyAgICAgICAgcmV0dXJuIHRvOwor
CisgICAgZG91YmxlIGZyb21WYWwgPSBmcm9tID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDog
MDsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBTaGFkb3dTdHlsZTo6Tm9ybWFsID8gMSA6IDA7
CisgICAgZG91YmxlIHJlc3VsdCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJv
Z3Jlc3MpOworICAgIHJldHVybiByZXN1bHQgPiAwID8gU2hhZG93U3R5bGU6Ok5vcm1hbCA6IFNo
YWRvd1N0eWxlOjpJbnNldDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6OnVuaXF1ZV9wdHI8U2hh
ZG93RGF0YT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IGNvbnN0IFNoYWRvd0RhdGEqIGZyb20sIGNvbnN0IFNoYWRvd0RhdGEqIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCit7CisgICAgQVNTRVJUKGZyb20gJiYgdG8pOworICAgIGlmIChmcm9tLT5zdHlsZSgp
ICE9IHRvLT5zdHlsZSgpKQorICAgICAgICByZXR1cm4gbWFrZVVuaXF1ZTxTaGFkb3dEYXRhPigq
dG8pOworCisgICAgcmV0dXJuIG1ha2VVbmlxdWU8U2hhZG93RGF0YT4oYmxlbmQoZnJvbS0+bG9j
YXRpb24oKSwgdG8tPmxvY2F0aW9uKCksIHByb2dyZXNzKSwKKyAgICAgICAgYmxlbmQoZnJvbS0+
cmFkaXVzKCksIHRvLT5yYWRpdXMoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBibGVuZChmcm9tLT5z
cHJlYWQoKSwgdG8tPnNwcmVhZCgpLCBwcm9ncmVzcyksCisgICAgICAgIGJsZW5kRnVuYyhhbmlt
LCBmcm9tLT5zdHlsZSgpLCB0by0+c3R5bGUoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBmcm9tLT5p
c1dlYmtpdEJveFNoYWRvdygpLAorICAgICAgICBibGVuZChmcm9tLT5jb2xvcigpLCB0by0+Y29s
b3IoKSwgcHJvZ3Jlc3MpKTsKK30KKworc3RhdGljIGlubGluZSBUcmFuc2Zvcm1PcGVyYXRpb25z
IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltYXRpb24sIGNv
bnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmIGZyb20sIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMm
IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGFuaW1hdGlvbi0+dHJhbnNmb3JtRnVu
Y3Rpb25MaXN0c01hdGNoKCkpCisgICAgICAgIHJldHVybiB0by5ibGVuZEJ5TWF0Y2hpbmdPcGVy
YXRpb25zKGZyb20sIHByb2dyZXNzKTsKKyAgICByZXR1cm4gdG8uYmxlbmRCeVVzaW5nTWF0cml4
SW50ZXJwb2xhdGlvbihmcm9tLCBwcm9ncmVzcywgaXM8UmVuZGVyQm94PihhbmltYXRpb24tPnJl
bmRlcmVyKCkpID8gZG93bmNhc3Q8UmVuZGVyQm94PigqYW5pbWF0aW9uLT5yZW5kZXJlcigpKS5i
b3JkZXJCb3hSZWN0KCkuc2l6ZSgpIDogTGF5b3V0U2l6ZSgpKTsKK30KKworc3RhdGljIGlubGlu
ZSBSZWZQdHI8Q2xpcFBhdGhPcGVyYXRpb24+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJs
ZW5kaW5nQ2xpZW50KiwgQ2xpcFBhdGhPcGVyYXRpb24qIGZyb20sIENsaXBQYXRoT3BlcmF0aW9u
KiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAgICAg
IHJldHVybiB0bzsKKworICAgIC8vIE90aGVyIGNsaXAtcGF0aCBvcGVyYXRpb25zIHRoYW4gQmFz
aWNTaGFwZXMgY2FuIG5vdCBiZSBhbmltYXRlZC4KKyAgICBpZiAoZnJvbS0+dHlwZSgpICE9IENs
aXBQYXRoT3BlcmF0aW9uOjpTaGFwZSB8fCB0by0+dHlwZSgpICE9IENsaXBQYXRoT3BlcmF0aW9u
OjpTaGFwZSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJv
bVNoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlwUGF0aE9wZXJhdGlvbj4oKmZyb20pLmJhc2ljU2hh
cGUoKTsKKyAgICBjb25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gZG93bmNhc3Q8U2hhcGVDbGlw
UGF0aE9wZXJhdGlvbj4oKnRvKS5iYXNpY1NoYXBlKCk7CisKKyAgICBpZiAoIWZyb21TaGFwZS5j
YW5CbGVuZCh0b1NoYXBlKSkKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgcmV0dXJuIFNoYXBl
Q2xpcFBhdGhPcGVyYXRpb246OmNyZWF0ZSh0b1NoYXBlLmJsZW5kKGZyb21TaGFwZSwgcHJvZ3Jl
c3MpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U2hhcGVWYWx1ZT4gYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBTaGFwZVZhbHVlKiBmcm9tLCBTaGFwZVZh
bHVlKiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmICghZnJvbSB8fCAhdG8pCisgICAg
ICAgIHJldHVybiB0bzsKKworICAgIGlmIChmcm9tLT50eXBlKCkgIT0gU2hhcGVWYWx1ZTo6VHlw
ZTo6U2hhcGUgfHwgdG8tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSkKKyAgICAg
ICAgcmV0dXJuIHRvOworCisgICAgaWYgKGZyb20tPmNzc0JveCgpICE9IHRvLT5jc3NCb3goKSkK
KyAgICAgICAgcmV0dXJuIHRvOworCisgICAgY29uc3QgQmFzaWNTaGFwZSYgZnJvbVNoYXBlID0g
KmZyb20tPnNoYXBlKCk7CisgICAgY29uc3QgQmFzaWNTaGFwZSYgdG9TaGFwZSA9ICp0by0+c2hh
cGUoKTsKKworICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQorICAgICAgICBy
ZXR1cm4gdG87CisKKyAgICByZXR1cm4gU2hhcGVWYWx1ZTo6Y3JlYXRlKHRvU2hhcGUuYmxlbmQo
ZnJvbVNoYXBlLCBwcm9ncmVzcyksIHRvLT5jc3NCb3goKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqLCBGaWx0ZXJPcGVyYXRpb24qIGZyb21PcCwgRmlsdGVyT3BlcmF0aW9uKiB0b09w
LCBkb3VibGUgcHJvZ3Jlc3MsIGJvb2wgYmxlbmRUb1Bhc3N0aHJvdWdoID0gZmFsc2UpCit7Cisg
ICAgQVNTRVJUKHRvT3ApOworICAgIHJldHVybiB0b09wLT5ibGVuZChmcm9tT3AsIHByb2dyZXNz
LCBibGVuZFRvUGFzc3Rocm91Z2gpOworfQorCitzdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlv
bnMgYmxlbmRGaWx0ZXJPcGVyYXRpb25zKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sICBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIEZpbHRlck9wZXJhdGlvbnMgcmVzdWx0
OworICAgIHNpemVfdCBmcm9tU2l6ZSA9IGZyb20ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBz
aXplX3QgdG9TaXplID0gdG8ub3BlcmF0aW9ucygpLnNpemUoKTsKKyAgICBzaXplX3Qgc2l6ZSA9
IHN0ZDo6bWF4KGZyb21TaXplLCB0b1NpemUpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c2l6ZTsgaSsrKSB7CisgICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+IGZyb21PcCA9IChp
IDwgZnJvbVNpemUpID8gZnJvbS5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOworICAgICAgICBS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiB0b09wID0gKGkgPCB0b1NpemUpID8gdG8ub3BlcmF0aW9u
cygpW2ldLmdldCgpIDogMDsKKyAgICAgICAgUmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gYmxlbmRl
ZE9wID0gdG9PcCA/IGJsZW5kRnVuYyhhbmltLCBmcm9tT3AuZ2V0KCksIHRvT3AuZ2V0KCksIHBy
b2dyZXNzKSA6IChmcm9tT3AgPyBibGVuZEZ1bmMoYW5pbSwgMCwgZnJvbU9wLmdldCgpLCBwcm9n
cmVzcywgdHJ1ZSkgOiAwKTsKKyAgICAgICAgaWYgKGJsZW5kZWRPcCkKKyAgICAgICAgICAgIHJl
c3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKGJsZW5kZWRPcCk7CisgICAgICAgIGVsc2UgeworICAg
ICAgICAgICAgYXV0byBpZGVudGl0eU9wID0gUGFzc3Rocm91Z2hGaWx0ZXJPcGVyYXRpb246OmNy
ZWF0ZSgpOworICAgICAgICAgICAgaWYgKHByb2dyZXNzID4gMC41KQorICAgICAgICAgICAgICAg
IHJlc3VsdC5vcGVyYXRpb25zKCkuYXBwZW5kKHRvT3AgPyB0b09wIDogV1RGTW92ZShpZGVudGl0
eU9wKSk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlv
bnMoKS5hcHBlbmQoZnJvbU9wID8gZnJvbU9wIDogV1RGTW92ZShpZGVudGl0eU9wKSk7CisgICAg
ICAgIH0KKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBGaWx0
ZXJPcGVyYXRpb25zIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBh
bmltLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25z
JiB0bywgZG91YmxlIHByb2dyZXNzLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBDU1NQcm9w
ZXJ0eUZpbHRlcikKK3sKKyAgICBGaWx0ZXJPcGVyYXRpb25zIHJlc3VsdDsKKworICAgIC8vIElm
IHdlIGhhdmUgYSBmaWx0ZXIgZnVuY3Rpb24gbGlzdCwgdXNlIHRoYXQgdG8gZG8gYSBwZXItZnVu
Y3Rpb24gYW5pbWF0aW9uLgorICAgIAorICAgIGJvb2wgbGlzdHNNYXRjaCA9IGZhbHNlOworICAg
IHN3aXRjaCAocHJvcGVydHlJRCkgeworICAgIGNhc2UgQ1NTUHJvcGVydHlGaWx0ZXI6CisgICAg
ICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAg
ICAgYnJlYWs7CisjaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKKyAgICBjYXNlIENTU1Byb3Bl
cnR5V2Via2l0QmFja2Ryb3BGaWx0ZXI6CisgICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5iYWNr
ZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOworICAgICAgICBicmVhazsKKyNlbmRpZgor
ICAgIGNhc2UgQ1NTUHJvcGVydHlBcHBsZUNvbG9yRmlsdGVyOgorICAgICAgICBsaXN0c01hdGNo
ID0gYW5pbS0+Y29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKTsKKyAgICAgICAgYnJlYWs7
CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIAorICAgIGlmIChsaXN0
c01hdGNoKQorICAgICAgICByZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwgZnJv
bSwgdG8sIHByb2dyZXNzKTsKKyAgICBlbHNlIHsKKyAgICAgICAgLy8gSWYgdGhlIGZpbHRlciBm
dW5jdGlvbiBsaXN0cyBkb24ndCBtYXRjaCwgd2UgY291bGQgdHJ5IHRvIGNyb3NzLWZhZGUsIGJ1
dCBkb24ndCB5ZXQgaGF2ZSBhIHdheSB0byByZXByZXNlbnQgdGhhdCBpbiBDU1MuCisgICAgICAg
IC8vIEZvciBub3cgd2UnbGwganVzdCBmYWlsIHRvIGFuaW1hdGUuCisgICAgICAgIHJlc3VsdCA9
IHRvOworICAgIH0KKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVm
UHRyPFN0eWxlSW1hZ2U+IGJsZW5kRmlsdGVyKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIENhY2hlZEltYWdlKiBpbWFnZSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgZnJv
bSwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBB
U1NFUlQoaW1hZ2UpOworICAgIEZpbHRlck9wZXJhdGlvbnMgZmlsdGVyUmVzdWx0ID0gYmxlbmRG
aWx0ZXJPcGVyYXRpb25zKGFuaW0sIGZyb20sIHRvLCBwcm9ncmVzcyk7CisKKyAgICBhdXRvIGlt
YWdlVmFsdWUgPSBDU1NJbWFnZVZhbHVlOjpjcmVhdGUoKmltYWdlKTsKKyAgICBhdXRvIGZpbHRl
clZhbHVlID0gQ29tcHV0ZWRTdHlsZUV4dHJhY3Rvcjo6dmFsdWVGb3JGaWx0ZXIoYW5pbS0+Y3Vy
cmVudFN0eWxlKCksIGZpbHRlclJlc3VsdCwgRG9Ob3RBZGp1c3RQaXhlbFZhbHVlcyk7CisKKyAg
ICBhdXRvIHJlc3VsdCA9IENTU0ZpbHRlckltYWdlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGltYWdl
VmFsdWUpLCBXVEZNb3ZlKGZpbHRlclZhbHVlKSk7CisgICAgcmVzdWx0LmdldCgpLnNldEZpbHRl
ck9wZXJhdGlvbnMoZmlsdGVyUmVzdWx0KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFn
ZTo6Y3JlYXRlKFdURk1vdmUocmVzdWx0KSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgVmlzaWJpbGl0
eSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgVmlzaWJp
bGl0eSBmcm9tLCBWaXNpYmlsaXR5IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgLy8gQW55
IG5vbi16ZXJvIHJlc3VsdCBtZWFucyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlIHZpc2li
bGUuIE9ubHkgYXQgMCBkbyB3ZSBjb25zaWRlciB0aGUgb2JqZWN0IHRvIGJlCisgICAgLy8gaW52
aXNpYmxlLiBUaGUgaW52aXNpYmxlIHZhbHVlIHdlIHVzZSAoVmlzaWJpbGl0eTo6SGlkZGVuIHZz
LiBWaXNpYmlsaXR5OjpDb2xsYXBzZSkgZGVwZW5kcyBvbiB0aGUgc3BlY2lmaWVkIGZyb20vdG8g
dmFsdWVzLgorICAgIGRvdWJsZSBmcm9tVmFsID0gZnJvbSA9PSBWaXNpYmlsaXR5OjpWaXNpYmxl
ID8gMS4gOiAwLjsKKyAgICBkb3VibGUgdG9WYWwgPSB0byA9PSBWaXNpYmlsaXR5OjpWaXNpYmxl
ID8gMS4gOiAwLjsKKyAgICBpZiAoZnJvbVZhbCA9PSB0b1ZhbCkKKyAgICAgICAgcmV0dXJuIHRv
OworICAgIGRvdWJsZSByZXN1bHQgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbVZhbCwgdG9WYWwsIHBy
b2dyZXNzKTsKKyAgICByZXR1cm4gcmVzdWx0ID4gMC4gPyBWaXNpYmlsaXR5OjpWaXNpYmxlIDog
KHRvICE9IFZpc2liaWxpdHk6OlZpc2libGUgPyB0byA6IGZyb20pOworfQorCitzdGF0aWMgaW5s
aW5lIFRleHRVbmRlcmxpbmVPZmZzZXQgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIGNvbnN0IFRleHRVbmRlcmxpbmVPZmZzZXQmIGZyb20sIGNvbnN0IFRl
eHRVbmRlcmxpbmVPZmZzZXQmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20u
aXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dFVuZGVybGlu
ZU9mZnNldDo6Y3JlYXRlV2l0aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1
ZSgpLCB0by5sZW5ndGhWYWx1ZSgpLCBwcm9ncmVzcykpOworICAgIHJldHVybiBUZXh0VW5kZXJs
aW5lT2Zmc2V0OjpjcmVhdGVXaXRoQXV0bygpOworfQorCitzdGF0aWMgaW5saW5lIFRleHREZWNv
cmF0aW9uVGhpY2tuZXNzIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiBhbmltLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgZnJvbSwgY29uc3QgVGV4dERl
Y29yYXRpb25UaGlja25lc3MmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKGZyb20u
aXNMZW5ndGgoKSAmJiB0by5pc0xlbmd0aCgpKQorICAgICAgICByZXR1cm4gVGV4dERlY29yYXRp
b25UaGlja25lc3M6OmNyZWF0ZVdpdGhMZW5ndGgoYmxlbmRGdW5jKGFuaW0sIGZyb20ubGVuZ3Ro
VmFsdWUoKSwgdG8ubGVuZ3RoVmFsdWUoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gVGV4dERl
Y29yYXRpb25UaGlja25lc3M6OmNyZWF0ZVdpdGhBdXRvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
TGVuZ3RoQm94IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmlt
LCBjb25zdCBMZW5ndGhCb3gmIGZyb20sIGNvbnN0IExlbmd0aEJveCYgdG8sIGRvdWJsZSBwcm9n
cmVzcykKK3sKKyAgICBMZW5ndGhCb3ggcmVzdWx0KGJsZW5kRnVuYyhhbmltLCBmcm9tLnRvcCgp
LCB0by50b3AoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAgICAgICAgYmxlbmRGdW5jKGFu
aW0sIGZyb20ucmlnaHQoKSwgdG8ucmlnaHQoKSwgcHJvZ3Jlc3MpLAorICAgICAgICAgICAgICAg
ICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20uYm90dG9tKCksIHRvLmJvdHRvbSgpLCBwcm9ncmVz
cyksCisgICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZWZ0KCksIHRv
LmxlZnQoKSwgcHJvZ3Jlc3MpKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5s
aW5lIFNWR0xlbmd0aFZhbHVlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIGZyb20sIGNvbnN0IFNWR0xlbmd0aFZhbHVlJiB0
bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIHJldHVybiBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQo
ZnJvbSwgdG8sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKK30KKworc3RhdGlj
IGlubGluZSBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgY29uc3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgZnJvbSwgY29u
c3QgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiYgdG8sIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICBz
aXplX3QgZnJvbUxlbmd0aCA9IGZyb20uc2l6ZSgpOworICAgIHNpemVfdCB0b0xlbmd0aCA9IHRv
LnNpemUoKTsKKyAgICBpZiAoIWZyb21MZW5ndGgpCisgICAgICAgIHJldHVybiAhcHJvZ3Jlc3Mg
PyBmcm9tIDogdG87CisgICAgaWYgKCF0b0xlbmd0aCkKKyAgICAgICAgcmV0dXJuIHByb2dyZXNz
ID09IDEgPyBmcm9tIDogdG87CisgICAgc2l6ZV90IHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGg7
CisgICAgaWYgKGZyb21MZW5ndGggIT0gdG9MZW5ndGgpIHsKKyAgICAgICAgaWYgKCFyZW1haW5k
ZXIoc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBzdGQ6Om1pbihmcm9tTGVuZ3RoLCB0
b0xlbmd0aCkpKQorICAgICAgICAgICAgcmVzdWx0TGVuZ3RoID0gc3RkOjptYXgoZnJvbUxlbmd0
aCwgdG9MZW5ndGgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXN1bHRMZW5ndGggPSBm
cm9tTGVuZ3RoICogdG9MZW5ndGg7CisgICAgfQorICAgIFZlY3RvcjxTVkdMZW5ndGhWYWx1ZT4g
cmVzdWx0KHJlc3VsdExlbmd0aCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXN1bHRM
ZW5ndGg7ICsraSkKKyAgICAgICAgcmVzdWx0W2ldID0gU1ZHTGVuZ3RoVmFsdWU6OmJsZW5kKGZy
b21baSAlIGZyb21MZW5ndGhdLCB0b1tpICUgdG9MZW5ndGhdLCBuYXJyb3dQcmVjaXNpb25Ub0Zs
b2F0KHByb2dyZXNzKSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBS
ZWZQdHI8U3R5bGVJbWFnZT4gY3Jvc3NmYWRlQmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIFN0eWxlQ2FjaGVkSW1hZ2UqIGZyb21TdHlsZUltYWdlLCBTdHlsZUNhY2hlZElt
YWdlKiB0b1N0eWxlSW1hZ2UsIGRvdWJsZSBwcm9ncmVzcykKK3sKKyAgICAvLyBJZiBwcm9ncmVz
cyBpcyBhdCBvbmUgb2YgdGhlIGV4dHJlbWVzLCB3ZSB3YW50IGdldENvbXB1dGVkU3R5bGUgdG8g
c2hvdyB0aGUgaW1hZ2UsCisgICAgLy8gbm90IGEgY29tcGxldGVkIGNyb3NzLWZhZGUsIHNvIHdl
IGhhbmQgYmFjayBvbmUgb2YgdGhlIGV4aXN0aW5nIGltYWdlcy4KKyAgICBpZiAoIXByb2dyZXNz
KQorICAgICAgICByZXR1cm4gZnJvbVN0eWxlSW1hZ2U7CisgICAgaWYgKHByb2dyZXNzID09IDEp
CisgICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7CisgICAgaWYgKCFmcm9tU3R5bGVJbWFnZS0+
Y2FjaGVkSW1hZ2UoKSB8fCAhdG9TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpKQorICAgICAgICBy
ZXR1cm4gdG9TdHlsZUltYWdlOworCisgICAgYXV0byBmcm9tSW1hZ2VWYWx1ZSA9IENTU0ltYWdl
VmFsdWU6OmNyZWF0ZSgqZnJvbVN0eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpOworICAgIGF1dG8g
dG9JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCp0b1N0eWxlSW1hZ2UtPmNhY2hl
ZEltYWdlKCkpOworICAgIGF1dG8gcGVyY2VudGFnZVZhbHVlID0gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShwcm9ncmVzcywgQ1NTVW5pdFR5cGU6OkNTU19OVU1CRVIpOworCisgICAgYXV0byBj
cm9zc2ZhZGVWYWx1ZSA9IENTU0Nyb3NzZmFkZVZhbHVlOjpjcmVhdGUoV1RGTW92ZShmcm9tSW1h
Z2VWYWx1ZSksIFdURk1vdmUodG9JbWFnZVZhbHVlKSwgV1RGTW92ZShwZXJjZW50YWdlVmFsdWUp
KTsKKyAgICByZXR1cm4gU3R5bGVHZW5lcmF0ZWRJbWFnZTo6Y3JlYXRlKFdURk1vdmUoY3Jvc3Nm
YWRlVmFsdWUpKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFN0eWxlSW1hZ2UqIGZy
b20sIFN0eWxlSW1hZ2UqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tIHx8
ICF0bykKKyAgICAgICAgcmV0dXJuIHRvOworCisgICAgZnJvbSA9IGZyb20tPnNlbGVjdGVkSW1h
Z2UoKTsKKyAgICB0byA9IHRvLT5zZWxlY3RlZEltYWdlKCk7CisKKyAgICBpZiAoIWZyb20gfHwg
IXRvKQorICAgICAgICByZXR1cm4gdG87ICAgIAorCisgICAgLy8gQW5pbWF0aW9uIGJldHdlZW4g
dHdvIGdlbmVyYXRlZCBpbWFnZXMuIENyb3NzIGZhZGUgZm9yIGFsbCBvdGhlciBjYXNlcy4KKyAg
ICBpZiAoaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlR2VuZXJhdGVk
SW1hZ2U+KCp0bykpIHsKKyAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZSYgZnJvbUdlbmVy
YXRlZCA9IGRvd25jYXN0PFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCpmcm9tKS5pbWFnZVZhbHVlKCk7
CisgICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8
U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisKKyAgICAgICAgaWYgKGlz
PENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQpICYmIGlzPENTU0ZpbHRlckltYWdl
VmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAgICAgICAgICAgLy8gQW5pbWF0aW9uIG9mIGdlbmVy
YXRlZCBpbWFnZXMganVzdCBwb3NzaWJsZSBpZiBpbnB1dCBpbWFnZXMgYXJlIGVxdWFsLgorICAg
ICAgICAgICAgLy8gT3RoZXJ3aXNlIGZhbGwgYmFjayB0byBjcm9zcyBmYWRlIGFuaW1hdGlvbi4K
KyAgICAgICAgICAgIENTU0ZpbHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxD
U1NGaWx0ZXJJbWFnZVZhbHVlPihmcm9tR2VuZXJhdGVkKTsKKyAgICAgICAgICAgIENTU0ZpbHRl
ckltYWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9H
ZW5lcmF0ZWQpOworICAgICAgICAgICAgaWYgKGZyb21GaWx0ZXIuZXF1YWxJbnB1dEltYWdlcyh0
b0ZpbHRlcikgJiYgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBibGVuZEZpbHRlcihhbmltLCBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCksIGZyb21GaWx0
ZXIuZmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIHByb2dy
ZXNzKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChpczxDU1NDcm9zc2ZhZGVWYWx1ZT4oZnJv
bUdlbmVyYXRlZCkgJiYgaXM8Q1NTQ3Jvc3NmYWRlVmFsdWU+KHRvR2VuZXJhdGVkKSkgeworICAg
ICAgICAgICAgQ1NTQ3Jvc3NmYWRlVmFsdWUmIGZyb21Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1ND
cm9zc2ZhZGVWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBDU1NDcm9zc2ZhZGVW
YWx1ZSYgdG9Dcm9zc2ZhZGUgPSBkb3duY2FzdDxDU1NDcm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0
ZWQpOworICAgICAgICAgICAgaWYgKGZyb21Dcm9zc2ZhZGUuZXF1YWxJbnB1dEltYWdlcyh0b0Ny
b3NzZmFkZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoYXV0byBjcm9zc2ZhZGVCbGVuZCA9IHRv
Q3Jvc3NmYWRlLmJsZW5kKGZyb21Dcm9zc2ZhZGUsIHByb2dyZXNzKSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIFN0eWxlR2VuZXJhdGVkSW1hZ2U6OmNyZWF0ZSgqY3Jvc3NmYWRlQmxlbmQp
OworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLy8gRklYTUU6IEFkZCBzdXBw
b3J0IGZvciBhbmltYXRpb24gYmV0d2VlbiB0d28gKmdyYWRpZW50KCkgZnVuY3Rpb25zLgorICAg
ICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE5OTU2Cisg
ICAgfSBlbHNlIGlmIChpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVD
YWNoZWRJbWFnZT4oKnRvKSkgeworICAgICAgICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9t
R2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFs
dWUoKTsKKyAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KGZyb21HZW5lcmF0ZWQp
KSB7CisgICAgICAgICAgICBDU1NGaWx0ZXJJbWFnZVZhbHVlJiBmcm9tRmlsdGVyID0gZG93bmNh
c3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCk7CisgICAgICAgICAgICBpZiAo
ZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpICYmIGRvd25jYXN0PFN0eWxlQ2FjaGVkSW1hZ2U+KCp0
bykuY2FjaGVkSW1hZ2UoKSA9PSBmcm9tRmlsdGVyLmNhY2hlZEltYWdlKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0sIGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwg
ZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCksIEZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jl
c3MpOworICAgICAgICB9CisgICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3
ZWVuIGNyb3NzLWZhZGUgYW5kIGltYWdlIHNvdXJjZS4KKyAgICB9IGVsc2UgaWYgKGlzPFN0eWxl
Q2FjaGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8pKSB7Cisg
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIHRvR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5
bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKS5pbWFnZVZhbHVlKCk7CisgICAgICAgIGlmIChpczxDU1NG
aWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCkpIHsKKyAgICAgICAgICAgIENTU0ZpbHRlcklt
YWdlVmFsdWUmIHRvRmlsdGVyID0gZG93bmNhc3Q8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5l
cmF0ZWQpOworICAgICAgICAgICAgaWYgKHRvRmlsdGVyLmNhY2hlZEltYWdlKCkgJiYgZG93bmNh
c3Q8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pLmNhY2hlZEltYWdlKCkgPT0gdG9GaWx0ZXIuY2Fj
aGVkSW1hZ2UoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0ZXIoYW5pbSwgdG9G
aWx0ZXIuY2FjaGVkSW1hZ2UoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCB0b0ZpbHRlci5maWx0ZXJP
cGVyYXRpb25zKCksIHByb2dyZXNzKTsKKyAgICAgICAgfQorICAgICAgICAvLyBGSVhNRTogQWRk
IGludGVycG9sYXRpb24gYmV0d2VlbiBpbWFnZSBzb3VyY2UgYW5kIGNyb3NzLWZhZGUuCisgICAg
fQorCisgICAgLy8gRklYTUU6IEFkZCBzdXBwb3J0IGNyb3NzIGZhZGUgYmV0d2VlbiBjYWNoZWQg
YW5kIGdlbmVyYXRlZCBpbWFnZXMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTc4MjkzCisgICAgaWYgKGlzPFN0eWxlQ2FjaGVkSW1hZ2U+KCpmcm9tKSAm
JiBpczxTdHlsZUNhY2hlZEltYWdlPigqdG8pKQorICAgICAgICByZXR1cm4gY3Jvc3NmYWRlQmxl
bmQoYW5pbSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oZnJvbSksIGRvd25jYXN0PFN0eWxl
Q2FjaGVkSW1hZ2U+KHRvKSwgcHJvZ3Jlc3MpOworCisgICAgcmV0dXJuIHRvOworfQorCitzdGF0
aWMgaW5saW5lIE5pbmVQaWVjZUltYWdlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgZnJvbSwgY29uc3QgTmluZVBp
ZWNlSW1hZ2UmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgaWYgKCFmcm9tLmhhc0ltYWdl
KCkgfHwgIXRvLmhhc0ltYWdlKCkpCisgICAgICAgIHJldHVybiB0bzsKKworICAgIC8vIEZJWE1F
ICg3NDExMik6IFN1cHBvcnQgdHJhbnNpdGlvbmluZyBiZXR3ZWVuIE5pbmVQaWVjZUltYWdlcyB0
aGF0IGRpZmZlciBieSBtb3JlIHRoYW4gaW1hZ2UgY29udGVudC4KKworICAgIGlmIChmcm9tLmlt
YWdlU2xpY2VzKCkgIT0gdG8uaW1hZ2VTbGljZXMoKSB8fCBmcm9tLmJvcmRlclNsaWNlcygpICE9
IHRvLmJvcmRlclNsaWNlcygpIHx8IGZyb20ub3V0c2V0KCkgIT0gdG8ub3V0c2V0KCkgfHwgZnJv
bS5maWxsKCkgIT0gdG8uZmlsbCgpIHx8IGZyb20uaG9yaXpvbnRhbFJ1bGUoKSAhPSB0by5ob3Jp
em9udGFsUnVsZSgpIHx8IGZyb20udmVydGljYWxSdWxlKCkgIT0gdG8udmVydGljYWxSdWxlKCkp
CisgICAgICAgIHJldHVybiB0bzsKKworICAgIGlmIChhdXRvKiByZW5kZXJlciA9IGFuaW0tPnJl
bmRlcmVyKCkpIHsKKyAgICAgICAgaWYgKGZyb20uaW1hZ2UoKS0+aW1hZ2VTaXplKHJlbmRlcmVy
LCAxLjApICE9IHRvLmltYWdlKCktPmltYWdlU2l6ZShyZW5kZXJlciwgMS4wKSkKKyAgICAgICAg
ICAgIHJldHVybiB0bzsKKyAgICB9CisKKyAgICByZXR1cm4gTmluZVBpZWNlSW1hZ2UoYmxlbmRG
dW5jKGFuaW0sIGZyb20uaW1hZ2UoKSwgdG8uaW1hZ2UoKSwgcHJvZ3Jlc3MpLAorICAgICAgICBm
cm9tLmltYWdlU2xpY2VzKCksIGZyb20uZmlsbCgpLCBmcm9tLmJvcmRlclNsaWNlcygpLCBmcm9t
Lm91dHNldCgpLCBmcm9tLmhvcml6b250YWxSdWxlKCksIGZyb20udmVydGljYWxSdWxlKCkpOwor
fQorCisjaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKKworc3RhdGljIGlubGluZSBGb250VmFy
aWF0aW9uU2V0dGluZ3MgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIGNvbnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgZnJvbSwgY29uc3QgRm9udFZhcmlh
dGlvblNldHRpbmdzJiB0bywgZG91YmxlIHByb2dyZXNzKQoreworICAgIGlmIChmcm9tLnNpemUo
KSAhPSB0by5zaXplKCkpCisgICAgICAgIHJldHVybiBGb250VmFyaWF0aW9uU2V0dGluZ3MoKTsK
KyAgICBGb250VmFyaWF0aW9uU2V0dGluZ3MgcmVzdWx0OworICAgIHVuc2lnbmVkIHNpemUgPSBm
cm9tLnNpemUoKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7Cisg
ICAgICAgIGF1dG8mIGZyb21JdGVtID0gZnJvbS5hdChpKTsKKyAgICAgICAgYXV0byYgdG9JdGVt
ID0gdG8uYXQoaSk7CisgICAgICAgIGlmIChmcm9tSXRlbS50YWcoKSAhPSB0b0l0ZW0udGFnKCkp
CisgICAgICAgICAgICByZXR1cm4gRm9udFZhcmlhdGlvblNldHRpbmdzKCk7CisgICAgICAgIGZs
b2F0IGludGVycG9sYXRlZCA9IGJsZW5kRnVuYyhhbmltLCBmcm9tSXRlbS52YWx1ZSgpLCB0b0l0
ZW0udmFsdWUoKSwgcHJvZ3Jlc3MpOworICAgICAgICByZXN1bHQuaW5zZXJ0KHsgZnJvbUl0ZW0u
dGFnKCksIGludGVycG9sYXRlZCB9KTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor
I2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgRm9udFNlbGVjdGlvblZhbHVlIGJsZW5kRnVuYyhjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGb250U2VsZWN0aW9uVmFsdWUgZnJv
bSwgRm9udFNlbGVjdGlvblZhbHVlIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgcmV0dXJu
IEZvbnRTZWxlY3Rpb25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZy
b20pLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8pLCBwcm9ncmVzcykpOworfQorCitzdGF0aWMgaW5s
aW5lIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3Bl
cnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4gZnJv
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiB0bywgZG91YmxlIHByb2dyZXNzKQorewor
ICAgIHJldHVybiBGb250U2VsZWN0aW9uVmFsdWUoYmxlbmRGdW5jKGFuaW0sIHN0YXRpY19jYXN0
PGZsb2F0Pihmcm9tLnZhbHVlKCkpLCBzdGF0aWNfY2FzdDxmbG9hdD4odG8udmFsdWUoKSksIHBy
b2dyZXNzKSk7Cit9CisKK2NsYXNzIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UpOworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVydHlJRCBwcm9wKQorICAgICAgICA6IG1fcHJv
cChwcm9wKQorICAgIHsKKyAgICB9CisgICAgdmlydHVhbCB+QW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSgpID0gZGVmYXVsdDsKKworICAgIHZpcnR1YWwgYm9vbCBpc1Nob3J0aGFuZFdyYXBw
ZXIoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQorICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29u
c3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCA9IDA7CisgICAg
dmlydHVhbCBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVu
ZGVyU3R5bGUqKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CisgICAgdmlydHVhbCB2b2lkIGJsZW5k
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBSZW5kZXJTdHlsZSosIGNvbnN0IFJl
bmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBkb3VibGUpIGNvbnN0ID0gMDsKKyAgICAK
KyNpZiAhTE9HX0RJU0FCTEVECisgICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3Vs
dCwgZG91YmxlKSBjb25zdCA9IDA7CisjZW5kaWYKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVy
dHkoKSBjb25zdCB7IHJldHVybiBtX3Byb3A7IH0KKworICAgIHZpcnR1YWwgYm9vbCBhbmltYXRp
b25Jc0FjY2VsZXJhdGVkKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KKworcHJpdmF0ZToKKyAg
ICBDU1NQcm9wZXJ0eUlEIG1fcHJvcDsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xh
c3MgUHJvcGVydHlXcmFwcGVyR2V0dGVyIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyKSgpIGNvbnN0KQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJv
cCkKKyAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wg
ZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVyKSgpOworICAg
IH0KKworICAgIFQgdmFsdWUoY29uc3QgUmVuZGVyU3R5bGUqIGEpIGNvbnN0CisgICAgeworICAg
ICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVE
CisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
ZmluYWwKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0g
PDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9t
ICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3Ry
ZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8
PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIFQgKFJl
bmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Cit9OworCit0ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KK2NsYXNzIFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
VD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFQgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoVCkpCisgICAgICAgIDogUHJvcGVydHlX
cmFwcGVyR2V0dGVyPFQ+KHByb3AsIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNv
bnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAg
eworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KlByb3BlcnR5
V3JhcHBlckdldHRlcjxUPjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVy
PFQ+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUKTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFt
ZSBUPgorY2xhc3MgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBQcm9wZXJ0eVdy
YXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgVCogKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
UmVmUHRyPFQ+JiYpKQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcCwg
Z2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9n
ZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHBy
b2dyZXNzKSk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6Oipt
X3NldHRlcikoUmVmUHRyPFQ+JiYpOworfTsKKworY2xhc3MgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
IDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgTGVuZ3RoJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShMZW5ndGgmJikpCisgICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+KHByb3AsIGdldHRlcikKKyAg
ICAgICAgLCBtX3NldHRlcihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgY2FuSW50
ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgcmV0dXJuICEoYS0+KlByb3BlcnR5V3JhcHBlckdl
dHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCkuaXNBdXRvKCkgJiYgIShiLT4qUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKS5pc0F1dG8oKTsKKyAg
ICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFu
aW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
KGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRl
cjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7CisgICAgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoTGVuZ3RoJiYpOworfTsK
KwordGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4geworICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdy
YXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBUJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShUJiYpKQorICAgICAgICA6IFBy
b3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1f
c2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5k
ZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qg
b3ZlcnJpZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0s
IChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChiLT4q
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7
CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlciko
VCYmKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoIDogcHVibGljIFJlZkNv
dW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhPcGVyYXRpb24+IHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJDbGlwUGF0aChDU1NQ
cm9wZXJ0eUlEIHByb3AsIENsaXBQYXRoT3BlcmF0aW9uKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIp
KCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8Q2xpcFBhdGhPcGVy
YXRpb24+JiYpKQorICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8Q2xpcFBhdGhP
cGVyYXRpb24+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisKKyAgICBib29s
IGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRo
ZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhlIHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhl
ciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJvdGggYXJlIG51bGwsIHJldHVybiB0cnVlLgor
ICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlm
ICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBDbGlwUGF0
aE9wZXJhdGlvbiogY2xpcFBhdGhBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgQ2xpcFBh
dGhPcGVyYXRpb24qIGNsaXBQYXRoQiA9IChiLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGlmIChj
bGlwUGF0aEEgPT0gY2xpcFBhdGhCKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IGlmICghY2xpcFBhdGhBIHx8ICFjbGlwUGF0aEIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIHJldHVybiAqY2xpcFBhdGhBID09ICpjbGlwUGF0aEI7CisgICAgfQorfTsKKwor
I2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250VmFy
aWF0aW9uU2V0dGluZ3MgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJpYXRpb25TZXR0
aW5ncz4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3Bl
cnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUlEIHByb3AsIEZvbnRW
YXJpYXRpb25TZXR0aW5ncyAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqc2V0dGVyKShGb250VmFyaWF0aW9uU2V0dGluZ3MpKQorICAgICAgICA6IFBy
b3BlcnR5V3JhcHBlcjxGb250VmFyaWF0aW9uU2V0dGluZ3M+KHByb3AsIGdldHRlciwgc2V0dGVy
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJ
ZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhl
IHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJv
dGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHZhcmlhdGlv
blNldHRpbmdzQSA9IChhLT4qbV9nZXR0ZXIpKCk7CisgICAgICAgIGNvbnN0IEZvbnRWYXJpYXRp
b25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NCID0gKGItPiptX2dldHRlcikoKTsKKyAgICAg
ICAgcmV0dXJuIHZhcmlhdGlvblNldHRpbmdzQSA9PSB2YXJpYXRpb25TZXR0aW5nc0I7CisgICAg
fQorfTsKKyNlbmRpZgorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFwZSA6IHB1YmxpYyBSZWZD
b3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJTaGFwZShDU1NQcm9wZXJ0eUlE
IHByb3AsIFNoYXBlVmFsdWUqIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
UmVuZGVyU3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxTaGFwZVZhbHVlPiYmKSkKKyAgICAgICAgOiBS
ZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFNoYXBlVmFsdWU+KHByb3AsIGdldHRlciwgc2V0dGVy
KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAvLyBJ
ZiB0aGUgc3R5bGUgcG9pbnRlcnMgYXJlIHRoZSBzYW1lLCBkb24ndCBib3RoZXIgZG9pbmcgdGhl
IHRlc3QuCisgICAgICAgIC8vIElmIGVpdGhlciBpcyBudWxsLCByZXR1cm4gZmFsc2UuIElmIGJv
dGggYXJlIG51bGwsIHJldHVybiB0cnVlLgorICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUEgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBTaGFwZVZhbHVlKiBzaGFwZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAg
ICBpZiAoc2hhcGVBID09IHNoYXBlQikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIXNoYXBlQSB8fCAhc2hhcGVCKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gKnNoYXBlQSA9PSAqc2hhcGVCOworICAgIH0KK307CisKK2NsYXNzIFN0eWxl
SW1hZ2VQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxT
dHlsZUltYWdlPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3AsIFN0eWxlSW1hZ2Uq
IChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0
ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBSZWZDb3VudGVkUHJvcGVydHlX
cmFwcGVyPFN0eWxlSW1hZ2U+KHByb3AsIGdldHRlciwgc2V0dGVyKQorICAgIHsKKyAgICB9CisK
KyAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUq
IGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1fZ2V0dGVyKSgp
OworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgpOworICAgICAg
ICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7CisgICAgfQor
fTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQ29sb3IgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IENvbG9yJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIFByb3BlcnR5V3JhcHBlckNvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3Qg
Q29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6
OipzZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVy
PGNvbnN0IENvbG9yJj4ocHJvcCwgZ2V0dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikK
KyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7
CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBDb2xvciY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9
CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShjb25zdCBD
b2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5IDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxmbG9hdD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkT3BhY2l0eSgpCisg
ICAgICAgIDogUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eU9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6b3BhY2l0eSwgJlJlbmRlclN0eWxlOjpzZXRPcGFjaXR5KQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgZHN0LT5zZXRPcGFjaXR5KGJsZW5kRnVuYyhhbmltLCBhLT5vcGFjaXR5KCksIGIt
Pm9wYWNpdHkoKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBw
ZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyY+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5zZm9ybSgpCisgICAgICAgIDog
UHJvcGVydHlXcmFwcGVyPGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMmPihDU1NQcm9wZXJ0eVRy
YW5zZm9ybSwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm0sICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNm
b3JtKQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiB0cnVlOyB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgZHN0LT5zZXRUcmFuc2Zvcm0oYmxlbmRGdW5jKGFu
aW0sIGEtPnRyYW5zZm9ybSgpLCBiLT50cmFuc2Zvcm0oKSwgcHJvZ3Jlc3MpKTsKKyAgICB9Cit9
OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVy
PGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5SUQgcHJvcGVy
dHlJRCwgY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgRmlsdGVyT3BlcmF0aW9ucyYp
KQorICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJj4ocHJv
cGVydHlJRCwgZ2V0dGVyLCBzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgYW5pbWF0
aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4g
cHJvcGVydHkoKSA9PSBDU1NQcm9wZXJ0eUZpbHRlcgorI2lmIEVOQUJMRShGSUxURVJTX0xFVkVM
XzIpCisgICAgICAgICAgICB8fCBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5V2Via2l0QmFja2Ry
b3BGaWx0ZXIKKyNlbmRpZgorICAgICAgICAgICAgOworICAgIH0KKworICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJj46Om1fZ2V0dGVyKSgpLCAoYi0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBGaWx0
ZXJPcGVyYXRpb25zJj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcywgcHJvcGVydHkoKSkpOworICAg
IH0KK307CisKK3N0YXRpYyBpbmxpbmUgc2l6ZV90IHNoYWRvd0xpc3RMZW5ndGgoY29uc3QgU2hh
ZG93RGF0YSogc2hhZG93KQoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBmb3IgKGNvdW50ID0g
MDsgc2hhZG93OyBzaGFkb3cgPSBzaGFkb3ctPm5leHQoKSkKKyAgICAgICAgKytjb3VudDsKKyAg
ICByZXR1cm4gY291bnQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93Rm9yQmxlbmRpbmcoY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93LCBjb25zdCBTaGFkb3dE
YXRhKiBvdGhlclNoYWRvdykKK3sKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8U2hhZG93RGF0
YT4gZGVmYXVsdFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQoKSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5v
cm1hbCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0U2hhZG93RGF0YShMYXlvdXRQb2ludCgp
LCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIGZhbHNlLCBDb2xvcjo6dHJhbnNwYXJlbnRCbGFj
ayk7CisgICAgc3RhdGljIE5ldmVyRGVzdHJveWVkPFNoYWRvd0RhdGE+IGRlZmF1bHRXZWJLaXRC
b3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpOb3JtYWwsIHRy
dWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKKyAgICBzdGF0aWMgTmV2ZXJEZXN0cm95ZWQ8
U2hhZG93RGF0YT4gZGVmYXVsdEluc2V0V2ViS2l0Qm94U2hhZG93RGF0YShMYXlvdXRQb2ludCgp
LCAwLCAwLCBTaGFkb3dTdHlsZTo6SW5zZXQsIHRydWUsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNr
KTsKKworICAgIGlmIChzcmNTaGFkb3cpCisgICAgICAgIHJldHVybiBzcmNTaGFkb3c7CisKKyAg
ICBpZiAob3RoZXJTaGFkb3ctPnN0eWxlKCkgPT0gU2hhZG93U3R5bGU6Okluc2V0KQorICAgICAg
ICByZXR1cm4gb3RoZXJTaGFkb3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdEluc2V0
V2ViS2l0Qm94U2hhZG93RGF0YS5nZXQoKSA6ICZkZWZhdWx0SW5zZXRTaGFkb3dEYXRhLmdldCgp
OworCisgICAgcmV0dXJuIG90aGVyU2hhZG93LT5pc1dlYmtpdEJveFNoYWRvdygpID8gJmRlZmF1
bHRXZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgpIDogJmRlZmF1bHRTaGFkb3dEYXRhLmdldCgpOwor
fQorCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3cgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgU2hhZG93
RGF0YSogKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKSkKKyAgICAgICAgOiBB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0
dGVyKQorICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgYm9v
bCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25z
dCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hhZG93QSA9IChhLT4qbV9nZXR0ZXIpKCk7
CisgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IgPSAoYi0+Km1fZ2V0dGVyKSgpOwor
CisgICAgICAgIHdoaWxlICh0cnVlKSB7CisgICAgICAgICAgICAvLyBlbmQgb2YgYm90aCBsaXN0
cworICAgICAgICAgICAgaWYgKCFzaGFkb3dBICYmICFzaGFkb3dCKQorICAgICAgICAgICAgICAg
IHJldHVybiB0cnVlOworCisgICAgICAgICAgICAvLyBlbmQgb2YganVzdCBvbmUgb2YgdGhlIGxp
c3RzCisgICAgICAgICAgICBpZiAoIXNoYWRvd0EgfHwgIXNoYWRvd0IpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBpZiAoKnNoYWRvd0EgIT0gKnNoYWRvd0Ip
CisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICBzaGFkb3dBID0g
c2hhZG93QS0+bmV4dCgpOworICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQoKTsK
KyAgICAgICAgfQorCisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIHZvaWQgYmxl
bmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRz
dCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJv
Z3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKKyAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc2hh
ZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7CisKKyAgICAgICAgaW50IGZyb21MZW5ndGggPSBzaGFk
b3dMaXN0TGVuZ3RoKHNoYWRvd0EpOworICAgICAgICBpbnQgdG9MZW5ndGggPSBzaGFkb3dMaXN0
TGVuZ3RoKHNoYWRvd0IpOworCisgICAgICAgIGlmIChmcm9tTGVuZ3RoID09IHRvTGVuZ3RoIHx8
IChmcm9tTGVuZ3RoIDw9IDEgJiYgdG9MZW5ndGggPD0gMSkpIHsKKyAgICAgICAgICAgIChkc3Qt
PiptX3NldHRlcikoYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVz
cywgc2hhZG93QSwgc2hhZG93QiksIGZhbHNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRNaXNtYXRjaGVkU2hhZG93TGlz
dHMoYW5pbSwgcHJvZ3Jlc3MsIHNoYWRvd0EsIHNoYWRvd0IsIGZyb21MZW5ndGgsIHRvTGVuZ3Ro
KSwgZmFsc2UpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1F
OiBiZXR0ZXIgbG9nZ2luZy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyBTaGFkb3dEYXRhIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0
TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSk7CisgICAgfQorI2VuZGlmCisKK3By
aXZhdGU6CisgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kU2ltcGxlT3JNYXRj
aGVkU2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91
YmxlIHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRh
KiBzaGFkb3dCKSBjb25zdAorICAgIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0Rh
dGE+IG5ld1NoYWRvd0RhdGE7CisgICAgICAgIFNoYWRvd0RhdGEqIGxhc3RTaGFkb3cgPSAwOwor
CisgICAgICAgIHdoaWxlIChzaGFkb3dBIHx8IHNoYWRvd0IpIHsKKyAgICAgICAgICAgIGNvbnN0
IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHNoYWRvd0EsIHNoYWRv
d0IpOworICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93ID0gc2hhZG93Rm9y
QmxlbmRpbmcoc2hhZG93Qiwgc2hhZG93QSk7CisKKyAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0
cjxTaGFkb3dEYXRhPiBibGVuZGVkU2hhZG93ID0gYmxlbmRGdW5jKGFuaW0sIHNyY1NoYWRvdywg
ZHN0U2hhZG93LCBwcm9ncmVzcyk7CisgICAgICAgICAgICBTaGFkb3dEYXRhKiBibGVuZGVkU2hh
ZG93UHRyID0gYmxlbmRlZFNoYWRvdy5nZXQoKTsKKworICAgICAgICAgICAgaWYgKCFsYXN0U2hh
ZG93KQorICAgICAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZNb3ZlKGJsZW5kZWRTaGFk
b3cpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIGxhc3RTaGFkb3ctPnNldE5l
eHQoV1RGTW92ZShibGVuZGVkU2hhZG93KSk7CisKKyAgICAgICAgICAgIGxhc3RTaGFkb3cgPSBi
bGVuZGVkU2hhZG93UHRyOworCisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QSA/IHNoYWRv
d0EtPm5leHQoKSA6IDA7CisgICAgICAgICAgICBzaGFkb3dCID0gc2hhZG93QiA/IHNoYWRvd0It
Pm5leHQoKSA6IDA7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsK
KyAgICB9CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRNaXNtYXRjaGVk
U2hhZG93TGlzdHMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgZG91Ymxl
IHByb2dyZXNzLCBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dBLCBjb25zdCBTaGFkb3dEYXRhKiBz
aGFkb3dCLCBpbnQgZnJvbUxlbmd0aCwgaW50IHRvTGVuZ3RoKSBjb25zdAorICAgIHsKKyAgICAg
ICAgLy8gVGhlIHNoYWRvd3MgaW4gU2hhZG93RGF0YSBhcmUgc3RvcmVkIGluIHJldmVyc2Ugb3Jk
ZXIsIHNvIHdoZW4gYW5pbWF0aW5nIG1pc21hdGNoZWQgbGlzdHMsCisgICAgICAgIC8vIHJldmVy
c2UgdGhlbSBhbmQgbWF0Y2ggZnJvbSB0aGUgZW5kLgorICAgICAgICBWZWN0b3I8Y29uc3QgU2hh
ZG93RGF0YSosIDQ+IGZyb21TaGFkb3dzKGZyb21MZW5ndGgpOworICAgICAgICBmb3IgKGludCBp
ID0gZnJvbUxlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7CisgICAgICAgICAgICBmcm9tU2hhZG93
c1tpXSA9IHNoYWRvd0E7CisgICAgICAgICAgICBzaGFkb3dBID0gc2hhZG93QS0+bmV4dCgpOwor
ICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPGNvbnN0IFNoYWRvd0RhdGEqLCA0PiB0b1NoYWRv
d3ModG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBpID0gdG9MZW5ndGggLSAxOyBpID49IDA7
IC0taSkgeworICAgICAgICAgICAgdG9TaGFkb3dzW2ldID0gc2hhZG93QjsKKyAgICAgICAgICAg
IHNoYWRvd0IgPSBzaGFkb3dCLT5uZXh0KCk7CisgICAgICAgIH0KKworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKKworICAgICAgICBpbnQgbWF4TGVu
Z3RoID0gc3RkOjptYXgoZnJvbUxlbmd0aCwgdG9MZW5ndGgpOworICAgICAgICBmb3IgKGludCBp
ID0gMDsgaSA8IG1heExlbmd0aDsgKytpKSB7CisgICAgICAgICAgICBjb25zdCBTaGFkb3dEYXRh
KiBmcm9tU2hhZG93ID0gaSA8IGZyb21MZW5ndGggPyBmcm9tU2hhZG93c1tpXSA6IDA7CisgICAg
ICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiB0b1NoYWRvdyA9IGkgPCB0b0xlbmd0aCA/IHRvU2hh
ZG93c1tpXSA6IDA7CisKKyAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNyY1NoYWRvdyA9
IHNoYWRvd0ZvckJsZW5kaW5nKGZyb21TaGFkb3csIHRvU2hhZG93KTsKKyAgICAgICAgICAgIGNv
bnN0IFNoYWRvd0RhdGEqIGRzdFNoYWRvdyA9IHNoYWRvd0ZvckJsZW5kaW5nKHRvU2hhZG93LCBm
cm9tU2hhZG93KTsKKworICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJs
ZW5kZWRTaGFkb3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dy
ZXNzKTsKKyAgICAgICAgICAgIC8vIEluc2VydCBhdCB0aGUgc3RhcnQgb2YgdGhlIGxpc3QgdG8g
cHJlc2VydmUgdGhlIG9yZGVyLgorICAgICAgICAgICAgYmxlbmRlZFNoYWRvdy0+c2V0TmV4dChX
VEZNb3ZlKG5ld1NoYWRvd0RhdGEpKTsKKyAgICAgICAgICAgIG5ld1NoYWRvd0RhdGEgPSBXVEZN
b3ZlKGJsZW5kZWRTaGFkb3cpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIG5ld1NoYWRv
d0RhdGE7CisgICAgfQorCisgICAgY29uc3QgU2hhZG93RGF0YSogKFJlbmRlclN0eWxlOjoqbV9n
ZXR0ZXIpKCkgY29uc3Q7CisgICAgdm9pZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoc3RkOjp1
bmlxdWVfcHRyPFNoYWRvd0RhdGE+LCBib29sKTsKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBl
ck1heWJlSW52YWxpZENvbG9yIDogcHVibGljIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2Ug
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIFByb3BlcnR5V3Jh
cHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIp
KGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wKQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0
ZXIpCisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBh
LCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlm
IChhID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFi
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIENvbG9yIGZyb21Db2xvciA9
IHZhbHVlKGEpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAg
aWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAg
ICAgIHJldHVybiB0cnVlOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAg
ICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5p
c1ZhbGlkKCkpCisgICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29sb3IoKTsKKworICAgICAgICBy
ZXR1cm4gZnJvbUNvbG9yID09IHRvQ29sb3I7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25z
dCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25z
dCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykg
Y29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIENvbG9yIGZyb21Db2xvciA9IHZhbHVlKGEp
OworICAgICAgICBDb2xvciB0b0NvbG9yID0gdmFsdWUoYik7CisKKyAgICAgICAgaWYgKCFmcm9t
Q29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFsaWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkpCisgICAgICAgICAgICBmcm9t
Q29sb3IgPSBhLT5jb2xvcigpOworICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAg
ICAgICAgICAgdG9Db2xvciA9IGItPmNvbG9yKCk7CisgICAgICAgIChkc3QtPiptX3NldHRlciko
YmxlbmRGdW5jKGFuaW0sIGZyb21Db2xvciwgdG9Db2xvciwgcHJvZ3Jlc3MpKTsKKyAgICB9CisK
KyAgICBDb2xvciB2YWx1ZShjb25zdCBSZW5kZXJTdHlsZSogYSkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQK
KyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBm
aW5hbAorICAgIHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBM
T0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0
UHJvcGVydHlOYW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8g
IiA8PCB2YWx1ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVj
dGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAg
fQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6Km1f
Z2V0dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0
IENvbG9yJik7Cit9OworCisKK2VudW0gTWF5YmVJbnZhbGlkQ29sb3JUYWcgeyBNYXliZUludmFs
aWRDb2xvciB9OworY2xhc3MgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IgOiBw
dWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwgY29u
c3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJl
bmRlclN0eWxlOjoqdmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCisgICAgICAgICwgbV93cmFwcGVyKG1ha2VV
bmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKKyAgICAg
ICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyQ29sb3I+KHBy
b3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQorICAgIHsKKyAgICB9CisgICAgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBNYXli
ZUludmFsaWRDb2xvclRhZywgY29uc3QgQ29sb3ImIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBj
b25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKGNvbnN0IENvbG9yJiksIGNvbnN0IENv
bG9yJiAoUmVuZGVyU3R5bGU6Oip2aXNpdGVkR2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJT
dHlsZTo6KnZpc2l0ZWRTZXR0ZXIpKGNvbnN0IENvbG9yJikpCisgICAgICAgIDogQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQorICAgICAgICAsIG1fd3JhcHBlcihtYWtlVW5pcXVl
PFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yPihwcm9wLCBnZXR0ZXIsIHNldHRlcikp
CisgICAgICAgICwgbV92aXNpdGVkV3JhcHBlcihtYWtlVW5pcXVlPFByb3BlcnR5V3JhcHBlck1h
eWJlSW52YWxpZENvbG9yPihwcm9wLCB2aXNpdGVkR2V0dGVyLCB2aXNpdGVkU2V0dGVyKSkKKyAg
ICB7CisgICAgfQorICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIHJldHVybiBtX3dy
YXBwZXItPmVxdWFscyhhLCBiKSAmJiBtX3Zpc2l0ZWRXcmFwcGVyLT5lcXVhbHMoYSwgYik7Cisg
ICAgfQorICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBt
X3dyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOworICAgICAgICBtX3Zp
c2l0ZWRXcmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyAgICB9CisK
KyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJs
ZSBwcm9ncmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIG1fd3JhcHBlci0+bG9nQmxl
bmQoYSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7CisgICAgICAgIG1fdmlzaXRlZFdyYXBwZXItPmxv
Z0JsZW5kKGEsIGIsIHJlc3VsdCwgcHJvZ3Jlc3MpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRl
OgorICAgIHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPiBtX3dy
YXBwZXI7CisgICAgc3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+
IG1fdmlzaXRlZFdyYXBwZXI7Cit9OworCisvLyBXcmFwcGVyIGJhc2UgY2xhc3MgZm9yIGFuIGFu
aW1hdGFibGUgcHJvcGVydHkgaW4gYSBGaWxsTGF5ZXIKK2NsYXNzIEZpbGxMYXllckFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UoQ1NTUHJvcGVy
dHlJRCBwcm9wZXJ0eSkKKyAgICAgICAgOiBtX3Byb3BlcnR5KHByb3BlcnR5KQorICAgIHsKKyAg
ICB9CisgICAgdmlydHVhbCB+RmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSgp
ID0gZGVmYXVsdDsKKworICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHkoKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnR5OyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXll
ciosIGNvbnN0IEZpbGxMYXllciopIGNvbnN0ID0gMDsKKyAgICB2aXJ0dWFsIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbGxMYXllciosIGNvbnN0IEZpbGxM
YXllciosIGNvbnN0IEZpbGxMYXllciosIGRvdWJsZSkgY29uc3QgPSAwOworCisjaWYgIUxPR19E
SVNBQkxFRAorICAgIHZpcnR1YWwgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3Vs
dCwgY29uc3QgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7
CisjZW5kaWYKK3ByaXZhdGU6CisgICAgQ1NTUHJvcGVydHlJRCBtX3Byb3BlcnR5OworfTsKKwor
dGVtcGxhdGUgPHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXIgOiBwdWJsaWMgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoRmlsbExh
eWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyKTsKK3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgVCAoRmlsbExheWVyOjoqZ2V0
dGVyKSgpIGNvbnN0KQorICAgICAgICA6IEZpbGxMYXllckFuaW1hdGlvblByb3BlcnR5V3JhcHBl
ckJhc2UocHJvcGVydHkpCisgICAgICAgICwgbV9nZXR0ZXIoZ2V0dGVyKQorICAgIHsKKyAgICB9
CisKKyAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciog
YikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChhID09IGIpCisgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICByZXR1cm4gKGEtPiptX2dldHRlcikoKSA9PSAoYi0+Km1fZ2V0dGVy
KSgpOworICAgIH0KKworICAgIFQgdmFsdWUoY29uc3QgRmlsbExheWVyKiBsYXllcikgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAobGF5ZXItPiptX2dldHRlcikoKTsKKyAgICB9CisKKyNp
ZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3Vs
dCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVz
cykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRp
b25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHko
KSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQg
IiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3Mp
IDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVk
OgorICAgIFQgKEZpbGxMYXllcjo6Km1fZ2V0dGVyKSgpIGNvbnN0OworfTsKKwordGVtcGxhdGUg
PHR5cGVuYW1lIFQ+CitjbGFzcyBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFQmIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3Qs
IHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoVCkpCisgICAgICAgIDogRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPihwcm9wZXJ0eSwgZ2V0dGVyKQorICAgICAgICAsIG1f
c2V0dGVyKHNldHRlcikKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExh
eWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4q
RmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCksIChi
LT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6bV9nZXR0ZXIpKCks
IHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxl
bmQoY29uc3QgRmlsbExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmls
bExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwg
Z2V0UHJvcGVydHlOYW1lKEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46
OnByb3BlcnR5KCkpCisgICAgICAgICAgICA8PCAiIGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+Ojp2YWx1ZShhKQorICAgICAgICAgICAgPDwgIiB0byAi
IDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGIpCisg
ICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGlu
Z0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVy
R2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlmCisKK3Byb3Rl
Y3RlZDoKKyAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoVCk7Cit9OworCitjbGFzcyBG
aWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IExlbmd0aCYgKEZpbGxMYXllcjo6Kmxlbmd0aEdldHRl
cikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqbGVuZ3RoU2V0dGVyKShMZW5ndGgpLCBFZGdl
IChGaWxsTGF5ZXI6OipvcmlnaW5HZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6Km9y
aWdpblNldHRlcikoRWRnZSksIEVkZ2UgZmFyRWRnZSkKKyAgICAgICAgOiBGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcGVydHksIGxlbmd0aEdldHRlcikK
KyAgICAgICAgLCBtX2xlbmd0aFNldHRlcihsZW5ndGhTZXR0ZXIpCisgICAgICAgICwgbV9vcmln
aW5HZXR0ZXIob3JpZ2luR2V0dGVyKQorICAgICAgICAsIG1fb3JpZ2luU2V0dGVyKG9yaWdpblNl
dHRlcikKKyAgICAgICAgLCBtX2ZhckVkZ2UoZmFyRWRnZSkKKyAgICB7CisgICAgfQorCisgICAg
Ym9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIpIGNvbnN0
IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgTGVuZ3RoIHRv
TGVuZ3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVuZ3Ro
Jj46Om1fZ2V0dGVyKSgpOworICAgICAgICAKKyAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChhLT4q
bV9vcmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdpbkdl
dHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIHJldHVybiBmcm9tTGVuZ3RoID09IHRvTGVuZ3Ro
ICYmIGZyb21FZGdlID09IHRvRWRnZTsKKyAgICB9CisKKyAgICB2b2lkIGJsZW5kKGNvbnN0IENT
U1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxs
TGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVy
cmlkZQorICAgIHsKKyAgICAgICAgTGVuZ3RoIGZyb21MZW5ndGggPSAoYS0+KkZpbGxMYXllclBy
b3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9nZXR0ZXIpKCk7CisgICAgICAg
IExlbmd0aCB0b0xlbmd0aCA9IChiLT4qRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKKyAgICAgICAgCisgICAgICAgIEVkZ2UgZnJvbUVk
Z2UgPSAoYS0+Km1fb3JpZ2luR2V0dGVyKSgpOworICAgICAgICBFZGdlIHRvRWRnZSA9IChiLT4q
bV9vcmlnaW5HZXR0ZXIpKCk7CisgICAgICAgIAorICAgICAgICBpZiAoZnJvbUVkZ2UgIT0gdG9F
ZGdlKSB7CisgICAgICAgICAgICAvLyBDb252ZXJ0IHRoZSByaWdodC9ib3R0b20gaW50byBhIGNh
bGMgZXhwcmVzc2lvbiwKKyAgICAgICAgICAgIGlmIChmcm9tRWRnZSA9PSBtX2ZhckVkZ2UpCisg
ICAgICAgICAgICAgICAgZnJvbUxlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xlbmd0
aChmcm9tTGVuZ3RoKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRvRWRnZSA9PSBtX2ZhckVkZ2Up
IHsKKyAgICAgICAgICAgICAgICB0b0xlbmd0aCA9IGNvbnZlcnRUbzEwMFBlcmNlbnRNaW51c0xl
bmd0aCh0b0xlbmd0aCk7CisgICAgICAgICAgICAgICAgKGRzdC0+Km1fb3JpZ2luU2V0dGVyKShm
cm9tRWRnZSk7IC8vIE5vdyB3ZSBoYXZlIGEgY2FsYygxMDAlIC0gbCksIGl0J3MgcmVsYXRpdmUg
dG8gdGhlIGxlZnQvdG9wIGVkZ2UuCisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAg
ICAoZHN0LT4qbV9sZW5ndGhTZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCBmcm9tTGVuZ3RoLCB0b0xl
bmd0aCwgcHJvZ3Jlc3MpKTsKKyAgICB9CisKKyNpZiAhTE9HX0RJU0FCTEVECisgICAgdm9pZCBs
b2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcg
IiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkg
PDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1i
ZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQp
KTsKKyAgICB9CisjZW5kaWYKKworcHJvdGVjdGVkOgorICAgIHZvaWQgKEZpbGxMYXllcjo6Km1f
bGVuZ3RoU2V0dGVyKShMZW5ndGgpOworICAgIEVkZ2UgKEZpbGxMYXllcjo6Km1fb3JpZ2luR2V0
dGVyKSgpIGNvbnN0OworICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fb3JpZ2luU2V0dGVyKShFZGdl
KTsKKyAgICBFZGdlIG1fZmFyRWRnZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgorY2xh
c3MgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5SUQgcHJvcGVydHksIFQqIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZp
bGxMYXllcjo6KnNldHRlcikoUmVmUHRyPFQ+JiYpKQorICAgICAgICA6IEZpbGxMYXllclByb3Bl
cnR5V3JhcHBlckdldHRlcjxUKj4ocHJvcGVydHksIGdldHRlcikKKyAgICAgICAgLCBtX3NldHRl
cihzZXR0ZXIpCisgICAgeworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisg
ICAgeworICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5kRnVuYyhhbmltLCAoYS0+KkZpbGxM
YXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCAoYi0+KkZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOworICAg
IH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXll
ciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAgTE9HX1dJVEhfU1RSRUFN
KEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShG
aWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojpwcm9wZXJ0eSgpKQorICAgICAgICAg
ICAgPDwgIiBmcm9tICIgPDwgRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFs
dWUoYSkKKyAgICAgICAgICAgIDw8ICIgdG8gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8VCo+Ojp2YWx1ZShiKQorICAgICAgICAgICAgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06
OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IEZp
bGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnZhbHVlKHJlc3VsdCkpOworICAgIH0K
KyNlbmRpZgorCitwcm90ZWN0ZWQ6CisgICAgdm9pZCAoRmlsbExheWVyOjoqbV9zZXR0ZXIpKFJl
ZlB0cjxUPiYmKTsKK307CisKK2NsYXNzIEZpbGxMYXllclN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBw
ZXIgOiBwdWJsaWMgRmlsbExheWVyUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxTdHlsZUltYWdl
PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgRmlsbExheWVy
U3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBTdHlsZUlt
YWdlKiAoRmlsbExheWVyOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChGaWxsTGF5ZXI6OipzZXR0
ZXIpKFJlZlB0cjxTdHlsZUltYWdlPiYmKSkKKyAgICAgICAgOiBGaWxsTGF5ZXJSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+KHByb3BlcnR5LCBnZXR0ZXIsIHNldHRlcikKKyAg
ICB7CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBG
aWxsTGF5ZXIqIGIpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQor
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUEgPSAoYS0+Km1f
Z2V0dGVyKSgpOworICAgICAgICBTdHlsZUltYWdlKiBpbWFnZUIgPSAoYi0+Km1fZ2V0dGVyKSgp
OworICAgICAgICByZXR1cm4gYXJlUG9pbnRpbmdUb0VxdWFsRGF0YShpbWFnZUEsIGltYWdlQik7
CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxFRAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmls
bExheWVyKiByZXN1bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBk
b3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlO
YW1lKHByb3BlcnR5KCkpIDw8ICIgZnJvbSAiIDw8IHZhbHVlKGEpIDw8ICIgdG8gIiA8PCB2YWx1
ZShiKSA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVn
ZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgdmFsdWUocmVzdWx0KSk7CisgICAgfQorI2VuZGlm
Cit9OworCitjbGFzcyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlv
blByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHR5cGVkZWYgY29uc3QgRmlsbExheWVyJiAoUmVuZGVyU3R5bGU6OipMYXllcnNH
ZXR0ZXIpKCkgY29uc3Q7CisgICAgdHlwZWRlZiBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6Kkxh
eWVyc0FjY2Vzc29yKSgpOworCisgICAgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eUlEIHByb3BlcnR5LCBMYXllcnNHZXR0ZXIgZ2V0dGVyLCBMYXllcnNBY2Nlc3NvciBhY2Nl
c3NvcikKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3BlcnR5KQor
ICAgICAgICAsIG1fbGF5ZXJzR2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX2xheWVyc0FjY2Vz
c29yKGFjY2Vzc29yKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChwcm9wZXJ0eSkgeworICAgICAg
ICBjYXNlIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWDoKKyAgICAgICAgY2FzZSBDU1NQ
cm9wZXJ0eVdlYmtpdE1hc2tQb3NpdGlvblg6CisgICAgICAgICAgICBtX2ZpbGxMYXllclByb3Bl
cnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+
KHByb3BlcnR5LCAmRmlsbExheWVyOjp4UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFhQb3NpdGlv
biwgJkZpbGxMYXllcjo6YmFja2dyb3VuZFhPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91
bmRYT3JpZ2luLCBFZGdlOjpSaWdodCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblk6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVy
dHlXZWJraXRNYXNrUG9zaXRpb25ZOgorICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxMYXllclBvc2l0aW9uUHJvcGVydHlXcmFwcGVyPihwcm9w
ZXJ0eSwgJkZpbGxMYXllcjo6eVBvc2l0aW9uLCAmRmlsbExheWVyOjpzZXRZUG9zaXRpb24sICZG
aWxsTGF5ZXI6OmJhY2tncm91bmRZT3JpZ2luLCAmRmlsbExheWVyOjpzZXRCYWNrZ3JvdW5kWU9y
aWdpbiwgRWRnZTo6Qm90dG9tKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIENT
U1Byb3BlcnR5QmFja2dyb3VuZFNpemU6CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRC
YWNrZ3JvdW5kU2l6ZToKKyAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tTaXplOgor
ICAgICAgICAgICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIgPSBtYWtlVW5pcXVlPEZpbGxM
YXllclByb3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OnNp
emVMZW5ndGgsICZGaWxsTGF5ZXI6OnNldFNpemVMZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2U6CisgICAgICAgICAgICBt
X2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyU3R5bGVJbWFn
ZVByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHksICZGaWxsTGF5ZXI6OmltYWdlLCAmRmlsbExheWVy
OjpzZXRJbWFnZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAg
IHsKKyAgICAgICAgaWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAg
ICBpZiAoIWEgfHwgIWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgYXV0
byogZnJvbUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7CisgICAgICAgIGF1dG8qIHRv
TGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKworICAgICAgICB3aGlsZSAoZnJvbUxh
eWVyICYmIHRvTGF5ZXIpIHsKKyAgICAgICAgICAgIGlmICghbV9maWxsTGF5ZXJQcm9wZXJ0eVdy
YXBwZXItPmVxdWFscyhmcm9tTGF5ZXIsIHRvTGF5ZXIpKQorICAgICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgICAgICAgICAgZnJvbUxheWVyID0gZnJvbUxheWVyLT5uZXh0KCk7Cisg
ICAgICAgICAgICB0b0xheWVyID0gdG9MYXllci0+bmV4dCgpOworICAgICAgICB9CisKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJp
ZGUKKyAgICB7CisgICAgICAgIGF1dG8qIGFMYXllciA9ICYoYS0+Km1fbGF5ZXJzR2V0dGVyKSgp
OworICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKGItPiptX2xheWVyc0dldHRlcikoKTsKKyAgICAg
ICAgYXV0byogZHN0TGF5ZXIgPSAmKGRzdC0+Km1fbGF5ZXJzQWNjZXNzb3IpKCk7CisKKyAgICAg
ICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsKKyAgICAgICAgICAgIG1f
ZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5ibGVuZChhbmltLCBkc3RMYXllciwgYUxheWVyLCBi
TGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXllci0+bmV4dCgpOwor
ICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAgICAgICBkc3RMYXll
ciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisKKyNpZiAhTE9HX0RJU0FC
TEVECisgICAgdm9pZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3Mp
IGNvbnN0IGZpbmFsCisgICAgeworICAgICAgICBhdXRvKiBhTGF5ZXIgPSAmKGZyb20tPiptX2xh
eWVyc0dldHRlcikoKTsKKyAgICAgICAgYXV0byogYkxheWVyID0gJih0by0+Km1fbGF5ZXJzR2V0
dGVyKSgpOworICAgICAgICBhdXRvKiBkc3RMYXllciA9ICYocmVzdWx0LT4qbV9sYXllcnNHZXR0
ZXIpKCk7CisKKyAgICAgICAgd2hpbGUgKGFMYXllciAmJiBiTGF5ZXIgJiYgZHN0TGF5ZXIpIHsK
KyAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVyLT5sb2dCbGVuZChkc3RMYXll
ciwgYUxheWVyLCBiTGF5ZXIsIHByb2dyZXNzKTsKKyAgICAgICAgICAgIGFMYXllciA9IGFMYXll
ci0+bmV4dCgpOworICAgICAgICAgICAgYkxheWVyID0gYkxheWVyLT5uZXh0KCk7CisgICAgICAg
ICAgICBkc3RMYXllciA9IGRzdExheWVyLT5uZXh0KCk7CisgICAgICAgIH0KKyAgICB9CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8RmlsbExheWVyQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZT4gbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXI7CisKKyAgICBMYXll
cnNHZXR0ZXIgbV9sYXllcnNHZXR0ZXI7CisgICAgTGF5ZXJzQWNjZXNzb3IgbV9sYXllcnNBY2Nl
c3NvcjsKK307CisKK2NsYXNzIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBBbmlt
YXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBTaG9ydGhhbmRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9w
ZXJ0eSwgVmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBsb25naGFuZFdyYXBw
ZXJzKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCisg
ICAgICAgICwgbV9wcm9wZXJ0eVdyYXBwZXJzKFdURk1vdmUobG9uZ2hhbmRXcmFwcGVycykpCisg
ICAgeworICAgIH0KKworICAgIGJvb2wgaXNTaG9ydGhhbmRXcmFwcGVyKCkgY29uc3Qgb3ZlcnJp
ZGUgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQorICAgIHsKKyAgICAgICAg
aWYgKGEgPT0gYikKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBpZiAoIWEgfHwg
IWIpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgZm9yIChhdXRvJiB3cmFw
cGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKSB7CisgICAgICAgICAgICBpZiAoIXdyYXBwZXItPmVx
dWFscyhhLCBiKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3Zl
cnJpZGUKKyAgICB7CisgICAgICAgIGZvciAoYXV0byYgd3JhcHBlciA6IG1fcHJvcGVydHlXcmFw
cGVycykKKyAgICAgICAgICAgIHdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jl
c3MpOworICAgIH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUq
IGRzdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAgIHsKKyAgICAgICAgZm9yIChh
dXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQorICAgICAgICAgICAgd3JhcHBlci0+
bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7CisgICAgfQorI2VuZGlmCisKKyAgICBjb25z
dCBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+JiBwcm9wZXJ0eVdyYXBwZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzOyB9CisKK3ByaXZhdGU6CisgICAg
VmVjdG9yPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqPiBtX3Byb3BlcnR5V3JhcHBlcnM7
Cit9OworCitjbGFzcyBQcm9wZXJ0eVdyYXBwZXJGbGV4IDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIFByb3BlcnR5V3JhcHBlckZsZXgoKQorICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UoQ1NTUHJvcGVydHlGbGV4KQorICAgIHsKKyAgICB9CisKKyAgICBib29sIGVxdWFs
cyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJy
aWRlCisgICAgeworICAgICAgICBpZiAoYSA9PSBiKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgICAgIGlmICghYSB8fCAhYikKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
ICAgICByZXR1cm4gYS0+ZmxleEJhc2lzKCkgPT0gYi0+ZmxleEJhc2lzKCkgJiYgYS0+ZmxleEdy
b3coKSA9PSBiLT5mbGV4R3JvdygpICYmIGEtPmZsZXhTaHJpbmsoKSA9PSBiLT5mbGV4U2hyaW5r
KCk7CisgICAgfQorCisgICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xp
ZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7Cisg
ICAgICAgIGRzdC0+c2V0RmxleEJhc2lzKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4QmFzaXMoKSwg
Yi0+ZmxleEJhc2lzKCksIHByb2dyZXNzKSk7CisgICAgICAgIGRzdC0+c2V0RmxleEdyb3coYmxl
bmRGdW5jKGFuaW0sIGEtPmZsZXhHcm93KCksIGItPmZsZXhHcm93KCksIHByb2dyZXNzKSk7Cisg
ICAgICAgIGRzdC0+c2V0RmxleFNocmluayhibGVuZEZ1bmMoYW5pbSwgYS0+ZmxleFNocmluaygp
LCBiLT5mbGV4U2hyaW5rKCksIHByb2dyZXNzKSk7CisgICAgfQorCisjaWYgIUxPR19ESVNBQkxF
RAorICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHls
ZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAorICAg
IHsKKyAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgorICAgICAgICBMT0dfV0lUSF9T
VFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIGZsZXggYXQgIiA8PCBUZXh0
U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpKTsKKyAgICB9
CisjZW5kaWYKK307CisKK2NsYXNzIFByb3BlcnR5V3JhcHBlclNWR1BhaW50IDogcHVibGljIEFu
aW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworcHVibGljOgorICAgIFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5SUQgcHJv
cCwgU1ZHUGFpbnRUeXBlIChSZW5kZXJTdHlsZTo6KnBhaW50VHlwZUdldHRlcikoKSBjb25zdCwg
Q29sb3IgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6
KnNldHRlcikoY29uc3QgQ29sb3ImKSkKKyAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlKHByb3ApCisgICAgICAgICwgbV9wYWludFR5cGVHZXR0ZXIocGFpbnRUeXBlR2V0dGVy
KQorICAgICAgICAsIG1fZ2V0dGVyKGdldHRlcikKKyAgICAgICAgLCBtX3NldHRlcihzZXR0ZXIp
CisgICAgeworICAgIH0KKworICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmIChh
ID09IGIpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgaWYgKCFhIHx8ICFiKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBl
R2V0dGVyKSgpICE9IChiLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICAgICAgLy8gV2Ugb25seSBzdXBwb3J0IGFuaW1hdGlvbnMgYmV0d2Vl
biBTVkdQYWludHMgdGhhdCBhcmUgcHVyZSBDb2xvciB2YWx1ZXMuCisgICAgICAgIC8vIEZvciBl
dmVyeXRoaW5nIGVsc2Ugd2UgbXVzdCByZXR1cm4gdHJ1ZSBmb3IgdGhpcyBtZXRob2QsIG90aGVy
d2lzZQorICAgICAgICAvLyB3ZSB3aWxsIHRyeSB0byBhbmltYXRlIGJldHdlZW4gdmFsdWVzIGZv
cmV2ZXIuCisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRUeXBlR2V0dGVyKSgpID09IFNWR1BhaW50
VHlwZTo6UkdCQ29sb3IpIHsKKyAgICAgICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9n
ZXR0ZXIpKCk7CisgICAgICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsK
KworICAgICAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpICYmICF0b0NvbG9yLmlzVmFs
aWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgICAgICAgICAgaWYgKCFm
cm9tQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7
CisgICAgICAgICAgICBpZiAoIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAgICAgICAgICAgIHRv
Q29sb3IgPSBDb2xvcigpOworCisgICAgICAgICAgICByZXR1cm4gZnJvbUNvbG9yID09IHRvQ29s
b3I7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgdm9pZCBi
bGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSog
ZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBw
cm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKKyAgICB7CisgICAgICAgIGlmICgoYS0+Km1fcGFpbnRU
eXBlR2V0dGVyKSgpICE9IFNWR1BhaW50VHlwZTo6UkdCQ29sb3IKKyAgICAgICAgICAgIHx8IChi
LT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcikKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICBDb2xvciBmcm9tQ29sb3IgPSAoYS0+Km1fZ2V0dGVy
KSgpOworICAgICAgICBDb2xvciB0b0NvbG9yID0gKGItPiptX2dldHRlcikoKTsKKworICAgICAg
ICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICghZnJvbUNvbG9yLmlzVmFsaWQoKSkKKyAgICAg
ICAgICAgIGZyb21Db2xvciA9IENvbG9yKCk7CisgICAgICAgIGlmICghdG9Db2xvci5pc1ZhbGlk
KCkpCisgICAgICAgICAgICB0b0NvbG9yID0gQ29sb3IoKTsKKyAgICAgICAgKGRzdC0+Km1fc2V0
dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9yLCB0b0NvbG9yLCBwcm9ncmVzcykpOworICAg
IH0KKworI2lmICFMT0dfRElTQUJMRUQKKyAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0
eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSosIGRvdWJsZSBwcm9n
cmVzcykgY29uc3QgZmluYWwKKyAgICB7CisgICAgICAgIC8vIEZJWE1FOiBiZXR0ZXIgbG9nZ2lu
Zy4KKyAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVu
ZGluZyBTVkdQYWludCBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJ
bnRlZ2Vycyhwcm9ncmVzcykpOworICAgIH0KKyNlbmRpZgorCitwcml2YXRlOgorICAgIFNWR1Bh
aW50VHlwZSAoUmVuZGVyU3R5bGU6OiptX3BhaW50VHlwZUdldHRlcikoKSBjb25zdDsKKyAgICBD
b2xvciAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKKyAgICB2b2lkIChSZW5kZXJT
dHlsZTo6Km1fc2V0dGVyKShjb25zdCBDb2xvciYpOworfTsKKworY2xhc3MgUHJvcGVydHlXcmFw
cGVyRm9udFN0eWxlIDogcHVibGljIFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250U2VsZWN0
aW9uVmFsdWU+PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
UHJvcGVydHlXcmFwcGVyRm9udFN0eWxlKCkKKyAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8T3B0
aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPj4oQ1NTUHJvcGVydHlGb250U3R5bGUsICZSZW5kZXJT
dHlsZTo6Zm9udEl0YWxpYywgJlJlbmRlclN0eWxlOjpzZXRGb250SXRhbGljKQorICAgIHsKKyAg
ICB9CisKKyAgICBib29sIGNhbkludGVycG9sYXRlKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBj
b25zdCBSZW5kZXJTdHlsZSogdG8pIGNvbnN0IG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1
cm4gZnJvbS0+Zm9udEl0YWxpYygpICYmIHRvLT5mb250SXRhbGljKCkgJiYgZnJvbS0+Zm9udERl
c2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQgJiYgdG8t
PmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKSA9PSBGb250U3R5bGVBeGlzOjpzbG50
OworICAgIH0KKworICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVu
dCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0
IFJlbmRlclN0eWxlKiB0bywgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQorICAgIHsK
KyAgICAgICAgYXV0byBkaXNjcmV0ZSA9ICFjYW5JbnRlcnBvbGF0ZShmcm9tLCB0byk7CisKKyAg
ICAgICAgYXV0byBibGVuZGVkU3R5bGVBeGlzID0gRm9udFN0eWxlQXhpczo6c2xudDsKKyAgICAg
ICAgaWYgKGRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZFN0eWxlQXhpcyA9IChwcm9ncmVz
cyA8IDAuNSA/IGZyb20gOiB0byktPmZvbnREZXNjcmlwdGlvbigpLmZvbnRTdHlsZUF4aXMoKTsK
KworICAgICAgICBhdXRvIGZyb21Gb250SXRhbGljID0gZnJvbS0+Zm9udEl0YWxpYygpOworICAg
ICAgICBhdXRvIHRvRm9udEl0YWxpYyA9IHRvLT5mb250SXRhbGljKCk7CisgICAgICAgIGF1dG8g
YmxlbmRlZEZvbnRJdGFsaWMgPSBwcm9ncmVzcyA8IDAuNSA/IGZyb21Gb250SXRhbGljIDogdG9G
b250SXRhbGljOworICAgICAgICBpZiAoIWRpc2NyZXRlKQorICAgICAgICAgICAgYmxlbmRlZEZv
bnRJdGFsaWMgPSBibGVuZEZ1bmMoYW5pbSwgZnJvbUZvbnRJdGFsaWMsIHRvRm9udEl0YWxpYywg
cHJvZ3Jlc3MpOworCisgICAgICAgIEZvbnRTZWxlY3RvciogY3VycmVudEZvbnRTZWxlY3RvciA9
IGRzdC0+Zm9udENhc2NhZGUoKS5mb250U2VsZWN0b3IoKTsKKyAgICAgICAgYXV0byBkZXNjcmlw
dGlvbiA9IGRzdC0+Zm9udERlc2NyaXB0aW9uKCk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEl0
YWxpYyhibGVuZGVkRm9udEl0YWxpYyk7CisgICAgICAgIGRlc2NyaXB0aW9uLnNldEZvbnRTdHls
ZUF4aXMoYmxlbmRlZFN0eWxlQXhpcyk7CisgICAgICAgIGRzdC0+c2V0Rm9udERlc2NyaXB0aW9u
KFdURk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICAgICAgZHN0LT5mb250Q2FzY2FkZSgpLnVwZGF0
ZShjdXJyZW50Rm9udFNlbGVjdG9yKTsKKyAgICB9Cit9OworCitjbGFzcyBDU1NQcm9wZXJ0eUFu
aW1hdGlvbldyYXBwZXJNYXAgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIHN0YXRpYyBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIHNpbmdsZXRvbigp
CisgICAgeworICAgICAgICAvLyBGSVhNRTogVGhpcyBkYXRhIGlzIG5ldmVyIGRlc3Ryb3llZC4g
TWF5YmUgd2Ugc2hvdWxkIHJlZiBjb3VudCBpdCBhbmQgdG9zcyBpdCB3aGVuIHRoZSBsYXN0IENT
U0FuaW1hdGlvbkNvbnRyb2xsZXIgaXMgZGVzdHJveWVkPworICAgICAgICBzdGF0aWMgTmV2ZXJE
ZXN0cm95ZWQ8Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPiBtYXA7CisgICAgICAgIHJl
dHVybiBtYXA7CisgICAgfQorCisgICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogd3Jh
cHBlckZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCkKKyAgICB7CisgICAgICAg
IGlmIChwcm9wZXJ0eUlEIDwgZmlyc3RDU1NQcm9wZXJ0eSB8fCBwcm9wZXJ0eUlEID4gbGFzdENT
U1Byb3BlcnR5KQorICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgdW5zaWdu
ZWQgd3JhcHBlckluZGV4ID0gaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKTsKKyAgICAg
ICAgaWYgKHdyYXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAg
ICAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFw
cGVyc1t3cmFwcGVySW5kZXhdLmdldCgpOworICAgIH0KKworICAgIEFuaW1hdGlvblByb3BlcnR5
V3JhcHBlckJhc2UqIHdyYXBwZXJGb3JJbmRleCh1bnNpZ25lZCBpbmRleCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChpbmRleCA8IG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCkpOworICAgICAgICBy
ZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW2luZGV4XS5nZXQoKTsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBzaXplKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnMuc2l6
ZSgpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJN
YXAoKTsKKyAgICB+Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkgPSBkZWxldGU7CisK
KyAgICB1bnNpZ25lZCBjaGFyJiBpbmRleEZyb21Qcm9wZXJ0eUlEKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Byb3BlcnR5VG9JZE1hcFtwcm9wZXJ0
eUlEIC0gZmlyc3RDU1NQcm9wZXJ0eV07CisgICAgfQorCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlPj4gbV9wcm9wZXJ0eVdyYXBwZXJzOwor
ICAgIHVuc2lnbmVkIGNoYXIgbV9wcm9wZXJ0eVRvSWRNYXBbbnVtQ1NTUHJvcGVydGllc107CisK
KyAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjSW52YWxpZFByb3BlcnR5V3JhcHBlcklu
ZGV4ID0gVUNIQVJfTUFYOworCisgICAgZnJpZW5kIGNsYXNzIFdURjo6TmV2ZXJEZXN0cm95ZWQ8
Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwPjsKK307CisKK0NTU1Byb3BlcnR5QW5pbWF0
aW9uV3JhcHBlck1hcDo6Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwKCkKK3sKKyAgICAv
LyBidWlsZCB0aGUgbGlzdCBvZiBwcm9wZXJ0eSB3cmFwcGVycyB0byBkbyB0aGUgY29tcGFyaXNv
bnMgYW5kIGJsZW5kcworICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIGFuaW1hdGFi
bGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnNbXSA9IHsKKyAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxlZnQsICZSZW5kZXJTdHlsZTo6bGVmdCwgJlJlbmRlclN0
eWxlOjpzZXRMZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9w
ZXJ0eVJpZ2h0LCAmUmVuZGVyU3R5bGU6OnJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldFJpZ2h0KSwK
KyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRvcCwgJlJlbmRl
clN0eWxlOjp0b3AsICZSZW5kZXJTdHlsZTo6c2V0VG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJvdHRvbSwgJlJlbmRlclN0eWxlOjpib3R0b20sICZS
ZW5kZXJTdHlsZTo6c2V0Qm90dG9tKSwKKworICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5V2lkdGgsICZSZW5kZXJTdHlsZTo6d2lkdGgsICZSZW5kZXJTdHlsZTo6
c2V0V2lkdGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5
TWluV2lkdGgsICZSZW5kZXJTdHlsZTo6bWluV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWluV2lk
dGgpLAorICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5TWF4V2lk
dGgsICZSZW5kZXJTdHlsZTo6bWF4V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0TWF4V2lkdGgpLAor
CisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlIZWlnaHQsICZS
ZW5kZXJTdHlsZTo6aGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEhlaWdodCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5IZWlnaHQsICZSZW5kZXJTdHls
ZTo6bWluSGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1pbkhlaWdodCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhIZWlnaHQsICZSZW5kZXJTdHlsZTo6
bWF4SGVpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1heEhlaWdodCksCisKKyAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlckZsZXgoKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eUJvcmRlckxlZnRXaWR0aCwgJlJlbmRlclN0eWxlOjpib3JkZXJMZWZ0V2lk
dGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyTGVmdFdpZHRoKSwKKyAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJSaWdodFdpZHRoLCAmUmVuZGVyU3R5
bGU6OmJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyUmlnaHRXaWR0aCks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVyVG9w
V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyVG9wV2lkdGgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRvbVdpZHRoLCAm
UmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVdpZHRoKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkxlZnQsICZSZW5kZXJTdHlsZTo6bWFyZ2lu
TGVmdCwgJlJlbmRlclN0eWxlOjpzZXRNYXJnaW5MZWZ0KSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblJpZ2h0LCAmUmVuZGVyU3R5bGU6Om1hcmdp
blJpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldE1hcmdpblJpZ2h0KSwKKyAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpblRvcCwgJlJlbmRlclN0eWxlOjptYXJn
aW5Ub3AsICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luVG9wKSwKKyAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1hcmdpbkJvdHRvbSwgJlJlbmRlclN0eWxlOjptYXJn
aW5Cb3R0b20sICZSZW5kZXJTdHlsZTo6c2V0TWFyZ2luQm90dG9tKSwKKyAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6
OnBhZGRpbmdMZWZ0LCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdMZWZ0KSwKKyAgICAgICAgbmV3
IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdSaWdodCwgJlJlbmRlclN0
eWxlOjpwYWRkaW5nUmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ1JpZ2h0KSwKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdUb3AsICZSZW5k
ZXJTdHlsZTo6cGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nVG9wKSwKKyAgICAg
ICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBhZGRpbmdCb3R0b20sICZS
ZW5kZXJTdHlsZTo6cGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nQm90dG9t
KSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NT
UHJvcGVydHlDYXJldENvbG9yLCAmUmVuZGVyU3R5bGU6OmNhcmV0Q29sb3IsICZSZW5kZXJTdHls
ZTo6c2V0Q2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0NhcmV0Q29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDYXJldENvbG9yKSwKKworICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2xvciwgJlJlbmRl
clN0eWxlOjpjb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNp
dGVkTGlua0NvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQ29sb3IpLAorCisgICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6YmFja2dyb3Vu
ZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjp2
aXNpdGVkTGlua0JhY2tncm91bmRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0Jh
Y2tncm91bmRDb2xvciksCisKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlCYWNrZ3JvdW5kSW1hZ2UsICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVy
cywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IFN0
eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaXN0U3R5bGVJbWFnZSwgJlJlbmRl
clN0eWxlOjpsaXN0U3R5bGVJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRMaXN0U3R5bGVJbWFnZSks
CisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0
TWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tJbWFnZSwgJlJlbmRlclN0eWxlOjpzZXRNYXNr
SW1hZ2UpLAorCisgICAgICAgIG5ldyBTdHlsZUltYWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3Bl
cnR5Qm9yZGVySW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VTb3VyY2UsICZS
ZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VTb3VyY2UpLAorICAgICAgICBuZXcgTGVuZ3RoVmFy
aWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhCb3g+KENTU1Byb3BlcnR5Qm9yZGVySW1hZ2VTbGlj
ZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNsaWNlcywgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJJbWFnZVNsaWNlcyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVy
PExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVdpZHRoLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVySW1hZ2VXaWR0aCksCisgICAg
ICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVy
dHlCb3JkZXJJbWFnZU91dHNldCwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZU91dHNldCwgJlJl
bmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZU91dHNldCksCisKKyAgICAgICAgbmV3IFN0eWxlSW1h
Z2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrQm94SW1hZ2VTb3VyY2UsICZS
ZW5kZXJTdHlsZTo6bWFza0JveEltYWdlU291cmNlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tCb3hJ
bWFnZVNvdXJjZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgTmluZVBpZWNl
SW1hZ2UmPihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZSwgJlJlbmRlclN0eWxlOjptYXNr
Qm94SW1hZ2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlKSwKKworICAgICAgICBuZXcg
RmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvblgs
ICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNr
Z3JvdW5kTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25ZLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXll
cnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCisgICAgICAgIG5ldyBG
aWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFNpemUsICZSZW5k
ZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRlclN0eWxlOjplbnN1cmVCYWNrZ3JvdW5k
TGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlXZWJraXRCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAm
UmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAorCisgICAgICAgIG5ldyBGaWxs
TGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9uWCwgJlJl
bmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAor
ICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblksICZSZW5kZXJTdHlsZTo6bWFza0xheWVycywgJlJlbmRlclN0eWxlOjplbnN1
cmVNYXNrTGF5ZXJzKSwKKyAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIoQ1NT
UHJvcGVydHlXZWJraXRNYXNrU2l6ZSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZU1hc2tMYXllcnMpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5Rm9udFNpemUsICZSZW5kZXJTdHlsZTo6Y29tcHV0ZWRGb250U2l6
ZSwgJlJlbmRlclN0eWxlOjpzZXRGb250U2l6ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXI8dW5zaWduZWQgc2hvcnQ+KENTU1Byb3BlcnR5Q29sdW1uUnVsZVdpZHRoLCAmUmVuZGVyU3R5
bGU6OmNvbHVtblJ1bGVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlV2lkdGgpLAor
ICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxHYXBMZW5ndGg+KENTU1By
b3BlcnR5Q29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OmNvbHVtbkdhcCwgJlJlbmRlclN0eWxlOjpz
ZXRDb2x1bW5HYXApLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxH
YXBMZW5ndGg+KENTU1Byb3BlcnR5Um93R2FwLCAmUmVuZGVyU3R5bGU6OnJvd0dhcCwgJlJlbmRl
clN0eWxlOjpzZXRSb3dHYXApLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHVuc2lnbmVk
IHNob3J0PihDU1NQcm9wZXJ0eUNvbHVtbkNvdW50LCAmUmVuZGVyU3R5bGU6OmNvbHVtbkNvdW50
LCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkNvdW50KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3Jh
cHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlDb2x1bW5XaWR0aCwgJlJlbmRlclN0eWxlOjpjb2x1bW5X
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5XaWR0aCksCisgICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySG9yaXpvbnRhbFNwYWNpbmcs
ICZSZW5kZXJTdHlsZTo6aG9yaXpvbnRhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0
SG9yaXpvbnRhbEJvcmRlclNwYWNpbmcpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclZlcnRpY2FsU3BhY2luZywgJlJlbmRlclN0eWxl
Ojp2ZXJ0aWNhbEJvcmRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6c2V0VmVydGljYWxCb3JkZXJT
cGFjaW5nKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxpbnQ+KENTU1Byb3BlcnR5Wklu
ZGV4LCAmUmVuZGVyU3R5bGU6OnNwZWNpZmllZFpJbmRleCwgJlJlbmRlclN0eWxlOjpzZXRTcGVj
aWZpZWRaSW5kZXgpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9w
ZXJ0eU9ycGhhbnMsICZSZW5kZXJTdHlsZTo6b3JwaGFucywgJlJlbmRlclN0eWxlOjpzZXRPcnBo
YW5zKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxzaG9ydD4oQ1NTUHJvcGVydHlXaWRv
d3MsICZSZW5kZXJTdHlsZTo6d2lkb3dzLCAmUmVuZGVyU3R5bGU6OnNldFdpZG93cyksCisgICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlMaW5lSGVpZ2h0LCAmUmVu
ZGVyU3R5bGU6OnNwZWNpZmllZExpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0TGluZUhlaWdo
dCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGlu
ZU9mZnNldCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnNldE91
dGxpbmVPZmZzZXQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eU91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpvdXRsaW5lV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0T3V0bGluZVdpZHRoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4o
Q1NTUHJvcGVydHlMZXR0ZXJTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OmxldHRlclNwYWNpbmcsICZS
ZW5kZXJTdHlsZTo6c2V0TGV0dGVyU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlXb3JkU3BhY2luZywgJlJlbmRlclN0eWxlOjp3b3JkU3BhY2lu
ZywgJlJlbmRlclN0eWxlOjpzZXRXb3JkU3BhY2luZyksCisgICAgICAgIG5ldyBMZW5ndGhQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUZXh0SW5kZW50LCAmUmVuZGVyU3R5bGU6OnRleHRJbmRl
bnQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dEluZGVudCksCisKKyAgICAgICAgbmV3IFByb3BlcnR5
V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpwZXJz
cGVjdGl2ZSwgJlJlbmRlclN0eWxlOjpzZXRQZXJzcGVjdGl2ZSksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJzcGVjdGl2ZU9yaWdpblgsICZSZW5kZXJT
dHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlT3Jp
Z2luWCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlQZXJz
cGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6cGVyc3BlY3RpdmVPcmlnaW5ZLCAmUmVuZGVy
U3R5bGU6OnNldFBlcnNwZWN0aXZlT3JpZ2luWSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5YLCAmUmVuZGVyU3R5bGU6OnRyYW5z
Zm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3JtT3JpZ2luWCksCisgICAgICAg
IG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlUcmFuc2Zvcm1PcmlnaW5ZLCAm
UmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0VHJhbnNmb3Jt
T3JpZ2luWSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
VHJhbnNmb3JtT3JpZ2luWiwgJlJlbmRlclN0eWxlOjp0cmFuc2Zvcm1PcmlnaW5aLCAmUmVuZGVy
U3R5bGU6OnNldFRyYW5zZm9ybU9yaWdpblopLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFBy
b3BlcnR5V3JhcHBlcjxMZW5ndGhTaXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcExlZnRSYWRpdXMs
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3Jk
ZXJUb3BMZWZ0UmFkaXVzKSwKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoU2l6ZT4oQ1NTUHJvcGVydHlCb3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0
eWxlOjpib3JkZXJUb3BSaWdodFJhZGl1cywgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BSaWdo
dFJhZGl1cyksCisgICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0
aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyQm90dG9tTGVmdFJhZGl1cywgJlJlbmRlclN0eWxlOjpi
b3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbUxlZnRS
YWRpdXMpLAorICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhT
aXplPihDU1NQcm9wZXJ0eUJvcmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJv
cmRlckJvdHRvbVJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckJvdHRvbVJpZ2h0
UmFkaXVzKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWaXNpYmlsaXR5PihDU1NQcm9w
ZXJ0eVZpc2liaWxpdHksICZSZW5kZXJTdHlsZTo6dmlzaWJpbGl0eSwgJlJlbmRlclN0eWxlOjpz
ZXRWaXNpYmlsaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJv
cGVydHlab29tLCAmUmVuZGVyU3R5bGU6Onpvb20sICZSZW5kZXJTdHlsZTo6c2V0Wm9vbVdpdGhv
dXRSZXR1cm5WYWx1ZSksCisKKyAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBw
ZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUNsaXAsICZSZW5kZXJTdHlsZTo6Y2xpcCwgJlJlbmRl
clN0eWxlOjpzZXRDbGlwKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQWNjZWxlcmF0
ZWRPcGFjaXR5KCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZFRyYW5z
Zm9ybSgpLAorICAgICAgICAKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQ
cm9wZXJ0eUZpbHRlciwgJlJlbmRlclN0eWxlOjpmaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0Rmls
dGVyKSwKKyNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQorICAgICAgICBuZXcgUHJvcGVydHlX
cmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5V2Via2l0QmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHls
ZTo6YmFja2Ryb3BGaWx0ZXIsICZSZW5kZXJTdHlsZTo6c2V0QmFja2Ryb3BGaWx0ZXIpLAorI2Vu
ZGlmCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlBcHBsZUNv
bG9yRmlsdGVyLCAmUmVuZGVyU3R5bGU6OmFwcGxlQ29sb3JGaWx0ZXIsICZSZW5kZXJTdHlsZTo6
c2V0QXBwbGVDb2xvckZpbHRlciksCisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckNsaXBQ
YXRoKENTU1Byb3BlcnR5Q2xpcFBhdGgsICZSZW5kZXJTdHlsZTo6Y2xpcFBhdGgsICZSZW5kZXJT
dHlsZTo6c2V0Q2xpcFBhdGgpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTaGFwZShD
U1NQcm9wZXJ0eVNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpzaGFwZU91dHNpZGUsICZSZW5k
ZXJTdHlsZTo6c2V0U2hhcGVPdXRzaWRlKSwKKyAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3Jh
cHBlcihDU1NQcm9wZXJ0eVNoYXBlTWFyZ2luLCAmUmVuZGVyU3R5bGU6OnNoYXBlTWFyZ2luLCAm
UmVuZGVyU3R5bGU6OnNldFNoYXBlTWFyZ2luKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
cjxmbG9hdD4oQ1NTUHJvcGVydHlTaGFwZUltYWdlVGhyZXNob2xkLCAmUmVuZGVyU3R5bGU6OnNo
YXBlSW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2V0U2hhcGVJbWFnZVRocmVzaG9sZCks
CisKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1By
b3BlcnR5Q29sdW1uUnVsZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpj
b2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Q29sdW1uUnVsZUNvbG9yLCAmUmVuZGVy
U3R5bGU6OnZpc2l0ZWRMaW5rQ29sdW1uUnVsZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0
ZWRMaW5rQ29sdW1uUnVsZUNvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0
ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZUNvbG9yLCBNYXliZUlu
dmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0U3Ryb2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0VGV4dFN0cm9rZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dFN0cm9rZUNvbG9yKSwKKyAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5V2Vi
a2l0VGV4dEZpbGxDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6dGV4dEZp
bGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnZp
c2l0ZWRMaW5rVGV4dEZpbGxDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua1RleHRG
aWxsQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29s
b3IoQ1NTUHJvcGVydHlCb3JkZXJMZWZ0Q29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJMZWZ0Q29sb3Is
ICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IsICZSZW5kZXJTdHlsZTo6
c2V0VmlzaXRlZExpbmtCb3JkZXJMZWZ0Q29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJSaWdodENvbG9yLCBNYXli
ZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3JkZXJSaWdodENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldEJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJS
aWdodENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyUmlnaHRDb2xvciks
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUJvcmRlclRvcENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpib3Jk
ZXJUb3BDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BDb2xvciwgJlJlbmRlclN0eWxl
Ojp2aXNpdGVkTGlua0JvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5r
Qm9yZGVyVG9wQ29sb3IpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVj
dGVkQ29sb3IoQ1NTUHJvcGVydHlCb3JkZXJCb3R0b21Db2xvciwgTWF5YmVJbnZhbGlkQ29sb3Is
ICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVy
Qm90dG9tQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtCb3JkZXJCb3R0b21Db2xvciwg
JlJlbmRlclN0eWxlOjpzZXRWaXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yKSwKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5T3V0bGlu
ZUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpvdXRsaW5lQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0T3V0bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rT3V0
bGluZUNvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rT3V0bGluZUNvbG9yKSwKKwor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5Qm94U2hhZG93LCAm
UmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAorICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5V2Via2l0Qm94U2hhZG93
LCAmUmVuZGVyU3R5bGU6OmJveFNoYWRvdywgJlJlbmRlclN0eWxlOjpzZXRCb3hTaGFkb3cpLAor
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyU2hhZG93KENTU1Byb3BlcnR5VGV4dFNoYWRvdywg
JlJlbmRlclN0eWxlOjp0ZXh0U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldFRleHRTaGFkb3cpLAor
CisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eUZpbGwsICZS
ZW5kZXJTdHlsZTo6ZmlsbFBhaW50VHlwZSwgJlJlbmRlclN0eWxlOjpmaWxsUGFpbnRDb2xvciwg
JlJlbmRlclN0eWxlOjpzZXRGaWxsUGFpbnRDb2xvciksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5RmlsbE9wYWNpdHksICZSZW5kZXJTdHlsZTo6ZmlsbE9w
YWNpdHksICZSZW5kZXJTdHlsZTo6c2V0RmlsbE9wYWNpdHkpLAorCisgICAgICAgIG5ldyBQcm9w
ZXJ0eVdyYXBwZXJTVkdQYWludChDU1NQcm9wZXJ0eVN0cm9rZSwgJlJlbmRlclN0eWxlOjpzdHJv
a2VQYWludFR5cGUsICZSZW5kZXJTdHlsZTo6c3Ryb2tlUGFpbnRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRTdHJva2VQYWludENvbG9yKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlTdHJva2VPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU9wYWNpdHks
ICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlT3BhY2l0eSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdy
YXBwZXI8VmVjdG9yPFNWR0xlbmd0aFZhbHVlPj4oQ1NTUHJvcGVydHlTdHJva2VEYXNoYXJyYXks
ICZSZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaEFycmF5LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZURh
c2hBcnJheSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5
U3Ryb2tlTWl0ZXJsaW1pdCwgJlJlbmRlclN0eWxlOjpzdHJva2VNaXRlckxpbWl0LCAmUmVuZGVy
U3R5bGU6OnNldFN0cm9rZU1pdGVyTGltaXQpLAorCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlDeCwgJlJlbmRlclN0eWxlOjpjeCwgJlJlbmRlclN0eWxlOjpz
ZXRDeCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlDeSwg
JlJlbmRlclN0eWxlOjpjeSwgJlJlbmRlclN0eWxlOjpzZXRDeSksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSLCAmUmVuZGVyU3R5bGU6OnIsICZSZW5kZXJT
dHlsZTo6c2V0UiksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVy
dHlSeCwgJlJlbmRlclN0eWxlOjpyeCwgJlJlbmRlclN0eWxlOjpzZXRSeCksCisgICAgICAgIG5l
dyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlSeSwgJlJlbmRlclN0eWxlOjpyeSwg
JlJlbmRlclN0eWxlOjpzZXRSeSksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIo
Q1NTUHJvcGVydHlTdHJva2VEYXNob2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZURhc2hPZmZz
ZXQsICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaE9mZnNldCksCisgICAgICAgIG5ldyBMZW5n
dGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlTdHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpz
dHJva2VXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRTdHJva2VXaWR0aCksCisgICAgICAgIG5ldyBM
ZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlYLCAmUmVuZGVyU3R5bGU6OngsICZSZW5k
ZXJTdHlsZTo6c2V0WCksCisgICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlZLCAmUmVuZGVyU3R5bGU6OnksICZSZW5kZXJTdHlsZTo6c2V0WSksCisKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlGbG9vZE9wYWNpdHksICZSZW5k
ZXJTdHlsZTo6Zmxvb2RPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNldEZsb29kT3BhY2l0eSksCisg
ICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXliZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUZs
b29kQ29sb3IsICZSZW5kZXJTdHlsZTo6Zmxvb2RDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRGbG9v
ZENvbG9yKSwKKworICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eVN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnN0b3BPcGFjaXR5LCAmUmVuZGVyU3R5bGU6OnNl
dFN0b3BPcGFjaXR5KSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yKENTU1Byb3BlcnR5U3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnN0b3BDb2xvciwgJlJlbmRl
clN0eWxlOjpzZXRTdG9wQ29sb3IpLAorCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJNYXli
ZUludmFsaWRDb2xvcihDU1NQcm9wZXJ0eUxpZ2h0aW5nQ29sb3IsICZSZW5kZXJTdHlsZTo6bGln
aHRpbmdDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRMaWdodGluZ0NvbG9yKSwKKworICAgICAgICBu
ZXcgUHJvcGVydHlXcmFwcGVyPFNWR0xlbmd0aFZhbHVlPihDU1NQcm9wZXJ0eUJhc2VsaW5lU2hp
ZnQsICZSZW5kZXJTdHlsZTo6YmFzZWxpbmVTaGlmdFZhbHVlLCAmUmVuZGVyU3R5bGU6OnNldEJh
c2VsaW5lU2hpZnRWYWx1ZSksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8U1ZHTGVuZ3Ro
VmFsdWU+KENTU1Byb3BlcnR5S2VybmluZywgJlJlbmRlclN0eWxlOjprZXJuaW5nLCAmUmVuZGVy
U3R5bGU6OnNldEtlcm5pbmcpLAorI2lmIEVOQUJMRShWQVJJQVRJT05fRk9OVFMpCisgICAgICAg
IG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250VmFyaWF0aW9uU2V0dGluZ3MoQ1NTUHJvcGVydHlGb250
VmFyaWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHlsZTo6Zm9udFZhcmlhdGlvblNldHRpbmdzLCAm
UmVuZGVyU3R5bGU6OnNldEZvbnRWYXJpYXRpb25TZXR0aW5ncyksCisjZW5kaWYKKyAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxGb250U2VsZWN0aW9uVmFsdWU+KENTU1Byb3BlcnR5Rm9udFdl
aWdodCwgJlJlbmRlclN0eWxlOjpmb250V2VpZ2h0LCAmUmVuZGVyU3R5bGU6OnNldEZvbnRXZWln
aHQpLAorICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NT
UHJvcGVydHlGb250U3RyZXRjaCwgJlJlbmRlclN0eWxlOjpmb250U3RyZXRjaCwgJlJlbmRlclN0
eWxlOjpzZXRGb250U3RyZXRjaCksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5
bGUoKSwKKyAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0RGVjb3JhdGlvblRoaWNrbmVz
cz4oQ1NTUHJvcGVydHlUZXh0RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjp0ZXh0
RGVjb3JhdGlvblRoaWNrbmVzcywgJlJlbmRlclN0eWxlOjpzZXRUZXh0RGVjb3JhdGlvblRoaWNr
bmVzcyksCisgICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8VGV4dFVuZGVybGluZU9mZnNldD4o
Q1NTUHJvcGVydHlUZXh0VW5kZXJsaW5lT2Zmc2V0LCAmUmVuZGVyU3R5bGU6OnRleHRVbmRlcmxp
bmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0VGV4dFVuZGVybGluZU9mZnNldCksCisgICAgfTsK
KyAgICBjb25zdCB1bnNpZ25lZCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgPSBX
VEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFibGVMb25naGFuZFByb3BlcnR5V3JhcHBlcnMpOworCisg
ICAgc3RhdGljIGNvbnN0IENTU1Byb3BlcnR5SUQgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRp
ZXNbXSA9IHsKKyAgICAgICAgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kLCAvLyBmb3IgYmFja2dyb3Vu
ZC1jb2xvciwgYmFja2dyb3VuZC1wb3NpdGlvbiwgYmFja2dyb3VuZC1pbWFnZQorICAgICAgICBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbiwKKyAgICAgICAgQ1NTUHJvcGVydHlGb250LCAv
LyBmb3IgZm9udC1zaXplLCBmb250LXdlaWdodAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2ssIC8vIGZvciBtYXNrLXBvc2l0aW9uCisgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza1Bv
c2l0aW9uLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclRvcCwgQ1NTUHJvcGVydHlCb3JkZXJS
aWdodCwgQ1NTUHJvcGVydHlCb3JkZXJCb3R0b20sIENTU1Byb3BlcnR5Qm9yZGVyTGVmdCwKKyAg
ICAgICAgQ1NTUHJvcGVydHlCb3JkZXJDb2xvciwKKyAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXJS
YWRpdXMsCisgICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyV2lkdGgsCisgICAgICAgIENTU1Byb3Bl
cnR5Qm9yZGVyLAorICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlckltYWdlLAorICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlclNwYWNpbmcsCisgICAgICAgIENTU1Byb3BlcnR5TGlzdFN0eWxlLCAvLyBm
b3IgbGlzdC1zdHlsZS1pbWFnZQorICAgICAgICBDU1NQcm9wZXJ0eU1hcmdpbiwKKyAgICAgICAg
Q1NTUHJvcGVydHlPdXRsaW5lLAorICAgICAgICBDU1NQcm9wZXJ0eVBhZGRpbmcsCisgICAgICAg
IENTU1Byb3BlcnR5V2Via2l0VGV4dFN0cm9rZSwKKyAgICAgICAgQ1NTUHJvcGVydHlDb2x1bW5S
dWxlLAorICAgICAgICBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlclJhZGl1cywKKyAgICAgICAgQ1NT
UHJvcGVydHlUcmFuc2Zvcm1PcmlnaW4KKyAgICB9OworICAgIGNvbnN0IHVuc2lnbmVkIGFuaW1h
dGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQgPSBXVEZfQVJSQVlfTEVOR1RIKGFuaW1hdGFi
bGVTaG9ydGhhbmRQcm9wZXJ0aWVzKTsKKworICAgIC8vIFRPRE86CisgICAgLy8KKyAgICAvLyAg
Q1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduCisgICAgLy8KKyAgICAvLyBDb21wb3VuZCBwcm9wZXJ0
aWVzIHRoYXQgaGF2ZSBjb21wb25lbnRzIHRoYXQgc2hvdWxkIGJlIGFuaW1hdGFibGU6CisgICAg
Ly8KKyAgICAvLyAgQ1NTUHJvcGVydHlDb2x1bW5zCisgICAgLy8gIENTU1Byb3BlcnR5V2Via2l0
Qm94UmVmbGVjdAorCisgICAgLy8gTWFrZSBzdXJlIHVudXNlZCBzbG90cyBoYXZlIGEgdmFsdWUK
KyAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUNTU1Byb3BlcnRpZXM7ICsraSkKKyAgICAgICAg
bV9wcm9wZXJ0eVRvSWRNYXBbaV0gPSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4OworCisg
ICAgQ09NUElMRV9BU1NFUlQoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsgYW5p
bWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCA8IFVDSEFSX01BWCwgbnVtYmVyT2ZBbmlt
YXRhYmxlUHJvcGVydGllc011c3RCZUxlc3NUaGFuVUNoYXJNYXgpOworICAgIG1fcHJvcGVydHlX
cmFwcGVycy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRp
ZXNDb3VudCArIGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQpOworCisgICAgLy8g
Rmlyc3Qgd2UgcHV0IHRoZSBub24tc2hvcnRoYW5kIHByb3BlcnR5IHdyYXBwZXJzIGludG8gdGhl
IG1hcCwgc28gdGhlIHNob3J0aGFuZC1idWlsZGluZworICAgIC8vIGNvZGUgY2FuIGZpbmQgdGhl
bS4KKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBhbmltYXRhYmxlTG9uZ2hhbmRQcm9w
ZXJ0aWVzQ291bnQ7ICsraSkgeworICAgICAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNl
KiB3cmFwcGVyID0gYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVyc1tpXTsKKyAgICAg
ICAgbV9wcm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChzdGQ6OnVuaXF1ZV9wdHI8QW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4od3JhcHBlcikpOworICAgICAgICBpbmRleEZyb21Q
cm9wZXJ0eUlEKHdyYXBwZXItPnByb3BlcnR5KCkpID0gaTsKKyAgICB9CisKKyAgICBmb3IgKHNp
emVfdCBpID0gMDsgaSA8IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVzQ291bnQ7ICsraSkg
eworICAgICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBhbmltYXRhYmxlU2hvcnRoYW5k
UHJvcGVydGllc1tpXTsKKyAgICAgICAgYXV0byBzaG9ydGhhbmQgPSBzaG9ydGhhbmRGb3JQcm9w
ZXJ0eShwcm9wZXJ0eUlEKTsKKyAgICAgICAgaWYgKCFzaG9ydGhhbmQubGVuZ3RoKCkpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBWZWN0b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSo+IGxvbmdoYW5kV3JhcHBlcnM7CisgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eShzaG9ydGhhbmQubGVuZ3RoKCkpOworICAgICAgICBmb3IgKGF1
dG8gbG9uZ2hhbmQgOiBzaG9ydGhhbmQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVkIHdyYXBwZXJJ
bmRleCA9IGluZGV4RnJvbVByb3BlcnR5SUQobG9uZ2hhbmQpOworICAgICAgICAgICAgaWYgKHdy
YXBwZXJJbmRleCA9PSBjSW52YWxpZFByb3BlcnR5V3JhcHBlckluZGV4KQorICAgICAgICAgICAg
ICAgIGNvbnRpbnVlOworICAgICAgICAgICAgQVNTRVJUKG1fcHJvcGVydHlXcmFwcGVyc1t3cmFw
cGVySW5kZXhdKTsKKyAgICAgICAgICAgIGxvbmdoYW5kV3JhcHBlcnMudW5jaGVja2VkQXBwZW5k
KG1fcHJvcGVydHlXcmFwcGVyc1t3cmFwcGVySW5kZXhdLmdldCgpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIG1fcHJvcGVydHlXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobWFrZVVuaXF1ZTxTaG9y
dGhhbmRQcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5SUQsIFdURk1vdmUobG9uZ2hhbmRXcmFwcGVy
cykpKTsKKyAgICAgICAgaW5kZXhGcm9tUHJvcGVydHlJRChwcm9wZXJ0eUlEKSA9IGFuaW1hdGFi
bGVMb25naGFuZFByb3BlcnRpZXNDb3VudCArIGk7CisgICAgfQorfQorCitzdGF0aWMgYm9vbCBn
YXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKENTU1Byb3BlcnR5SUQgcHJvcGVydHks
IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIsIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4mIHByb3BlcnR5U2V0KQoreworICAgIGlmICghd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFw
cGVyKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIFNob3J0aGFuZFByb3BlcnR5V3Jh
cHBlciogc2hvcnRoYW5kV3JhcHBlciA9IHN0YXRpY19jYXN0PFNob3J0aGFuZFByb3BlcnR5V3Jh
cHBlcio+KHdyYXBwZXIpOworICAgIGJvb2wgY29udGFpbmVkID0gZmFsc2U7CisgICAgZm9yIChh
dXRvJiBjdXJyV3JhcHBlciA6IHNob3J0aGFuZFdyYXBwZXItPnByb3BlcnR5V3JhcHBlcnMoKSkg
eworICAgICAgICBpZiAoZ2F0aGVyRW5jbG9zaW5nU2hvcnRoYW5kUHJvcGVydGllcyhwcm9wZXJ0
eSwgY3VycldyYXBwZXIsIHByb3BlcnR5U2V0KSB8fCBjdXJyV3JhcHBlci0+cHJvcGVydHkoKSA9
PSBwcm9wZXJ0eSkKKyAgICAgICAgICAgIGNvbnRhaW5lZCA9IHRydWU7CisgICAgfQorCisgICAg
aWYgKGNvbnRhaW5lZCkKKyAgICAgICAgcHJvcGVydHlTZXQuYWRkKHdyYXBwZXItPnByb3BlcnR5
KCkpOworCisgICAgcmV0dXJuIGNvbnRhaW5lZDsKK30KKworLy8gUmV0dXJucyB0cnVlIGlmIHdl
IG5lZWQgdG8gc3RhcnQgYW5pbWF0aW9uIHRpbWVycwordm9pZCBDU1NQcm9wZXJ0eUFuaW1hdGlv
bjo6YmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IENTU1Byb3BlcnR5SUQgcHJvcCwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUq
IGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpCit7CisgICAgQVNTRVJU
KHByb3AgIT0gQ1NTUHJvcGVydHlJbnZhbGlkKTsKKworICAgIEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmds
ZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikgeworICAg
ICAgICB3cmFwcGVyLT5ibGVuZChhbmltLCBkc3QsIGEsIGIsIHByb2dyZXNzKTsKKyNpZiAhTE9H
X0RJU0FCTEVECisgICAgICAgIHdyYXBwZXItPmxvZ0JsZW5kKGEsIGIsIGRzdCwgcHJvZ3Jlc3Mp
OworI2VuZGlmCisgICAgfQorfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjppc1Byb3Bl
cnR5QW5pbWF0YWJsZShDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgcmV0dXJuIENTU1Byb3Bl
cnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHBy
b3ApOworfQorCitib29sIENTU1Byb3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5
SXNBY2NlbGVyYXRlZChDU1NQcm9wZXJ0eUlEIHByb3ApCit7CisgICAgQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6
c2luZ2xldG9uKCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOworICAgIHJldHVybiB3cmFwcGVy
ID8gd3JhcHBlci0+YW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIDogZmFsc2U7Cit9CisKKy8vIE5v
dGU6IHRoaXMgaXMgaW5lZmZpY2llbnQuIEl0J3Mgb25seSBjYWxsZWQgZnJvbSBwYXVzZVRyYW5z
aXRpb25BdFRpbWUoKS4KK0hhc2hTZXQ8Q1NTUHJvcGVydHlJRD4gQ1NTUHJvcGVydHlBbmltYXRp
b246OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSkKK3sKKyAgICBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAmIG1hcCA9IENT
U1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCk7CisKKyAgICBIYXNoU2V0
PENTU1Byb3BlcnR5SUQ+IGZvdW5kUHJvcGVydGllczsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbWFwLnNpemUoKTsgKytpKQorICAgICAgICBnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQ
cm9wZXJ0aWVzKHByb3BlcnR5LCBtYXAud3JhcHBlckZvckluZGV4KGkpLCBmb3VuZFByb3BlcnRp
ZXMpOworCisgICAgcmV0dXJuIGZvdW5kUHJvcGVydGllczsKK30KKworYm9vbCBDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6cHJvcGVydGllc0VxdWFsKENTU1Byb3BlcnR5SUQgcHJvcCwgY29uc3QgUmVu
ZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQoreworICAgIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6
OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9wKTsKKyAgICBpZiAod3JhcHBlcikK
KyAgICAgICAgcmV0dXJuIHdyYXBwZXItPmVxdWFscyhhLCBiKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Y2FuUHJvcGVydHlCZUludGVycG9sYXRl
ZChDU1NQcm9wZXJ0eUlEIHByb3AsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJT
dHlsZSogYikKK3sKKyAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyID0g
Q1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJv
cGVydHkocHJvcCk7CisgICAgaWYgKHdyYXBwZXIpCisgICAgICAgIHJldHVybiB3cmFwcGVyLT5j
YW5JbnRlcnBvbGF0ZShhLCBiKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0NTU1Byb3BlcnR5
SUQgQ1NTUHJvcGVydHlBbmltYXRpb246OmdldFByb3BlcnR5QXRJbmRleChpbnQgaSwgT3B0aW9u
YWw8Ym9vbD4mIGlzU2hvcnRoYW5kKQoreworICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBl
ck1hcCYgbWFwID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsK
KworICAgIGlmIChpIDwgMCB8fCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4oaSkgPj0gbWFwLnNpemUo
KSkKKyAgICAgICAgcmV0dXJuIENTU1Byb3BlcnR5SW52YWxpZDsKKworICAgIEFuaW1hdGlvblBy
b3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBtYXAud3JhcHBlckZvckluZGV4KGkpOworICAg
IGlzU2hvcnRoYW5kID0gd3JhcHBlci0+aXNTaG9ydGhhbmRXcmFwcGVyKCk7CisgICAgcmV0dXJu
IHdyYXBwZXItPnByb3BlcnR5KCk7Cit9CisKK2ludCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0
TnVtUHJvcGVydGllcygpCit7CisgICAgcmV0dXJuIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBl
ck1hcDo6c2luZ2xldG9uKCkuc2l6ZSgpOworfQorCit9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNkZTJjODc1ODMyMzgw
YzUzZjUwYTU1ZjBlZDQ0ZWY2ZDg0NDQxOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uaApAQCAtMCwwICsxLDU0IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAg
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuIAorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uIAorICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5j
LiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5
IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBm
cm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Np
b24uIAorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBD
T05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMg
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhF
T1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNo
U2V0Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudDsKK2NsYXNzIFJlbmRlclN0eWxlOworCitjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlv
biB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFibGUoQ1NTUHJv
cGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0
ZWQoQ1NTUHJvcGVydHlJRCk7CisgICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0VxdWFsKENTU1By
b3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYik7Cisg
ICAgc3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9wZXJ0eUlELCBj
b25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOworICAgIHN0YXRpYyBD
U1NQcm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJvb2w+JiBpc1No
b3J0aGFuZCk7CisgICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7CisKKyAgICBzdGF0
aWMgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0FmZmVjdGluZ1By
b3BlcnR5KENTU1Byb3BlcnR5SUQpOworCisgICAgLy8gUmV0dXJuIHRydWUgaWYgd2UgbmVlZCB0
byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCisgICAgc3RhdGljIHZvaWQgYmxlbmRQ
cm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQcm9wZXJ0eUlE
LCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5
bGUqIGIsIGRvdWJsZSBwcm9ncmVzcyk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwgYi9T
b3VyY2UvV2ViQ29yZS9hbmltYXRpb24vQ1NTVHJhbnNpdGlvbi5pZGwKaW5kZXggMTk0YzZhZjFi
NWFkZmQwNmQyN2NmYzA0MGM0Y2MxOTdmYzIzNjcyZi4uMzE5MDVhYmRmNDA1NWNhMzEzNzlkMmEz
OWIwNTlmMWM2MGEwOTFlNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0NT
U1RyYW5zaXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9DU1NUcmFuc2l0
aW9uLmlkbApAQCAtMjYsNyArMjYsNiBAQAogdHlwZWRlZiBVU1ZTdHJpbmcgQ1NTT01TdHJpbmc7
CiAKIFsKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbiwK
ICAgICBFeHBvc2VkPVdpbmRvdwogXSBpbnRlcmZhY2UgQ1NTVHJhbnNpdGlvbiA6IFdlYkFuaW1h
dGlvbiB7CiAgICAgcmVhZG9ubHkgYXR0cmlidXRlIENTU09NU3RyaW5nIHRyYW5zaXRpb25Qcm9w
ZXJ0eTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVudEFuaW1h
dGlvbnMuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5p
ZGwKaW5kZXggNGYzMTMzN2JmYzEyZWIyY2M0ZjA1NTUyYjM0Zjg3OGU0ZjJiMTM1NS4uZThlZTRl
NDllMjAyZTdlN2RkNTM3Y2U0NjAyYTFmOTgyZmVlMzY1YyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKKysrIGIvU291cmNlL1dlYkNv
cmUvYW5pbWF0aW9uL0RvY3VtZW50QW5pbWF0aW9ucy5pZGwKQEAgLTI0LDggKzI0LDYgQEAKICAq
LwogCiAvLyBodHRwczovL2RyYWZ0cy5jc3N3Zy5vcmcvd2ViLWFuaW1hdGlvbnMtMS8jZXh0ZW5z
aW9ucy10by10aGUtZG9jdW1lbnQtaW50ZXJmYWNlCi1bCi0gICAgRW5hYmxlZEF0UnVudGltZT1X
ZWJBbmltYXRpb25zCi1dIHBhcnRpYWwgaW50ZXJmYWNlIERvY3VtZW50IHsKK3BhcnRpYWwgaW50
ZXJmYWNlIERvY3VtZW50IHsKICAgICByZWFkb25seSBhdHRyaWJ1dGUgRG9jdW1lbnRUaW1lbGlu
ZSB0aW1lbGluZTsKIH07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vRG9j
dW1lbnRPclNoYWRvd1Jvb3RBbmltYXRpb25zLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCmluZGV4IDc3YTIwZDBhY2Q1MGE4
YTUzNGMxZDdkNDdhZTIwNTI1NTViODI1MWMuLjlkZmQxODY1YmZkYWE5MGMxZWQwZGExNWM0MWE0
YTc4ZWRlNTNjNTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9Eb2N1bWVu
dE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlv
bi9Eb2N1bWVudE9yU2hhZG93Um9vdEFuaW1hdGlvbnMuaWRsCkBAIC0yNCw4ICsyNCw2IEBACiAg
Ki8KIAogLy8gaHR0cHM6Ly9kcmFmdHMuY3Nzd2cub3JnL3dlYi1hbmltYXRpb25zLTEvI2V4dGVu
c2lvbnMtdG8tdGhlLWRvY3VtZW50b3JzaGFkb3dyb290LWludGVyZmFjZS1taXhpbgotWwotICAg
IEVuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9ucwotXSBwYXJ0aWFsIGludGVyZmFjZSBtaXhp
biBEb2N1bWVudE9yU2hhZG93Um9vdCB7CitwYXJ0aWFsIGludGVyZmFjZSBtaXhpbiBEb2N1bWVu
dE9yU2hhZG93Um9vdCB7CiAgICAgc2VxdWVuY2U8V2ViQW5pbWF0aW9uPiBnZXRBbmltYXRpb25z
KCk7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGlt
ZWxpbmUuaWRsIGIvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0RvY3VtZW50VGltZWxpbmUuaWRs
CmluZGV4IGIwODZiMmE0NmI5YjNmY2Q1NTE2MjU5NWZmOTNiZjkxYmE3Y2VjYjEuLjVhOWE0MTEy
NTQ0MjU1ZDExMDNjMWEzZGRjMDU0MWNhMGVlOWRmYTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2FuaW1hdGlvbi9Eb2N1bWVudFRpbWVsaW5lLmlkbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9h
bmltYXRpb24vRG9jdW1lbnRUaW1lbGluZS5pZGwKQEAgLTI0LDcgKzI0LDYgQEAKICAqLwogCiBb
Ci0gICAgRW5hYmxlZEF0UnVudGltZT1XZWJBbmltYXRpb25zLAogICAgIEV4cG9zZWQ9V2luZG93
LAogXSBpbnRlcmZhY2UgRG9jdW1lbnRUaW1lbGluZSA6IEFuaW1hdGlvblRpbWVsaW5lIHsKICAg
ICBbQ2FsbFdpdGg9RG9jdW1lbnRdIGNvbnN0cnVjdG9yKG9wdGlvbmFsIERvY3VtZW50VGltZWxp
bmVPcHRpb25zIG9wdGlvbnMpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYW5pbWF0aW9u
L0tleWZyYW1lRWZmZWN0LmlkbCBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9LZXlmcmFtZUVm
ZmVjdC5pZGwKaW5kZXggMzk4N2U4YmU2M2QxZDcyYjc5OTM2MGJmNzliOTM4OTA0OWZjNjJjYy4u
ZjBmMzJiMGIwOTQ0MzYxZmI1YjE3OWQ1M2FkNTllMzRiN2E2NjBjZiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYW5pbWF0aW9uL0tleWZyYW1lRWZmZWN0LmlkbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9hbmltYXRpb24vS2V5ZnJhbWVFZmZlY3QuaWRsCkBAIC0yNiw3ICsyNiw2IEBACiB0eXBl
ZGVmIFVTVlN0cmluZyBDU1NPTVN0cmluZzsKIAogWwotICAgIEVuYWJsZWRBdFJ1bnRpbWU9V2Vi
QW5pbWF0aW9ucywKICAgICBFeHBvc2VkPVdpbmRvdywKICAgICBKU0dlbmVyYXRlVG9OYXRpdmVP
YmplY3QsCiBdIGludGVyZmFjZSBLZXlmcmFtZUVmZmVjdCA6IEFuaW1hdGlvbkVmZmVjdCB7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uLmlkbCBiL1Nv
dXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24uaWRsCmluZGV4IGVkM2IzOGRmZTNl
YzNmYTg0MjAwODAwMTM1MDQ1M2ZlZDhiYmFlYTkuLjM0Nzc4MTVhZjlmMDIxMzkxNTMxMjcyMDM0
ZThkYTAwZmYyMTFkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJB
bmltYXRpb24uaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FuaW1hdGlvbi9XZWJBbmltYXRpb24u
aWRsCkBAIC0zOCw3ICszOCw2IEBAIGVudW0gQW5pbWF0aW9uUmVwbGFjZVN0YXRlIHsKIAogWwog
ICAgIEFjdGl2ZURPTU9iamVjdCwKLSAgICBFbmFibGVkQXRSdW50aW1lPVdlYkFuaW1hdGlvbnMs
CiAgICAgSW50ZXJmYWNlTmFtZT1BbmltYXRpb24sCiAgICAgQ3VzdG9tVG9KU09iamVjdCwKICAg
ICBFeHBvcnRNYWNybz1XRUJDT1JFX0VYUE9SVApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YW5pbWF0aW9uL1dlYkFuaW1hdGlvblR5cGVzLmggYi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24v
V2ViQW5pbWF0aW9uVHlwZXMuaAppbmRleCAzYjA4MWQzMmZkNTIzNzZjNzI0OWY0NGE0NWIzZmZj
OWE2ZDRhNTc2Li5iZGI4Njk4NTBmNmIxMjc3MGI3ZTgwYjk0M2FjYmFjZDU2MGYxOTZjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hbmltYXRpb24vV2ViQW5pbWF0aW9uVHlwZXMuaApAQCAtNTAsNiAr
NTAsMTEgQEAgc3RydWN0IFdlYkFuaW1hdGlvbnNNYXJrYWJsZURvdWJsZVRyYWl0cyB7CiAgICAg
fQogfTsKIAorZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3QgeworICAgIFJlcXVpcmVzUmVjb21w
b3NpdGUgICAgID0gMSA8PCAwLAorICAgIEZvcmNlc1N0YWNraW5nQ29udGV4dCAgID0gMSA8PCAx
Cit9OworCiB1c2luZyBNYXJrYWJsZURvdWJsZSA9IE1hcmthYmxlPGRvdWJsZSwgV2ViQW5pbWF0
aW9uc01hcmthYmxlRG91YmxlVHJhaXRzPjsKIAogdXNpbmcgQW5pbWF0aW9uQ29sbGVjdGlvbiA9
IExpc3RIYXNoU2V0PFJlZlB0cjxXZWJBbmltYXRpb24+PjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwIGIvU291cmNlL1dlYkNv
cmUvY3NzL0NTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAKaW5kZXggYTNmMTMzOGIzNjBh
YzBkODA1YWViMzE5NmE0ODEwZDVkOWM3NGJlZi4uMzY5YjFiZDZjMDZkMGM2NGVjNjIwOTZkZmZj
YTM4YmEzOGEyYTk4ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvY3NzL0NTU0NvbXB1dGVk
U3R5bGVEZWNsYXJhdGlvbi5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKIAogI2luY2x1ZGUgIkJhc2ljU2hhcGVGdW5jdGlvbnMu
aCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQXNw
ZWN0UmF0aW9WYWx1ZS5oIgogI2luY2x1ZGUgIkNTU0Jhc2ljU2hhcGVzLmgiCiAjaW5jbHVkZSAi
Q1NTQm9yZGVySW1hZ2UuaCIKQEAgLTQwLDYgKzM5LDcgQEAKICNpbmNsdWRlICJDU1NMaW5lQm94
Q29udGFpblZhbHVlLmgiCiAjaW5jbHVkZSAiQ1NTUHJpbWl0aXZlVmFsdWUuaCIKICNpbmNsdWRl
ICJDU1NQcmltaXRpdmVWYWx1ZU1hcHBpbmdzLmgiCisjaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmlt
YXRpb24uaCIKICNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCiAjaW5jbHVkZSAiQ1NTUHJv
cGVydHlQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NSZWZsZWN0VmFsdWUuaCIKQEAgLTIyNDYsMTEg
KzIyNDYsOCBAQCBzdGF0aWMgaW5saW5lIGNvbnN0IFJlbmRlclN0eWxlKiBjb21wdXRlUmVuZGVy
U3R5bGVGb3JQcm9wZXJ0eShFbGVtZW50JiBlbGVtZW50LAogewogICAgIGF1dG8qIHJlbmRlcmVy
ID0gZWxlbWVudC5yZW5kZXJlcigpOwogCi0gICAgaWYgKHJlbmRlcmVyICYmIHJlbmRlcmVyLT5p
c0NvbXBvc2l0ZWQoKSAmJiBDU1NBbmltYXRpb25Db250cm9sbGVyOjpzdXBwb3J0c0FjY2VsZXJh
dGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShwcm9wZXJ0eUlEKSkgewotICAgICAgICBpZiAoYXV0byB0
aW1lbGluZSA9IGVsZW1lbnQuZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCi0gICAgICAg
ICAgICBvd25lZFN0eWxlID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVu
ZGVyZXIpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBvd25lZFN0eWxlID0gcmVuZGVyZXIt
PmxlZ2FjeUFuaW1hdGlvbigpLmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqcmVuZGVyZXIpOwor
ICAgIGlmIChyZW5kZXJlciAmJiByZW5kZXJlci0+aXNDb21wb3NpdGVkKCkgJiYgQ1NTUHJvcGVy
dHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQp
KSB7CisgICAgICAgIG93bmVkU3R5bGUgPSByZW5kZXJlci0+YW5pbWF0ZWRTdHlsZSgpOwogICAg
ICAgICBpZiAocHNldWRvRWxlbWVudFNwZWNpZmllciAhPSBQc2V1ZG9JZDo6Tm9uZSAmJiAhZWxl
bWVudC5pc1BzZXVkb0VsZW1lbnQoKSkgewogICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMgY2Fj
aGVkIHBzZXVkbyBzdHlsZSB3aWxsIG9ubHkgZXhpc3QgaWYgdGhlIGFuaW1hdGlvbiBoYXMgYmVl
biBydW4gYXQgbGVhc3Qgb25jZS4KICAgICAgICAgICAgIHJldHVybiBvd25lZFN0eWxlLT5nZXRD
YWNoZWRQc2V1ZG9TdHlsZShwc2V1ZG9FbGVtZW50U3BlY2lmaWVyKTsKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1l
bnQuY3BwCmluZGV4IDkwOTZmMjY0Njc5MTMwYTc4NGE1MWE5YWRjOGJhZGViZWM3YzdhYzQuLjI5
NDBjNThiZjE3OGM1MjBhNjA5ZWIxYjczNzczOGViNjY5ZmRjMDYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvZG9tL0RvY3Vt
ZW50LmNwcApAQCAtMzIsNyArMzIsNiBAQAogI2luY2x1ZGUgIkF0dHIuaCIKICNpbmNsdWRlICJC
ZWZvcmVVbmxvYWRFdmVudC5oIgogI2luY2x1ZGUgIkNEQVRBU2VjdGlvbi5oIgotI2luY2x1ZGUg
IkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJDU1NGb250U2VsZWN0b3IuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVl
dC5oIgpAQCAtMTk2Miw3ICsxOTYxLDYgQEAgdm9pZCBEb2N1bWVudDo6cmVzb2x2ZVN0eWxlKFJl
c29sdmVTdHlsZVR5cGUgdHlwZSkKICAgICBUcmFjZVNjb3BlIHRyYWNpbmdTY29wZShTdHlsZVJl
Y2FsY1N0YXJ0LCBTdHlsZVJlY2FsY0VuZCk7CiAKICAgICBSZW5kZXJWaWV3OjpSZXBhaW50UmVn
aW9uQWNjdW11bGF0b3IgcmVwYWludFJlZ2lvbkFjY3VtdWxhdG9yKHJlbmRlclZpZXcoKSk7Ci0g
ICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJm1fZnJhbWUtPmxl
Z2FjeUFuaW1hdGlvbigpKTsKIAogICAgIC8vIEZJWE1FOiBEbyB0aGlzIHVwZGF0ZSBwZXIgdHJl
ZSBzY29wZS4KICAgICB7CkBAIC0yNDIyLDE5ICsyNDIwLDEzIEBAIHZvaWQgRG9jdW1lbnQ6OmRp
ZEJlY29tZUN1cnJlbnREb2N1bWVudEluRnJhbWUoKQogICAgIC8vIGJlIG91dCBvZiBzeW5jIGlm
IHRoZSBET00gc3VzcGVuc2lvbiBzdGF0ZSBjaGFuZ2VkIHdoaWxlIHRoZSBkb2N1bWVudCB3YXMg
bm90IGluIHRoZSBmcmFtZSAocG9zc2libHkgaW4gdGhlCiAgICAgLy8gYmFjay9mb3J3YXJkIGNh
Y2hlLCBvciBzaW1wbHkgbmV3bHkgY3JlYXRlZCkuCiAgICAgaWYgKG1fZnJhbWUtPmFjdGl2ZURP
TU9iamVjdHNBbmRBbmltYXRpb25zU3VzcGVuZGVkKCkpIHsKLSAgICAgICAgaWYgKFJ1bnRpbWVF
bmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAobV90aW1lbGluZXNDb250cm9sbGVyKQot
ICAgICAgICAgICAgICAgIG1fdGltZWxpbmVzQ29udHJvbGxlci0+c3VzcGVuZEFuaW1hdGlvbnMo
KTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KHRoaXMpOworICAgICAgICBpZiAobV90aW1l
bGluZXNDb250cm9sbGVyKQorICAgICAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5zdXNw
ZW5kQW5pbWF0aW9ucygpOwogICAgICAgICBzdXNwZW5kU2NoZWR1bGVkVGFza3MoUmVhc29uRm9y
U3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3BlbmRlZCk7CiAgICAgfSBlbHNlIHsKICAgICAgICAg
cmVzdW1lU2NoZWR1bGVkVGFza3MoUmVhc29uRm9yU3VzcGVuc2lvbjo6UGFnZVdpbGxCZVN1c3Bl
bmRlZCk7Ci0gICAgICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJl
cygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAg
aWYgKG1fdGltZWxpbmVzQ29udHJvbGxlcikKLSAgICAgICAgICAgICAgICBtX3RpbWVsaW5lc0Nv
bnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAg
ICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQo
dGhpcyk7CisgICAgICAgIGlmIChtX3RpbWVsaW5lc0NvbnRyb2xsZXIpCisgICAgICAgICAgICBt
X3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3VtZUFuaW1hdGlvbnMoKTsKICAgICB9CiB9CiAKQEAg
LTI1MjgsOSArMjUyMCw2IEBAIHZvaWQgRG9jdW1lbnQ6OndpbGxCZVJlbW92ZWRGcm9tRnJhbWUo
KQogICAgIGlmIChtX2hhc1ByZXBhcmVkRm9yRGVzdHJ1Y3Rpb24pCiAgICAgICAgIHJldHVybjsK
IAotICAgIGlmIChtX2ZyYW1lKQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmltYXRpb24oKS5k
ZXRhY2hGcm9tRG9jdW1lbnQodGhpcyk7Ci0KICNpZiBVU0UoTElCV0VCUlRDKQogICAgIC8vIEZJ
WE1FOiBUaGlzIHNob3VsZCBiZSBtb3ZlZCB0byBNb2R1bGVzL21lZGlhc3RyZWFtLgogICAgIGlm
IChMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkpIHsKQEAgLTMwNjYsOCArMzA1
NSw2IEBAIHZvaWQgRG9jdW1lbnQ6OmltcGxpY2l0Q2xvc2UoKQogICAgICAgICBpZiAoYXV0byog
ZG9jdW1lbnRMb2FkZXIgPSBsb2FkZXIoKSkKICAgICAgICAgICAgIGRvY3VtZW50TG9hZGVyLT5z
dGFydEljb25Mb2FkaW5nKCk7CiAKLSAgICAgICAgZi0+bGVnYWN5QW5pbWF0aW9uKCkuc3RhcnRB
bmltYXRpb25zSWZOb3RTdXNwZW5kZWQodGhpcyk7Ci0KICAgICAgICAgLy8gRklYTUU6IFdlIHNo
b3VsZG4ndCBiZSBkaXNwYXRjaGluZyBwZW5kaW5nIGV2ZW50cyBnbG9iYWxseSBvbiBhbGwgRG9j
dW1lbnRzIGhlcmUuCiAgICAgICAgIC8vIEZvciBub3csIG9ubHkgZG8gdGhpcyB3aGVuIHRoZXJl
IGlzIGEgRnJhbWUsIG90aGVyd2lzZSB0aGlzIGNvdWxkIGNhdXNlIEpTIHJlZW50cmFuY3kKICAg
ICAgICAgLy8gYmVsb3cgU1ZHIGZvbnQgcGFyc2luZywgZm9yIGV4YW1wbGUuIDxodHRwczovL3dl
YmtpdC5vcmcvYi8xMzYyNjk+CkBAIC01NDU0LDExICs1NDQxLDggQEAgdm9pZCBEb2N1bWVudDo6
cmVzdW1lKFJlYXNvbkZvclN1c3BlbnNpb24gcmVhc29uKQogCiAgICAgQVNTRVJUKG1fZnJhbWUp
OwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChtX3RpbWVs
aW5lc0NvbnRyb2xsZXIpCi0gICAgICAgICAgICBtX3RpbWVsaW5lc0NvbnRyb2xsZXItPnJlc3Vt
ZUFuaW1hdGlvbnMoKTsgIAotICAgIH0gZWxzZQotICAgICAgICBtX2ZyYW1lLT5sZWdhY3lBbmlt
YXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQodGhpcyk7CisgICAgaWYgKG1fdGlt
ZWxpbmVzQ29udHJvbGxlcikKKyAgICAgICAgbV90aW1lbGluZXNDb250cm9sbGVyLT5yZXN1bWVB
bmltYXRpb25zKCk7CiAKICAgICByZXN1bWVTY2hlZHVsZWRUYXNrcyhyZWFzb24pOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9k
b20vRWxlbWVudC5jcHAKaW5kZXggYzEzMTI4YTRiZDQwNjU3NmJhMTBmMjIwM2I1OTRlMmQyZjA5
NmViNS4uYzE2OThmOWVkMWVmMjY3MDQwZjM0N2YxNTI5N2ViY2M1MDIzZTVjMSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Rv
bS9FbGVtZW50LmNwcApAQCAtMjksNyArMjksNiBAQAogI2luY2x1ZGUgIkFYT2JqZWN0Q2FjaGUu
aCIKICNpbmNsdWRlICJBdHRyLmgiCiAjaW5jbHVkZSAiQXR0cmlidXRlQ2hhbmdlSW52YWxpZGF0
aW9uLmgiCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNT
U1BhcnNlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgogI2luY2x1ZGUgIkNocm9tZUNsaWVudC5o
IgpAQCAtMTE5LDYgKzExOCw3IEBACiAjaW5jbHVkZSAiVG91Y2hBY3Rpb24uaCIKICNpbmNsdWRl
ICJWb2lkQ2FsbGJhY2suaCIKICNpbmNsdWRlICJXZWJBbmltYXRpb24uaCIKKyNpbmNsdWRlICJX
ZWJBbmltYXRpb25UeXBlcy5oIgogI2luY2x1ZGUgIldoZWVsRXZlbnQuaCIKICNpbmNsdWRlICJY
TGlua05hbWVzLmgiCiAjaW5jbHVkZSAiWE1MTlNOYW1lcy5oIgpAQCAtMjI4NSw5ICsyMjg1LDYg
QEAgdm9pZCBFbGVtZW50OjpyZW1vdmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlIHJlbW92YWxU
eXBlLCBDb250YWluZXJOb2RlJiBvbGRQYXIKICAgICBpZiAoYXV0byogdGltZWxpbmUgPSBkb2N1
bWVudCgpLmV4aXN0aW5nVGltZWxpbmUoKSkKICAgICAgICAgdGltZWxpbmUtPmVsZW1lbnRXYXNS
ZW1vdmVkKCp0aGlzKTsKIAotICAgIGlmIChmcmFtZSkKLSAgICAgICAgZnJhbWUtPmxlZ2FjeUFu
aW1hdGlvbigpLmNhbmNlbEFuaW1hdGlvbnMoKnRoaXMpOwotCiAjaWYgRU5BQkxFKFdIRUVMX0VW
RU5UX0xBVENISU5HKQogICAgIGlmIChmcmFtZSAmJiBmcmFtZS0+cGFnZSgpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBzY3JvbGxMYXRjaGluZ0NvbnRyb2xsZXIgPSBmcmFtZS0+cGFnZSgpLT5zY3Jv
bGxMYXRjaGluZ0NvbnRyb2xsZXJJZkV4aXN0cygpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZG9tL1BzZXVkb0VsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1BzZXVkb0VsZW1l
bnQuY3BwCmluZGV4IDE1ZDgxYzEwNmQ4MDkzNTNmMjFiZTdlYzg0ODNkZDg4Yjc2MjhiMzcuLmRh
ZDE1NjZjYzA2YTNkMTRkNmJjYjdjNTA3NmVjYzE4YjZjN2E3NjcgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2RvbS9Qc2V1ZG9FbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20v
UHNldWRvRWxlbWVudC5jcHAKQEAgLTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIK
ICNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ29udGVudERhdGEuaCIKICNpbmNsdWRlICJEb2N1bWVudFRp
bWVsaW5lLmgiCiAjaW5jbHVkZSAiSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uLmgiCkBAIC05Myw5
ICs5Miw2IEBAIHZvaWQgUHNldWRvRWxlbWVudDo6Y2xlYXJIb3N0RWxlbWVudCgpCiAgICAgaWYg
KGF1dG8qIHRpbWVsaW5lID0gZG9jdW1lbnQoKS5leGlzdGluZ1RpbWVsaW5lKCkpCiAgICAgICAg
IHRpbWVsaW5lLT5lbGVtZW50V2FzUmVtb3ZlZCgqdGhpcyk7CiAgICAgCi0gICAgaWYgKGF1dG8q
IGZyYW1lID0gZG9jdW1lbnQoKS5mcmFtZSgpKQotICAgICAgICBmcmFtZS0+bGVnYWN5QW5pbWF0
aW9uKCkuY2FuY2VsQW5pbWF0aW9ucygqdGhpcyk7Ci0KICAgICBtX2hvc3RFbGVtZW50ID0gbnVs
bHB0cjsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRs
IGIvU291cmNlL1dlYkNvcmUvZG9tL1NoYWRvd1Jvb3QuaWRsCmluZGV4IGNhZGZiOTY5YjJhNGE0
Y2Y5YjU4MThkNzM0NDY2YmEzNGJlYjYyODMuLjQyMDM2Nzc1MmRiODAyMjY5YmVkODJmYTQ1OGNj
NGQ5OTU0ZWY1MTggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2RvbS9TaGFkb3dSb290Lmlk
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU2hhZG93Um9vdC5pZGwKQEAgLTM0LDMgKzM0LDQg
QEAKIAogU2hhZG93Um9vdCBpbmNsdWRlcyBEb2N1bWVudE9yU2hhZG93Um9vdDsKIFNoYWRvd1Jv
b3QgaW5jbHVkZXMgSW5uZXJIVE1MOworIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaGlz
dG9yeS9DYWNoZWRGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1l
LmNwcAppbmRleCA0Njk4NTc0ZDMyNTA1ZTZmOWM1YzNhMWNiYWNhYmZlYjJkMGQ0MWRjLi44ZGUy
NmUxYmMxNTMzZmQwYjNmMDc0ZjA2YjFmMzRkM2U4MGI4OThhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9oaXN0b3J5L0NhY2hlZEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9oaXN0
b3J5L0NhY2hlZEZyYW1lLmNwcApAQCAtMjcsNyArMjcsNiBAQAogI2luY2x1ZGUgIkNhY2hlZEZy
YW1lLmgiCiAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNhY2hlZEZyYW1lUGxhdGZvcm1EYXRhLmgi
CiAjaW5jbHVkZSAiQ2FjaGVkUGFnZS5oIgogI2luY2x1ZGUgIkRPTVdpbmRvdy5oIgpAQCAtMjcz
LDggKzI3Miw2IEBAIHZvaWQgQ2FjaGVkRnJhbWU6OmRlc3Ryb3koKQogCiAgICAgRnJhbWU6OmNs
ZWFyVGltZXJzKG1fdmlldy5nZXQoKSwgbV9kb2N1bWVudC5nZXQoKSk7CiAKLSAgICBtX3ZpZXct
PmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuZGV0YWNoRnJvbURvY3VtZW50KG1fZG9jdW1lbnQu
Z2V0KCkpOwotCiAgICAgLy8gRklYTUU6IFdoeSBkbyB3ZSBuZWVkIHRvIGNhbGwgcmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMgaGVyZT8gV2hlbiB0aGUgZG9jdW1lbnQgaXMgaW4gYmFjay9mb3J3YXJk
IGNhY2hlLCB0aGlzIG1ldGhvZCB3b24ndCB3b3JrCiAgICAgLy8gZnVsbHkgYW55d2F5LCBiZWNh
dXNlIHRoZSBkb2N1bWVudCB3b24ndCBiZSBhYmxlIHRvIGFjY2VzcyBpdHMgRE9NV2luZG93IG9i
amVjdCAoZHVlIHRvIGJlaW5nIGZyYW1lbGVzcykuCiAgICAgbV9kb2N1bWVudC0+cmVtb3ZlQWxs
RXZlbnRMaXN0ZW5lcnMoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKaW5kZXggM2M1YWU0NTg1NGM3MmJk
ZjZmYjczNjVlZjVmMjdmYWE2ZmRiZTVlYy4uYmQzNDk3YzFhMjIwMDE1NjU2ZTAwMjA0NWU0ZTYx
NzdjMzkzOThiNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZS5jcHAKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNs
dWRlICJBcHBseVN0eWxlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgi
CiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUgIkNhY2hlZENTU1N0eWxl
U2hlZXQuaCIKQEAgLTE1Niw3ICsxNTUsNiBAQCBGcmFtZTo6RnJhbWUoUGFnZSYgcGFnZSwgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsIFVuaXF1ZVJlZjxGcmFtZUxvYQogICAg
ICwgbV9uYXZpZ2F0aW9uU2NoZWR1bGVyKG1ha2VVbmlxdWVSZWY8TmF2aWdhdGlvblNjaGVkdWxl
cj4oKnRoaXMpKQogICAgICwgbV9vd25lckVsZW1lbnQob3duZXJFbGVtZW50KQogICAgICwgbV9z
Y3JpcHQobWFrZVVuaXF1ZVJlZjxTY3JpcHRDb250cm9sbGVyPigqdGhpcykpCi0gICAgLCBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXIobWFrZVVuaXF1ZVJlZjxDU1NBbmltYXRpb25Db250cm9sbGVyPigq
dGhpcykpCiAgICAgLCBtX3BhZ2Vab29tRmFjdG9yKHBhcmVudFBhZ2Vab29tRmFjdG9yKHRoaXMp
KQogICAgICwgbV90ZXh0Wm9vbUZhY3RvcihwYXJlbnRUZXh0Wm9vbUZhY3Rvcih0aGlzKSkKICAg
ICAsIG1fZXZlbnRIYW5kbGVyKG1ha2VVbmlxdWVSZWY8RXZlbnRIYW5kbGVyPigqdGhpcykpCkBA
IC03MzcsMTEgKzczNSw4IEBAIHZvaWQgRnJhbWU6OmNsZWFyVGltZXJzKEZyYW1lVmlldyAqdmll
dywgRG9jdW1lbnQgKmRvY3VtZW50KQogewogICAgIGlmICh2aWV3KSB7CiAgICAgICAgIHZpZXct
PmxheW91dENvbnRleHQoKS51bnNjaGVkdWxlTGF5b3V0KCk7Ci0gICAgICAgIGlmIChSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQoKSkgewotICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3Vt
ZW50LT50aW1lbGluZXNDb250cm9sbGVyKCkpCi0gICAgICAgICAgICAgICAgdGltZWxpbmVzLT5z
dXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHZpZXctPmZy
YW1lKCkubGVnYWN5QW5pbWF0aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1
bWVudCk7CisgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC0+dGltZWxpbmVz
Q29udHJvbGxlcigpKQorICAgICAgICAgICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygp
OwogICAgICAgICB2aWV3LT5mcmFtZSgpLmV2ZW50SGFuZGxlcigpLnN0b3BBdXRvc2Nyb2xsVGlt
ZXIoKTsKICAgICB9CiB9CkBAIC0xMDI5LDExICsxMDI0LDggQEAgdm9pZCBGcmFtZTo6cmVzdW1l
QWN0aXZlRE9NT2JqZWN0c0FuZEFuaW1hdGlvbnMoKQogCiAgICAgLy8gRnJhbWU6OmNsZWFyVGlt
ZXJzKCkgc3VzcGVuZGVkIGFuaW1hdGlvbnMgYW5kIHBlbmRpbmcgcmVsYXlvdXRzLgogCi0gICAg
aWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMg
PSBtX2RvYy0+dGltZWxpbmVzQ29udHJvbGxlcigpKQotICAgICAgICAgICAgdGltZWxpbmVzLT5y
ZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgfSBlbHNlCi0gICAgICAgIGxlZ2FjeUFuaW1hdGlvbigp
LnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChtX2RvYy5nZXQoKSk7CisgICAgaWYgKGF1dG8q
IHRpbWVsaW5lcyA9IG1fZG9jLT50aW1lbGluZXNDb250cm9sbGVyKCkpCisgICAgICAgIHRpbWVs
aW5lcy0+cmVzdW1lQW5pbWF0aW9ucygpOwogICAgIGlmIChtX3ZpZXcpCiAgICAgICAgIG1fdmll
dy0+bGF5b3V0Q29udGV4dCgpLnNjaGVkdWxlTGF5b3V0KCk7CiB9CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lLmgKaW5k
ZXggNjhmZGMxMTU1ZDkxM2VlY2YyNTcwNmFkOTg4OWI1MDIxZmFiZjJjNC4uNTBjNjVmNWU1YjA3
NTNjMWU2ZDMwN2IyMTNiNTIwMGM0NTBhYTMwYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGFnZS9GcmFtZS5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWUuaApAQCAtNjYsNyAr
NjYsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLWNsYXNz
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7CiBjbGFzcyBDb2xvcjsKIGNsYXNzIERPTVdpbmRvdzsK
IGNsYXNzIERvY3VtZW50OwpAQCAtMTc0LDggKzE3Myw2IEBAIHB1YmxpYzoKICAgICBGcmFtZVNl
bGVjdGlvbiYgc2VsZWN0aW9uKCkgeyByZXR1cm4gZG9jdW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0K
ICAgICBjb25zdCBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uKCkgY29uc3QgeyByZXR1cm4gZG9j
dW1lbnQoKS0+c2VsZWN0aW9uKCk7IH0KICAgICBGcmFtZVRyZWUmIHRyZWUoKSBjb25zdDsKLSAg
ICBDU1NBbmltYXRpb25Db250cm9sbGVyJiBsZWdhY3lBbmltYXRpb24oKSB7IHJldHVybiBtX2Fu
aW1hdGlvbkNvbnRyb2xsZXI7IH0KLSAgICBjb25zdCBDU1NBbmltYXRpb25Db250cm9sbGVyJiBs
ZWdhY3lBbmltYXRpb24oKSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0K
ICAgICBTY3JpcHRDb250cm9sbGVyJiBzY3JpcHQoKSB7IHJldHVybiBtX3NjcmlwdDsgfQogICAg
IGNvbnN0IFNjcmlwdENvbnRyb2xsZXImIHNjcmlwdCgpIGNvbnN0IHsgcmV0dXJuIG1fc2NyaXB0
OyB9CiAKQEAgLTM0NSw3ICszNDIsNiBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxEb2N1bWVudD4g
bV9kb2M7CiAKICAgICBVbmlxdWVSZWY8U2NyaXB0Q29udHJvbGxlcj4gbV9zY3JpcHQ7Ci0gICAg
VW5pcXVlUmVmPENTU0FuaW1hdGlvbkNvbnRyb2xsZXI+IG1fYW5pbWF0aW9uQ29udHJvbGxlcjsK
IAogI2lmIEVOQUJMRShEQVRBX0RFVEVDVElPTikKICAgICBSZXRhaW5QdHI8TlNBcnJheT4gbV9k
YXRhRGV0ZWN0aW9uUmVzdWx0czsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJh
bWVWaWV3LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3LmNwcAppbmRleCA3NWI5
ZTJiZmM5ZWFlM2UzNWJlZTE4ZmViZDQ5MWY0MGYzNjdjNjE2Li5kNDkyNDFlZjA4OGI4Mzc2MjU2
MDlkMmM2NWFiZjI4MzRkYTQxODY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0Zy
YW1lVmlldy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9GcmFtZVZpZXcuY3BwCkBAIC0z
MCw3ICszMCw2IEBACiAjaW5jbHVkZSAiQVhPYmplY3RDYWNoZS5oIgogI2luY2x1ZGUgIkJhY2tG
b3J3YXJkQ2FjaGUuaCIKICNpbmNsdWRlICJCYWNrRm9yd2FyZENvbnRyb2xsZXIuaCIKLSNpbmNs
dWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FjaGVkSW1hZ2UuaCIK
ICNpbmNsdWRlICJDYWNoZWRSZXNvdXJjZUxvYWRlci5oIgogI2luY2x1ZGUgIkNocm9tZS5oIgpA
QCAtNTg2LDggKzU4NSw2IEBAIHZvaWQgRnJhbWVWaWV3OjpkaWREZXN0cm95UmVuZGVyVHJlZSgp
CiAKICAgICBBU1NFUlQoIW1fdmlld3BvcnRDb25zdHJhaW5lZE9iamVjdHMgfHwgbV92aWV3cG9y
dENvbnN0cmFpbmVkT2JqZWN0cy0+Y29tcHV0ZXNFbXB0eSgpKTsKICAgICBBU1NFUlQoIW1fc2xv
d1JlcGFpbnRPYmplY3RzIHx8IG1fc2xvd1JlcGFpbnRPYmplY3RzLT5jb21wdXRlc0VtcHR5KCkp
OwotCi0gICAgQVNTRVJUKCFmcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLmhhc0FuaW1hdGlvbnMo
KSk7CiB9CiAKIHZvaWQgRnJhbWVWaWV3OjpzZXRDb250ZW50c1NpemUoY29uc3QgSW50U2l6ZSYg
c2l6ZSkKQEAgLTQ0MTcsOCArNDQxNCw2IEBAIHZvaWQgRnJhbWVWaWV3Ojp1cGRhdGVMYXlvdXRB
bmRTdHlsZUlmTmVlZGVkUmVjdXJzaXZlKCkKICAgICAvLyBTdHlsZSB1cGRhdGVzIGNhbiB0cmln
Z2VyIHNjcmlwdCwgd2hpY2ggY2FuIGNhdXNlIHRoaXMgRnJhbWVWaWV3IHRvIGJlIGRlc3Ryb3ll
ZC4KICAgICBSZWY8RnJhbWVWaWV3PiBwcm90ZWN0ZWRUaGlzKCp0aGlzKTsKIAotICAgIEFuaW1h
dGlvblVwZGF0ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZmcmFtZSgpLmxlZ2FjeUFuaW1h
dGlvbigpKTsKLQogICAgIHVzaW5nIERlc2NlbmRhbnRzRGVxdWUgPSBEZXF1ZTxSZWY8RnJhbWVW
aWV3PiwgMTY+OwogICAgIGF1dG8gbmV4dFJlbmRlcmVkRGVzY2VuZGFudCA9IFt0aGlzXSAoRGVz
Y2VuZGFudHNEZXF1ZSYgZGVzY2VuZGFudHNEZXF1ZSkgLT4gUmVmUHRyPEZyYW1lVmlldz4gewog
ICAgICAgICBpZiAoZGVzY2VuZGFudHNEZXF1ZS5pc0VtcHR5KCkpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91dENvbnRleHQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGFnZS9GcmFtZVZpZXdMYXlvdXRDb250ZXh0LmNwcAppbmRleCA4YTZjMTQyODM3NjcwODk1
N2M3ZDM0MDQ5NWE2NTBhYTJmMDg0Nzc3Li5lYmM4NjUzMjc3NWFmY2IwNDgwOTdmMTYxNzc1ODg4
NDI5MWQxNDVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0ZyYW1lVmlld0xheW91
dENvbnRleHQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvRnJhbWVWaWV3TGF5b3V0Q29u
dGV4dC5jcHAKQEAgLTI2LDcgKzI2LDYgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRl
ICJGcmFtZVZpZXdMYXlvdXRDb250ZXh0LmgiCiAKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250
cm9sbGVyLmgiCiAjaW5jbHVkZSAiRGVidWdQYWdlT3ZlcmxheXMuaCIKICNpbmNsdWRlICJEb2N1
bWVudC5oIgogI2luY2x1ZGUgIkZyYW1lVmlldy5oIgpAQCAtMTg2LDcgKzE4NSw2IEBAIHZvaWQg
RnJhbWVWaWV3TGF5b3V0Q29udGV4dDo6bGF5b3V0KCkKICAgICBMYXlvdXRTY29wZSBsYXlvdXRT
Y29wZSgqdGhpcyk7CiAgICAgVHJhY2VTY29wZSB0cmFjaW5nU2NvcGUoTGF5b3V0U3RhcnQsIExh
eW91dEVuZCk7CiAgICAgSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uOjp3aWxsTGF5b3V0KHZpZXco
KS5mcmFtZSgpKTsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9j
aygmdmlldygpLmZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkpOwogICAgIFdlYWtQdHI8UmVuZGVy
RWxlbWVudD4gbGF5b3V0Um9vdDsKICAgICAKICAgICBtX2xheW91dFRpbWVyLnN0b3AoKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL1BhZ2UuY3BwCmluZGV4IGEwYTc3ZDI4ODM2NDgyMWM1MTBiMmQ1MTJiYTcwZTcyOWMyMWI2
ZDUuLmY5MjNiYTg5Mjk5YzAwOGUxMGYwZDI4ZWU4MGEzZjNmOTdiYWE5ODYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BhZ2UvUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9Q
YWdlLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ2FjaGUuaCIK
ICNpbmNsdWRlICJCYWNrRm9yd2FyZENsaWVudC5oIgogI2luY2x1ZGUgIkJhY2tGb3J3YXJkQ29u
dHJvbGxlci5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJDYWNoZVN0b3JhZ2VQcm92aWRlci5oIgogI2luY2x1ZGUgIkNhY2hlZFJlc291cmNlTG9hZGVy
LmgiCiAjaW5jbHVkZSAiQ2hyb21lLmgiCkBAIC0xNjQ4LDkgKzE2NDcsNiBAQCB2b2lkIFBhZ2U6
OmhhbmRsZUxvd01vZGVQb3dlckNoYW5nZShib29sIGlzTG93UG93ZXJNb2RlRW5hYmxlZCkKICAg
ICBtX3Rocm90dGxpbmdSZWFzb25zID0gbV90aHJvdHRsaW5nUmVhc29ucyBeIFRocm90dGxpbmdS
ZWFzb246Okxvd1Bvd2VyTW9kZTsKICAgICByZW5kZXJpbmdVcGRhdGVTY2hlZHVsZXIoKS5hZGp1
c3RSZW5kZXJpbmdVcGRhdGVGcmVxdWVuY3koKTsKIAotICAgIGlmICghUnVudGltZUVuYWJsZWRG
ZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkKCkpCi0gICAgICAgIG1haW5GcmFtZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnVwZGF0ZVRocm90
dGxpbmdTdGF0ZSgpOwotCiAgICAgdXBkYXRlRE9NVGltZXJBbGlnbm1lbnRJbnRlcnZhbCgpOwog
fQogCkBAIC0yMTg1LDEzICsyMTgxLDEwIEBAIHZvaWQgUGFnZTo6c2V0SXNWaXNpYmxlSW50ZXJu
YWwoYm9vbCBpc1Zpc2libGUpCiAgICAgICAgICAgICB2aWV3LT5zaG93KCk7CiAKICAgICAgICAg
aWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgICAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgICAg
ICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0gZG9jdW1lbnQudGltZWxpbmVzQ29udHJv
bGxlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICBtYWluRnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zKCk7
CisgICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewor
ICAgICAgICAgICAgICAgIGlmIChhdXRvKiB0aW1lbGluZXMgPSBkb2N1bWVudC50aW1lbGluZXND
b250cm9sbGVyKCkpCisgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+cmVzdW1lQW5pbWF0
aW9ucygpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3JFYWNoRG9j
dW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkgewpAQCAtMjIwOSwxMyArMjIwMiwxMCBAQCB2
b2lkIFBhZ2U6OnNldElzVmlzaWJsZUludGVybmFsKGJvb2wgaXNWaXNpYmxlKQogCiAgICAgaWYg
KCFpc1Zpc2libGUpIHsKICAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VDU1NBbmlt
YXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgICAgICBpZiAoUnVudGltZUVuYWJs
ZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25F
bmFibGVkKCkpIHsKLSAgICAgICAgICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50
JiBkb2N1bWVudCkgewotICAgICAgICAgICAgICAgICAgICBpZiAoYXV0byogdGltZWxpbmVzID0g
ZG9jdW1lbnQudGltZWxpbmVzQ29udHJvbGxlcigpKQotICAgICAgICAgICAgICAgICAgICAgICAg
dGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgICAgICAgICAgICAgIH0pOwotICAg
ICAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0
aW9uKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKKyAgICAgICAgICAgIGZvckVhY2hEb2N1bWVudChb
XSAoRG9jdW1lbnQmIGRvY3VtZW50KSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVs
aW5lcyA9IGRvY3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAgICAgfSk7CiAgICAg
ICAgIH0KIAogICAgICAgICBmb3JFYWNoRG9jdW1lbnQoW10gKERvY3VtZW50JiBkb2N1bWVudCkg
ewpAQCAtMjU2MCwyMSArMjU1MCwxNCBAQCB2b2lkIFBhZ2U6OnJlc2V0U2Vlbk1lZGlhRW5naW5l
cygpCiB2b2lkIFBhZ2U6OmhpZGRlblBhZ2VDU1NBbmltYXRpb25TdXNwZW5zaW9uU3RhdGVDaGFu
Z2VkKCkKIHsKICAgICBpZiAoIWlzVmlzaWJsZSgpKSB7Ci0gICAgICAgIGlmIChSdW50aW1lRW5h
YmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQoKSkgewotICAgICAgICAgICAgZm9yRWFjaERvY3VtZW50KFsmXSAoRG9jdW1lbnQm
IGRvY3VtZW50KSB7Ci0gICAgICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRvY3Vt
ZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAobV9z
ZXR0aW5ncy0+aGlkZGVuUGFnZUNTU0FuaW1hdGlvblN1c3BlbnNpb25FbmFibGVkKCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICB0aW1lbGluZXMtPnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lcy0+
cmVzdW1lQW5pbWF0aW9ucygpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0pOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgaWYgKG1fc2V0dGluZ3MtPmhpZGRlblBhZ2VD
U1NBbmltYXRpb25TdXNwZW5zaW9uRW5hYmxlZCgpKQotICAgICAgICAgICAgICAgIG1haW5GcmFt
ZSgpLmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgICAgICBl
bHNlCi0gICAgICAgICAgICAgICAgbWFpbkZyYW1lKCkubGVnYWN5QW5pbWF0aW9uKCkucmVzdW1l
QW5pbWF0aW9ucygpOwotICAgICAgICB9CisgICAgICAgIGZvckVhY2hEb2N1bWVudChbJl0gKERv
Y3VtZW50JiBkb2N1bWVudCkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lcyA9IGRv
Y3VtZW50LnRpbWVsaW5lc0NvbnRyb2xsZXIoKSkgeworICAgICAgICAgICAgICAgIGlmIChtX3Nl
dHRpbmdzLT5oaWRkZW5QYWdlQ1NTQW5pbWF0aW9uU3VzcGVuc2lvbkVuYWJsZWQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgdGltZWxpbmVzLT5zdXNwZW5kQW5pbWF0aW9ucygpOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdGltZWxpbmVzLT5yZXN1bWVBbmltYXRp
b25zKCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0pOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGFnZS9SdW50aW1lRW5hYmxlZEZlYXR1cmVzLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVhdHVyZXMuaAppbmRleCA5NGM4NzFlYjA5NGEz
Y2Q3MmU5YmZkY2Q5MTFjZWRhZTAyNTJiZWYyLi45ZjMyY2YxNWFjNDViMTJiYjA2OTRiYzdhMWEw
MGMyODE3YjRkZTNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFi
bGVkRmVhdHVyZXMuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL1J1bnRpbWVFbmFibGVkRmVh
dHVyZXMuaApAQCAtNjcsMTIgKzY3LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0TW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7IG1fYXJlTW9kZXJuTWVkaWFDb250
cm9sc0VuYWJsZWQgPSBhcmVFbmFibGVkOyB9CiAgICAgYm9vbCBtb2Rlcm5NZWRpYUNvbnRyb2xz
RW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlTW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQ7
IH0KIAotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9vbCBhcmVFbmFibGVkKSB7
IG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgPSBhcmVFbmFibGVkOyB9Ci0gICAgYm9vbCB3ZWJB
bmltYXRpb25zRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJs
ZWQ7IH0KLQotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChi
b29sIGlzRW5hYmxlZCkgeyBtX2lzV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCA9
IGlzRW5hYmxlZDsgfQotICAgIGJvb2wgd2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fYXJlV2ViQW5pbWF0aW9uc0VuYWJsZWQgJiYgbV9pc1dlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ7IH0KLQogICAgIHZvaWQgc2V0V2ViQW5pbWF0
aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKGJvb2wgYXJlRW5hYmxlZCkgeyBtX2FyZVdl
YkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCA9IGFyZUVuYWJsZWQ7IH0KICAg
ICBib29sIHdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fYXJlV2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkOyB9CiAK
QEAgLTI5Myw4ICsyODcsNiBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9pc01lbnVJdGVtRWxlbWVu
dEVuYWJsZWQgeyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0RpcmVjdG9yeVVwbG9hZEVuYWJsZWQg
eyBmYWxzZSB9OwogICAgIGJvb2wgbV9pc0N1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCB7IGZh
bHNlIH07Ci0gICAgYm9vbCBtX2FyZVdlYkFuaW1hdGlvbnNFbmFibGVkIHsgdHJ1ZSB9OwotICAg
IGJvb2wgbV9pc1dlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgeyB0cnVlIH07CiAg
ICAgYm9vbCBtX2FyZVdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCB7IGZh
bHNlIH07CiAgICAgYm9vbCBtX2FyZVdlYkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxl
ZCB7IGZhbHNlIH07CiAgICAgYm9vbCBtX2lzSW1hZ2VCaXRtYXBFbmFibGVkIHsgdHJ1ZSB9Owpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5pbWF0aW9uQmFzZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcApkZWxl
dGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZWRhZTc0MzU5NzdmYTkyNTBlYzEwYzE3Mzk0MTVk
ZTRjZDRmNTUzYS4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9BbmltYXRpb25CYXNlLmNwcAorKysgL2Rl
di9udWxsCkBAIC0xLDc4OCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4
LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
LSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
IAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
IAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRo
ZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3Jz
ZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUg
d2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVND
TEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNs
dWRlICJBbmltYXRpb25CYXNlLmgiCi0KLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNTU1ByaW1pdGl2ZVZhbHVlLmgiCi0jaW5jbHVkZSAiQ1NT
UHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24uaCIKLSNp
bmNsdWRlICJEb2N1bWVudC5oIgotI2luY2x1ZGUgIkZsb2F0Q29udmVyc2lvbi5oIgotI2luY2x1
ZGUgIkdlb21ldHJ5VXRpbGl0aWVzLmgiCi0jaW5jbHVkZSAiTG9nZ2luZy5oIgotI2luY2x1ZGUg
IlJlbmRlckJveC5oIgotI2luY2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSAiUmVuZGVy
Vmlldy5oIgotI2luY2x1ZGUgPGFsZ29yaXRobT4KLSNpbmNsdWRlIDx3dGYvUmVmLmg+Ci0KLW5h
bWVzcGFjZSBXZWJDb3JlIHsKLQotQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uQmFzZShjb25zdCBB
bmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9u
JiBjb21wb3NpdGVBbmltYXRpb24pCi0gICAgOiBtX2VsZW1lbnQoJmVsZW1lbnQpCi0gICAgLCBt
X2NvbXBvc2l0ZUFuaW1hdGlvbigmY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICwgbV9hbmltYXRp
b24oY29uc3RfY2FzdDxBbmltYXRpb24mPihhbmltYXRpb24pKQotewotICAgIC8vIENvbXB1dGUg
dGhlIHRvdGFsIGR1cmF0aW9uCi0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
ID4gMCkKLSAgICAgICAgbV90b3RhbER1cmF0aW9uID0gbV9hbmltYXRpb24tPmR1cmF0aW9uKCkg
KiBtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKTsKLX0KLQotQW5pbWF0aW9uQmFzZTo6fkFu
aW1hdGlvbkJhc2UoKSA9IGRlZmF1bHQ7Ci0KLWNvbnN0IFJlbmRlclN0eWxlJiBBbmltYXRpb25C
YXNlOjpjdXJyZW50U3R5bGUoKSBjb25zdAotewotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRo
aXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJldHVybiByZW5kZXJlci0+c3R5bGUoKTsKLSAgICBy
ZXR1cm4gdW5hbmltYXRlZFN0eWxlKCk7Ci19Ci0KLVJlbmRlckVsZW1lbnQqIEFuaW1hdGlvbkJh
c2U6OnJlbmRlcmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9lbGVtZW50ID8gbV9lbGVtZW50
LT5yZW5kZXJlcigpIDogbnVsbHB0cjsKLX0KLQotdm9pZCBBbmltYXRpb25CYXNlOjpjbGVhcigp
Ci17Ci0gICAgZW5kQW5pbWF0aW9uKCk7Ci0gICAgbV9lbGVtZW50ID0gbnVsbHB0cjsKLSAgICBt
X2NvbXBvc2l0ZUFuaW1hdGlvbiA9IG51bGxwdHI7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6
c2V0TmVlZHNTdHlsZVJlY2FsYyhFbGVtZW50KiBlbGVtZW50KQotewotICAgIGlmICghZWxlbWVu
dCB8fCBlbGVtZW50LT5kb2N1bWVudCgpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAg
ICAgICByZXR1cm47Ci0KLSAgICBBU1NFUlQoZWxlbWVudC0+ZG9jdW1lbnQoKS5iYWNrRm9yd2Fy
ZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBl
bGVtZW50LT5pbnZhbGlkYXRlU3R5bGUoKTsKLX0KLQotZG91YmxlIEFuaW1hdGlvbkJhc2U6OmR1
cmF0aW9uKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9hbmltYXRpb24tPmR1cmF0aW9uKCk7Ci19
Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6cGxheVN0YXRlUGxheWluZygpIGNvbnN0Ci17Ci0gICAg
cmV0dXJuIG1fYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltYXRpb25QbGF5U3RhdGU6OlBs
YXlpbmc7Ci19Ci0KLWJvb2wgQW5pbWF0aW9uQmFzZTo6YW5pbWF0aW9uc01hdGNoKGNvbnN0IEFu
aW1hdGlvbiYgYW5pbWF0aW9uKSBjb25zdAotewotICAgIHJldHVybiBtX2FuaW1hdGlvbi0+YW5p
bWF0aW9uc01hdGNoKGFuaW1hdGlvbik7Ci19Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi1zdGF0aWMg
Y29uc3QgY2hhciogbmFtZUZvclN0YXRlKEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlIHN0
YXRlKQotewotICAgIHN3aXRjaCAoc3RhdGUpIHsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFu
aW1hdGlvblN0YXRlOjpOZXc6IHJldHVybiAiTmV3IjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lcjogcmV0dXJuICJTdGFydFdhaXRUaW1lciI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVB
dmFpbGFibGU6IHJldHVybiAiU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUiOwotICAgIGNhc2UgQW5p
bWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOiByZXR1cm4gIlN0
YXJ0V2FpdFJlc3BvbnNlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRl
OjpMb29waW5nOiByZXR1cm4gIkxvb3BpbmciOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5p
bWF0aW9uU3RhdGU6OkVuZGluZzogcmV0dXJuICJFbmRpbmciOwotICAgIGNhc2UgQW5pbWF0aW9u
QmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzogcmV0dXJuICJQYXVzZWROZXciOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRUaW1lcjogcmV0
dXJuICJQYXVzZWRXYWl0VGltZXIiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZTogcmV0dXJuICJQYXVzZWRXYWl0U3R5bGVB
dmFpbGFibGUiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNl
ZFdhaXRSZXNwb25zZTogcmV0dXJuICJQYXVzZWRXYWl0UmVzcG9uc2UiOwotICAgIGNhc2UgQW5p
bWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjogcmV0dXJuICJQYXVzZWRSdW4i
OwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGU6OkRvbmU6IHJldHVybiAi
RG9uZSI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZTo6RmlsbGluZ0Zv
cndhcmRzOiByZXR1cm4gIkZpbGxpbmdGb3J3YXJkcyI7Ci0gICAgfQotICAgIHJldHVybiAiIjsK
LX0KLSNlbmRpZgotCi0jaWYgIUVSUk9SX0RJU0FCTEVECi1zdGF0aWMgY29uc3QgY2hhciogbmFt
ZUZvclN0YXRlSW5wdXQoQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCkK
LXsKLSAgICBzd2l0Y2ggKGlucHV0KSB7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRp
b25TdGF0ZUlucHV0OjpNYWtlTmV3OiByZXR1cm4gIk1ha2VOZXciOwotICAgIGNhc2UgQW5pbWF0
aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRBbmltYXRpb246IHJldHVybiAiU3Rh
cnRBbmltYXRpb24iOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1
dDo6UmVzdGFydEFuaW1hdGlvbjogcmV0dXJuICJSZXN0YXJ0QW5pbWF0aW9uIjsKLSAgICBjYXNl
IEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGltZXJGaXJlZDogcmV0
dXJuICJTdGFydFRpbWVyRmlyZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGVJbnB1dDo6U3R5bGVBdmFpbGFibGU6IHJldHVybiAiU3R5bGVBdmFpbGFibGUiOwotICAg
IGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0OiBy
ZXR1cm4gIlN0YXJ0VGltZVNldCI7Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25T
dGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZDogcmV0dXJuICJMb29wVGltZXJGaXJlZCI7Ci0gICAg
Y2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpFbmRUaW1lckZpcmVkOiBy
ZXR1cm4gIkVuZFRpbWVyRmlyZWQiOwotICAgIGNhc2UgQW5pbWF0aW9uQmFzZTo6QW5pbWF0aW9u
U3RhdGVJbnB1dDo6UGF1c2VPdmVycmlkZTogcmV0dXJuICJQYXVzZU92ZXJyaWRlIjsKLSAgICBj
YXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3VtZU92ZXJyaWRlOiBy
ZXR1cm4gIlJlc3VtZU92ZXJyaWRlIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6OkFuaW1hdGlv
blN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmc6IHJldHVybiAiUGxheVN0YXRlUnVubmluZyI7
Ci0gICAgY2FzZSBBbmltYXRpb25CYXNlOjpBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQ
YXVzZWQ6IHJldHVybiAiUGxheVN0YXRlUGF1c2VkIjsKLSAgICBjYXNlIEFuaW1hdGlvbkJhc2U6
OkFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbjogcmV0dXJuICJFbmRBbmltYXRpb24i
OwotICAgIH0KLSAgICByZXR1cm4gIiI7Ci19Ci0jZW5kaWYKLQotdm9pZCBBbmltYXRpb25CYXNl
Ojp1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dCBpbnB1dCwgZG91YmxlIHBh
cmFtKQotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAgIHJldHVybjsK
LQotICAgIC8vIElmIHdlIGdldCBBbmltYXRpb25TdGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9u
IHRoZW4gd2UgZm9yY2UgYSBuZXcgYW5pbWF0aW9uLCByZWdhcmRsZXNzIG9mIHN0YXRlLgotICAg
IGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpNYWtlTmV3KSB7Ci0gICAgICAgIGlm
IChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWls
YWJsZSkKLSAgICAgICAgICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkucmVtb3ZlRnJvbUFuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUoKnRoaXMpOwotICAgICAg
ICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRoaXMsIG5h
bWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3RhdGUg
PSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICBtX3N0YXJ0VGltZSA9IFdURjo6bnVsbG9w
dDsKLSAgICAgICAgbV9wYXVzZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgICAgIG1fcmVxdWVz
dGVkU3RhcnRUaW1lID0gMDsKLSAgICAgICAgbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24gPSBXVEY6
Om51bGxvcHQ7Ci0gICAgICAgIGVuZEFuaW1hdGlvbigpOwotICAgICAgICByZXR1cm47Ci0gICAg
fQotCi0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlJlc3RhcnRBbmltYXRp
b24pIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0
YXJ0V2FpdFN0eWxlQXZhaWxhYmxlKQotICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24t
PmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5yZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZSgqdGhpcyk7Ci0gICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gTmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpOZXc7Ci0gICAgICAgIG1fc3RhcnRU
aW1lID0gV1RGOjpudWxsb3B0OwotICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsK
LSAgICAgICAgbV9yZXF1ZXN0ZWRTdGFydFRpbWUgPSAwOwotICAgICAgICBtX25leHRJdGVyYXRp
b25EdXJhdGlvbiA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgZW5kQW5pbWF0aW9uKCk7Ci0KLSAg
ICAgICAgaWYgKCFwYXVzZWQoKSkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmlt
YXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiwgLTEpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlv
bikgewotICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0U3R5bGVBdmFpbGFibGUpCi0gICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+
YW5pbWF0aW9uQ29udHJvbGxlcigpLnJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KCp0aGlzKTsKLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAt
PiBEb25lIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
bV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpEb25lOwotICAgICAgICBlbmRBbmlt
YXRpb24oKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGlmIChpbnB1dCA9PSBBbmlt
YXRpb25TdGF0ZUlucHV0OjpQYXVzZU92ZXJyaWRlKSB7Ci0gICAgICAgIGlmIChtX2FuaW1hdGlv
blN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZSkgewotICAgICAgICAg
ICAgLy8gSWYgd2UgYXJlIGluIEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25zZSwgdGhl
IGFuaW1hdGlvbiB3aWxsIGdldCBjYW5jZWxlZCBiZWZvcmUgCi0gICAgICAgICAgICAvLyB3ZSBn
ZXQgYSByZXNwb25zZSwgc28gbW92ZSB0byB0aGUgbmV4dCBzdGF0ZS4KLSAgICAgICAgICAgIGVu
ZEFuaW1hdGlvbigpOwotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0
YXRlSW5wdXQ6OlN0YXJ0VGltZVNldCwgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkpOwotICAg
ICAgICB9Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBpZiAoaW5wdXQgPT0gQW5pbWF0
aW9uU3RhdGVJbnB1dDo6UmVzdW1lT3ZlcnJpZGUpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9u
U3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Okxvb3BpbmcgfHwgbV9hbmltYXRpb25TdGF0ZSA9PSBB
bmltYXRpb25TdGF0ZTo6RW5kaW5nKSB7Ci0gICAgICAgICAgICAvLyBTdGFydCB0aGUgYW5pbWF0
aW9uCi0gICAgICAgICAgICBzdGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkpOwotICAgICAgICB9Ci0gICAgICAgIHJldHVybjsK
LSAgICB9Ci0KLSAgICAvLyBFeGVjdXRlIHN0YXRlIG1hY2hpbmUKLSAgICBzd2l0Y2ggKG1fYW5p
bWF0aW9uU3RhdGUpIHsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6TmV3OgotICAgICAg
ICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9u
IHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcgfHwgaW5w
dXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKTsKLQotICAgICAgICAg
ICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uIHx8IGlu
cHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcpIHsKLSAgICAgICAg
ICAgICAgICBtX3JlcXVlc3RlZFN0YXJ0VGltZSA9IGJlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSgp
OwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gU3RhcnRXYWl0VGltZXIiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkp
OwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3Rh
cnRXYWl0VGltZXI7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdl
IGFyZSBwYXVzaW5nIGJlZm9yZSB3ZSBldmVuIHN0YXJ0ZWQuCi0gICAgICAgICAgICAgICAgTE9H
KEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBBbmltYXRpb25TdGF0ZTo6UGF1
c2VkTmV3IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAgICAgICAg
ICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldzsKLSAg
ICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0
V2FpdFRpbWVyOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0YXJ0VGltZXJGaXJlZCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5
U3RhdGVQYXVzZWQpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lckZpcmVkKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID49
IDApOwotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhhcyBmaXJlZCwgdGVsbCB0aGUg
YW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byByZXNwb25kIHdpdGggc3RhcnQg
dGltZQotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUg
JXMgLT4gU3RhcnRXYWl0U3R5bGVBdmFpbGFibGUgKHRpbWUgaXMgJWYpIiwgdGhpcywgbmFtZUZv
clN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAgICAgICAgICAgbV9hbmlt
YXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRTdHlsZUF2YWlsYWJsZTsKLSAg
ICAgICAgICAgICAgICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigp
LmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSgqdGhpcyk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBUcmlnZ2VyIGEgcmVuZGVyIHNvIHdlIGNhbiBzdGFydCB0aGUgYW5pbWF0aW9uCi0gICAg
ICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRFbGVtZW50Q2hhbmdlVG9EaXNw
YXRjaCgqbV9lbGVtZW50KTsKLSAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAg
QVNTRVJUKCFwYXVzZWQoKSk7Ci0gICAgICAgICAgICAgICAgLy8gV2UncmUgd2FpdGluZyBmb3Ig
dGhlIHN0YXJ0IHRpbWVyIHRvIGZpcmUgYW5kIHdlIGdvdCBhIHBhdXNlLiBDYW5jZWwgdGhlIHRp
bWVyLCBwYXVzZSBhbmQgd2FpdAotICAgICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIl
cCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRXYWl0VGltZXIiLCB0aGlzLCBuYW1lRm9yU3Rh
dGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUg
PSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVyOwotICAgICAgICAgICAgfQotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxl
QXZhaWxhYmxlOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0eWxlQXZhaWxhYmxlIHx8IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlT
dGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlu
cHV0OjpTdHlsZUF2YWlsYWJsZSkgewotICAgICAgICAgICAgICAgIC8vIFN0YXJ0IHRpbWVyIGhh
cyBmaXJlZCwgdGVsbCB0aGUgYW5pbWF0aW9uIHRvIHN0YXJ0IGFuZCB3YWl0IGZvciBpdCB0byBy
ZXNwb25kIHdpdGggc3RhcnQgdGltZQotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gU3RhcnRXYWl0UmVzcG9uc2UgKHRpbWUgaXMgJWYpIiwg
dGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAgICAg
ICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRSZXNwb25z
ZTsKLQotICAgICAgICAgICAgICAgIG92ZXJyaWRlQW5pbWF0aW9ucygpOwotCi0gICAgICAgICAg
ICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAgIGlmIChvdmVycmlk
ZGVuKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd29uJ3QgdHJ5IHRvIHN0YXJ0IGFj
Y2VsZXJhdGVkIGFuaW1hdGlvbnMgaWYgd2UgYXJlIG92ZXJyaWRkZW4gYW5kCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGp1c3QgbW92ZSBvbiB0byB0aGUgbmV4dCBzdGF0ZS4KLSAgICAgICAgICAg
ICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdh
aXRSZXNwb25zZSIsIHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAg
ICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0UmVzcG9uc2U7Ci0gICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IGZhbHNl
OwotICAgICAgICAgICAgICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lU2V0LCBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgICAg
ICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgZG91YmxlIHRpbWVPZmZzZXQg
PSAwOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmFsdWUgZm9yICdhbmltYXRpb24t
ZGVsYXknIGlzIG5lZ2F0aXZlIHRoZW4gdGhlIGFuaW1hdGlvbiBhcHBlYXJzIHRvIGhhdmUgc3Rh
cnRlZCBpbiB0aGUgcGFzdC4KLSAgICAgICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uLT5k
ZWxheSgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVPZmZzZXQgPSAtbV9hbmlt
YXRpb24tPmRlbGF5KCk7Ci0gICAgICAgICAgICAgICAgICAgIGJvb2wgc3RhcnRlZCA9IHN0YXJ0
QW5pbWF0aW9uKHRpbWVPZmZzZXQpOwotCi0gICAgICAgICAgICAgICAgICAgIG1fY29tcG9zaXRl
QW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkVG9BbmltYXRpb25zV2FpdGluZ0Zv
clN0YXJ0VGltZVJlc3BvbnNlKCp0aGlzLCBzdGFydGVkKTsKLSAgICAgICAgICAgICAgICAgICAg
bV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAg
ICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlJ3JlIHdhaXRpbmcgZm9yIHRoZSBzdHls
ZSB0byBiZSBhdmFpbGFibGUgYW5kIHdlIGdvdCBhIHBhdXNlLiBQYXVzZSBhbmQgd2FpdAotICAg
ICAgICAgICAgICAgIG1fcGF1c2VUaW1lID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0g
ICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQ
YXVzZWRXYWl0U3R5bGVBdmFpbGFibGUiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25T
dGF0ZSkpOwotICAgICAgICAgICAgICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0
ZTo6UGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlOwotICAgICAgICAgICAgfQotICAgICAgICAgICAg
YnJlYWs7Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJlc3BvbnNlOgot
ICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0VGlt
ZVNldCB8fCBpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpOwot
Ci0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1l
U2V0KSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKHBhcmFtID4gLTAuMDAxKTsgLy8gU29tZXRp
bWVzIENvcmUgQW5pbWF0aW9uIGdpdmVzIHVzIGEgYmVnaW5UaW1lIHNsaWdodGx5IGludG8gdGhl
IGZ1dHVyZS4KLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0
YXRlICVzIC0+IFN0YXJ0VGltZVNldCAodGltZSBpcyAlZikiLCB0aGlzLCBuYW1lRm9yU3RhdGUo
bV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLQotICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
YSBzdGFydCB0aW1lLCBzZXQgaXQsIHVubGVzcyB0aGUgc3RhcnRUaW1lIGlzIGFscmVhZHkgc2V0
Ci0gICAgICAgICAgICAgICAgaWYgKCFtX3N0YXJ0VGltZSkgewotICAgICAgICAgICAgICAgICAg
ICBtX3N0YXJ0VGltZSA9IHBhcmFtOwotICAgICAgICAgICAgICAgICAgICAvLyBJZiB0aGUgdmFs
dWUgZm9yICdhbmltYXRpb24tZGVsYXknIGlzIG5lZ2F0aXZlIHRoZW4gdGhlIGFuaW1hdGlvbiBh
cHBlYXJzIHRvIGhhdmUgc3RhcnRlZCBpbiB0aGUgcGFzdC4KLSAgICAgICAgICAgICAgICAgICAg
aWYgKG1fYW5pbWF0aW9uLT5kZWxheSgpIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1f
c3RhcnRUaW1lID0gbV9zdGFydFRpbWUudmFsdWUoKSArIG1fYW5pbWF0aW9uLT5kZWxheSgpOwot
ICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIE5vdyB0aGF0IHdlIGtub3cg
dGhlIHN0YXJ0IHRpbWUsIGZpcmUgdGhlIHN0YXJ0IGV2ZW50LgotICAgICAgICAgICAgICAgIG9u
QW5pbWF0aW9uU3RhcnQoMCk7IC8vIFRoZSBlbGFwc2VkVGltZSBpcyAwLgotCi0gICAgICAgICAg
ICAgICAgLy8gRGVjaWRlIHdoZXRoZXIgdG8gZ28gaW50byBsb29waW5nIG9yIGVuZGluZyBzdGF0
ZQotICAgICAgICAgICAgICAgIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCk7Ci0KLSAgICAg
ICAgICAgICAgICAvLyBEaXNwYXRjaCB1cGRhdGVTdHlsZUlmTmVlZGVkIHNvIHdlIGNhbiBzdGFy
dCB0aGUgYW5pbWF0aW9uCi0gICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkKLSAgICAgICAg
ICAgICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5h
ZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9lbGVtZW50KTsKLSAgICAgICAgICAgIH0gZWxz
ZSB7Ci0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIHBhdXNpbmcgd2hpbGUgd2FpdGluZyBmb3Ig
YSBzdGFydCByZXNwb25zZS4gQ2FuY2VsIHRoZSBhbmltYXRpb24gYW5kIHdhaXQuIFdoZW4gCi0g
ICAgICAgICAgICAgICAgLy8gd2UgdW5wYXVzZSwgd2Ugd2lsbCBhY3QgYXMgdGhvdWdoIHRoZSBz
dGFydCB0aW1lciBqdXN0IGZpcmVkCi0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUgPSBiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBwYXVzZUFuaW1hdGlvbihi
ZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkpOwotICAg
ICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gUGF1
c2VkV2FpdFJlc3BvbnNlIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsK
LSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNl
ZFdhaXRSZXNwb25zZTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICBjYXNlIEFuaW1hdGlvblN0YXRlOjpMb29waW5nOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0
ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6Okxvb3BUaW1lckZpcmVkIHx8IGlucHV0ID09IEFuaW1h
dGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVBhdXNlZCk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1
dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZCkgewotICAgICAgICAgICAg
ICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKLSAgICAgICAgICAgICAgICBMT0coQW5pbWF0aW9ucywg
IiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IExvb3BUaW1lckZpcmVkICh0aW1lIGlzICVmKSIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSwgcGFyYW0pOwotCi0gICAgICAgICAg
ICAgICAgLy8gTG9vcCB0aW1lciBmaXJlZCwgbG9vcCBhZ2FpbiBvciBlbmQuCi0gICAgICAgICAg
ICAgICAgb25BbmltYXRpb25JdGVyYXRpb24ocGFyYW0pOwotCi0gICAgICAgICAgICAgICAgLy8g
RGVjaWRlIHdoZXRoZXIgdG8gZ28gaW50byBsb29waW5nIG9yIGVuZGluZyBzdGF0ZQotICAgICAg
ICAgICAgICAgIGdvSW50b0VuZGluZ09yTG9vcGluZ1N0YXRlKCk7Ci0gICAgICAgICAgICB9IGVs
c2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdoaWxlIHJ1bm5pbmcuIENh
bmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0Ci0gICAgICAgICAgICAgICAgbV9wYXVzZVRpbWUg
PSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAgICAgICBwYXVzZUFuaW1h
dGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1lLnZhbHVlT3IoMCkp
OwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMg
LT4gUGF1c2VkUnVuIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpKTsKLSAg
ICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1
bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1h
dGlvblN0YXRlOjpFbmRpbmc6Ci0jaWYgIUVSUk9SX0RJU0FCTEVECi0gICAgICAgICAgICBpZiAo
aW5wdXQgIT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6RW5kVGltZXJGaXJlZCAmJiBpbnB1dCAhPSBB
bmltYXRpb25TdGF0ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQpCi0gICAgICAgICAgICAgICAgTE9H
X0VSUk9SKCJTdGF0ZSBpcyBBbmltYXRpb25TdGF0ZTo6RW5kaW5nLCBidXQgaW5wdXQgaXMgbm90
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZFRpbWVyRmlyZWQgb3IgQW5pbWF0aW9uU3RhdGVJbnB1
dDo6UGxheVN0YXRlUGF1c2VkLiBJdCBpcyAlcy4iLCBuYW1lRm9yU3RhdGVJbnB1dChpbnB1dCkp
OwotI2VuZGlmCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6
RW5kVGltZXJGaXJlZCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChwYXJhbSA+PSAwKTsKLSAg
ICAgICAgICAgICAgICAvLyBFbmQgdGltZXIgZmlyZWQsIGZpbmlzaCB1cAotICAgICAgICAgICAg
ICAgIG9uQW5pbWF0aW9uRW5kKHBhcmFtKTsKLQotICAgICAgICAgICAgICAgIExPRyhBbmltYXRp
b25zLCAiJXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gRG9uZSAodGltZSBpcyAlZikiLCB0aGlzLCBu
YW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSksIHBhcmFtKTsKLSAgICAgICAgICAgICAgICBt
X2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7Ci0gICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgaWYgKG1fZWxlbWVudCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAobV9hbmltYXRpb24tPmZpbGxzRm9yd2FyZHMoKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBGaWxsaW5nRm9yd2Fy
ZHMiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpGaWxsaW5nRm9y
d2FyZHM7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICAg
ICAgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMoKTsKLQotICAgICAgICAgICAgICAgICAgICAv
LyBGaXJlIG9mZiBhbm90aGVyIHN0eWxlIGNoYW5nZSBzbyB3ZSBjYW4gc2V0IHRoZSBmaW5hbCB2
YWx1ZQotICAgICAgICAgICAgICAgICAgICBpZiAobV9lbGVtZW50KQotICAgICAgICAgICAgICAg
ICAgICAgICAgbV9jb21wb3NpdGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRF
bGVtZW50Q2hhbmdlVG9EaXNwYXRjaCgqbV9lbGVtZW50KTsKLSAgICAgICAgICAgICAgICB9Ci0g
ICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzaW5nIHdo
aWxlIHJ1bm5pbmcuIENhbmNlbCB0aGUgYW5pbWF0aW9uIGFuZCB3YWl0Ci0gICAgICAgICAgICAg
ICAgbV9wYXVzZVRpbWUgPSBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKTsKLSAgICAgICAgICAg
ICAgICBwYXVzZUFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRU
aW1lLnZhbHVlT3IoMCkpOwotICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAiJXAgQW5p
bWF0aW9uU3RhdGUgJXMgLT4gUGF1c2VkUnVuIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0
aW9uU3RhdGUpKTsKLSAgICAgICAgICAgICAgICBtX2FuaW1hdGlvblN0YXRlID0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZFJ1bjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIC8vIHx0aGlzfCBt
YXkgYmUgZGVsZXRlZCBoZXJlCi0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmlt
YXRpb25TdGF0ZTo6UGF1c2VkV2FpdFRpbWVyOgotICAgICAgICAgICAgQVNTRVJUKGlucHV0ID09
IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcpOwotICAgICAgICAgICAgQVNT
RVJUKHBhdXNlZCgpKTsKLSAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKLSAgICAgICAg
ICAgIG1fc3RhcnRUaW1lID0gbV9zdGFydFRpbWUudmFsdWVPcigwKSArIGJlZ2luQW5pbWF0aW9u
VXBkYXRlVGltZSgpIC0gbV9wYXVzZVRpbWUudmFsdWVPcigwKTsKLSAgICAgICAgICAgIG1fcGF1
c2VUaW1lID0gV1RGOjpudWxsb3B0OwotCi0gICAgICAgICAgICAvLyB3ZSB3ZXJlIHdhaXRpbmcg
Zm9yIHRoZSBzdGFydCB0aW1lciB0byBmaXJlLCBnbyBiYWNrIGFuZCB3YWl0IGFnYWluCi0gICAg
ICAgICAgICBMT0coQW5pbWF0aW9ucywgIiVwIEFuaW1hdGlvblN0YXRlICVzIC0+IE5ldyIsIHRo
aXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICBtX2FuaW1h
dGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6Ok5ldzsKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRl
TWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdGFydEFuaW1hdGlvbiwgMCk7Ci0gICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgY2FzZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkTmV3OgotICAg
ICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2U6Ci0gICAgICAgIGNh
c2UgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdhaXRTdHlsZUF2YWlsYWJsZToKLSAgICAgICAgY2Fz
ZSBBbmltYXRpb25TdGF0ZTo6UGF1c2VkUnVuOgotICAgICAgICAgICAgLy8gV2UgdHJlYXQgdGhl
c2UgdHdvIGNhc2VzIHRoZSBzYW1lLiBUaGUgb25seSBkaWZmZXJlbmNlIGlzIHRoYXQsIHdoZW4g
d2UgYXJlIGluCi0gICAgICAgICAgICAvLyBBbmltYXRpb25TdGF0ZTo6UGF1c2VkV2FpdFJlc3Bv
bnNlLCB3ZSBkb24ndCB5ZXQgaGF2ZSBhIHZhbGlkIHN0YXJ0VGltZSwgc28gd2Ugc2VuZCAwIHRv
IHN0YXJ0QW5pbWF0aW9uLgotICAgICAgICAgICAgLy8gV2hlbiB0aGUgQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6U3RhcnRUaW1lU2V0IGNvbWVzIGluIGFuZCB3ZSB3ZXJlIGluIEFuaW1hdGlvblN0YXRl
OjpQYXVzZWRSdW4sIHdlIHdpbGwgbm90aWNlCi0gICAgICAgICAgICAvLyB0aGF0IHdlIGhhdmUg
YWxyZWFkeSBzZXQgdGhlIHN0YXJ0VGltZSBhbmQgd2lsbCBpZ25vcmUgaXQuCi0gICAgICAgICAg
ICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkIHx8
IGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5wdXQ6OlBsYXlTdGF0ZVJ1bm5pbmcgfHwgaW5wdXQg
PT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0IHx8IGlucHV0ID09IEFuaW1hdGlv
blN0YXRlSW5wdXQ6OlN0eWxlQXZhaWxhYmxlKTsKLSAgICAgICAgICAgIEFTU0VSVChwYXVzZWQo
KSk7Ci0KLSAgICAgICAgICAgIGlmIChpbnB1dCA9PSBBbmltYXRpb25TdGF0ZUlucHV0OjpQbGF5
U3RhdGVSdW5uaW5nKSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlBhdXNlZE5ldykgewotICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
ZXJlIHBhdXNlZCBiZWZvcmUgd2UgZXZlbiBzdGFydGVkLCBhbmQgbm93IHdlJ3JlIHN1cHBvc2Vk
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRvIHN0YXJ0LCBzbyBqdW1wIGJhY2sgdG8gdGhlIE5l
dyBzdGF0ZSBhbmQgcmVzZXQuCi0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRpb25zLCAi
JXAgQW5pbWF0aW9uU3RhdGUgJXMgLT4gQW5pbWF0aW9uU3RhdGU6Ok5ldyIsIHRoaXMsIG5hbWVG
b3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1fYW5pbWF0
aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6TmV3OwotICAgICAgICAgICAgICAgICAgICBtX3Bh
dXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLSAgICAgICAgICAgICAgICAgICAgdXBkYXRlU3RhdGVN
YWNoaW5lKGlucHV0LCBwYXJhbSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSB0aGUgdGltZXMKLSAgICAg
ICAgICAgICAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6UGF1c2Vk
UnVuKQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGltZSA9IG1fc3RhcnRUaW1lLnZhbHVl
T3IoMCkgKyBiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fcGF1c2VUaW1lLnZhbHVlT3Io
MCk7Ci0gICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBtX3N0YXJ0VGlt
ZSA9IDA7Ci0KLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IFdURjo6bnVsbG9wdDsKLQot
ICAgICAgICAgICAgICAgIGlmIChtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRXYWl0U3R5bGVBdmFpbGFibGUpIHsKLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRTdHlsZUF2YWlsYWJsZSIs
IHRoaXMsIG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIG1fYW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFp
bGFibGU7Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
V2Ugd2VyZSBlaXRoZXIgcnVubmluZyBvciB3YWl0aW5nIGZvciBhIGJlZ2luIHRpbWUgcmVzcG9u
c2UgZnJvbSB0aGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgICAgICAgICAvLyBFaXRoZXIgd2F5
IHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgYW5pbWF0aW9uIChwb3NzaWJseSB3aXRoIGFuIG9mZnNl
dCBpZiB3ZQotICAgICAgICAgICAgICAgICAgICAvLyBoYWQgYWxyZWFkeSBiZWVuIHJ1bm5pbmcp
IGFuZCB3YWl0IGZvciBpdCB0byBzdGFydC4KLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgICAgICAgICAgICAgIG1f
YW5pbWF0aW9uU3RhdGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U7Ci0KLSAg
ICAgICAgICAgICAgICAgICAgLy8gU3RhcnQgdGhlIGFuaW1hdGlvbgotICAgICAgICAgICAgICAg
ICAgICBpZiAob3ZlcnJpZGRlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
b24ndCB0cnkgdG8gc3RhcnQgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBpZiB3ZSBhcmUgb3ZlcnJp
ZGRlbiBhbmQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGp1c3QgbW92ZSBvbiB0byB0aGUg
bmV4dCBzdGF0ZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShB
bmltYXRpb25TdGF0ZUlucHV0OjpTdGFydFRpbWVTZXQsIGJlZ2luQW5pbWF0aW9uVXBkYXRlVGlt
ZSgpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG1faXNBY2NlbGVyYXRlZCA9IHRydWU7Ci0g
ICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBib29s
IHN0YXJ0ZWQgPSBzdGFydEFuaW1hdGlvbihiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1f
c3RhcnRUaW1lLnZhbHVlT3IoMCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbV9jb21wb3Np
dGVBbmltYXRpb24tPmFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hZGRUb0FuaW1hdGlvbnNXYWl0aW5n
Rm9yU3RhcnRUaW1lUmVzcG9uc2UoKnRoaXMsIHN0YXJ0ZWQpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgbV9pc0FjY2VsZXJhdGVkID0gc3RhcnRlZDsKLSAgICAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0K
LSAgICAgICAgICAgIAotICAgICAgICAgICAgaWYgKGlucHV0ID09IEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0YXJ0VGltZVNldCkgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX2FuaW1hdGlvblN0
YXRlID09IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2UpOwotICAgICAgICAgICAg
ICAgIAotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBwYXVzZWQgYnV0IHdlIGdvdCB0aGUgY2Fs
bGJhY2sgdGhhdCBub3RpZmllcyB1cyB0aGF0IGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiBzdGFy
dGVkLgotICAgICAgICAgICAgICAgIC8vIFdlIGlnbm9yZSB0aGUgc3RhcnQgdGltZSBhbmQganVz
dCBtb3ZlIGludG8gdGhlIHBhdXNlZC1ydW4gc3RhdGUuCi0gICAgICAgICAgICAgICAgTE9HKEFu
aW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBQYXVzZWRSdW4gKHRpbWUgaXMgJWYp
IiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9uU3RhdGUpLCBwYXJhbSk7Ci0gICAgICAg
ICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlvblN0YXRlOjpQYXVzZWRSdW47Ci0g
ICAgICAgICAgICAgICAgQVNTRVJUKCFtX3N0YXJ0VGltZSk7Ci0gICAgICAgICAgICAgICAgbV9z
dGFydFRpbWUgPSBwYXJhbTsKLSAgICAgICAgICAgICAgICBtX3BhdXNlVGltZSA9IG1fcGF1c2VU
aW1lLnZhbHVlT3IoMCkgKyBwYXJhbTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgQVNTRVJUKG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OlBhdXNlZE5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpQ
YXVzZWRXYWl0U3R5bGVBdmFpbGFibGUpOwotCi0gICAgICAgICAgICBpZiAoaW5wdXQgPT0gQW5p
bWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkKQotICAgICAgICAgICAgICAgIGJyZWFr
OwotCi0gICAgICAgICAgICBBU1NFUlQoaW5wdXQgPT0gQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3R5
bGVBdmFpbGFibGUpOwotCi0gICAgICAgICAgICAvLyBXZSBhcmUgcGF1c2VkIGJ1dCB3ZSBnb3Qg
dGhlIGNhbGxiYWNrIHRoYXQgbm90aWZpZXMgdXMgdGhhdCBzdHlsZSBoYXMgYmVlbiB1cGRhdGVk
LgotICAgICAgICAgICAgLy8gV2UgbW92ZSB0byB0aGUgQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFdh
aXRSZXNwb25zZSBzdGF0ZQotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRp
b25TdGF0ZSAlcyAtPiBQYXVzZWRXYWl0UmVzcG9uc2UiLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9h
bmltYXRpb25TdGF0ZSkpOwotICAgICAgICAgICAgbV9hbmltYXRpb25TdGF0ZSA9IEFuaW1hdGlv
blN0YXRlOjpQYXVzZWRXYWl0UmVzcG9uc2U7Ci0gICAgICAgICAgICBvdmVycmlkZUFuaW1hdGlv
bnMoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIEFuaW1hdGlvblN0YXRlOjpG
aWxsaW5nRm9yd2FyZHM6Ci0gICAgICAgIGNhc2UgQW5pbWF0aW9uU3RhdGU6OkRvbmU6Ci0gICAg
ICAgICAgICAvLyBXZSdyZSBkb25lLiBTdGF5IGluIHRoaXMgc3RhdGUgdW50aWwgd2UgYXJlIGRl
bGV0ZWQKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0KLX0KLQotdm9pZCBBbmltYXRpb25CYXNl
OjpmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKQotewotICAgIGlmICghbV9jb21wb3NpdGVB
bmltYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZv
ciB0aGUgZGVsYXkgdGltZSB0byBleHBpcmUgYW5kIGl0IGhhcywgZ28gdG8gdGhlIG5leHQgc3Rh
dGUKLSAgICBpZiAobV9hbmltYXRpb25TdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
VGltZXIgJiYgbV9hbmltYXRpb25TdGF0ZSAhPSBBbmltYXRpb25TdGF0ZTo6TG9vcGluZyAmJiBt
X2FuaW1hdGlvblN0YXRlICE9IEFuaW1hdGlvblN0YXRlOjpFbmRpbmcpCi0gICAgICAgIHJldHVy
bjsKLQotICAgIC8vIFdlIGhhdmUgdG8gbWFrZSBzdXJlIHRvIGtlZXAgYSByZWYgdG8gdGhlIHRo
aXMgcG9pbnRlciwgYmVjYXVzZSBpdCBjb3VsZCBnZXQgZGVzdHJveWVkCi0gICAgLy8gZHVyaW5n
IGFuIGFuaW1hdGlvbiBjYWxsYmFjayB0aGF0IG1pZ2h0IGdldCBjYWxsZWQuIFNpbmNlIHRoZSBv
d25lciBpcyBhIENvbXBvc2l0ZUFuaW1hdGlvbgotICAgIC8vIGFuZCBpdCByZWYgY291bnRzIHRo
aXMgb2JqZWN0LCB3ZSB3aWxsIGtlZXAgYSByZWYgdG8gdGhhdCBpbnN0ZWFkLiBUaGF0IHdheSB0
aGUgQW5pbWF0aW9uQmFzZQotICAgIC8vIGNhbiBzdGlsbCBhY2Nlc3MgdGhlIHJlc291cmNlcyBv
ZiBpdHMgQ29tcG9zaXRlQW5pbWF0aW9uIGFzIG5lZWRlZC4KLSAgICBSZWY8QW5pbWF0aW9uQmFz
ZT4gcHJvdGVjdGVkVGhpcygqdGhpcyk7Ci0gICAgUmVmPENvbXBvc2l0ZUFuaW1hdGlvbj4gcHJv
dGVjdENvbXBvc2l0ZUFuaW1hdGlvbigqbV9jb21wb3NpdGVBbmltYXRpb24pOwotICAgIAotICAg
IC8vIENoZWNrIGZvciBzdGFydCB0aW1lb3V0Ci0gICAgaWYgKG1fYW5pbWF0aW9uU3RhdGUgPT0g
QW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVyKSB7Ci0gICAgICAgIGlmIChiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKSAtIG1fcmVxdWVzdGVkU3RhcnRUaW1lID49IG1fYW5pbWF0aW9uLT5k
ZWxheSgpKQotICAgICAgICAgICAgdXBkYXRlU3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5w
dXQ6OlN0YXJ0VGltZXJGaXJlZCwgMCk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBk
b3VibGUgZWxhcHNlZER1cmF0aW9uID0gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApOwotCi0gICAgLy8gRklYTUU6IHdlIG5lZWQgdG8gZW5zdXJlIHRo
YXQgZWxhcHNlZER1cmF0aW9uIGlzIG5ldmVyIDwgMC4gSWYgaXQgaXMsIHRoaXMgc3VnZ2VzdHMg
dGhhdAotICAgIC8vIHdlIGhhZCBhIHJlY2FsY1N0eWxlKCkgb3V0c2lkZSBvZiBiZWdpbkFuaW1h
dGlvblVwZGF0ZSgpL2VuZEFuaW1hdGlvblVwZGF0ZSgpLgotICAgIC8vIEFsc28gY2hlY2sgaW4g
Z2V0VGltZVRvTmV4dEV2ZW50KCkuCi0gICAgZWxhcHNlZER1cmF0aW9uID0gc3RkOjptYXgoZWxh
cHNlZER1cmF0aW9uLCAwLjApOwotICAgIAotICAgIC8vIENoZWNrIGZvciBlbmQgdGltZW91dAot
ICAgIGlmIChtX3RvdGFsRHVyYXRpb24gJiYgZWxhcHNlZER1cmF0aW9uID49IG1fdG90YWxEdXJh
dGlvbi52YWx1ZSgpKSB7Ci0gICAgICAgIC8vIFdlIG1heSBzdGlsbCBiZSBpbiBBbmltYXRpb25T
dGF0ZTo6TG9vcGluZyBpZiB3ZSd2ZSBtYW5hZ2VkIHRvIHNraXAgYQotICAgICAgICAvLyB3aG9s
ZSBpdGVyYXRpb24sIGluIHdoaWNoIGNhc2Ugd2Ugc2hvdWxkIGp1bXAgdG8gdGhlIGVuZCBzdGF0
ZS4KLSAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBFbmRp
bmciLCB0aGlzLCBuYW1lRm9yU3RhdGUobV9hbmltYXRpb25TdGF0ZSkpOwotICAgICAgICBtX2Fu
aW1hdGlvblN0YXRlID0gQW5pbWF0aW9uU3RhdGU6OkVuZGluZzsKLQotICAgICAgICAvLyBGaXJl
IGFuIGVuZCBldmVudAotICAgICAgICB1cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6RW5kVGltZXJGaXJlZCwgbV90b3RhbER1cmF0aW9uLnZhbHVlKCkpOwotICAgIH0gZWxz
ZSB7Ci0gICAgICAgIC8vIENoZWNrIGZvciBpdGVyYXRpb24gdGltZW91dAotICAgICAgICBpZiAo
IW1fbmV4dEl0ZXJhdGlvbkR1cmF0aW9uKSB7Ci0gICAgICAgICAgICAvLyBIYXNuJ3QgYmVlbiBz
ZXQgeWV0LCBzZXQgaXQKLSAgICAgICAgICAgIGRvdWJsZSBkdXJhdGlvbkxlZnQgPSBtX2FuaW1h
dGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVy
YXRpb24oKSk7Ci0gICAgICAgICAgICBtX25leHRJdGVyYXRpb25EdXJhdGlvbiA9IGVsYXBzZWRE
dXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgaWYg
KGVsYXBzZWREdXJhdGlvbiA+PSBtX25leHRJdGVyYXRpb25EdXJhdGlvbikgewotICAgICAgICAg
ICAgLy8gU2V0IHRvIHRoZSBuZXh0IGl0ZXJhdGlvbgotICAgICAgICAgICAgZG91YmxlIHByZXZp
b3VzID0gbV9uZXh0SXRlcmF0aW9uRHVyYXRpb24udmFsdWUoKTsKLSAgICAgICAgICAgIGRvdWJs
ZSBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAtIGZtb2QoZWxhcHNlZER1
cmF0aW9uLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7Ci0gICAgICAgICAgICBtX25leHRJdGVy
YXRpb25EdXJhdGlvbiA9IGVsYXBzZWREdXJhdGlvbiArIGR1cmF0aW9uTGVmdDsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgLy8gU2VuZCB0aGUgZXZlbnQKLSAgICAgICAgICAgIHVwZGF0ZVN0
YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpMb29wVGltZXJGaXJlZCwgcHJldmlvdXMp
OwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OnVwZGF0ZVBsYXlT
dGF0ZShBbmltYXRpb25QbGF5U3RhdGUgcGxheVN0YXRlKQotewotICAgIGlmICghbV9jb21wb3Np
dGVBbmltYXRpb24pCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIFdoZW4gd2UgZ2V0IGhlcmUs
IHdlIGNhbiBoYXZlIG9uZSBvZiA0IGRlc2lyZWQgc3RhdGVzOiBydW5uaW5nLCBwYXVzZWQsIHN1
c3BlbmRlZCwgcGF1c2VkICYgc3VzcGVuZGVkLgotICAgIC8vIFRoZSBzdGF0ZSBtYWNoaW5lIGNh
biBiZSBpbiBvbmUgb2YgdHdvIHN0YXRlczogcnVubmluZywgcGF1c2VkLgotICAgIC8vIFNldCB0
aGUgc3RhdGUgbWFjaGluZSB0byB0aGUgZGVzaXJlZCBzdGF0ZS4KLSAgICBib29sIHBhdXNlID0g
cGxheVN0YXRlID09IEFuaW1hdGlvblBsYXlTdGF0ZTo6UGF1c2VkIHx8IG1fY29tcG9zaXRlQW5p
bWF0aW9uLT5pc1N1c3BlbmRlZCgpOwotCi0gICAgaWYgKHBhdXNlID09IHBhdXNlZCgpICYmICFp
c05ldygpKQotICAgICAgICByZXR1cm47Ci0KLSAgICB1cGRhdGVTdGF0ZU1hY2hpbmUocGF1c2Ug
PyAgQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGxheVN0YXRlUGF1c2VkIDogQW5pbWF0aW9uU3RhdGVJ
bnB1dDo6UGxheVN0YXRlUnVubmluZywgLTEpOwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBBbmlt
YXRpb25CYXNlOjp0aW1lVG9OZXh0U2VydmljZSgpCi17Ci0gICAgLy8gUmV0dXJucyB0aGUgdGlt
ZSBhdCB3aGljaCBuZXh0IHNlcnZpY2UgaXMgcmVxdWlyZWQuIFdURjo6bnVsbG9wdCBtZWFucyBu
byBzZXJ2aWNlIGlzIHJlcXVpcmVkLiAwIG1lYW5zCi0gICAgLy8gc2VydmljZSBpcyByZXF1aXJl
ZCBub3csIGFuZCA+IDAgbWVhbnMgc2VydmljZSBpcyByZXF1aXJlZCB0aGF0IG1hbnkgc2Vjb25k
cyBpbiB0aGUgZnV0dXJlLgotICAgIGlmIChwYXVzZWQoKSB8fCBpc05ldygpIHx8IHBvc3RBY3Rp
dmUoKSB8fCBmaWxsaW5nRm9yd2FyZHMoKSkKLSAgICAgICAgcmV0dXJuIFdURjo6bnVsbG9wdDsK
LSAgICAKLSAgICBpZiAobV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRX
YWl0VGltZXIpIHsKLSAgICAgICAgZG91YmxlIHRpbWVGcm9tTm93ID0gbV9hbmltYXRpb24tPmRl
bGF5KCkgLSAoYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3JlcXVlc3RlZFN0YXJ0VGlt
ZSk7Ci0gICAgICAgIHJldHVybiBzdGQ6Om1heChTZWNvbmRzIHsgdGltZUZyb21Ob3cgfSwgMF9z
KTsKLSAgICB9Ci0gICAgCi0gICAgZmlyZUFuaW1hdGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0gICAg
ICAgIAotICAgIC8vIEluIGFsbCBvdGhlciBjYXNlcywgd2UgbmVlZCBzZXJ2aWNlIHJpZ2h0IGF3
YXkuCi0gICAgcmV0dXJuIDBfczsKLX0KLQotLy8gQ29tcHV0ZSB0aGUgZnJhY3Rpb25hbCB0aW1l
LCB0YWtpbmcgaW50byBhY2NvdW50IGRpcmVjdGlvbi4KLS8vIFRoZXJlIGlzIG5vIG5lZWQgdG8g
d29ycnkgYWJvdXQgaXRlcmF0aW9ucywgd2UgYXNzdW1lIHRoYXQgd2Ugd291bGQgaGF2ZQotLy8g
c2hvcnQgY2lyY3VpdGVkIGFib3ZlIGlmIHdlIHdlcmUgZG9uZS4KLQotZG91YmxlIEFuaW1hdGlv
bkJhc2U6OmZyYWN0aW9uYWxUaW1lKGRvdWJsZSBzY2FsZSwgZG91YmxlIGVsYXBzZWRUaW1lLCBk
b3VibGUgb2Zmc2V0KSBjb25zdAotewotICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IG1fYW5p
bWF0aW9uLT5kdXJhdGlvbigpID8gKGVsYXBzZWRUaW1lIC8gbV9hbmltYXRpb24tPmR1cmF0aW9u
KCkpIDogMTsKLSAgICAvLyBGSVhNRTogc3RhcnRUaW1lIGNhbiBiZSBiZWZvcmUgdGhlIGN1cnJl
bnQgYW5pbWF0aW9uICJmcmFtZSIgdGltZS4gVGhpcyBpcyB0byBzeW5jIHdpdGggdGhlIGZyYW1l
IHRpbWUKLSAgICAvLyBjb25jZXB0IGluIEFuaW1hdGlvblRpbWVDb250cm9sbGVyLiBTbyB3ZSBu
ZWVkIHRvIHNvbWVob3cgc3luYyB0aGUgdHdvLiBVbnRpbCB0aGVuLCB0aGUgcG9zc2libGUKLSAg
ICAvLyBlcnJvciBpcyBzbWFsbCBhbmQgd2lsbCBwcm9iYWJseSBub3QgYmUgbm90aWNlYWJsZS4g
VW50aWwgd2UgZml4IHRoaXMsIHJlbW92ZSB0aGUgYXNzZXJ0LgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MjAzNwotICAgIC8vIEFTU0VSVChmcmFjdGlv
bmFsVGltZSA+PSAwKTsKLSAgICBpZiAoZnJhY3Rpb25hbFRpbWUgPCAwKQotICAgICAgICBmcmFj
dGlvbmFsVGltZSA9IDA7Ci0KLSAgICBpbnQgaW50ZWdyYWxUaW1lID0gc3RhdGljX2Nhc3Q8aW50
PihmcmFjdGlvbmFsVGltZSk7Ci0gICAgY29uc3QgaW50IGludGVncmFsSXRlcmF0aW9uQ291bnQg
PSBzdGF0aWNfY2FzdDxpbnQ+KG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpKTsKLSAgICBj
b25zdCBib29sIGl0ZXJhdGlvbkNvdW50SGFzRnJhY3Rpb25hbCA9IG1fYW5pbWF0aW9uLT5pdGVy
YXRpb25Db3VudCgpIC0gaW50ZWdyYWxJdGVyYXRpb25Db3VudDsKLSAgICBpZiAobV9hbmltYXRp
b24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25Db3VudEluZmluaXRl
ICYmICFpdGVyYXRpb25Db3VudEhhc0ZyYWN0aW9uYWwpCi0gICAgICAgIGludGVncmFsVGltZSA9
IHN0ZDo6bWluKGludGVncmFsVGltZSwgaW50ZWdyYWxJdGVyYXRpb25Db3VudCAtIDEpOwotCi0g
ICAgZnJhY3Rpb25hbFRpbWUgLT0gaW50ZWdyYWxUaW1lOwotCi0gICAgaWYgKCgobV9hbmltYXRp
b24tPmRpcmVjdGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRl
KSAmJiAoaW50ZWdyYWxUaW1lICYgMSkpCi0gICAgICAgIHx8ICgobV9hbmltYXRpb24tPmRpcmVj
dGlvbigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uQWx0ZXJuYXRlUmV2ZXJzZSkg
JiYgIShpbnRlZ3JhbFRpbWUgJiAxKSkKLSAgICAgICAgfHwgbV9hbmltYXRpb24tPmRpcmVjdGlv
bigpID09IEFuaW1hdGlvbjo6QW5pbWF0aW9uRGlyZWN0aW9uUmV2ZXJzZSkKLSAgICAgICAgZnJh
Y3Rpb25hbFRpbWUgPSAxIC0gZnJhY3Rpb25hbFRpbWU7Ci0KLSAgICBpZiAoc2NhbGUgIT0gMSB8
fCBvZmZzZXQpCi0gICAgICAgIGZyYWN0aW9uYWxUaW1lID0gKGZyYWN0aW9uYWxUaW1lIC0gb2Zm
c2V0KSAqIHNjYWxlOwotCi0gICAgcmV0dXJuIGZyYWN0aW9uYWxUaW1lOwotfQotCi1kb3VibGUg
QW5pbWF0aW9uQmFzZTo6cHJvZ3Jlc3MoZG91YmxlIHNjYWxlLCBkb3VibGUgb2Zmc2V0LCBjb25z
dCBUaW1pbmdGdW5jdGlvbiogdGltaW5nRnVuY3Rpb24pIGNvbnN0Ci17Ci0gICAgaWYgKHByZUFj
dGl2ZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIGlmIChwb3N0QWN0aXZlKCkpCi0gICAg
ICAgIHJldHVybiAxOwotCi0gICAgZG91YmxlIGVsYXBzZWRUaW1lID0gZ2V0RWxhcHNlZFRpbWUo
KTsKLQotICAgIGRvdWJsZSBkdXJhdGlvbiA9IG1fYW5pbWF0aW9uLT5kdXJhdGlvbigpOwotICAg
IGlmIChtX2FuaW1hdGlvbi0+aXRlcmF0aW9uQ291bnQoKSA+IDApCi0gICAgICAgIGR1cmF0aW9u
ICo9IG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpOwotCi0gICAgaWYgKGZpbGxpbmdGb3J3
YXJkcygpKQotICAgICAgICBlbGFwc2VkVGltZSA9IGR1cmF0aW9uOwotCi0gICAgZG91YmxlIGZy
YWN0aW9uYWxUaW1lID0gdGhpcy0+ZnJhY3Rpb25hbFRpbWUoc2NhbGUsIGVsYXBzZWRUaW1lLCBv
ZmZzZXQpOwotCi0gICAgaWYgKG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgpID4gMCAmJiBl
bGFwc2VkVGltZSA+PSBkdXJhdGlvbikgewotICAgICAgICBpZiAoV1RGOjppc0ludGVncmFsKGZy
YWN0aW9uYWxUaW1lKSkKLSAgICAgICAgICAgIHJldHVybiBmcmFjdGlvbmFsVGltZTsKLSAgICB9
Ci0KLSAgICBpZiAoIXRpbWluZ0Z1bmN0aW9uKQotICAgICAgICB0aW1pbmdGdW5jdGlvbiA9IG1f
YW5pbWF0aW9uLT50aW1pbmdGdW5jdGlvbigpOwotCi0gICAgcmV0dXJuIHRpbWluZ0Z1bmN0aW9u
LT50cmFuc2Zvcm1UaW1lKGZyYWN0aW9uYWxUaW1lLCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSk7
Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6Z2V0VGltZVRvTmV4dEV2ZW50KFNlY29uZHMmIHRp
bWUsIGJvb2wmIGlzTG9vcGluZykgY29uc3QKLXsKLSAgICAvLyBEZWNpZGUgd2hlbiB0aGUgZW5k
IG9yIGxvb3AgZXZlbnQgbmVlZHMgdG8gZmlyZQotICAgIGNvbnN0IGRvdWJsZSBlbGFwc2VkRHVy
YXRpb24gPSBzdGQ6Om1heChiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUoKSAtIG1fc3RhcnRUaW1l
LnZhbHVlT3IoMCksIDAuMCk7Ci0gICAgZG91YmxlIGR1cmF0aW9uTGVmdCA9IDA7Ci0gICAgZG91
YmxlIG5leHRJdGVyYXRpb25UaW1lID0gbV90b3RhbER1cmF0aW9uLnZhbHVlT3IoMCk7Ci0KLSAg
ICBpZiAoIW1fdG90YWxEdXJhdGlvbiB8fCBlbGFwc2VkRHVyYXRpb24gPCBtX3RvdGFsRHVyYXRp
b24udmFsdWUoKSkgewotICAgICAgICBkdXJhdGlvbkxlZnQgPSBtX2FuaW1hdGlvbi0+ZHVyYXRp
b24oKSA+IDAgPyAobV9hbmltYXRpb24tPmR1cmF0aW9uKCkgLSBmbW9kKGVsYXBzZWREdXJhdGlv
biwgbV9hbmltYXRpb24tPmR1cmF0aW9uKCkpKSA6IDA7Ci0gICAgICAgIG5leHRJdGVyYXRpb25U
aW1lID0gZWxhcHNlZER1cmF0aW9uICsgZHVyYXRpb25MZWZ0OwotICAgIH0KLSAgICAKLSAgICBp
ZiAoIW1fdG90YWxEdXJhdGlvbiB8fCBuZXh0SXRlcmF0aW9uVGltZSA8IG1fdG90YWxEdXJhdGlv
bi52YWx1ZSgpKSB7Ci0gICAgICAgIC8vIFdlIGFyZSBub3QgYXQgdGhlIGVuZCB5ZXQKLSAgICAg
ICAgQVNTRVJUKG5leHRJdGVyYXRpb25UaW1lID4gMCk7Ci0gICAgICAgIGlzTG9vcGluZyA9IHRy
dWU7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgLy8gV2UgYXJlIGF0IHRoZSBlbmQKLSAgICAgICAg
aXNMb29waW5nID0gZmFsc2U7Ci0gICAgfQotICAgIAotICAgIHRpbWUgPSBTZWNvbmRzIHsgZHVy
YXRpb25MZWZ0IH07Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6Z29JbnRvRW5kaW5nT3JMb29w
aW5nU3RhdGUoKQotewotICAgIFNlY29uZHMgdDsKLSAgICBib29sIGlzTG9vcGluZzsKLSAgICBn
ZXRUaW1lVG9OZXh0RXZlbnQodCwgaXNMb29waW5nKTsKLSAgICBMT0coQW5pbWF0aW9ucywgIiVw
IEFuaW1hdGlvblN0YXRlICVzIC0+ICVzIiwgdGhpcywgbmFtZUZvclN0YXRlKG1fYW5pbWF0aW9u
U3RhdGUpLCBpc0xvb3BpbmcgPyAiTG9vcGluZyIgOiAiRW5kaW5nIik7Ci0gICAgbV9hbmltYXRp
b25TdGF0ZSA9IGlzTG9vcGluZyA/IEFuaW1hdGlvblN0YXRlOjpMb29waW5nIDogQW5pbWF0aW9u
U3RhdGU6OkVuZGluZzsKLX0KLSAgCi12b2lkIEFuaW1hdGlvbkJhc2U6OmZyZWV6ZUF0VGltZShk
b3VibGUgdCkKLXsKLSAgICBpZiAoIW1fY29tcG9zaXRlQW5pbWF0aW9uKQotICAgICAgICByZXR1
cm47Ci0KLSAgICBpZiAoIW1fc3RhcnRUaW1lKSB7Ci0gICAgICAgIC8vIElmIHdlIGhhdmVuJ3Qg
c3RhcnRlZCB5ZXQsIG1ha2UgaXQgYXMgaWYgd2Ugc3RhcnRlZC4KLSAgICAgICAgTE9HKEFuaW1h
dGlvbnMsICIlcCBBbmltYXRpb25TdGF0ZSAlcyAtPiBTdGFydFdhaXRSZXNwb25zZSIsIHRoaXMs
IG5hbWVGb3JTdGF0ZShtX2FuaW1hdGlvblN0YXRlKSk7Ci0gICAgICAgIG1fYW5pbWF0aW9uU3Rh
dGUgPSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0UmVzcG9uc2U7Ci0gICAgICAgIG9uQW5pbWF0
aW9uU3RhcnRSZXNwb25zZShNb25vdG9uaWNUaW1lOjpub3coKSk7Ci0gICAgfQotCi0gICAgQVNT
RVJUKG1fc3RhcnRUaW1lKTsgLy8gSWYgbV9zdGFydFRpbWUgaXMgemVybywgd2UgaGF2ZW4ndCBz
dGFydGVkIHlldCwgc28gd2UnbGwgZ2V0IGEgYmFkIHBhdXNlIHRpbWUuCi0gICAgaWYgKHQgPD0g
bV9hbmltYXRpb24tPmRlbGF5KCkpCi0gICAgICAgIG1fcGF1c2VUaW1lID0gbV9zdGFydFRpbWUu
dmFsdWVPcigwKTsKLSAgICBlbHNlCi0gICAgICAgIG1fcGF1c2VUaW1lID0gbV9zdGFydFRpbWUu
dmFsdWVPcigwKSArIHQgLSBtX2FuaW1hdGlvbi0+ZGVsYXkoKTsKLQotICAgIGlmIChhdXRvKiBy
ZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAgIHJlbmRlcmVyLT5zdXNwZW5kQW5p
bWF0aW9ucyhNb25vdG9uaWNUaW1lOjpmcm9tUmF3U2Vjb25kcyhtX3BhdXNlVGltZS52YWx1ZSgp
KSk7Ci19Ci0KLWRvdWJsZSBBbmltYXRpb25CYXNlOjpiZWdpbkFuaW1hdGlvblVwZGF0ZVRpbWUo
KSBjb25zdAotewotICAgIGlmICghbV9jb21wb3NpdGVBbmltYXRpb24pCi0gICAgICAgIHJldHVy
biAwOwotCi0gICAgcmV0dXJuIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9s
bGVyKCkuYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNv
bmRzKCk7Ci19Ci0KLWRvdWJsZSBBbmltYXRpb25CYXNlOjpnZXRFbGFwc2VkVGltZSgpIGNvbnN0
Ci17Ci0gICAgaWYgKHBhdXNlZCgpKSB7Ci0gICAgICAgIGRvdWJsZSBkZWxheU9mZnNldCA9ICgh
bV9zdGFydFRpbWUgJiYgbV9hbmltYXRpb24tPmRlbGF5KCkgPCAwKSA/IG1fYW5pbWF0aW9uLT5k
ZWxheSgpIDogMDsKLSAgICAgICAgcmV0dXJuIG1fcGF1c2VUaW1lLnZhbHVlT3IoMCkgLSBtX3N0
YXJ0VGltZS52YWx1ZU9yKDApIC0gZGVsYXlPZmZzZXQ7Ci0gICAgfQotCi0gICAgaWYgKCFtX3N0
YXJ0VGltZSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAocG9zdEFjdGl2ZSgpIHx8IGZp
bGxpbmdGb3J3YXJkcygpKQotICAgICAgICByZXR1cm4gbV90b3RhbER1cmF0aW9uLnZhbHVlT3Io
MCk7Ci0KLSAgICByZXR1cm4gYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCkgLSBtX3N0YXJ0VGlt
ZS52YWx1ZU9yKDApOwotfQotCi12b2lkIEFuaW1hdGlvbkJhc2U6OnNldEVsYXBzZWRUaW1lKGRv
dWJsZSB0aW1lKQotewotICAgIC8vIEZJWE1FOiBpbXBsZW1lbnQgdGhpcyBtZXRob2QKLSAgICBV
TlVTRURfUEFSQU0odGltZSk7Ci19Ci0KLXZvaWQgQW5pbWF0aW9uQmFzZTo6cGxheSgpCi17Ci0g
ICAgLy8gRklYTUU6IGltcGxlbWVudCB0aGlzIG1ldGhvZAotfQotCi12b2lkIEFuaW1hdGlvbkJh
c2U6OnBhdXNlKCkKLXsKLSAgICAvLyBGSVhNRTogaW1wbGVtZW50IHRoaXMgbWV0aG9kCi19Ci0K
LXN0YXRpYyBib29sIGNvbnRhaW5zUm90YXRpb24oY29uc3QgVmVjdG9yPFJlZlB0cjxUcmFuc2Zv
cm1PcGVyYXRpb24+PiYgb3BlcmF0aW9ucykKLXsKLSAgICBmb3IgKGNvbnN0IGF1dG8mIG9wZXJh
dGlvbiA6IG9wZXJhdGlvbnMpIHsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRy
YW5zZm9ybU9wZXJhdGlvbjo6Uk9UQVRFKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAg
fQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBBbmltYXRpb25CYXNlOjpjb21wdXRlVHJh
bnNmb3JtZWRFeHRlbnRWaWFUcmFuc2Zvcm1MaXN0KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJC
b3gsIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZSwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25zdAot
ewotICAgIEZsb2F0UmVjdCBmbG9hdEJvdW5kcyA9IGJvdW5kczsKLSAgICBGbG9hdFBvaW50IHRy
YW5zZm9ybU9yaWdpbjsKLSAgICAKLSAgICBib29sIGFwcGx5VHJhbnNmb3JtT3JpZ2luID0gY29u
dGFpbnNSb3RhdGlvbihzdHlsZS50cmFuc2Zvcm0oKS5vcGVyYXRpb25zKCkpIHx8IHN0eWxlLnRy
YW5zZm9ybSgpLmFmZmVjdGVkQnlUcmFuc2Zvcm1PcmlnaW4oKTsKLSAgICBpZiAoYXBwbHlUcmFu
c2Zvcm1PcmlnaW4pIHsKLSAgICAgICAgdHJhbnNmb3JtT3JpZ2luID0gcmVuZGVyZXJCb3gubG9j
YXRpb24oKSArIGZsb2F0UG9pbnRGb3JMZW5ndGhQb2ludChzdHlsZS50cmFuc2Zvcm1PcmlnaW5Y
WSgpLCByZW5kZXJlckJveC5zaXplKCkpOwotICAgICAgICAvLyBJZ25vcmUgdHJhbnNmb3JtT3Jp
Z2luWiBiZWNhdXNlIHdlJ2xsIGJhaWwgaWYgd2UgZW5jb3VudGVyIGFueSAzRCB0cmFuc2Zvcm1z
LgotICAgICAgICBmbG9hdEJvdW5kcy5tb3ZlQnkoLXRyYW5zZm9ybU9yaWdpbik7Ci0gICAgfQot
Ci0gICAgZm9yIChjb25zdCBhdXRvJiBvcGVyYXRpb24gOiBzdHlsZS50cmFuc2Zvcm0oKS5vcGVy
YXRpb25zKCkpIHsKLSAgICAgICAgaWYgKG9wZXJhdGlvbi0+dHlwZSgpID09IFRyYW5zZm9ybU9w
ZXJhdGlvbjo6Uk9UQVRFKSB7Ci0gICAgICAgICAgICAvLyBGb3Igbm93LCBqdXN0IHRyZWF0IHRo
aXMgYXMgYSBmdWxsIHJvdGF0aW9uLiBUaGlzIGNvdWxkIHRha2UgYW5nbGUgaW50byBhY2NvdW50
IHRvIHJlZHVjZSBpbmZsYXRpb24uCi0gICAgICAgICAgICBmbG9hdEJvdW5kcyA9IGJvdW5kc09m
Um90YXRpbmdSZWN0KGZsb2F0Qm91bmRzKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAg
IFRyYW5zZm9ybWF0aW9uTWF0cml4IHRyYW5zZm9ybTsKLSAgICAgICAgICAgIG9wZXJhdGlvbi0+
YXBwbHkodHJhbnNmb3JtLCByZW5kZXJlckJveC5zaXplKCkpOwotICAgICAgICAgICAgaWYgKCF0
cmFuc2Zvcm0uaXNBZmZpbmUoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAg
ICAgICAgICAgIGlmIChvcGVyYXRpb24tPnR5cGUoKSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1B
VFJJWCB8fCBvcGVyYXRpb24tPnR5cGUoKSA9PSBUcmFuc2Zvcm1PcGVyYXRpb246Ok1BVFJJWF8z
RCkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4OjpEZWNvbXBvc2VkMlR5
cGUgdG9EZWNvbXA7Ci0gICAgICAgICAgICAgICAgdHJhbnNmb3JtLmRlY29tcG9zZTIodG9EZWNv
bXApOwotICAgICAgICAgICAgICAgIC8vIEFueSByb3RhdGlvbiBwcmV2ZW50cyB1cyBmcm9tIHVz
aW5nIGEgc2ltcGxlIHN0YXJ0L2VuZCByZWN0IHVuaW9uLgotICAgICAgICAgICAgICAgIGlmICh0
b0RlY29tcC5hbmdsZSkKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBmbG9hdEJvdW5kcyA9IHRyYW5zZm9ybS5tYXBSZWN0KGZs
b2F0Qm91bmRzKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIGlmIChhcHBseVRyYW5zZm9ybU9y
aWdpbikKLSAgICAgICAgZmxvYXRCb3VuZHMubW92ZUJ5KHRyYW5zZm9ybU9yaWdpbik7Ci0KLSAg
ICBib3VuZHMgPSBMYXlvdXRSZWN0KGZsb2F0Qm91bmRzKTsKLSAgICByZXR1cm4gdHJ1ZTsKLX0K
LQotYm9vbCBBbmltYXRpb25CYXNlOjpjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRyaXgo
Y29uc3QgRmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlLCBM
YXlvdXRSZWN0JiBib3VuZHMpIGNvbnN0Ci17Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggdHJh
bnNmb3JtOwotICAgIHN0eWxlLmFwcGx5VHJhbnNmb3JtKHRyYW5zZm9ybSwgcmVuZGVyZXJCb3gs
IFJlbmRlclN0eWxlOjpJbmNsdWRlVHJhbnNmb3JtT3JpZ2luKTsKLSAgICBpZiAoIXRyYW5zZm9y
bS5pc0FmZmluZSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBUcmFuc2Zvcm1hdGlv
bk1hdHJpeDo6RGVjb21wb3NlZDJUeXBlIGZyb21EZWNvbXA7Ci0gICAgdHJhbnNmb3JtLmRlY29t
cG9zZTIoZnJvbURlY29tcCk7Ci0gICAgLy8gQW55IHJvdGF0aW9uIHByZXZlbnRzIHVzIGZyb20g
dXNpbmcgYSBzaW1wbGUgc3RhcnQvZW5kIHJlY3QgdW5pb24uCi0gICAgaWYgKGZyb21EZWNvbXAu
YW5nbGUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIGJvdW5kcyA9IExheW91dFJlY3Qo
dHJhbnNmb3JtLm1hcFJlY3QoYm91bmRzKSk7Ci0gICAgcmV0dXJuIHRydWU7Ci0KLX0KLQotfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmlt
YXRpb24vQW5pbWF0aW9uQmFzZS5oIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQW5p
bWF0aW9uQmFzZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA3YmM0MjA0ZWQ3OTZh
ZTUyMWFhOGIxYzhlNDcyODkyNDAyNDU0YTgxLi4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0FuaW1hdGlv
bkJhc2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDI2OSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0
IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVk
ZSAiQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudC5oIgot
I2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZUNvbnN0
YW50cy5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNzIENvbXBvc2l0ZUFuaW1hdGlv
bjsKLWNsYXNzIEVsZW1lbnQ7Ci1jbGFzcyBGbG9hdFJlY3Q7Ci1jbGFzcyBMYXlvdXRSZWN0Owot
Y2xhc3MgUmVuZGVyRWxlbWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwotY2xhc3MgVGltaW5nRnVu
Y3Rpb247Ci0KLWVudW0gY2xhc3MgQW5pbWF0ZUNoYW5nZSB7Ci0gICAgU3R5bGVCbGVuZGVkICAg
ICAgICAgICAgPSAxIDw8IDAsIC8vIFN0eWxlIHdhcyBjaGFuZ2VkLgotICAgIFN0YXRlQ2hhbmdl
ICAgICAgICAgICAgID0gMSA8PCAxLCAvLyBBbmltYXRpb24gc3RhdGUoKSBjaGFuZ2VkLgotICAg
IFJ1bm5pbmdTdGF0ZUNoYW5nZSAgICAgID0gMSA8PCAyLCAvLyBBbmltYXRpb24gInJ1bm5pbmcg
b3IgcGF1c2VkIiBjaGFuZ2VkLgotfTsKLQotZW51bSBjbGFzcyBBbmltYXRpb25JbXBhY3Qgewot
ICAgIFJlcXVpcmVzUmVjb21wb3NpdGUgICAgID0gMSA8PCAwLAotICAgIEZvcmNlc1N0YWNraW5n
Q29udGV4dCAgID0gMSA8PCAxCi19OwotCi1jbGFzcyBBbmltYXRpb25CYXNlIDogcHVibGljIFJl
ZkNvdW50ZWQ8QW5pbWF0aW9uQmFzZT4KLSAgICAsIHB1YmxpYyBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50IHsKLSAgICBmcmllbmQgY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOwotICAgIGZyaWVu
ZCBjbGFzcyBDU1NQcm9wZXJ0eUFuaW1hdGlvbjsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKLXB1YmxpYzoKLSAgICBBbmltYXRpb25CYXNlKGNvbnN0IEFuaW1hdGlvbiYgdHJhbnNpdGlv
biwgRWxlbWVudCYsIENvbXBvc2l0ZUFuaW1hdGlvbiYpOwotICAgIHZpcnR1YWwgfkFuaW1hdGlv
bkJhc2UoKTsKLQotICAgIEVsZW1lbnQqIGVsZW1lbnQoKSBjb25zdCB7IHJldHVybiBtX2VsZW1l
bnQuZ2V0KCk7IH0KLSAgICBjb25zdCBSZW5kZXJTdHlsZSYgY3VycmVudFN0eWxlKCkgY29uc3Qg
b3ZlcnJpZGU7Ci0gICAgUmVuZGVyRWxlbWVudCogcmVuZGVyZXIoKSBjb25zdCBvdmVycmlkZTsK
LSAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKLQotICAgIGRvdWJsZSBkdXJhdGlvbigpIGNvbnN0
OwotCi0gICAgLy8gQW5pbWF0aW9ucyBhbmQgVHJhbnNpdGlvbnMgZ28gdGhyb3VnaCB0aGUgc3Rh
dGVzIGJlbG93LiBXaGVuIGVudGVyaW5nIHRoZSBTVEFSVEVEIHN0YXRlCi0gICAgLy8gdGhlIGFu
aW1hdGlvbiBpcyBzdGFydGVkLiBUaGlzIG1heSBvciBtYXkgbm90IHJlcXVpcmUgZGVmZXJyZWQg
cmVzcG9uc2UgZnJvbSB0aGUgYW5pbWF0b3IuCi0gICAgLy8gSWYgc28sIHdlIHN0YXkgaW4gdGhp
cyBzdGF0ZSB1bnRpbCB0aGF0IHJlc3BvbnNlIGlzIHJlY2VpdmVkIChhbmQgaXQgcmV0dXJucyB0
aGUgc3RhcnQgdGltZSkuCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB1c2UgdGhlIGN1cnJlbnQgdGlt
ZSBhcyB0aGUgc3RhcnQgdGltZSBhbmQgZ28gaW1tZWRpYXRlbHkgdG8gQW5pbWF0aW9uU3RhdGU6
Okxvb3BpbmcKLSAgICAvLyBvciBBbmltYXRpb25TdGF0ZTo6RW5kaW5nLgotICAgIGVudW0gY2xh
c3MgQW5pbWF0aW9uU3RhdGUgOiB1aW50OF90IHsKLSAgICAgICAgTmV3LCAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFuaW1hdGlvbiBqdXN0IGNyZWF0ZWQsIGFuaW1hdGlvbiBub3QgcnVubmlu
ZyB5ZXQKLSAgICAgICAgU3RhcnRXYWl0VGltZXIsICAgICAgICAgICAgIC8vIHN0YXJ0IHRpbWVy
IHJ1bm5pbmcsIHdhaXRpbmcgZm9yIGZpcmUKLSAgICAgICAgU3RhcnRXYWl0U3R5bGVBdmFpbGFi
bGUsICAgIC8vIHdhaXRpbmcgZm9yIHN0eWxlIHNldHVwIHNvIHdlIGNhbiBzdGFydCBhbmltYXRp
b25zCi0gICAgICAgIFN0YXJ0V2FpdFJlc3BvbnNlLCAgICAgICAgICAvLyBhbmltYXRpb24gc3Rh
cnRlZCwgd2FpdGluZyBmb3IgcmVzcG9uc2UKLSAgICAgICAgTG9vcGluZywgICAgICAgICAgICAg
ICAgICAgIC8vIHJlc3BvbnNlIHJlY2VpdmVkLCBhbmltYXRpb24gcnVubmluZywgbG9vcCB0aW1l
ciBydW5uaW5nLCB3YWl0aW5nIGZvciBmaXJlCi0gICAgICAgIEVuZGluZywgICAgICAgICAgICAg
ICAgICAgICAvLyByZWNlaXZlZCwgYW5pbWF0aW9uIHJ1bm5pbmcsIGVuZCB0aW1lciBydW5uaW5n
LCB3YWl0aW5nIGZvciBmaXJlCi0gICAgICAgIFBhdXNlZE5ldywgICAgICAgICAgICAgICAgICAv
LyBpbiBwYXVzZSBtb2RlIHdoZW4gYW5pbWF0aW9uIHdhcyBjcmVhdGVkCi0gICAgICAgIFBhdXNl
ZFdhaXRUaW1lciwgICAgICAgICAgICAvLyBpbiBwYXVzZSBtb2RlIHdoZW4gYW5pbWF0aW9uIHN0
YXJ0ZWQKLSAgICAgICAgUGF1c2VkV2FpdFN0eWxlQXZhaWxhYmxlLCAgIC8vIGluIHBhdXNlIG1v
ZGUgd2hlbiB3YWl0aW5nIGZvciBzdHlsZSBzZXR1cAotICAgICAgICBQYXVzZWRXYWl0UmVzcG9u
c2UsICAgICAgICAgLy8gYW5pbWF0aW9uIHBhdXNlZCB3aGVuIGluIFNUQVJUSU5HIHN0YXRlCi0g
ICAgICAgIFBhdXNlZFJ1biwgICAgICAgICAgICAgICAgICAvLyBhbmltYXRpb24gcGF1c2VkIHdo
ZW4gaW4gTE9PUElORyBvciBFTkRJTkcgc3RhdGUKLSAgICAgICAgRG9uZSwgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGVuZCB0aW1lciBmaXJlZCwgYW5pbWF0aW9uIGZpbmlzaGVkIGFuZCByZW1v
dmVkCi0gICAgICAgIEZpbGxpbmdGb3J3YXJkcyAgICAgICAgICAgICAvLyBhbmltYXRpb24gaGFz
IGVuZGVkIGFuZCBpcyByZXRhaW5pbmcgaXRzIGZpbmFsIHZhbHVlCi0gICAgfTsKLQotICAgIGVu
dW0gY2xhc3MgQW5pbWF0aW9uU3RhdGVJbnB1dCA6IHVpbnQ4X3QgewotICAgICAgICBNYWtlTmV3
LCAgICAgICAgICAgLy8gcmVzZXQgYmFjayB0byBuZXcgZnJvbSBhbnkgc3RhdGUKLSAgICAgICAg
U3RhcnRBbmltYXRpb24sICAgIC8vIGFuaW1hdGlvbiByZXF1ZXN0cyBhIHN0YXJ0Ci0gICAgICAg
IFJlc3RhcnRBbmltYXRpb24sICAvLyBmb3JjZSBhIHJlc3RhcnQgZnJvbSBhbnkgc3RhdGUKLSAg
ICAgICAgU3RhcnRUaW1lckZpcmVkLCAgIC8vIHN0YXJ0IHRpbWVyIGZpcmVkCi0gICAgICAgIFN0
eWxlQXZhaWxhYmxlLCAgICAvLyBzdHlsZSBpcyBzZXR1cCwgcmVhZHkgdG8gc3RhcnQgYW5pbWF0
aW5nCi0gICAgICAgIFN0YXJ0VGltZVNldCwgICAgICAvLyBtX3N0YXJ0VGltZSB3YXMgc2V0Ci0g
ICAgICAgIExvb3BUaW1lckZpcmVkLCAgICAvLyBsb29wIHRpbWVyIGZpcmVkCi0gICAgICAgIEVu
ZFRpbWVyRmlyZWQsICAgICAvLyBlbmQgdGltZXIgZmlyZWQKLSAgICAgICAgUGF1c2VPdmVycmlk
ZSwgICAgIC8vIHBhdXNlIGFuIGFuaW1hdGlvbiBkdWUgdG8gb3ZlcnJpZGUKLSAgICAgICAgUmVz
dW1lT3ZlcnJpZGUsICAgIC8vIHJlc3VtZSBhbiBvdmVycmlkZGVuIGFuaW1hdGlvbgotICAgICAg
ICBQbGF5U3RhdGVSdW5uaW5nLCAgLy8gcGxheSBzdGF0ZSBwYXVzZWQgLT4gcnVubmluZwotICAg
ICAgICBQbGF5U3RhdGVQYXVzZWQsICAgLy8gcGxheSBzdGF0ZSBydW5uaW5nIC0+IHBhdXNlZAot
ICAgICAgICBFbmRBbmltYXRpb24gICAgICAgLy8gZm9yY2UgYW4gZW5kIGZyb20gYW55IHN0YXRl
Ci0gICAgfTsKLQotICAgIC8vIENhbGxlZCB3aGVuIGFuaW1hdGlvbiBpcyBpbiBBbmltYXRpb25T
dGF0ZTo6TmV3IHRvIHN0YXJ0IGFuaW1hdGlvbgotICAgIHZvaWQgdXBkYXRlU3RhdGVNYWNoaW5l
KEFuaW1hdGlvblN0YXRlSW5wdXQsIGRvdWJsZSBwYXJhbSk7Ci0KLSAgICAvLyBBbmltYXRpb24g
aGFzIGFjdHVhbGx5IHN0YXJ0ZWQsIGF0IHBhc3NlZCB0aW1lCi0gICAgdm9pZCBvbkFuaW1hdGlv
blN0YXJ0UmVzcG9uc2UoTW9ub3RvbmljVGltZSBzdGFydFRpbWUpCi0gICAgewotICAgICAgICB1
cGRhdGVTdGF0ZU1hY2hpbmUoQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3RhcnRUaW1lU2V0LCBzdGFy
dFRpbWUuc2Vjb25kc1NpbmNlRXBvY2goKS5zZWNvbmRzKCkpOwotICAgIH0KLQotICAgIC8vIENh
bGxlZCB0byBjaGFuZ2UgdG8gb3IgZnJvbSBwYXVzZWQgc3RhdGUKLSAgICB2b2lkIHVwZGF0ZVBs
YXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGUpOwotICAgIGJvb2wgcGxheVN0YXRlUGxheWluZygp
IGNvbnN0OwotCi0gICAgYm9vbCB3YWl0aW5nVG9TdGFydCgpIGNvbnN0IHsgcmV0dXJuIG1fYW5p
bWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Ok5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09
IEFuaW1hdGlvblN0YXRlOjpTdGFydFdhaXRUaW1lciB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpQYXVzZWROZXc7IH0KLSAgICBib29sIHByZUFjdGl2ZSgpIGNvbnN0Ci0g
ICAgewotICAgICAgICByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6
TmV3IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFRpbWVy
IHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFN0eWxlQXZh
aWxhYmxlIHx8IG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OlN0YXJ0V2FpdFJl
c3BvbnNlOwotICAgIH0KLQotICAgIGJvb2wgcG9zdEFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1f
YW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6OkRvbmU7IH0KLSAgICBib29sIGZpbGxp
bmdGb3J3YXJkcygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uU3RhdGUgPT0gQW5pbWF0aW9u
U3RhdGU6OkZpbGxpbmdGb3J3YXJkczsgfQotICAgIGJvb2wgYWN0aXZlKCkgY29uc3QgeyByZXR1
cm4gIXBvc3RBY3RpdmUoKSAmJiAhcHJlQWN0aXZlKCk7IH0KLSAgICBib29sIHJ1bm5pbmcoKSBj
b25zdCB7IHJldHVybiAhaXNOZXcoKSAmJiAhcG9zdEFjdGl2ZSgpOyB9Ci0gICAgYm9vbCBwYXVz
ZWQoKSBjb25zdCB7IHJldHVybiBtX3BhdXNlVGltZSB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpQYXVzZWROZXc7IH0KLQotICAgIHN0YXRpYyBib29sIGlzUGF1c2VkU3Rh
dGUoQW5pbWF0aW9uU3RhdGUgc3RhdGUpIHsgcmV0dXJuIHN0YXRlID49IEFuaW1hdGlvblN0YXRl
OjpQYXVzZWROZXcgJiYgc3RhdGUgPD0gQW5pbWF0aW9uU3RhdGU6OlBhdXNlZFJ1bjsgfQotICAg
IHN0YXRpYyBib29sIGlzUnVubmluZ1N0YXRlKEFuaW1hdGlvblN0YXRlIHN0YXRlKSB7IHJldHVy
biBzdGF0ZSA+PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0U3R5bGVBdmFpbGFibGUgJiYgc3Rh
dGUgPCBBbmltYXRpb25TdGF0ZTo6RG9uZTsgfQotCi0gICAgYm9vbCBpblBhdXNlZFN0YXRlKCkg
Y29uc3QgeyByZXR1cm4gaXNQYXVzZWRTdGF0ZShtX2FuaW1hdGlvblN0YXRlKTsgfQotICAgIGJv
b2wgaW5SdW5uaW5nU3RhdGUoKSBjb25zdCB7IHJldHVybiBpc1J1bm5pbmdTdGF0ZShtX2FuaW1h
dGlvblN0YXRlKTsgfQotCi0gICAgYm9vbCBpc05ldygpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0
aW9uU3RhdGUgPT0gQW5pbWF0aW9uU3RhdGU6Ok5ldyB8fCBtX2FuaW1hdGlvblN0YXRlID09IEFu
aW1hdGlvblN0YXRlOjpQYXVzZWROZXc7IH0KLSAgICBib29sIHdhaXRpbmdGb3JTdGFydFRpbWUo
KSBjb25zdCB7IHJldHVybiBtX2FuaW1hdGlvblN0YXRlID09IEFuaW1hdGlvblN0YXRlOjpTdGFy
dFdhaXRSZXNwb25zZTsgfQotICAgIGJvb2wgd2FpdGluZ0ZvclN0eWxlQXZhaWxhYmxlKCkgY29u
c3QgeyByZXR1cm4gbV9hbmltYXRpb25TdGF0ZSA9PSBBbmltYXRpb25TdGF0ZTo6U3RhcnRXYWl0
U3R5bGVBdmFpbGFibGU7IH0KLQotICAgIGJvb2wgaXNBY2NlbGVyYXRlZCgpIGNvbnN0IHsgcmV0
dXJuIG1faXNBY2NlbGVyYXRlZDsgfQotCi0gICAgdmlydHVhbCBPcHRpb25hbDxTZWNvbmRzPiB0
aW1lVG9OZXh0U2VydmljZSgpOwotCi0gICAgZG91YmxlIHByb2dyZXNzKGRvdWJsZSBzY2FsZSA9
IDEsIGRvdWJsZSBvZmZzZXQgPSAwLCBjb25zdCBUaW1pbmdGdW5jdGlvbiogPSBudWxscHRyKSBj
b25zdDsKLQotICAgIHZpcnR1YWwgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4mIC8qYW5pbWF0ZWRTdHlsZSovKSA9IDA7Ci0KLSAgICB2aXJ0dWFsIGJv
b2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCA9
IDA7Ci0KLSAgICB2aXJ0dWFsIGJvb2wgc2hvdWxkRmlyZUV2ZW50cygpIGNvbnN0IHsgcmV0dXJu
IGZhbHNlOyB9Ci0KLSAgICB2b2lkIGZpcmVBbmltYXRpb25FdmVudHNJZk5lZWRlZCgpOwotCi0g
ICAgYm9vbCBhbmltYXRpb25zTWF0Y2goY29uc3QgQW5pbWF0aW9uJikgY29uc3Q7Ci0KLSAgICBj
b25zdCBBbmltYXRpb24mIGFuaW1hdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYW5pbWF0aW9uOyB9
Ci0gICAgdm9pZCBzZXRBbmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiBhbmltYXRpb24pIHsgbV9h
bmltYXRpb24gPSBjb25zdF9jYXN0PEFuaW1hdGlvbiY+KGFuaW1hdGlvbik7IH0KLQotICAgIC8v
IFJldHVybiB0cnVlIGlmIHRoaXMgYW5pbWF0aW9uIGlzIG92ZXJyaWRkZW4uIFRoaXMgd2lsbCBv
bmx5IGJlIHRoZSBjYXNlIGZvcgotICAgIC8vIEltcGxpY2l0QW5pbWF0aW9ucyBhbmQgaXMgdXNl
ZCB0byBkZXRlcm1pbmUgd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGZvcmNlCi0gICAgLy8gc2V0
IHRoZSBzdGFydCB0aW1lLiBJZiBhbiBhbmltYXRpb24gaXMgb3ZlcnJpZGRlbiwgaXQgd2lsbCBw
cm9iYWJseSBub3QgZ2V0Ci0gICAgLy8gYmFjayB0aGUgQW5pbWF0aW9uU3RhdGVJbnB1dDo6U3Rh
cnRUaW1lU2V0IGlucHV0LgotICAgIHZpcnR1YWwgYm9vbCBvdmVycmlkZGVuKCkgY29uc3QgeyBy
ZXR1cm4gZmFsc2U7IH0KLQotICAgIC8vIERvZXMgdGhpcyBhbmltYXRpb24vdHJhbnNpdGlvbiBp
bnZvbHZlIHRoZSBnaXZlbiBwcm9wZXJ0eT8KLSAgICB2aXJ0dWFsIGJvb2wgYWZmZWN0c1Byb3Bl
cnR5KENTU1Byb3BlcnR5SUQgLypwcm9wZXJ0eSovKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQot
Ci0gICAgYm9vbCBpc0FuaW1hdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGJv
b2wgYWNjZWxlcmF0ZWRPbmx5KSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGFjY2VsZXJhdGVk
T25seSAmJiAhbV9pc0FjY2VsZXJhdGVkKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIGlmICghYWZmZWN0c1Byb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgICAgICByZXR1cm4gaW5SdW5uaW5nU3RhdGUoKSB8fCBpblBhdXNlZFN0
YXRlKCk7Ci0gICAgfQotCi0gICAgYm9vbCB0cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSBj
b25zdCBvdmVycmlkZSB7IHJldHVybiBtX3RyYW5zZm9ybUZ1bmN0aW9uTGlzdHNNYXRjaDsgfQot
ICAgIGJvb2wgZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCkgY29uc3Qgb3ZlcnJpZGUgeyByZXR1
cm4gbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2g7IH0KLSNpZiBFTkFCTEUoRklMVEVSU19MRVZF
TF8yKQotICAgIGJvb2wgYmFja2Ryb3BGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2goKSBjb25zdCBv
dmVycmlkZSB7IHJldHVybiBtX2JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoOyB9Ci0j
ZW5kaWYKLSAgICBib29sIGNvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoKCkgY29uc3Qgb3Zl
cnJpZGUgeyByZXR1cm4gbV9jb2xvckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaDsgfQotCi0gICAg
Ly8gRnJlZXplIHRoZSBhbmltYXRpb247IHVzZWQgYnkgRHVtcFJlbmRlclRyZWUuCi0gICAgdm9p
ZCBmcmVlemVBdFRpbWUoZG91YmxlIHQpOwotCi0gICAgLy8gUGxheSBhbmQgcGF1c2UgQVBJCi0g
ICAgdm9pZCBwbGF5KCk7Ci0gICAgdm9pZCBwYXVzZSgpOwotICAgIAotICAgIGRvdWJsZSBiZWdp
bkFuaW1hdGlvblVwZGF0ZVRpbWUoKSBjb25zdDsKLSAgICAKLSAgICBkb3VibGUgZ2V0RWxhcHNl
ZFRpbWUoKSBjb25zdDsKLSAgICAvLyBTZXR0aW5nIHRoZSBlbGFwc2VkIHRpbWUgd2lsbCBhZGp1
c3QgdGhlIHN0YXJ0IHRpbWUgYW5kIHBvc3NpYmx5IHBhdXNlIHRpbWUuCi0gICAgdm9pZCBzZXRF
bGFwc2VkVGltZShkb3VibGUpOwotICAgIAotICAgIHZvaWQgc3R5bGVBdmFpbGFibGUoKSAKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCh3YWl0aW5nRm9yU3R5bGVBdmFpbGFibGUoKSk7Ci0gICAgICAg
IHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0ZUlucHV0OjpTdHlsZUF2YWlsYWJsZSwg
LTEpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZpcnR1YWwgdm9pZCBvdmVycmlkZUFuaW1h
dGlvbnMoKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkFuaW1hdGlvbnMo
KSB7IH0KLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiogY29tcG9zaXRlQW5pbWF0aW9uKCkgeyBy
ZXR1cm4gbV9jb21wb3NpdGVBbmltYXRpb247IH0KLQotICAgIC8vIFRoZXNlIGFyZSBjYWxsZWQg
d2hlbiB0aGUgY29ycmVzcG9uZGluZyB0aW1lciBmaXJlcyBzbyBzdWJjbGFzc2VzIGNhbiBkbyBh
bnkgZXh0cmEgd29yawotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSAv
KmVsYXBzZWRUaW1lKi8pIHsgfQotICAgIHZpcnR1YWwgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlv
bihkb3VibGUgLyplbGFwc2VkVGltZSovKSB7IH0KLSAgICB2aXJ0dWFsIHZvaWQgb25BbmltYXRp
b25FbmQoZG91YmxlIC8qZWxhcHNlZFRpbWUqLykgeyB9Ci0gICAgCi0gICAgLy8gdGltZU9mZnNl
dCBpcyBhbiBvZmZzZXQgZnJvbSB0aGUgY3VycmVudCB0aW1lIHdoZW4gdGhlIGFuaW1hdGlvbiBz
aG91bGQgc3RhcnQuIE5lZ2F0aXZlIHZhbHVlcyBhcmUgT0suCi0gICAgLy8gUmV0dXJuIHZhbHVl
IGluZGljYXRlcyB3aGV0aGVyIHRvIGV4cGVjdCBhbiBhc3luY2hyb25vdXMgbm90aWZ5QW5pbWF0
aW9uU3RhcnRlZCgpIGNhbGxiYWNrLgotICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihk
b3VibGUgLyp0aW1lT2Zmc2V0Ki8pIHsgcmV0dXJuIGZhbHNlOyB9Ci0gICAgLy8gdGltZU9mZnNl
dCBpcyB0aGUgdGltZSBhdCB3aGljaCB0aGUgYW5pbWF0aW9uIGlzIGJlaW5nIHBhdXNlZC4KLSAg
ICB2aXJ0dWFsIHZvaWQgcGF1c2VBbmltYXRpb24oZG91YmxlIC8qdGltZU9mZnNldCovKSB7IH0K
LSAgICB2aXJ0dWFsIHZvaWQgZW5kQW5pbWF0aW9uKGJvb2wgLypmaWxsaW5nRm9yd2FyZHMqLyA9
IGZhbHNlKSB7IH0KLQotICAgIHZpcnR1YWwgY29uc3QgUmVuZGVyU3R5bGUmIHVuYW5pbWF0ZWRT
dHlsZSgpIGNvbnN0ID0gMDsKLQotICAgIHZvaWQgZ29JbnRvRW5kaW5nT3JMb29waW5nU3RhdGUo
KTsKLQotICAgIEFuaW1hdGlvblN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9hbmltYXRp
b25TdGF0ZTsgfQotCi0gICAgc3RhdGljIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYyhFbGVtZW50
Kik7Ci0gICAgCi0gICAgdm9pZCBnZXRUaW1lVG9OZXh0RXZlbnQoU2Vjb25kcyYgdGltZSwgYm9v
bCYgaXNMb29waW5nKSBjb25zdDsKLQotICAgIGRvdWJsZSBmcmFjdGlvbmFsVGltZShkb3VibGUg
c2NhbGUsIGRvdWJsZSBlbGFwc2VkVGltZSwgZG91YmxlIG9mZnNldCkgY29uc3Q7Ci0KLSAgICAv
LyBUaGVzZSByZXR1cm4gdHJ1ZSBpZiB3ZSBjYW4gZWFzaWx5IGNvbXB1dGUgYSBib3VuZGluZyBi
b3ggYnkgYXBwbHlpbmcgdGhlIHN0eWxlJ3MgdHJhbnNmb3JtIHRvIHRoZSBib3VuZHMgcmVjdC4K
LSAgICBib29sIGNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QoY29uc3Qg
RmxvYXRSZWN0JiByZW5kZXJlckJveCwgY29uc3QgUmVuZGVyU3R5bGUmLCBMYXlvdXRSZWN0JiBi
b3VuZHMpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4
KGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVyZXJCb3gsIGNvbnN0IFJlbmRlclN0eWxlJiwgTGF5b3V0
UmVjdCYgYm91bmRzKSBjb25zdDsKLQotcHJvdGVjdGVkOgotICAgIGJvb2wgbV9pc0FjY2VsZXJh
dGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoIHsgZmFsc2UgfTsK
LSNpZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIGJvb2wgbV9iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBSZWZQ
dHI8RWxlbWVudD4gbV9lbGVtZW50OwotCi1wcm90ZWN0ZWQ6Ci0gICAgQ29tcG9zaXRlQW5pbWF0
aW9uKiBtX2NvbXBvc2l0ZUFuaW1hdGlvbjsgLy8gSWRlYWxseSB0aGlzIHdvdWxkIGJlIGEgcmVm
ZXJlbmNlLCBidXQgaXQgaGFzIHRvIGJlIGNsZWFyZWQgaWYgYW4gYW5pbWF0aW9uIGlzIGRlc3Ry
b3llZCBpbnNpZGUgYW4gZXZlbnQgY2FsbGJhY2suCi0gICAgUmVmPEFuaW1hdGlvbj4gbV9hbmlt
YXRpb247Ci0KLSAgICBPcHRpb25hbDxkb3VibGU+IG1fc3RhcnRUaW1lOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gbV9wYXVzZVRpbWU7Ci0gICAgZG91YmxlIG1fcmVxdWVzdGVkU3RhcnRUaW1lIHsg
MCB9OwotICAgIE9wdGlvbmFsPGRvdWJsZT4gbV90b3RhbER1cmF0aW9uOwotICAgIE9wdGlvbmFs
PGRvdWJsZT4gbV9uZXh0SXRlcmF0aW9uRHVyYXRpb247Ci0KLSAgICBBbmltYXRpb25TdGF0ZSBt
X2FuaW1hdGlvblN0YXRlIHsgQW5pbWF0aW9uU3RhdGU6Ok5ldyB9OwotICAgIGJvb2wgbV9jb2xv
ckZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCB7IGZhbHNlIH07Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9DU1NB
bmltYXRpb25Db250cm9sbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NT
U0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDJhYzlkYTc4ZDMyNmM1ODQxNTJmMjM5ZjI3ZGU4MzQxMmY2MTc0Li4wMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0
aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsODA1ICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcsIDIwMDgsIDIwMDkgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmli
dXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0
aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAg
aXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVj
dHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHBy
aW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNv
bnRyb2xsZXIuaCIKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLSNpbmNsdWRlICJBbmlt
YXRpb25FdmVudC5oIgotI2luY2x1ZGUgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlBbmltYXRpb24uaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0
eVBhcnNlci5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgotI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkZyYW1lVmlldy5oIgot
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKLSNpbmNsdWRlICJQc2V1ZG9FbGVtZW50LmgiCi0jaW5jbHVk
ZSAiUmVuZGVyVmlldy5oIgotI2luY2x1ZGUgIlRyYW5zaXRpb25FdmVudC5oIgotI2luY2x1ZGUg
IldlYktpdEFuaW1hdGlvbkV2ZW50LmgiCi0jaW5jbHVkZSAiV2ViS2l0VHJhbnNpdGlvbkV2ZW50
LmgiCi0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotLy8gQWxsb3cgYSBsaXR0bGUgbW9yZSB0aGFu
IDYwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gYXQgbGVhc3QgaGl0IHRoYXQgZnJhbWUgcmF0ZS4K
LXN0YXRpYyBjb25zdCBTZWNvbmRzIGFuaW1hdGlvblRpbWVyRGVsYXkgeyAxNV9tcyB9OwotLy8g
QWxsb3cgYSBsaXR0bGUgbW9yZSB0aGFuIDMwZnBzIHRvIG1ha2Ugc3VyZSB3ZSBjYW4gYXQgbGVh
c3QgaGl0IHRoYXQgZnJhbWUgcmF0ZS4KLXN0YXRpYyBjb25zdCBTZWNvbmRzIGFuaW1hdGlvblRp
bWVyVGhyb3R0bGVkRGVsYXkgeyAzMF9tcyB9OwotCi1jbGFzcyBBbmltYXRpb25Qcml2YXRlVXBk
YXRlQmxvY2sgewotcHVibGljOgotICAgIEFuaW1hdGlvblByaXZhdGVVcGRhdGVCbG9jayhDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZSYgYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAg
OiBtX2FuaW1hdGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICB7Ci0gICAg
ICAgIG1fYW5pbWF0aW9uQ29udHJvbGxlci5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAgIH0K
LSAgICAKLSAgICB+QW5pbWF0aW9uUHJpdmF0ZVVwZGF0ZUJsb2NrKCkKLSAgICB7Ci0gICAgICAg
IG1fYW5pbWF0aW9uQ29udHJvbGxlci5lbmRBbmltYXRpb25VcGRhdGUoKTsKLSAgICB9Ci0gICAg
Ci0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIG1fYW5pbWF0aW9uQ29udHJvbGxl
cjsKLX07Ci0KLUNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZShGcmFtZSYgZnJhbWUpCi0gICAgOiBtX2FuaW1hdGlvblRpbWVyKCp0aGlz
LCAmQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvblRpbWVyRmlyZWQpCi0g
ICAgLCBtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCp0aGlzLCAmQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGU6OnVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyRmlyZWQpCi0g
ICAgLCBtX2ZyYW1lKGZyYW1lKQotICAgICwgbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNvdW50KDAp
Ci0gICAgLCBtX3dhaXRpbmdGb3JBc3luY1N0YXJ0Tm90aWZpY2F0aW9uKGZhbHNlKQotICAgICwg
bV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoZmFsc2UpCi17Ci19Ci0KLUNTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp+Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUo
KQotewotICAgIC8vIFdlIG5lZWQgdG8gZXhwbGljaXRseSBjbGVhciB0aGUgY29tcG9zaXRlIGFu
aW1hdGlvbnMgaGVyZSBiZWNhdXNlIHRoZQotICAgIC8vIGRlc3RydWN0b3Igb2YgQ29tcG9zaXRl
QW5pbWF0aW9uIHdpbGwgY2FsbCBtZW1iZXJzIG9mIHRoaXMgY2xhc3MgYmFjay4KLSAgICBtX2Nv
bXBvc2l0ZUFuaW1hdGlvbnMuY2xlYXIoKTsKLX0KLQotQ29tcG9zaXRlQW5pbWF0aW9uJiBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6ZW5zdXJlQ29tcG9zaXRlQW5pbWF0aW9uKEVsZW1l
bnQmIGVsZW1lbnQpCi17Ci0gICAgZWxlbWVudC5zZXRIYXNDU1NBbmltYXRpb24oKTsKLQotICAg
IGF1dG8gcmVzdWx0ID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmVuc3VyZSgmZWxlbWVudCwgWyZd
IHsKLSAgICAgICAgcmV0dXJuIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y3JlYXRlKCp0aGlzKTsKLSAg
ICB9KTsKLQotICAgIGlmIChhbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoJmVsZW1l
bnQuZG9jdW1lbnQoKSkpCi0gICAgICAgIHJlc3VsdC5pdGVyYXRvci0+dmFsdWUtPnN1c3BlbmRB
bmltYXRpb25zKCk7Ci0KLSAgICByZXR1cm4gKnJlc3VsdC5pdGVyYXRvci0+dmFsdWU7Ci19Ci0K
LWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmNsZWFyKEVsZW1lbnQmIGVsZW1l
bnQpCi17Ci0gICAgQVNTRVJUKGVsZW1lbnQuaGFzQ1NTQW5pbWF0aW9uKCkgPT0gbV9jb21wb3Np
dGVBbmltYXRpb25zLmNvbnRhaW5zKCZlbGVtZW50KSk7Ci0KLSAgICBpZiAoIWVsZW1lbnQuaGFz
Q1NTQW5pbWF0aW9uKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICBlbGVtZW50LmNsZWFy
SGFzQ1NTQW5pbWF0aW9uKCk7Ci0KLSAgICBhdXRvIGl0ID0gbV9jb21wb3NpdGVBbmltYXRpb25z
LmZpbmQoJmVsZW1lbnQpOwotICAgIGlmIChpdCA9PSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZW5k
KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIExPRyhBbmltYXRpb25zLCAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUgJXAgY2xlYXI6ICVwIiwgdGhpcywgJmVsZW1lbnQpOwot
Ci0gICAgbV9ldmVudHNUb0Rpc3BhdGNoLnJlbW92ZUFsbE1hdGNoaW5nKFsmXSAoY29uc3QgRXZl
bnRUb0Rpc3BhdGNoJiBpbmZvKSB7Ci0gICAgICAgIHJldHVybiBpbmZvLmVsZW1lbnQucHRyKCkg
PT0gJmVsZW1lbnQ7Ci0gICAgfSk7Ci0KLSAgICBtX2VsZW1lbnRDaGFuZ2VzVG9EaXNwYXRjaC5y
ZW1vdmVBbGxNYXRjaGluZyhbJl0oYXV0byYgY3VycmVudEVsZW1lbnQpIHsKLSAgICAgICAgcmV0
dXJuIGN1cnJlbnRFbGVtZW50LnB0cigpID09ICZlbGVtZW50OwotICAgIH0pOwotICAgIAotICAg
IC8vIFJldHVybiBmYWxzZSBpZiB3ZSBkaWRuJ3QgZG8gYW55dGhpbmcgT1Igd2UgYXJlIHN1c3Bl
bmRlZCAoc28gd2UgZG9uJ3QgdHJ5IHRvCi0gICAgLy8gZG8gYSBpbnZhbGlkYXRlU3R5bGVGb3JT
dWJ0cmVlKCkgd2hlbiBzdXNwZW5kZWQpLgotICAgIC8vIEZJWE1FOiBUaGUgY29kZSBiZWxvdyBk
b2VzIHRoZSBvcHBvc2l0ZSBvZiB3aGF0IHRoZSBjb21tZW50IGFib3ZlIHNheXMgcmVnYXJkaW5n
IHN1c3BlbmRlZCBzdGF0ZS4KLSAgICBhdXRvJiBhbmltYXRpb24gPSAqaXQtPnZhbHVlOwotICAg
IGJvb2wgcmVzdWx0ID0gYW5pbWF0aW9uLmlzU3VzcGVuZGVkKCk7Ci0gICAgYW5pbWF0aW9uLmNs
ZWFyRWxlbWVudCgpOwotCi0gICAgbV9jb21wb3NpdGVBbmltYXRpb25zLnJlbW92ZShpdCk7Ci0K
LSAgICByZXR1cm4gcmVzdWx0OwotfQotCi1PcHRpb25hbDxTZWNvbmRzPiBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRDaGFu
Z2VkLyogPSBEb05vdENhbGxTZXRDaGFuZ2VkKi8pCi17Ci0gICAgQW5pbWF0aW9uUHJpdmF0ZVVw
ZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0aW1l
VG9OZXh0U2VydmljZTsKLSAgICBib29sIGNhbGxlZFNldENoYW5nZWQgPSBmYWxzZTsKLQotICAg
IGZvciAoYXV0byYgY29tcG9zaXRlQW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7
Ci0gICAgICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgYW5pbWF0aW9uID0gKmNvbXBvc2l0ZUFuaW1h
dGlvbi52YWx1ZTsKLSAgICAgICAgaWYgKCFhbmltYXRpb24uaXNTdXNwZW5kZWQoKSAmJiBhbmlt
YXRpb24uaGFzQW5pbWF0aW9ucygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0
ID0gYW5pbWF0aW9uLnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgICAgICAgICBpZiAodCAmJiAo
IXRpbWVUb05leHRTZXJ2aWNlIHx8IHQudmFsdWUoKSA8IHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkpKQotICAgICAgICAgICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gdC52YWx1ZSgpOwotICAg
ICAgICAgICAgaWYgKHRpbWVUb05leHRTZXJ2aWNlICYmIHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkgPT0gMF9zKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxTZXRDaGFuZ2VkICE9IENhbGxT
ZXRDaGFuZ2VkKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gKmNvbXBvc2l0ZUFuaW1hdGlvbi5r
ZXk7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2Fy
ZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICAg
ICAgICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZSgpOwotICAgICAgICAgICAgICAgIGNh
bGxlZFNldENoYW5nZWQgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9Ci0gICAgfQot
Ci0gICAgaWYgKGNhbGxlZFNldENoYW5nZWQpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+
dXBkYXRlU3R5bGVJZk5lZWRlZCgpOwotCi0gICAgcmV0dXJuIHRpbWVUb05leHRTZXJ2aWNlOwot
fQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjp1cGRhdGVBbmltYXRpb25U
aW1lckZvckVsZW1lbnQoRWxlbWVudCYgZWxlbWVudCkKLXsKLSAgICBPcHRpb25hbDxTZWNvbmRz
PiB0aW1lVG9OZXh0U2VydmljZTsKLQotICAgIGNvbnN0IENvbXBvc2l0ZUFuaW1hdGlvbiogY29t
cG9zaXRlQW5pbWF0aW9uID0gbV9jb21wb3NpdGVBbmltYXRpb25zLmdldCgmZWxlbWVudCk7Ci0g
ICAgaWYgKCFjb21wb3NpdGVBbmltYXRpb24tPmlzU3VzcGVuZGVkKCkgJiYgY29tcG9zaXRlQW5p
bWF0aW9uLT5oYXNBbmltYXRpb25zKCkpCi0gICAgICAgIHRpbWVUb05leHRTZXJ2aWNlID0gY29t
cG9zaXRlQW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotCi0gICAgaWYgKCF0aW1lVG9O
ZXh0U2VydmljZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKG1fYW5pbWF0aW9uVGltZXIu
aXNBY3RpdmUoKSAmJiAobV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpIHx8IG1fYW5p
bWF0aW9uVGltZXIubmV4dEZpcmVJbnRlcnZhbCgpIDw9IHRpbWVUb05leHRTZXJ2aWNlLnZhbHVl
KCkpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6dXBkYXRlQW5pbWF0aW9uVGltZXIoU2V0Q2hhbmdlZCBjYWxsU2V0Q2hh
bmdlZC8qID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCovKQotewotICAgIE9wdGlvbmFsPFNlY29uZHM+
IHRpbWVUb05leHRTZXJ2aWNlID0gdXBkYXRlQW5pbWF0aW9ucyhjYWxsU2V0Q2hhbmdlZCk7Ci0K
LSAgICBMT0coQW5pbWF0aW9ucywgInVwZGF0ZUFuaW1hdGlvblRpbWVyOiB0aW1lVG9OZXh0U2Vy
dmljZSBpcyAlLjJmIiwgdGltZVRvTmV4dFNlcnZpY2UudmFsdWVPcihTZWNvbmRzIHsgLTEgfSku
dmFsdWUoKSk7Ci0KLSAgICAvLyBJZiB3ZSBkb24ndCBuZWVkIHNlcnZpY2UsIHdlIHdhbnQgdG8g
bWFrZSBzdXJlIHRoZSB0aW1lciBpcyBubyBsb25nZXIgcnVubmluZwotICAgIGlmICghdGltZVRv
TmV4dFNlcnZpY2UpIHsKLSAgICAgICAgaWYgKG1fYW5pbWF0aW9uVGltZXIuaXNBY3RpdmUoKSkK
LSAgICAgICAgICAgIG1fYW5pbWF0aW9uVGltZXIuc3RvcCgpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gSWYgd2Ugd2FudCBzZXJ2aWNlIGltbWVkaWF0ZWx5LCB3ZSBzdGFydCBh
IHJlcGVhdGluZyB0aW1lciB0byByZWR1Y2UgdGhlIG92ZXJoZWFkIG9mIHN0YXJ0aW5nCi0gICAg
aWYgKCF0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKSB7Ci0gICAgICAgIGF1dG8qIHBhZ2UgPSBt
X2ZyYW1lLnBhZ2UoKTsKLSAgICAgICAgYm9vbCBzaG91bGRUaHJvdHRsZSA9IHBhZ2UgJiYgcGFn
ZS0+aXNMb3dQb3dlck1vZGVFbmFibGVkKCk7Ci0gICAgICAgIFNlY29uZHMgZGVsYXkgPSBzaG91
bGRUaHJvdHRsZSA/IGFuaW1hdGlvblRpbWVyVGhyb3R0bGVkRGVsYXkgOiBhbmltYXRpb25UaW1l
ckRlbGF5OwotCi0gICAgICAgIGlmICghbV9hbmltYXRpb25UaW1lci5pc0FjdGl2ZSgpIHx8IG1f
YW5pbWF0aW9uVGltZXIucmVwZWF0SW50ZXJ2YWwoKSAhPSBkZWxheSkKLSAgICAgICAgICAgIG1f
YW5pbWF0aW9uVGltZXIuc3RhcnRSZXBlYXRpbmcoZGVsYXkpOwotICAgICAgICByZXR1cm47Ci0g
ICAgfQotCi0gICAgLy8gT3RoZXJ3aXNlLCB3ZSB3YW50IHRvIHN0YXJ0IGEgb25lLXNob3QgdGlt
ZXIgc28gd2UgZ2V0IGhlcmUgYWdhaW4KLSAgICBtX2FuaW1hdGlvblRpbWVyLnN0YXJ0T25lU2hv
dCh0aW1lVG9OZXh0U2VydmljZS52YWx1ZSgpKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTo6dXBkYXRlU3R5bGVJZk5lZWRlZERpc3BhdGNoZXJGaXJlZCgpCi17Ci0g
ICAgZmlyZUV2ZW50c0FuZFVwZGF0ZVN0eWxlKCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGU6OmZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpCi17Ci0gICAgLy8gUHJv
dGVjdCB0aGUgZnJhbWUgZnJvbSBnZXR0aW5nIGRlc3Ryb3llZCBpbiB0aGUgZXZlbnQgaGFuZGxl
cgotICAgIFJlZjxGcmFtZT4gcHJvdGVjdG9yKG1fZnJhbWUpOwotCi0gICAgYm9vbCB1cGRhdGVT
dHlsZSA9ICFtX2V2ZW50c1RvRGlzcGF0Y2guaXNFbXB0eSgpIHx8ICFtX2VsZW1lbnRDaGFuZ2Vz
VG9EaXNwYXRjaC5pc0VtcHR5KCk7Ci0KLSAgICAvLyBmaXJlIGFsbCB0aGUgZXZlbnRzCi0gICAg
VmVjdG9yPEV2ZW50VG9EaXNwYXRjaD4gZXZlbnRzVG9EaXNwYXRjaCA9IFdURk1vdmUobV9ldmVu
dHNUb0Rpc3BhdGNoKTsKLSAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzVG9EaXNwYXRjaCkg
ewotICAgICAgICBFbGVtZW50JiBlbGVtZW50ID0gZXZlbnQuZWxlbWVudDsKLSAgICAgICAgaWYg
KGV2ZW50LmV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkudHJhbnNpdGlvbmVuZEV2ZW50KQotICAg
ICAgICAgICAgZWxlbWVudC5kaXNwYXRjaEV2ZW50KFRyYW5zaXRpb25FdmVudDo6Y3JlYXRlKGV2
ZW50LmV2ZW50VHlwZSwgZXZlbnQubmFtZSwgZXZlbnQuZWxhcHNlZFRpbWUsIFBzZXVkb0VsZW1l
bnQ6OnBzZXVkb0VsZW1lbnROYW1lRm9yRXZlbnRzKGVsZW1lbnQucHNldWRvSWQoKSksIFdURjo6
bnVsbG9wdCwgbnVsbHB0cikpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBlbGVtZW50LmRp
c3BhdGNoRXZlbnQoQW5pbWF0aW9uRXZlbnQ6OmNyZWF0ZShldmVudC5ldmVudFR5cGUsIGV2ZW50
Lm5hbWUsIGV2ZW50LmVsYXBzZWRUaW1lLCBQc2V1ZG9FbGVtZW50Ojpwc2V1ZG9FbGVtZW50TmFt
ZUZvckV2ZW50cyhlbGVtZW50LnBzZXVkb0lkKCkpLCBXVEY6Om51bGxvcHQsIG51bGxwdHIpKTsK
LSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIGNoYW5nZSA6IG1fZWxlbWVudENoYW5nZXNUb0Rpc3Bh
dGNoKQotICAgICAgICBjaGFuZ2UtPmludmFsaWRhdGVTdHlsZSgpOwotCi0gICAgbV9lbGVtZW50
Q2hhbmdlc1RvRGlzcGF0Y2guY2xlYXIoKTsKLQotICAgIGlmICh1cGRhdGVTdHlsZSkKLSAgICAg
ICAgbV9mcmFtZS5kb2N1bWVudCgpLT51cGRhdGVTdHlsZUlmTmVlZGVkKCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRlZERp
c3BhdGNoZXIoKQotewotICAgIGlmICghbV91cGRhdGVTdHlsZUlmTmVlZGVkRGlzcGF0Y2hlci5p
c0FjdGl2ZSgpKQotICAgICAgICBtX3VwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyLnN0YXJ0
T25lU2hvdCgwX3MpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjph
ZGRFdmVudFRvRGlzcGF0Y2goRWxlbWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgZXZl
bnRUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBt
X2V2ZW50c1RvRGlzcGF0Y2guYXBwZW5kKHsgZWxlbWVudCwgZXZlbnRUeXBlLCBuYW1lLCBlbGFw
c2VkVGltZSB9KTsKLSAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7Ci19
Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFkZEVsZW1lbnRDaGFuZ2VU
b0Rpc3BhdGNoKEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgbV9lbGVtZW50Q2hhbmdlc1RvRGlz
cGF0Y2guYXBwZW5kKGVsZW1lbnQpOwotICAgIEFTU0VSVChtX2VsZW1lbnRDaGFuZ2VzVG9EaXNw
YXRjaC5sYXN0KCktPmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgPT0gRG9jdW1l
bnQ6Ok5vdEluQmFja0ZvcndhcmRDYWNoZSk7Ci0gICAgc3RhcnRVcGRhdGVTdHlsZUlmTmVlZGVk
RGlzcGF0Y2hlcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjph
bmltYXRpb25GcmFtZUNhbGxiYWNrRmlyZWQoKQotewotICAgIE9wdGlvbmFsPFNlY29uZHM+IHRp
bWVUb05leHRTZXJ2aWNlID0gdXBkYXRlQW5pbWF0aW9ucyhDYWxsU2V0Q2hhbmdlZCk7Ci0KLSAg
ICBpZiAodGltZVRvTmV4dFNlcnZpY2UpCi0gICAgICAgIG1fZnJhbWUuZG9jdW1lbnQoKS0+dmll
dygpLT5zY2hlZHVsZUFuaW1hdGlvbigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjphbmltYXRpb25UaW1lckZpcmVkKCkKLXsKLSAgICAvLyBXZSBuZWVkIHRvIGtl
ZXAgdGhlIGZyYW1lIGFsaXZlLCBzaW5jZSBpdCBvd25zIHVzLgotICAgIFJlZjxGcmFtZT4gcHJv
dGVjdG9yKG1fZnJhbWUpOwotCi0gICAgLy8gVGhlIGFuaW1hdGlvbiB0aW1lciBtaWdodCBmaXJl
IGJlZm9yZSB0aGUgbGF5b3V0IHRpbWVyLCBpbgotICAgIC8vIHdoaWNoIGNhc2Ugd2UgbWlnaHQg
Y3JlYXRlIHNvbWUgYW5pbWF0aW9ucyB3aXRoIGluY29ycmVjdAotICAgIC8vIHZhbHVlcyBpZiB3
ZSBkb24ndCBsYXlvdXQgZmlyc3QuCi0gICAgaWYgKG1fcmVxdWlyZXNMYXlvdXQpIHsKLSAgICAg
ICAgaWYgKGF1dG8qIGZyYW1lVmlldyA9IG1fZnJhbWUuZG9jdW1lbnQoKS0+dmlldygpKSB7Ci0g
ICAgICAgICAgICBpZiAoZnJhbWVWaWV3LT5uZWVkc0xheW91dCgpKQotICAgICAgICAgICAgICAg
IGZyYW1lVmlldy0+Zm9yY2VMYXlvdXQoKTsKLSAgICAgICAgfQotICAgICAgICBtX3JlcXVpcmVz
TGF5b3V0ID0gZmFsc2U7Ci0gICAgfQotCi0gICAgLy8gTWFrZSBzdXJlIGFuaW1hdGlvblVwZGF0
ZVRpbWUgaXMgdXBkYXRlZCwgc28gdGhhdCBpdCBpcyBjdXJyZW50IGV2ZW4gaWYgbm8KLSAgICAv
LyBzdHlsZUNoYW5nZSBoYXMgaGFwcGVuZWQgKGUuZy4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucykK
LSAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgdXBkYXRlQmxvY2soKnRoaXMpOwotCi0g
ICAgLy8gV2hlbiB0aGUgdGltZXIgZmlyZXMsIGFsbCB3ZSBkbyBpcyBjYWxsIHNldENoYW5nZWQg
b24gYWxsIERPTSBub2RlcyB3aXRoIHJ1bm5pbmcgYW5pbWF0aW9ucyBhbmQgdGhlbiBkbyBhbiBp
bW1lZGlhdGUKLSAgICAvLyB1cGRhdGVTdHlsZUlmTmVlZGVkLiBJdCB3aWxsIHRoZW4gY2FsbCBi
YWNrIHRvIHVzIHdpdGggbmV3IGluZm9ybWF0aW9uLgotICAgIHVwZGF0ZUFuaW1hdGlvblRpbWVy
KENhbGxTZXRDaGFuZ2VkKTsKLQotICAgIC8vIEZpcmUgZXZlbnRzIHJpZ2h0IGF3YXksIHRvIGF2
b2lkIGEgZmxhc2ggb2YgdW5hbmltYXRlZCBzdHlsZSBhZnRlciBhbiBhbmltYXRpb24gY29tcGxl
dGVzLCBhbmQgYmVmb3JlCi0gICAgLy8gdGhlICdlbmQnIGV2ZW50IGZpcmVzLgotICAgIGZpcmVF
dmVudHNBbmRVcGRhdGVTdHlsZSgpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQ
cml2YXRlOjppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRl
cmVyLCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIu
ZWxlbWVudCgpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgYXV0byogYW5pbWF0aW9uID0g
bV9jb21wb3NpdGVBbmltYXRpb25zLmdldChyZW5kZXJlci5lbGVtZW50KCkpOwotICAgIGlmICgh
YW5pbWF0aW9uKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGFuaW1hdGlvbi0+
aXNBbmltYXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgZmFsc2UpOwotfQotCi1ib29sIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlOjppc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVu
ZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIsIENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNv
bnN0Ci17Ci0gICAgaWYgKCFyZW5kZXJlci5lbGVtZW50KCkpCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KHJlbmRl
cmVyLmVsZW1lbnQoKSk7Ci0gICAgaWYgKCFhbmltYXRpb24pCi0gICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICByZXR1cm4gYW5pbWF0aW9uLT5pc0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCB0
cnVlKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6dXBkYXRlVGhy
b3R0bGluZ1N0YXRlKCkKLXsKLSAgICB1cGRhdGVBbmltYXRpb25UaW1lcigpOwotCi0gICAgZm9y
IChhdXRvKiBjaGlsZEZyYW1lID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZEZy
YW1lOyBjaGlsZEZyYW1lID0gY2hpbGRGcmFtZS0+dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAg
ICAgIGNoaWxkRnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnVwZGF0ZVRocm90dGxpbmdTdGF0ZSgp
OwotfQotCi1TZWNvbmRzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphbmltYXRpb25J
bnRlcnZhbCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2FuaW1hdGlvblRpbWVyLmlzQWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybiBTZWNvbmRzIHsgSU5GSU5JVFkgfTsKLQotICAgIHJldHVybiBTZWNv
bmRzIHsgbV9hbmltYXRpb25UaW1lci5yZXBlYXRJbnRlcnZhbCgpIH07Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmltYXRpb25zKCkKLXsKLSAgICBp
ZiAoaXNTdXNwZW5kZWQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgc3VzcGVuZEFuaW1hdGlv
bnNGb3JEb2N1bWVudChtX2ZyYW1lLmRvY3VtZW50KCkpOwotCi0gICAgLy8gVHJhdmVyc2Ugc3Vi
ZnJhbWVzCi0gICAgZm9yIChGcmFtZSogY2hpbGQgPSBtX2ZyYW1lLnRyZWUoKS5maXJzdENoaWxk
KCk7IGNoaWxkOyBjaGlsZCA9IGNoaWxkLT50cmVlKCkubmV4dFNpYmxpbmcoKSkKLSAgICAgICAg
Y2hpbGQtPmxlZ2FjeUFuaW1hdGlvbigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0KLSAgICBtX2lz
U3VzcGVuZGVkID0gdHJ1ZTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZTo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgaWYgKCFpc1N1c3BlbmRlZCgpKQotICAgICAg
ICByZXR1cm47Ci0KLSAgICByZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQobV9mcmFtZS5kb2N1
bWVudCgpKTsKLQotICAgIC8vIFRyYXZlcnNlIHN1YmZyYW1lcwotICAgIGZvciAoRnJhbWUqIGNo
aWxkID0gbV9mcmFtZS50cmVlKCkuZmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
dHJlZSgpLm5leHRTaWJsaW5nKCkpCi0gICAgICAgIGNoaWxkLT5sZWdhY3lBbmltYXRpb24oKS5y
ZXN1bWVBbmltYXRpb25zKCk7Ci0KLSAgICBtX2lzU3VzcGVuZGVkID0gZmFsc2U7Ci19Ci0KLWJv
b2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmFuaW1hdGlvbnNBcmVTdXNwZW5kZWRG
b3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgcmV0dXJuIGlzU3VzcGVuZGVk
KCkgfHwgbV9zdXNwZW5kZWREb2N1bWVudHMuY29udGFpbnMoZG9jdW1lbnQpOwotfQotCi12b2lk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpkZXRhY2hGcm9tRG9jdW1lbnQoRG9jdW1l
bnQqIGRvY3VtZW50KQotewotICAgIG1fc3VzcGVuZGVkRG9jdW1lbnRzLnJlbW92ZShkb2N1bWVu
dCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN1c3BlbmRBbmlt
YXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmIChhbmltYXRp
b25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpKQotICAgICAgICByZXR1cm47Ci0K
LSAgICBtX3N1c3BlbmRlZERvY3VtZW50cy5hZGQoZG9jdW1lbnQpOwotCi0gICAgQW5pbWF0aW9u
UHJpdmF0ZVVwZGF0ZUJsb2NrIHVwZGF0ZUJsb2NrKCp0aGlzKTsKLQotICAgIGZvciAoYXV0byYg
YW5pbWF0aW9uIDogbV9jb21wb3NpdGVBbmltYXRpb25zKSB7Ci0gICAgICAgIGlmICgmYW5pbWF0
aW9uLmtleS0+ZG9jdW1lbnQoKSA9PSBkb2N1bWVudCkKLSAgICAgICAgICAgIGFuaW1hdGlvbi52
YWx1ZS0+c3VzcGVuZEFuaW1hdGlvbnMoKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVBbmltYXRpb25U
aW1lcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZXN1bWVB
bmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIGlmICghYW5p
bWF0aW9uc0FyZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KSkKLSAgICAgICAgcmV0dXJu
OwotCi0gICAgZGV0YWNoRnJvbURvY3VtZW50KGRvY3VtZW50KTsKLQotICAgIEFuaW1hdGlvblBy
aXZhdGVVcGRhdGVCbG9jayB1cGRhdGVCbG9jaygqdGhpcyk7Ci0KLSAgICBmb3IgKGF1dG8mIGFu
aW1hdGlvbiA6IG1fY29tcG9zaXRlQW5pbWF0aW9ucykgewotICAgICAgICBpZiAoJmFuaW1hdGlv
bi5rZXktPmRvY3VtZW50KCkgPT0gZG9jdW1lbnQpCi0gICAgICAgICAgICBhbmltYXRpb24udmFs
dWUtPnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB9Ci0KLSAgICB1cGRhdGVBbmltYXRpb25UaW1l
cigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpzdGFydEFuaW1h
dGlvbnNJZk5vdFN1c3BlbmRlZChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0gICAgaWYgKCFhbmlt
YXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoZG9jdW1lbnQpIHx8IGFsbG93c05ld0FuaW1h
dGlvbnNXaGlsZVN1c3BlbmRlZCgpKQotICAgICAgICByZXN1bWVBbmltYXRpb25zRm9yRG9jdW1l
bnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpz
ZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9vbCBhbGxvd2VkKQotewotICAg
IG1fYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkID0gYWxsb3dlZDsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VBbmltYXRpb25BdFRpbWUoRWxl
bWVudCYgZWxlbWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpCi17Ci0gICAg
Q29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24gPSBlbnN1cmVDb21wb3NpdGVB
bmltYXRpb24oZWxlbWVudCk7Ci0gICAgaWYgKGNvbXBvc2l0ZUFuaW1hdGlvbi5wYXVzZUFuaW1h
dGlvbkF0VGltZShuYW1lLCB0KSkgewotICAgICAgICBlbGVtZW50LmludmFsaWRhdGVTdHlsZSgp
OwotICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRjaGVyKCk7Ci0gICAgICAg
IHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lKEVsZW1lbnQm
IGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KQotewotICAgIENvbXBv
c2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uID0gZW5zdXJlQ29tcG9zaXRlQW5pbWF0
aW9uKGVsZW1lbnQpOwotICAgIGlmIChjb21wb3NpdGVBbmltYXRpb24ucGF1c2VUcmFuc2l0aW9u
QXRUaW1lKGNzc1Byb3BlcnR5SUQocHJvcGVydHkpLCB0KSkgewotICAgICAgICBlbGVtZW50Lmlu
dmFsaWRhdGVTdHlsZSgpOwotICAgICAgICBzdGFydFVwZGF0ZVN0eWxlSWZOZWVkZWREaXNwYXRj
aGVyKCk7Ci0gICAgICAgIHJldHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsK
LX0KLQotTW9ub3RvbmljVGltZSBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YmVnaW5B
bmltYXRpb25VcGRhdGVUaW1lKCkKLXsKLSAgICBBU1NFUlQobV9iZWdpbkFuaW1hdGlvblVwZGF0
ZUNvdW50KTsKLSAgICBpZiAoIW1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKQotICAgICAgICBt
X2JlZ2luQW5pbWF0aW9uVXBkYXRlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpOwotCi0gICAg
cmV0dXJuIG1fYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lLnZhbHVlKCk7Ci19Ci0KLXZvaWQgQ1NT
QW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmJlZ2luQW5pbWF0aW9uVXBkYXRlKCkKLXsKLSAg
ICBpZiAoIW1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3VudCkKLSAgICAgICAgbV9iZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUgPSBXVEY6Om51bGxvcHQ7Ci0gICAgKyttX2JlZ2luQW5pbWF0aW9uVXBk
YXRlQ291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OmVuZEFu
aW1hdGlvblVwZGF0ZSgpCi17Ci0gICAgQVNTRVJUKG1fYmVnaW5BbmltYXRpb25VcGRhdGVDb3Vu
dCA+IDApOwotICAgIGlmIChtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQgPT0gMSkgewotICAg
ICAgICBzdHlsZUF2YWlsYWJsZSgpOwotICAgICAgICBpZiAoIW1fd2FpdGluZ0ZvckFzeW5jU3Rh
cnROb3RpZmljYXRpb24pCi0gICAgICAgICAgICBzdGFydFRpbWVSZXNwb25zZShiZWdpbkFuaW1h
dGlvblVwZGF0ZVRpbWUoKSk7Ci0gICAgfQotICAgIC0tbV9iZWdpbkFuaW1hdGlvblVwZGF0ZUNv
dW50OwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZWNlaXZlZFN0
YXJ0VGltZVJlc3BvbnNlKE1vbm90b25pY1RpbWUgdGltZSkKLXsKLSAgICBMT0coQW5pbWF0aW9u
cywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlICVwIHJlY2VpdmVkU3RhcnRUaW1lUmVz
cG9uc2UgJWYiLCB0aGlzLCB0aW1lLnNlY29uZHNTaW5jZUVwb2NoKCkuc2Vjb25kcygpKTsKLQot
ICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKLSAgICBzdGFy
dFRpbWVSZXNwb25zZSh0aW1lKTsKLX0KLQotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBD
U1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6YW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQoRWxl
bWVudCYgZWxlbWVudCkKLXsKLSAgICBhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1h
dGlvbnMuZ2V0KCZlbGVtZW50KTsKLSAgICBpZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJu
IG51bGxwdHI7Ci0KLSAgICBBbmltYXRpb25Qcml2YXRlVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBk
YXRlQmxvY2soKnRoaXMpOwotCi0gICAgYXV0byBhbmltYXRpbmdTdHlsZSA9IGFuaW1hdGlvbi0+
Z2V0QW5pbWF0ZWRTdHlsZSgpOwotICAgIGlmICghYW5pbWF0aW5nU3R5bGUpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotICAgIAotICAgIHJldHVybiBhbmltYXRpbmdTdHlsZTsKLX0KLQotYm9v
bCBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9u
KEVsZW1lbnQmIGVsZW1lbnQsIExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBhdXRv
KiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMuZ2V0KCZlbGVtZW50KTsKLSAgICBp
ZiAoIWFuaW1hdGlvbikKLSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICBpZiAoIWFuaW1hdGlv
bi0+aXNBbmltYXRpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSwgZmFsc2UpKQotICAg
ICAgICByZXR1cm4gdHJ1ZTsKLQotICAgIHJldHVybiBhbmltYXRpb24tPmNvbXB1dGVFeHRlbnRP
ZlRyYW5zZm9ybUFuaW1hdGlvbihib3VuZHMpOwotfQotCi11bnNpZ25lZCBDU1NBbmltYXRpb25D
b250cm9sbGVyUHJpdmF0ZTo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKERvY3VtZW50KiBkb2N1
bWVudCkgY29uc3QKLXsKLSAgICB1bnNpZ25lZCBjb3VudCA9IDA7Ci0gICAgCi0gICAgZm9yIChh
dXRvJiBhbmltYXRpb24gOiBtX2NvbXBvc2l0ZUFuaW1hdGlvbnMpIHsKLSAgICAgICAgaWYgKCZh
bmltYXRpb24ua2V5LT5kb2N1bWVudCgpID09IGRvY3VtZW50KQotICAgICAgICAgICAgY291bnQg
Kz0gYW5pbWF0aW9uLnZhbHVlLT5udW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gY291bnQ7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZh
dGU6OmFkZFRvQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRp
b24pCi17Ci0gICAgbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLnJlbW92
ZSgmYW5pbWF0aW9uKTsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUuYWRkKCZhbmlt
YXRpb24pOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpyZW1vdmVG
cm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShBbmltYXRpb25CYXNlJiBhbmltYXRpb25Ub1Jl
bW92ZSkKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3R5bGUucmVtb3ZlKCZhbmltYXRp
b25Ub1JlbW92ZSk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGU6OnN0
eWxlQXZhaWxhYmxlKCkKLXsKLSAgICAvLyBHbyB0aHJvdWdoIGxpc3Qgb2Ygd2FpdGVycyBhbmQg
c2VuZCB0aGVtIG9uIHRoZWlyIHdheQotICAgIGZvciAoY29uc3QgYXV0byYgd2FpdGluZ0FuaW1h
dGlvbiA6IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZSkKLSAgICAgICAgd2FpdGluZ0FuaW1h
dGlvbi0+c3R5bGVBdmFpbGFibGUoKTsKLQotICAgIG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZS5jbGVhcigpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjphZGRU
b0FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UoQW5pbWF0aW9uQmFzZSYgYW5p
bWF0aW9uLCBib29sIHdpbGxHZXRSZXNwb25zZSkKLXsKLSAgICAvLyBJZiB3aWxsR2V0UmVzcG9u
c2UgaXMgdHJ1ZSwgaXQgbWVhbnMgdGhpcyBhbmltYXRpb24gaXMgYWN0dWFsbHkgd2FpdGluZyBm
b3IgYSByZXNwb25zZQotICAgIC8vICh3aGljaCB3aWxsIGNvbWUgaW4gYXMgYSBjYWxsIHRvIG5v
dGlmeUFuaW1hdGlvblN0YXJ0ZWQoKSkuCi0gICAgLy8gSW4gdGhhdCBjYXNlIHdlIGRvbid0IG5l
ZWQgdG8gYWRkIGl0IHRvIHRoaXMgbGlzdC4gV2UganVzdCBzZXQgYSB3YWl0aW5nRm9yQVJlc3Bv
bnNlIGZsYWcgCi0gICAgLy8gd2hpY2ggc2F5cyB3ZSBhcmUgd2FpdGluZyBmb3IgdGhlIHJlc3Bv
bnNlLiBJZiB3aWxsR2V0UmVzcG9uc2UgaXMgZmFsc2UsIHRoaXMgYW5pbWF0aW9uIAotICAgIC8v
IGlzIG5vdCB3YWl0aW5nIGZvciBhIHJlc3BvbnNlIGZvciBpdHNlbGYsIGJ1dCByYXRoZXIgZm9y
IGEgbm90aWZ5WFhYU3RhcnRlZCgpIGNhbGwgZm9yIAotICAgIC8vIGFub3RoZXIgYW5pbWF0aW9u
IHRvIHdoaWNoIGl0IHdpbGwgc3luYy4KLSAgICAvLwotICAgIC8vIFdoZW4gZW5kQW5pbWF0aW9u
VXBkYXRlKCkgaXMgY2FsbGVkIHdlIGNoZWNrIHRvIHNlZSBpZiB0aGUgd2FpdGluZ0ZvckFSZXNw
b25zZSBmbGFnIGlzCi0gICAgLy8gdHJ1ZS4gSWYgc28sIHdlIGp1c3QgcmV0dXJuIGFuZCB3aWxs
IGRvIG91ciB3b3JrIHdoZW4gdGhlIGZpcnN0IG5vdGlmeVhYWFN0YXJ0ZWQoKSBjYWxsCi0gICAg
Ly8gY29tZXMgaW4uIElmIGl0IGlzIGZhbHNlLCB3ZSB3aWxsIG5vdCBiZSBnZXR0aW5nIGEgbm90
aWZ5WFhYU3RhcnRlZCgpIGNhbGwsIHNvIHdlIHdpbGwKLSAgICAvLyBkbyBvdXIgd29yayByaWdo
dCBhd2F5LiBJbiBib3RoIGNhc2VzIHdlIGNhbGwgdGhlIG9uQW5pbWF0aW9uU3RhcnRSZXNwb25z
ZSgpIG1ldGhvZAotICAgIC8vIG9uIGVhY2ggYW5pbWF0aW9uLiBJbiB0aGUgZmlyc3QgY2FzZSB3
ZSBzZW5kIGluIHRoZSB0aW1lIHdlIGdvdCBmcm9tIG5vdGlmeVhYWFN0YXJ0ZWQoKS4KLSAgICAv
LyBJbiB0aGUgc2Vjb25kIGNhc2UsIHdlIGp1c3QgcGFzcyBpbiB0aGUgYmVnaW5BbmltYXRpb25V
cGRhdGVUaW1lKCkuCi0gICAgLy8KLSAgICAvLyBUaGlzIHdpbGwgc3luY2hyb25pemUgYWxsIHNv
ZnR3YXJlIGFuZCBhY2NlbGVyYXRlZCBhbmltYXRpb25zIHN0YXJ0ZWQgaW4gdGhlIHNhbWUgCi0g
ICAgLy8gdXBkYXRlU3R5bGVJZk5lZWRlZCBjeWNsZS4KLSAgICAvLwotCi0gICAgaWYgKHdpbGxH
ZXRSZXNwb25zZSkKLSAgICAgICAgbV93YWl0aW5nRm9yQXN5bmNTdGFydE5vdGlmaWNhdGlvbiA9
IHRydWU7Ci0KLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3RhcnRUaW1lUmVzcG9uc2UuYWRk
KCZhbmltYXRpb24pOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlOjpy
ZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShBbmltYXRpb25C
YXNlJiBhbmltYXRpb25Ub1JlbW92ZSkKLXsKLSAgICBtX2FuaW1hdGlvbnNXYWl0aW5nRm9yU3Rh
cnRUaW1lUmVzcG9uc2UucmVtb3ZlKCZhbmltYXRpb25Ub1JlbW92ZSk7Ci0gICAgaWYgKG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZS5pc0VtcHR5KCkpCi0gICAgICAgIG1f
d2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsKLX0KLQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTo6c3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGlt
ZSB0aW1lKQotewotICAgIC8vIEdvIHRocm91Z2ggbGlzdCBvZiB3YWl0ZXJzIGFuZCBzZW5kIHRo
ZW0gb24gdGhlaXIgd2F5Ci0KLSAgICBmb3IgKGNvbnN0IGF1dG8mIGFuaW1hdGlvbiA6IG1fYW5p
bWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZSkKLSAgICAgICAgYW5pbWF0aW9uLT5v
bkFuaW1hdGlvblN0YXJ0UmVzcG9uc2UodGltZSk7Ci0gICAgCi0gICAgbV9hbmltYXRpb25zV2Fp
dGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlLmNsZWFyKCk7Ci0gICAgbV93YWl0aW5nRm9yQXN5bmNT
dGFydE5vdGlmaWNhdGlvbiA9IGZhbHNlOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlOjphbmltYXRpb25XaWxsQmVSZW1vdmVkKEFuaW1hdGlvbkJhc2UmIGFuaW1hdGlv
bikKLXsKLSAgICBMT0coQW5pbWF0aW9ucywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRl
ICVwIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQ6ICVwIiwgdGhpcywgJmFuaW1hdGlvbik7Ci0KLSAg
ICByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdHlsZShhbmltYXRpb24pOwotICAgIHJl
bW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGltZVJlc3BvbnNlKGFuaW1hdGlvbik7
Ci0KLSAgICBib29sIGFueUFuaW1hdGlvbnNXYWl0aW5nRm9yQXN5bmNTdGFydCA9IGZhbHNlOwot
ICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9hbmltYXRpb25zV2FpdGluZ0ZvclN0YXJ0VGlt
ZVJlc3BvbnNlKSB7Ci0gICAgICAgIGlmIChhbmltYXRpb24tPndhaXRpbmdGb3JTdGFydFRpbWUo
KSAmJiBhbmltYXRpb24tPmlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICAgICAgYW55QW5pbWF0
aW9uc1dhaXRpbmdGb3JBc3luY1N0YXJ0ID0gdHJ1ZTsKLSAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFhbnlBbmltYXRpb25zV2FpdGluZ0ZvckFzeW5jU3Rh
cnQpCi0gICAgICAgIG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb24gPSBmYWxzZTsK
LX0KLQotQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6Q1NTQW5pbWF0aW9uQ29udHJvbGxlcihGcmFt
ZSYgZnJhbWUpCi0gICAgOiBtX2RhdGEobWFrZVVuaXF1ZTxDU1NBbmltYXRpb25Db250cm9sbGVy
UHJpdmF0ZT4oZnJhbWUpKQotewotfQotCi1DU1NBbmltYXRpb25Db250cm9sbGVyOjp+Q1NTQW5p
bWF0aW9uQ29udHJvbGxlcigpID0gZGVmYXVsdDsKLQotdm9pZCBDU1NBbmltYXRpb25Db250cm9s
bGVyOjpjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmIGVsZW1lbnQpCi17Ci0gICAgaWYgKCFtX2Rh
dGEtPmNsZWFyKGVsZW1lbnQpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoZWxlbWVudC5k
b2N1bWVudCgpLnJlbmRlclRyZWVCZWluZ0Rlc3Ryb3llZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgQVNTRVJUKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBE
b2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICBlbGVtZW50LmludmFsaWRhdGVT
dHlsZSgpOwotfQotCi1BbmltYXRpb25VcGRhdGUgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6dXBk
YXRlQW5pbWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSYgbmV3U3R5
bGUsIGNvbnN0IFJlbmRlclN0eWxlKiBvbGRTdHlsZSkKLXsKLSAgICBib29sIGhhc09ySGFkQW5p
bWF0aW9ucyA9IChvbGRTdHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5pbWF0aW9uc09yVHJhbnNpdGlv
bnMoKSkgfHwgbmV3U3R5bGUuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKTsKLSAgICBpZiAo
IWhhc09ySGFkQW5pbWF0aW9ucykKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChlbGVt
ZW50LmRvY3VtZW50KCkuYmFja0ZvcndhcmRDYWNoZVN0YXRlKCkgIT0gRG9jdW1lbnQ6Ok5vdElu
QmFja0ZvcndhcmRDYWNoZSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIC8vIERvbid0IHJ1
biB0cmFuc2l0aW9ucyB3aGVuIHByaW50aW5nLgotICAgIGlmIChlbGVtZW50LmRvY3VtZW50KCku
cmVuZGVyVmlldygpLT5wcmludGluZygpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgLy8g
RmV0Y2ggb3VyIGN1cnJlbnQgc2V0IG9mIGltcGxpY2l0IGFuaW1hdGlvbnMgZnJvbSBhIGhhc2h0
YWJsZS4gV2UgdGhlbiBjb21wYXJlIHRoZW0KLSAgICAvLyBhZ2FpbnN0IHRoZSBhbmltYXRpb25z
IGluIHRoZSBzdHlsZSBhbmQgbWFrZSBzdXJlIHdlJ3JlIGluIHN5bmMuIElmIGRlc3RpbmF0aW9u
IHZhbHVlcwotICAgIC8vIGhhdmUgY2hhbmdlZCwgd2UgcmVzZXQgdGhlIGFuaW1hdGlvbi4gV2Ug
dGhlbiBkbyBhIGJsZW5kIHRvIGdldCBuZXcgdmFsdWVzIGFuZCB3ZSByZXR1cm4KLSAgICAvLyBh
IG5ldyBzdHlsZS4KLQotICAgIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9u
ID0gbV9kYXRhLT5lbnN1cmVDb21wb3NpdGVBbmltYXRpb24oZWxlbWVudCk7Ci0gICAgYXV0byB1
cGRhdGUgPSBjb21wb3NpdGVBbmltYXRpb24uYW5pbWF0ZShlbGVtZW50LCBvbGRTdHlsZSwgbmV3
U3R5bGUpOwotCi0gICAgYXV0byogcmVuZGVyZXIgPSBlbGVtZW50LnJlbmRlcmVyKCk7Ci0gICAg
aWYgKChyZW5kZXJlciAmJiByZW5kZXJlci0+cGFyZW50KCkpIHx8IG5ld1N0eWxlLmFuaW1hdGlv
bnMoKSB8fCAob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmFuaW1hdGlvbnMoKSkpIHsKLSAgICAgICAg
YXV0byYgZnJhbWVWaWV3ID0gKmVsZW1lbnQuZG9jdW1lbnQoKS52aWV3KCk7Ci0gICAgICAgIGlm
IChjb21wb3NpdGVBbmltYXRpb24uaGFzQW5pbWF0aW9uVGhhdERlcGVuZHNPbkxheW91dCgpKQot
ICAgICAgICAgICAgbV9kYXRhLT5zZXRSZXF1aXJlc0xheW91dCgpOwotICAgICAgICBtX2RhdGEt
PnVwZGF0ZUFuaW1hdGlvblRpbWVyRm9yRWxlbWVudChlbGVtZW50KTsKLSAgICAgICAgZnJhbWVW
aWV3LnNjaGVkdWxlQW5pbWF0aW9uKCk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHVwZGF0ZTsKLX0K
LQotc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBDU1NBbmltYXRpb25Db250cm9sbGVyOjph
bmltYXRlZFN0eWxlRm9yUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYgcmVuZGVyZXIpCi17Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZXN1bHQ7Ci0KLSAgICBpZiAocmVuZGVyZXIu
c3R5bGUoKS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpICYmIHJlbmRlcmVyLmVsZW1lbnQo
KSkKLSAgICAgICAgcmVzdWx0ID0gbV9kYXRhLT5hbmltYXRlZFN0eWxlRm9yRWxlbWVudCgqcmVu
ZGVyZXIuZWxlbWVudCgpKTsKLQotICAgIGlmICghcmVzdWx0KQotICAgICAgICByZXN1bHQgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIuc3R5bGUoKSk7Ci0KLSAgICByZXR1cm4gcmVz
dWx0OwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmNvbXB1dGVFeHRlbnRPZkFu
aW1hdGlvbihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgTGF5b3V0UmVjdCYgYm91bmRzKSBjb25z
dAotewotICAgIGlmICghcmVuZGVyZXIuZWxlbWVudCgpKQotICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCkuaGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkK
LSAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICByZXR1cm4gbV9kYXRhLT5jb21wdXRlRXh0ZW50
T2ZBbmltYXRpb24oKnJlbmRlcmVyLmVsZW1lbnQoKSwgYm91bmRzKTsKLX0KLQotdm9pZCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjpub3RpZnlBbmltYXRpb25TdGFydGVkKFJlbmRlckVsZW1lbnQm
IHJlbmRlcmVyLCBNb25vdG9uaWNUaW1lIHN0YXJ0VGltZSkKLXsKLSAgICBMT0coQW5pbWF0aW9u
cywgIkNTU0FuaW1hdGlvbkNvbnRyb2xsZXIgJXAgbm90aWZ5QW5pbWF0aW9uU3RhcnRlZCBvbiBy
ZW5kZXJlciAlcCwgdGltZT0lZiIsIHRoaXMsICZyZW5kZXJlciwgc3RhcnRUaW1lLnNlY29uZHNT
aW5jZUVwb2NoKCkuc2Vjb25kcygpKTsKLSAgICBVTlVTRURfUEFSQU0ocmVuZGVyZXIpOwotCi0g
ICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAg
bV9kYXRhLT5yZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKHN0YXJ0VGltZSk7Ci19Ci0KLWJvb2wg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6cGF1c2VBbmltYXRpb25BdFRpbWUoRWxlbWVudCYgZWxl
bWVudCwgY29uc3QgQXRvbVN0cmluZyYgbmFtZSwgZG91YmxlIHQpCi17Ci0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0
YS0+cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgbmFtZSwgdCk7Ci19Ci0KLXVuc2lnbmVk
IENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVu
dCogZG9jdW1lbnQpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fZGF0YS0+bnVtYmVyT2ZBY3RpdmVB
bmltYXRpb25zKGRvY3VtZW50KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpw
YXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYgZWxlbWVudCwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eSwgZG91YmxlIHQpCi17Ci0gICAgQW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBk
YXRlQmxvY2sodGhpcyk7Ci0gICAgcmV0dXJuIG1fZGF0YS0+cGF1c2VUcmFuc2l0aW9uQXRUaW1l
KGVsZW1lbnQsIHByb3BlcnR5LCB0KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVy
Ojppc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmIHJlbmRlcmVyLCBD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIGlmICghcmVuZGVyZXIuc3R5bGUo
KS5oYXNBbmltYXRpb25zT3JUcmFuc2l0aW9ucygpKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgcmV0dXJuIG1fZGF0YS0+aXNSdW5uaW5nQW5pbWF0aW9uT25SZW5kZXJlcihyZW5kZXJlciwg
cHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OmlzUnVubmluZ0Fj
Y2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiByZW5kZXJlciwgQ1NT
UHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsKLSAgICBpZiAoIXJlbmRlcmVyLnN0eWxlKCku
aGFzQW5pbWF0aW9uc09yVHJhbnNpdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
IHJldHVybiBtX2RhdGEtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihy
ZW5kZXJlciwgcHJvcGVydHkpOwotfQotCi1ib29sIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6Omlz
U3VzcGVuZGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5pc1N1c3BlbmRlZCgpOwot
fQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zKCkKLXsK
LSAgICBMT0coQW5pbWF0aW9ucywgImNvbnRyb2xsZXIgaXMgc3VzcGVuZGluZyBhbmltYXRpb25z
Iik7Ci0gICAgbV9kYXRhLT5zdXNwZW5kQW5pbWF0aW9ucygpOwotfQotCi12b2lkIENTU0FuaW1h
dGlvbkNvbnRyb2xsZXI6OnJlc3VtZUFuaW1hdGlvbnMoKQotewotICAgIExPRyhBbmltYXRpb25z
LCAiY29udHJvbGxlciBpcyByZXN1bWluZyBhbmltYXRpb25zIik7Ci0gICAgbV9kYXRhLT5yZXN1
bWVBbmltYXRpb25zKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YWxsb3dz
TmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRh
LT5hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKTsKLX0KLQotdm9pZCBDU1NBbmlt
YXRpb25Db250cm9sbGVyOjpzZXRBbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoYm9v
bCBhbGxvd2VkKQotewotICAgIG1fZGF0YS0+c2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3Vz
cGVuZGVkKGFsbG93ZWQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnNlcnZp
Y2VBbmltYXRpb25zKCkKLXsKLSAgICBtX2RhdGEtPmFuaW1hdGlvbkZyYW1lQ2FsbGJhY2tGaXJl
ZCgpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI6OnVwZGF0ZVRocm90dGxpbmdT
dGF0ZSgpCi17Ci0gICAgbV9kYXRhLT51cGRhdGVUaHJvdHRsaW5nU3RhdGUoKTsKLX0KLQotU2Vj
b25kcyBDU1NBbmltYXRpb25Db250cm9sbGVyOjphbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fZGF0YS0+YW5pbWF0aW9uSW50ZXJ2YWwoKTsKLX0KLQotYm9vbCBDU1NB
bmltYXRpb25Db250cm9sbGVyOjphbmltYXRpb25zQXJlU3VzcGVuZGVkRm9yRG9jdW1lbnQoRG9j
dW1lbnQqIGRvY3VtZW50KQotewotICAgIHJldHVybiBtX2RhdGEtPmFuaW1hdGlvbnNBcmVTdXNw
ZW5kZWRGb3JEb2N1bWVudChkb2N1bWVudCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJv
bGxlcjo6ZGV0YWNoRnJvbURvY3VtZW50KERvY3VtZW50KiBkb2N1bWVudCkKLXsKLSAgICByZXR1
cm4gbV9kYXRhLT5kZXRhY2hGcm9tRG9jdW1lbnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0Fu
aW1hdGlvbkNvbnRyb2xsZXI6OnN1c3BlbmRBbmltYXRpb25zRm9yRG9jdW1lbnQoRG9jdW1lbnQq
IGRvY3VtZW50KQotewotICAgIExPRyhBbmltYXRpb25zLCAic3VzcGVuZGluZyBhbmltYXRpb25z
IGZvciBkb2N1bWVudCAlcCIsIGRvY3VtZW50KTsKLSAgICBtX2RhdGEtPnN1c3BlbmRBbmltYXRp
b25zRm9yRG9jdW1lbnQoZG9jdW1lbnQpOwotfQotCi12b2lkIENTU0FuaW1hdGlvbkNvbnRyb2xs
ZXI6OnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChEb2N1bWVudCogZG9jdW1lbnQpCi17Ci0g
ICAgTE9HKEFuaW1hdGlvbnMsICJyZXN1bWluZyBhbmltYXRpb25zIGZvciBkb2N1bWVudCAlcCIs
IGRvY3VtZW50KTsKLSAgICBBbmltYXRpb25VcGRhdGVCbG9jayBhbmltYXRpb25VcGRhdGVCbG9j
ayh0aGlzKTsKLSAgICBtX2RhdGEtPnJlc3VtZUFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVu
dCk7Ci19Ci0KLXZvaWQgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3RhcnRBbmltYXRpb25zSWZO
b3RTdXNwZW5kZWQoRG9jdW1lbnQqIGRvY3VtZW50KQotewotICAgIExPRyhBbmltYXRpb25zLCAi
YW5pbWF0aW9ucyBtYXkgc3RhcnQgZm9yIGRvY3VtZW50ICVwIiwgZG9jdW1lbnQpOwotCi0gICAg
QW5pbWF0aW9uVXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2sodGhpcyk7Ci0gICAgbV9k
YXRhLT5zdGFydEFuaW1hdGlvbnNJZk5vdFN1c3BlbmRlZChkb2N1bWVudCk7Ci19Ci0KLXZvaWQg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6YmVnaW5BbmltYXRpb25VcGRhdGUoKQotewotICAgIG1f
ZGF0YS0+YmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLX0KLQotdm9pZCBDU1NBbmltYXRpb25Db250
cm9sbGVyOjplbmRBbmltYXRpb25VcGRhdGUoKQotewotICAgIG1fZGF0YS0+ZW5kQW5pbWF0aW9u
VXBkYXRlKCk7Ci19Ci0KLWJvb2wgQ1NTQW5pbWF0aW9uQ29udHJvbGxlcjo6c3VwcG9ydHNBY2Nl
bGVyYXRlZEFuaW1hdGlvbk9mUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsKLSAg
ICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2Vs
ZXJhdGVkKHByb3BlcnR5KTsKLX0KLQotYm9vbCBDU1NBbmltYXRpb25Db250cm9sbGVyOjpoYXNB
bmltYXRpb25zKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9kYXRhLT5oYXNBbmltYXRpb25zKCk7
Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BhZ2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggZWNkNjA1ODQ1Mzk4YWE4ZTc1YTlhNTI2NWUwMGVmNjRkNjIyMjgxMC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wYWdlL2FuaW1hdGlvbi9DU1NBbmltYXRpb25Db250cm9sbGVyLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxMjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIK
LSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiRWxlbWVudC5oIgotI2lu
Y2x1ZGUgIlJlbmRlclN0eWxlLmgiCi0jaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KLQotbmFtZXNw
YWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZTsKLWNs
YXNzIERvY3VtZW50OwotY2xhc3MgRnJhbWU7Ci1jbGFzcyBMYXlvdXRSZWN0OwotY2xhc3MgUmVu
ZGVyRWxlbWVudDsKLQotc3RydWN0IEFuaW1hdGlvblVwZGF0ZSB7Ci0gICAgc3RkOjp1bmlxdWVf
cHRyPFJlbmRlclN0eWxlPiBzdHlsZTsKLSAgICBPcHRpb25TZXQ8QW5pbWF0aW9uSW1wYWN0PiBp
bXBhY3Q7Ci0KLX07Ci0KLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXIgewotICAgIFdURl9N
QUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IENTU0FuaW1hdGlvbkNv
bnRyb2xsZXIoRnJhbWUmKTsKLSAgICB+Q1NTQW5pbWF0aW9uQ29udHJvbGxlcigpOwotCi0gICAg
dm9pZCBjYW5jZWxBbmltYXRpb25zKEVsZW1lbnQmKTsKLSAgICBBbmltYXRpb25VcGRhdGUgdXBk
YXRlQW5pbWF0aW9ucyhFbGVtZW50JiwgY29uc3QgUmVuZGVyU3R5bGUmIG5ld1N0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSogb2xkU3R5bGUpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHls
ZT4gYW5pbWF0ZWRTdHlsZUZvclJlbmRlcmVyKFJlbmRlckVsZW1lbnQmKTsKLQotICAgIC8vIElm
IHBvc3NpYmxlLCBjb21wdXRlIHRoZSB2aXN1YWwgZXh0ZW50IG9mIGFueSB0cmFuc2Zvcm0gYW5p
bWF0aW9uIG9uIHRoZSBnaXZlbiByZW5kZXJlcgotICAgIC8vIHVzaW5nIHRoZSBnaXZlbiByZWN0
LCByZXR1cm5pbmcgdGhlIHJlc3VsdCBpbiB0aGUgcmVjdC4gUmV0dXJuIGZhbHNlIGlmIHRoZXJl
IGlzIHNvbWUKLSAgICAvLyB0cmFuc2Zvcm0gYW5pbWF0aW9uIGJ1dCB3ZSB3ZXJlIHVuYWJsZSB0
byBjaGVhcGx5IGNvbXB1dGUgaXRzIGFmZmVjdCBvbiB0aGUgZXh0ZW50LgotICAgIGJvb2wgY29t
cHV0ZUV4dGVudE9mQW5pbWF0aW9uKFJlbmRlckVsZW1lbnQmLCBMYXlvdXRSZWN0JikgY29uc3Q7
Ci0KLSAgICAvLyBUaGlzIGlzIGNhbGxlZCB3aGVuIGFuIGFjY2VsZXJhdGVkIGFuaW1hdGlvbiBv
ciB0cmFuc2l0aW9uIGhhcyBhY3R1YWxseSBzdGFydGVkIHRvIGFuaW1hdGUuCi0gICAgdm9pZCBu
b3RpZnlBbmltYXRpb25TdGFydGVkKFJlbmRlckVsZW1lbnQmLCBNb25vdG9uaWNUaW1lIHN0YXJ0
VGltZSk7Ci0KLSAgICBXRUJDT1JFX0VYUE9SVCBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKEVs
ZW1lbnQmLCBjb25zdCBBdG9tU3RyaW5nJiBuYW1lLCBkb3VibGUgdCk7IC8vIFRvIGJlIHVzZWQg
b25seSBmb3IgdGVzdGluZwotICAgIFdFQkNPUkVfRVhQT1JUIGJvb2wgcGF1c2VUcmFuc2l0aW9u
QXRUaW1lKEVsZW1lbnQmLCBjb25zdCBTdHJpbmcmIHByb3BlcnR5LCBkb3VibGUgdCk7IC8vIFRv
IGJlIHVzZWQgb25seSBmb3IgdGVzdGluZwotICAgIFdFQkNPUkVfRVhQT1JUIHVuc2lnbmVkIG51
bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhEb2N1bWVudCopIGNvbnN0OyAvLyBUbyBiZSB1c2VkIG9u
bHkgZm9yIHRlc3RpbmcKLSAgICAKLSAgICAvLyAiUnVubmluZyIgaGVyZSBtZWFucyB0aGUgYW5p
bWF0aW9uIGlzIHJ1bm5pbmcgb3IgcGF1c2VkLgotICAgIGJvb2wgaXNSdW5uaW5nQW5pbWF0aW9u
T25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0gICAgYm9v
bCBpc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIoUmVuZGVyRWxlbWVudCYs
IENTU1Byb3BlcnR5SUQpIGNvbnN0OwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBpc1N1c3Bl
bmRlZCgpIGNvbnN0OwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMo
KTsKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICB2b2lk
IHNlcnZpY2VBbmltYXRpb25zKCk7Ci0KLSAgICB2b2lkIHVwZGF0ZVRocm90dGxpbmdTdGF0ZSgp
OwotICAgIFdFQkNPUkVfRVhQT1JUIFNlY29uZHMgYW5pbWF0aW9uSW50ZXJ2YWwoKSBjb25zdDsK
LQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChE
b2N1bWVudCopOwotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgcmVzdW1lQW5pbWF0aW9uc0ZvckRv
Y3VtZW50KERvY3VtZW50Kik7Ci0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbmltYXRpb25zQXJl
U3VzcGVuZGVkRm9yRG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIGRldGFjaEZyb21Eb2N1
bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5kZWQo
RG9jdW1lbnQqKTsKLQotICAgIHZvaWQgYmVnaW5BbmltYXRpb25VcGRhdGUoKTsKLSAgICB2b2lk
IGVuZEFuaW1hdGlvblVwZGF0ZSgpOwotCi0gICAgV0VCQ09SRV9FWFBPUlQgYm9vbCBhbGxvd3NO
ZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBjb25zdDsKLSAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHNldEFsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZChib29sKTsKLSAgICAKLSAg
ICBzdGF0aWMgYm9vbCBzdXBwb3J0c0FjY2VsZXJhdGVkQW5pbWF0aW9uT2ZQcm9wZXJ0eShDU1NQ
cm9wZXJ0eUlEKTsKLQotICAgIGJvb2wgaGFzQW5pbWF0aW9ucygpIGNvbnN0OwotCi1wcml2YXRl
OgotICAgIGNvbnN0IHN0ZDo6dW5pcXVlX3B0cjxDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0
ZT4gbV9kYXRhOwotfTsKLQotY2xhc3MgQW5pbWF0aW9uVXBkYXRlQmxvY2sgewotcHVibGljOgot
ICAgIEFuaW1hdGlvblVwZGF0ZUJsb2NrKENTU0FuaW1hdGlvbkNvbnRyb2xsZXIqIGFuaW1hdGlv
bkNvbnRyb2xsZXIpCi0gICAgICAgIDogbV9hbmltYXRpb25Db250cm9sbGVyKGFuaW1hdGlvbkNv
bnRyb2xsZXIpCi0gICAgewotICAgICAgICBpZiAobV9hbmltYXRpb25Db250cm9sbGVyKQotICAg
ICAgICAgICAgbV9hbmltYXRpb25Db250cm9sbGVyLT5iZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwot
ICAgIH0KLSAgICAKLSAgICB+QW5pbWF0aW9uVXBkYXRlQmxvY2soKQotICAgIHsKLSAgICAgICAg
aWYgKG1fYW5pbWF0aW9uQ29udHJvbGxlcikKLSAgICAgICAgICAgIG1fYW5pbWF0aW9uQ29udHJv
bGxlci0+ZW5kQW5pbWF0aW9uVXBkYXRlKCk7Ci0gICAgfQotICAgIAotICAgIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXIqIG1fYW5pbWF0aW9uQ29udHJvbGxlcjsKLX07Ci0KLX0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0NTU0Fu
aW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9DU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCBkMzIwMzc3ZGVjYzljNTM0ZGVlYjdiNGU5NWNlMGVkMmQ4NWFlZGIxLi4wMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bh
Z2UvYW5pbWF0aW9uL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXJQcml2YXRlLmgKKysrIC9kZXYvbnVs
bApAQCAtMSwxNTEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAwOSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKgotICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVy
IHRoZSBuYW1lIG9mIEFwcGxlIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICog
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMKLSAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNF
LCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORAotICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KLSAqLwotCi0jcHJhZ21hIG9uY2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIK
LSNpbmNsdWRlICJUaW1lci5oIgotI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+Ci0jaW5jbHVkZSA8
d3RmL0hhc2hTZXQuaD4KLSNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotY2xhc3MgQ29tcG9zaXRlQW5pbWF0aW9uOwotY2xhc3MgRG9jdW1lbnQ7Ci1jbGFz
cyBGcmFtZTsKLQotZW51bSBTZXRDaGFuZ2VkIHsgRG9Ob3RDYWxsU2V0Q2hhbmdlZCwgQ2FsbFNl
dENoYW5nZWQgfTsKLQotY2xhc3MgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUgewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIGV4cGxpY2l0IENTU0FuaW1h
dGlvbkNvbnRyb2xsZXJQcml2YXRlKEZyYW1lJik7Ci0gICAgfkNTU0FuaW1hdGlvbkNvbnRyb2xs
ZXJQcml2YXRlKCk7Ci0KLSAgICAvLyBSZXR1cm5zIHRoZSB0aW1lIHVudGlsIHRoZSBuZXh0IGFu
aW1hdGlvbiBuZWVkcyB0byBiZSBzZXJ2aWNlZCwgb3IgLTEgaWYgdGhlcmUgYXJlIG5vbmUuCi0g
ICAgT3B0aW9uYWw8U2Vjb25kcz4gdXBkYXRlQW5pbWF0aW9ucyhTZXRDaGFuZ2VkIGNhbGxTZXRD
aGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7Ci0gICAgdm9pZCB1cGRhdGVBbmltYXRpb25U
aW1lcihTZXRDaGFuZ2VkIGNhbGxTZXRDaGFuZ2VkID0gRG9Ob3RDYWxsU2V0Q2hhbmdlZCk7Ci0K
LSAgICBDb21wb3NpdGVBbmltYXRpb24mIGVuc3VyZUNvbXBvc2l0ZUFuaW1hdGlvbihFbGVtZW50
Jik7Ci0gICAgYm9vbCBjbGVhcihFbGVtZW50Jik7Ci0KLSAgICB2b2lkIHVwZGF0ZVN0eWxlSWZO
ZWVkZWREaXNwYXRjaGVyRmlyZWQoKTsKLSAgICB2b2lkIHN0YXJ0VXBkYXRlU3R5bGVJZk5lZWRl
ZERpc3BhdGNoZXIoKTsKLSAgICB2b2lkIGFkZEV2ZW50VG9EaXNwYXRjaChFbGVtZW50JiwgY29u
c3QgQXRvbVN0cmluZyYgZXZlbnRUeXBlLCBjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSBlbGFw
c2VkVGltZSk7Ci0gICAgdm9pZCBhZGRFbGVtZW50Q2hhbmdlVG9EaXNwYXRjaChFbGVtZW50Jik7
Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvbnMoKSBjb25zdCB7IHJldHVybiAhbV9jb21wb3NpdGVB
bmltYXRpb25zLmlzRW1wdHkoKTsgfQotCi0gICAgYm9vbCBpc1N1c3BlbmRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNTdXNwZW5kZWQ7IH0KLSAgICB2b2lkIHN1c3BlbmRBbmltYXRpb25zKCk7Ci0g
ICAgdm9pZCByZXN1bWVBbmltYXRpb25zKCk7Ci0gICAgdm9pZCBhbmltYXRpb25GcmFtZUNhbGxi
YWNrRmlyZWQoKTsKLQotICAgIHZvaWQgdXBkYXRlVGhyb3R0bGluZ1N0YXRlKCk7Ci0gICAgU2Vj
b25kcyBhbmltYXRpb25JbnRlcnZhbCgpIGNvbnN0OwotCi0gICAgdm9pZCBzdXNwZW5kQW5pbWF0
aW9uc0ZvckRvY3VtZW50KERvY3VtZW50Kik7Ci0gICAgdm9pZCByZXN1bWVBbmltYXRpb25zRm9y
RG9jdW1lbnQoRG9jdW1lbnQqKTsKLSAgICBib29sIGFuaW1hdGlvbnNBcmVTdXNwZW5kZWRGb3JE
b2N1bWVudChEb2N1bWVudCopOwotICAgIHZvaWQgc3RhcnRBbmltYXRpb25zSWZOb3RTdXNwZW5k
ZWQoRG9jdW1lbnQqKTsKLSAgICB2b2lkIGRldGFjaEZyb21Eb2N1bWVudChEb2N1bWVudCopOwot
Ci0gICAgYm9vbCBpc1J1bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKFJlbmRlckVsZW1lbnQmLCBD
U1NQcm9wZXJ0eUlEKSBjb25zdDsKLSAgICBib29sIGlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0
aW9uT25SZW5kZXJlcihSZW5kZXJFbGVtZW50JiwgQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0KLSAg
ICBib29sIHBhdXNlQW5pbWF0aW9uQXRUaW1lKEVsZW1lbnQmLCBjb25zdCBBdG9tU3RyaW5nJiBu
YW1lLCBkb3VibGUgdCk7Ci0gICAgYm9vbCBwYXVzZVRyYW5zaXRpb25BdFRpbWUoRWxlbWVudCYs
IGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSB0KTsKLSAgICB1bnNpZ25lZCBudW1iZXJP
ZkFjdGl2ZUFuaW1hdGlvbnMoRG9jdW1lbnQqKSBjb25zdDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0
cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZUZvckVsZW1lbnQoRWxlbWVudCYpOwotCi0gICAg
Ym9vbCBjb21wdXRlRXh0ZW50T2ZBbmltYXRpb24oRWxlbWVudCYsIExheW91dFJlY3QmKSBjb25z
dDsKLQotICAgIE1vbm90b25pY1RpbWUgYmVnaW5BbmltYXRpb25VcGRhdGVUaW1lKCk7Ci0gICAg
Ci0gICAgdm9pZCBiZWdpbkFuaW1hdGlvblVwZGF0ZSgpOwotICAgIHZvaWQgZW5kQW5pbWF0aW9u
VXBkYXRlKCk7Ci0gICAgdm9pZCByZWNlaXZlZFN0YXJ0VGltZVJlc3BvbnNlKE1vbm90b25pY1Rp
bWUpOwotICAgIAotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxlKEFuaW1h
dGlvbkJhc2UmKTsKLSAgICB2b2lkIHJlbW92ZUZyb21BbmltYXRpb25zV2FpdGluZ0ZvclN0eWxl
KEFuaW1hdGlvbkJhc2UmKTsKLQotICAgIHZvaWQgYWRkVG9BbmltYXRpb25zV2FpdGluZ0ZvclN0
YXJ0VGltZVJlc3BvbnNlKEFuaW1hdGlvbkJhc2UmLCBib29sIHdpbGxHZXRSZXNwb25zZSk7Ci0g
ICAgdm9pZCByZW1vdmVGcm9tQW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNwb25zZShB
bmltYXRpb25CYXNlJik7Ci0KLSAgICB2b2lkIGFuaW1hdGlvbldpbGxCZVJlbW92ZWQoQW5pbWF0
aW9uQmFzZSYpOwotCi0gICAgdm9pZCB1cGRhdGVBbmltYXRpb25UaW1lckZvckVsZW1lbnQoRWxl
bWVudCYpOwotCi0gICAgYm9vbCBhbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQoKSBj
b25zdCB7IHJldHVybiBtX2FsbG93c05ld0FuaW1hdGlvbnNXaGlsZVN1c3BlbmRlZDsgfQotICAg
IHZvaWQgc2V0QWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKGJvb2wpOwotCi0gICAg
dm9pZCBzZXRSZXF1aXJlc0xheW91dCgpIHsgbV9yZXF1aXJlc0xheW91dCA9IHRydWU7IH0KLQot
cHJpdmF0ZToKLSAgICB2b2lkIGFuaW1hdGlvblRpbWVyRmlyZWQoKTsKLQotICAgIHZvaWQgc3R5
bGVBdmFpbGFibGUoKTsKLSAgICB2b2lkIGZpcmVFdmVudHNBbmRVcGRhdGVTdHlsZSgpOwotICAg
IHZvaWQgc3RhcnRUaW1lUmVzcG9uc2UoTW9ub3RvbmljVGltZSk7Ci0KLSAgICBIYXNoTWFwPFJl
ZlB0cjxFbGVtZW50PiwgUmVmUHRyPENvbXBvc2l0ZUFuaW1hdGlvbj4+IG1fY29tcG9zaXRlQW5p
bWF0aW9uczsKLSAgICBUaW1lciBtX2FuaW1hdGlvblRpbWVyOwotICAgIFRpbWVyIG1fdXBkYXRl
U3R5bGVJZk5lZWRlZERpc3BhdGNoZXI7Ci0gICAgRnJhbWUmIG1fZnJhbWU7Ci0KLSAgICBzdHJ1
Y3QgRXZlbnRUb0Rpc3BhdGNoIHsKLSAgICAgICAgUmVmPEVsZW1lbnQ+IGVsZW1lbnQ7Ci0gICAg
ICAgIEF0b21TdHJpbmcgZXZlbnRUeXBlOwotICAgICAgICBTdHJpbmcgbmFtZTsKLSAgICAgICAg
ZG91YmxlIGVsYXBzZWRUaW1lOwotICAgIH07Ci0gICAgVmVjdG9yPEV2ZW50VG9EaXNwYXRjaD4g
bV9ldmVudHNUb0Rpc3BhdGNoOwotICAgIFZlY3RvcjxSZWY8RWxlbWVudD4+IG1fZWxlbWVudENo
YW5nZXNUb0Rpc3BhdGNoOwotICAgIEhhc2hTZXQ8RG9jdW1lbnQqPiBtX3N1c3BlbmRlZERvY3Vt
ZW50czsKLQotICAgIE9wdGlvbmFsPE1vbm90b25pY1RpbWU+IG1fYmVnaW5BbmltYXRpb25VcGRh
dGVUaW1lOwotCi0gICAgdXNpbmcgQW5pbWF0aW9uc1NldCA9IEhhc2hTZXQ8UmVmUHRyPEFuaW1h
dGlvbkJhc2U+PjsKLSAgICBBbmltYXRpb25zU2V0IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdHls
ZTsKLSAgICBBbmltYXRpb25zU2V0IG1fYW5pbWF0aW9uc1dhaXRpbmdGb3JTdGFydFRpbWVSZXNw
b25zZTsKLQotICAgIGludCBtX2JlZ2luQW5pbWF0aW9uVXBkYXRlQ291bnQ7Ci0KLSAgICBib29s
IG1fd2FpdGluZ0ZvckFzeW5jU3RhcnROb3RpZmljYXRpb247Ci0gICAgYm9vbCBtX2lzU3VzcGVu
ZGVkIHsgZmFsc2UgfTsKLSAgICBib29sIG1fcmVxdWlyZXNMYXlvdXQgeyBmYWxzZSB9OwotCi0g
ICAgLy8gVXNlZCB0byBmbGFnIHdoZXRoZXIgd2Ugc2hvdWxkIHJldmVydCB0byBwcmV2aW91cyBi
dWdneQotICAgIC8vIGJlaGF2aW9yIG9mIGFsbG93aW5nIG5ldyB0cmFuc2l0aW9ucyBhbmQgYW5p
bWF0aW9ucyB0bwotICAgIC8vIHJ1biBldmVuIHdoZW4gdGhpcyBvYmplY3QgaXMgc3VzcGVuZGVk
LgotICAgIGJvb2wgbV9hbGxvd3NOZXdBbmltYXRpb25zV2hpbGVTdXNwZW5kZWQ7Ci19OwotCi19
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDFiZTc1OWIwODE2MDliZjUzMzM0MGQzMGEwMjYxNDczNzY1MDUwMDUuLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vQ1NTUHJvcGVydHlBbmltYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEs
MTg3MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3LCAyMDA4LCAyMDA5LCAyMDEz
LCAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqIENvcHlyaWdodCAoQykg
MjAxMiwgMjAxMyBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAx
LiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUg
SW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMg
bWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAg
ICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1p
c3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElU
UyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJ
VFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwot
ICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkg
VEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNs
dWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotCi0jaW5j
bHVkZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTQ3Jvc3Nm
YWRlVmFsdWUuaCIKLSNpbmNsdWRlICJDU1NGaWx0ZXJJbWFnZVZhbHVlLmgiCi0jaW5jbHVkZSAi
Q1NTSW1hZ2VHZW5lcmF0b3JWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU0ltYWdlVmFsdWUuaCIKLSNp
bmNsdWRlICJDU1NQcmltaXRpdmVWYWx1ZS5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eU5hbWVzLmgiCi0jaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDYWxjdWxhdGlvblZhbHVlLmgiCi0jaW5jbHVkZSAiQ2xp
cFBhdGhPcGVyYXRpb24uaCIKLSNpbmNsdWRlICJDb2xvckJsZW5kaW5nLmgiCi0jaW5jbHVkZSAi
RmxvYXRDb252ZXJzaW9uLmgiCi0jaW5jbHVkZSAiRm9udENhc2NhZGUuaCIKLSNpbmNsdWRlICJG
b250U2VsZWN0aW9uQWxnb3JpdGhtLmgiCi0jaW5jbHVkZSAiRm9udFRhZ2dlZFNldHRpbmdzLmgi
Ci0jaW5jbHVkZSAiR2FwTGVuZ3RoLmgiCi0jaW5jbHVkZSAiSWRlbnRpdHlUcmFuc2Zvcm1PcGVy
YXRpb24uaCIKLSNpbmNsdWRlICJMb2dnaW5nLmgiCi0jaW5jbHVkZSAiTWF0cml4M0RUcmFuc2Zv
cm1PcGVyYXRpb24uaCIKLSNpbmNsdWRlICJNYXRyaXhUcmFuc2Zvcm1PcGVyYXRpb24uaCIKLSNp
bmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2luY2x1ZGUg
IlN0eWxlQ2FjaGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJTdHlsZUdlbmVyYXRlZEltYWdlLmgiCi0j
aW5jbHVkZSAiU3R5bGVQcm9wZXJ0eVNob3J0aGFuZC5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2
ZXIuaCIKLSNpbmNsdWRlIDxhbGdvcml0aG0+Ci0jaW5jbHVkZSA8bWVtb3J5PgotI2luY2x1ZGUg
PHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL05ldmVyRGVzdHJveWVkLmg+Ci0jaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+Ci0jaW5jbHVkZSA8d3RmL1BvaW50ZXJDb21wYXJpc29u
Lmg+Ci0jaW5jbHVkZSA8d3RmL1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9UZXh0
U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotc3RhdGljIGlubGluZSBpbnQgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBpbnQgZnJvbSwgaW50IHRv
LCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVz
cyk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgZG91YmxlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0
eUJsZW5kaW5nQ2xpZW50KiwgZG91YmxlIGZyb20sIGRvdWJsZSB0bywgZG91YmxlIHByb2dyZXNz
KQotewotICAgIHJldHVybiBibGVuZChmcm9tLCB0bywgcHJvZ3Jlc3MpOwotfQotCi1zdGF0aWMg
aW5saW5lIGZsb2F0IGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50Kiwg
ZmxvYXQgZnJvbSwgZmxvYXQgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gbmFy
cm93UHJlY2lzaW9uVG9GbG9hdChmcm9tICsgKHRvIC0gZnJvbSkgKiBwcm9ncmVzcyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgQ29sb3IgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqLCBjb25zdCBDb2xvciYgZnJvbSwgY29uc3QgQ29sb3ImIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0YXRp
YyBpbmxpbmUgTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgTGVuZ3RoJiBmcm9tLCBjb25zdCBMZW5ndGgmIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Ci17Ci0gICAgcmV0dXJuIGJsZW5kKGZyb20sIHRvLCBwcm9ncmVzcyk7Ci19Ci0KLXN0YXRpYyBp
bmxpbmUgR2FwTGVuZ3RoIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50
KiwgY29uc3QgR2FwTGVuZ3RoJiBmcm9tLCBjb25zdCBHYXBMZW5ndGgmIHRvLCBkb3VibGUgcHJv
Z3Jlc3MpCi17Ci0gICAgcmV0dXJuIChmcm9tLmlzTm9ybWFsKCkgfHwgdG8uaXNOb3JtYWwoKSkg
PyB0byA6IGJsZW5kKGZyb20ubGVuZ3RoKCksIHRvLmxlbmd0aCgpLCBwcm9ncmVzcyk7Ci19Ci0K
LXN0YXRpYyBpbmxpbmUgTGVuZ3RoU2l6ZSBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCogYW5pbSwgY29uc3QgTGVuZ3RoU2l6ZSYgZnJvbSwgY29uc3QgTGVuZ3RoU2l6
ZSYgdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4geyBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS53aWR0aCwgdG8ud2lkdGgsIHByb2dyZXNzKSwgYmxlbmRGdW5jKGFuaW0sIGZyb20uaGVp
Z2h0LCB0by5oZWlnaHQsIHByb2dyZXNzKSB9OwotfQotCi1zdGF0aWMgaW5saW5lIFNoYWRvd1N0
eWxlIGJsZW5kRnVuYyhjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBTaGFk
b3dTdHlsZSBmcm9tLCBTaGFkb3dTdHlsZSB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIGlm
IChmcm9tID09IHRvKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBkb3VibGUgZnJvbVZhbCA9
IGZyb20gPT0gU2hhZG93U3R5bGU6Ok5vcm1hbCA/IDEgOiAwOwotICAgIGRvdWJsZSB0b1ZhbCA9
IHRvID09IFNoYWRvd1N0eWxlOjpOb3JtYWwgPyAxIDogMDsKLSAgICBkb3VibGUgcmVzdWx0ID0g
YmxlbmRGdW5jKGFuaW0sIGZyb21WYWwsIHRvVmFsLCBwcm9ncmVzcyk7Ci0gICAgcmV0dXJuIHJl
c3VsdCA+IDAgPyBTaGFkb3dTdHlsZTo6Tm9ybWFsIDogU2hhZG93U3R5bGU6Okluc2V0OwotfQot
Ci1zdGF0aWMgaW5saW5lIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBibGVuZEZ1bmMoY29u
c3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgU2hhZG93RGF0YSogZnJv
bSwgY29uc3QgU2hhZG93RGF0YSogdG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBBU1NFUlQo
ZnJvbSAmJiB0byk7Ci0gICAgaWYgKGZyb20tPnN0eWxlKCkgIT0gdG8tPnN0eWxlKCkpCi0gICAg
ICAgIHJldHVybiBtYWtlVW5pcXVlPFNoYWRvd0RhdGE+KCp0byk7Ci0KLSAgICByZXR1cm4gbWFr
ZVVuaXF1ZTxTaGFkb3dEYXRhPihibGVuZChmcm9tLT5sb2NhdGlvbigpLCB0by0+bG9jYXRpb24o
KSwgcHJvZ3Jlc3MpLAotICAgICAgICBibGVuZChmcm9tLT5yYWRpdXMoKSwgdG8tPnJhZGl1cygp
LCBwcm9ncmVzcyksCi0gICAgICAgIGJsZW5kKGZyb20tPnNwcmVhZCgpLCB0by0+c3ByZWFkKCks
IHByb2dyZXNzKSwKLSAgICAgICAgYmxlbmRGdW5jKGFuaW0sIGZyb20tPnN0eWxlKCksIHRvLT5z
dHlsZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGZyb20tPmlzV2Via2l0Qm94U2hhZG93KCksCi0g
ICAgICAgIGJsZW5kKGZyb20tPmNvbG9yKCksIHRvLT5jb2xvcigpLCBwcm9ncmVzcykpOwotfQot
Ci1zdGF0aWMgaW5saW5lIFRyYW5zZm9ybU9wZXJhdGlvbnMgYmxlbmRGdW5jKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW1hdGlvbiwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9u
cyYgZnJvbSwgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyYgdG8sIGRvdWJsZSBwcm9ncmVzcykK
LXsKLSAgICBpZiAoYW5pbWF0aW9uLT50cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkKLSAg
ICAgICAgcmV0dXJuIHRvLmJsZW5kQnlNYXRjaGluZ09wZXJhdGlvbnMoZnJvbSwgcHJvZ3Jlc3Mp
OwotICAgIHJldHVybiB0by5ibGVuZEJ5VXNpbmdNYXRyaXhJbnRlcnBvbGF0aW9uKGZyb20sIHBy
b2dyZXNzLCBpczxSZW5kZXJCb3g+KGFuaW1hdGlvbi0+cmVuZGVyZXIoKSkgPyBkb3duY2FzdDxS
ZW5kZXJCb3g+KCphbmltYXRpb24tPnJlbmRlcmVyKCkpLmJvcmRlckJveFJlY3QoKS5zaXplKCkg
OiBMYXlvdXRTaXplKCkpOwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxDbGlwUGF0aE9wZXJh
dGlvbj4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDbGlwUGF0
aE9wZXJhdGlvbiogZnJvbSwgQ2xpcFBhdGhPcGVyYXRpb24qIHRvLCBkb3VibGUgcHJvZ3Jlc3Mp
Ci17Ci0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgLy8g
T3RoZXIgY2xpcC1wYXRoIG9wZXJhdGlvbnMgdGhhbiBCYXNpY1NoYXBlcyBjYW4gbm90IGJlIGFu
aW1hdGVkLgotICAgIGlmIChmcm9tLT50eXBlKCkgIT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBl
IHx8IHRvLT50eXBlKCkgIT0gQ2xpcFBhdGhPcGVyYXRpb246OlNoYXBlKQotICAgICAgICByZXR1
cm4gdG87Ci0KLSAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSBkb3duY2FzdDxTaGFw
ZUNsaXBQYXRoT3BlcmF0aW9uPigqZnJvbSkuYmFzaWNTaGFwZSgpOwotICAgIGNvbnN0IEJhc2lj
U2hhcGUmIHRvU2hhcGUgPSBkb3duY2FzdDxTaGFwZUNsaXBQYXRoT3BlcmF0aW9uPigqdG8pLmJh
c2ljU2hhcGUoKTsKLQotICAgIGlmICghZnJvbVNoYXBlLmNhbkJsZW5kKHRvU2hhcGUpKQotICAg
ICAgICByZXR1cm4gdG87Ci0KLSAgICByZXR1cm4gU2hhcGVDbGlwUGF0aE9wZXJhdGlvbjo6Y3Jl
YXRlKHRvU2hhcGUuYmxlbmQoZnJvbVNoYXBlLCBwcm9ncmVzcykpOwotfQotCi1zdGF0aWMgaW5s
aW5lIFJlZlB0cjxTaGFwZVZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGlu
Z0NsaWVudCosIFNoYXBlVmFsdWUqIGZyb20sIFNoYXBlVmFsdWUqIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgaWYgKCFmcm9tIHx8ICF0bykKLSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAg
aWYgKGZyb20tPnR5cGUoKSAhPSBTaGFwZVZhbHVlOjpUeXBlOjpTaGFwZSB8fCB0by0+dHlwZSgp
ICE9IFNoYXBlVmFsdWU6OlR5cGU6OlNoYXBlKQotICAgICAgICByZXR1cm4gdG87Ci0KLSAgICBp
ZiAoZnJvbS0+Y3NzQm94KCkgIT0gdG8tPmNzc0JveCgpKQotICAgICAgICByZXR1cm4gdG87Ci0K
LSAgICBjb25zdCBCYXNpY1NoYXBlJiBmcm9tU2hhcGUgPSAqZnJvbS0+c2hhcGUoKTsKLSAgICBj
b25zdCBCYXNpY1NoYXBlJiB0b1NoYXBlID0gKnRvLT5zaGFwZSgpOwotCi0gICAgaWYgKCFmcm9t
U2hhcGUuY2FuQmxlbmQodG9TaGFwZSkpCi0gICAgICAgIHJldHVybiB0bzsKLQotICAgIHJldHVy
biBTaGFwZVZhbHVlOjpjcmVhdGUodG9TaGFwZS5ibGVuZChmcm9tU2hhcGUsIHByb2dyZXNzKSwg
dG8tPmNzc0JveCgpKTsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8RmlsdGVyT3BlcmF0aW9u
PiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCosIEZpbHRlck9wZXJh
dGlvbiogZnJvbU9wLCBGaWx0ZXJPcGVyYXRpb24qIHRvT3AsIGRvdWJsZSBwcm9ncmVzcywgYm9v
bCBibGVuZFRvUGFzc3Rocm91Z2ggPSBmYWxzZSkKLXsKLSAgICBBU1NFUlQodG9PcCk7Ci0gICAg
cmV0dXJuIHRvT3AtPmJsZW5kKGZyb21PcCwgcHJvZ3Jlc3MsIGJsZW5kVG9QYXNzdGhyb3VnaCk7
Ci19Ci0KLXN0YXRpYyBpbmxpbmUgRmlsdGVyT3BlcmF0aW9ucyBibGVuZEZpbHRlck9wZXJhdGlv
bnMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgIGNvbnN0IEZpbHRlck9w
ZXJhdGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jl
c3MpCi17Ci0gICAgRmlsdGVyT3BlcmF0aW9ucyByZXN1bHQ7Ci0gICAgc2l6ZV90IGZyb21TaXpl
ID0gZnJvbS5vcGVyYXRpb25zKCkuc2l6ZSgpOwotICAgIHNpemVfdCB0b1NpemUgPSB0by5vcGVy
YXRpb25zKCkuc2l6ZSgpOwotICAgIHNpemVfdCBzaXplID0gc3RkOjptYXgoZnJvbVNpemUsIHRv
U2l6ZSk7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLSAgICAgICAg
UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4gZnJvbU9wID0gKGkgPCBmcm9tU2l6ZSkgPyBmcm9tLm9w
ZXJhdGlvbnMoKVtpXS5nZXQoKSA6IDA7Ci0gICAgICAgIFJlZlB0cjxGaWx0ZXJPcGVyYXRpb24+
IHRvT3AgPSAoaSA8IHRvU2l6ZSkgPyB0by5vcGVyYXRpb25zKClbaV0uZ2V0KCkgOiAwOwotICAg
ICAgICBSZWZQdHI8RmlsdGVyT3BlcmF0aW9uPiBibGVuZGVkT3AgPSB0b09wID8gYmxlbmRGdW5j
KGFuaW0sIGZyb21PcC5nZXQoKSwgdG9PcC5nZXQoKSwgcHJvZ3Jlc3MpIDogKGZyb21PcCA/IGJs
ZW5kRnVuYyhhbmltLCAwLCBmcm9tT3AuZ2V0KCksIHByb2dyZXNzLCB0cnVlKSA6IDApOwotICAg
ICAgICBpZiAoYmxlbmRlZE9wKQotICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5hcHBl
bmQoYmxlbmRlZE9wKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBhdXRvIGlkZW50aXR5
T3AgPSBQYXNzdGhyb3VnaEZpbHRlck9wZXJhdGlvbjo6Y3JlYXRlKCk7Ci0gICAgICAgICAgICBp
ZiAocHJvZ3Jlc3MgPiAwLjUpCi0gICAgICAgICAgICAgICAgcmVzdWx0Lm9wZXJhdGlvbnMoKS5h
cHBlbmQodG9PcCA/IHRvT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKLSAgICAgICAgICAgIGVs
c2UKLSAgICAgICAgICAgICAgICByZXN1bHQub3BlcmF0aW9ucygpLmFwcGVuZChmcm9tT3AgPyBm
cm9tT3AgOiBXVEZNb3ZlKGlkZW50aXR5T3ApKTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIEZpbHRlck9wZXJhdGlvbnMgYmxlbmRGdW5j
KGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IEZpbHRlck9wZXJh
dGlvbnMmIGZyb20sIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvLCBkb3VibGUgcHJvZ3Jlc3Ms
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IENTU1Byb3BlcnR5RmlsdGVyKQotewotICAgIEZp
bHRlck9wZXJhdGlvbnMgcmVzdWx0OwotCi0gICAgLy8gSWYgd2UgaGF2ZSBhIGZpbHRlciBmdW5j
dGlvbiBsaXN0LCB1c2UgdGhhdCB0byBkbyBhIHBlci1mdW5jdGlvbiBhbmltYXRpb24uCi0gICAg
Ci0gICAgYm9vbCBsaXN0c01hdGNoID0gZmFsc2U7Ci0gICAgc3dpdGNoIChwcm9wZXJ0eUlEKSB7
Ci0gICAgY2FzZSBDU1NQcm9wZXJ0eUZpbHRlcjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0t
PmZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCgpOwotICAgICAgICBicmVhazsKLSNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQotICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRl
cjoKLSAgICAgICAgbGlzdHNNYXRjaCA9IGFuaW0tPmJhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0
c01hdGNoKCk7Ci0gICAgICAgIGJyZWFrOwotI2VuZGlmCi0gICAgY2FzZSBDU1NQcm9wZXJ0eUFw
cGxlQ29sb3JGaWx0ZXI6Ci0gICAgICAgIGxpc3RzTWF0Y2ggPSBhbmltLT5jb2xvckZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCgpOwotICAgICAgICBicmVhazsKLSAgICBkZWZhdWx0OgotICAgICAg
ICBicmVhazsKLSAgICB9Ci0gICAgCi0gICAgaWYgKGxpc3RzTWF0Y2gpCi0gICAgICAgIHJlc3Vs
dCA9IGJsZW5kRmlsdGVyT3BlcmF0aW9ucyhhbmltLCBmcm9tLCB0bywgcHJvZ3Jlc3MpOwotICAg
IGVsc2UgewotICAgICAgICAvLyBJZiB0aGUgZmlsdGVyIGZ1bmN0aW9uIGxpc3RzIGRvbid0IG1h
dGNoLCB3ZSBjb3VsZCB0cnkgdG8gY3Jvc3MtZmFkZSwgYnV0IGRvbid0IHlldCBoYXZlIGEgd2F5
IHRvIHJlcHJlc2VudCB0aGF0IGluIENTUy4KLSAgICAgICAgLy8gRm9yIG5vdyB3ZSdsbCBqdXN0
IGZhaWwgdG8gYW5pbWF0ZS4KLSAgICAgICAgcmVzdWx0ID0gdG87Ci0gICAgfQotCi0gICAgcmV0
dXJuIHJlc3VsdDsKLX0KLQotc3RhdGljIGlubGluZSBSZWZQdHI8U3R5bGVJbWFnZT4gYmxlbmRG
aWx0ZXIoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgQ2FjaGVkSW1hZ2Uq
IGltYWdlLCBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiBmcm9tLCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIEFTU0VSVChpbWFnZSk7Ci0gICAgRmls
dGVyT3BlcmF0aW9ucyBmaWx0ZXJSZXN1bHQgPSBibGVuZEZpbHRlck9wZXJhdGlvbnMoYW5pbSwg
ZnJvbSwgdG8sIHByb2dyZXNzKTsKLQotICAgIGF1dG8gaW1hZ2VWYWx1ZSA9IENTU0ltYWdlVmFs
dWU6OmNyZWF0ZSgqaW1hZ2UpOwotICAgIGF1dG8gZmlsdGVyVmFsdWUgPSBDb21wdXRlZFN0eWxl
RXh0cmFjdG9yOjp2YWx1ZUZvckZpbHRlcihhbmltLT5jdXJyZW50U3R5bGUoKSwgZmlsdGVyUmVz
dWx0LCBEb05vdEFkanVzdFBpeGVsVmFsdWVzKTsKLQotICAgIGF1dG8gcmVzdWx0ID0gQ1NTRmls
dGVySW1hZ2VWYWx1ZTo6Y3JlYXRlKFdURk1vdmUoaW1hZ2VWYWx1ZSksIFdURk1vdmUoZmlsdGVy
VmFsdWUpKTsKLSAgICByZXN1bHQuZ2V0KCkuc2V0RmlsdGVyT3BlcmF0aW9ucyhmaWx0ZXJSZXN1
bHQpOwotICAgIHJldHVybiBTdHlsZUdlbmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShyZXN1
bHQpKTsKLX0KLQotc3RhdGljIGlubGluZSBWaXNpYmlsaXR5IGJsZW5kRnVuYyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBWaXNpYmlsaXR5IGZyb20sIFZpc2liaWxpdHkg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICAvLyBBbnkgbm9uLXplcm8gcmVzdWx0IG1lYW5z
IHdlIGNvbnNpZGVyIHRoZSBvYmplY3QgdG8gYmUgdmlzaWJsZS4gT25seSBhdCAwIGRvIHdlIGNv
bnNpZGVyIHRoZSBvYmplY3QgdG8gYmUKLSAgICAvLyBpbnZpc2libGUuIFRoZSBpbnZpc2libGUg
dmFsdWUgd2UgdXNlIChWaXNpYmlsaXR5OjpIaWRkZW4gdnMuIFZpc2liaWxpdHk6OkNvbGxhcHNl
KSBkZXBlbmRzIG9uIHRoZSBzcGVjaWZpZWQgZnJvbS90byB2YWx1ZXMuCi0gICAgZG91YmxlIGZy
b21WYWwgPSBmcm9tID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6IDAuOwotICAgIGRvdWJs
ZSB0b1ZhbCA9IHRvID09IFZpc2liaWxpdHk6OlZpc2libGUgPyAxLiA6IDAuOwotICAgIGlmIChm
cm9tVmFsID09IHRvVmFsKQotICAgICAgICByZXR1cm4gdG87Ci0gICAgZG91YmxlIHJlc3VsdCA9
IGJsZW5kRnVuYyhhbmltLCBmcm9tVmFsLCB0b1ZhbCwgcHJvZ3Jlc3MpOwotICAgIHJldHVybiBy
ZXN1bHQgPiAwLiA/IFZpc2liaWxpdHk6OlZpc2libGUgOiAodG8gIT0gVmlzaWJpbGl0eTo6Vmlz
aWJsZSA/IHRvIDogZnJvbSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVGV4dFVuZGVybGluZU9mZnNl
dCBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3Qg
VGV4dFVuZGVybGluZU9mZnNldCYgZnJvbSwgY29uc3QgVGV4dFVuZGVybGluZU9mZnNldCYgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5pc0xlbmd0aCgpICYmIHRvLmlzTGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiBUZXh0VW5kZXJsaW5lT2Zmc2V0OjpjcmVhdGVXaXRoTGVu
Z3RoKGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlbmd0aFZhbHVlKCksIHRvLmxlbmd0aFZhbHVlKCks
IHByb2dyZXNzKSk7Ci0gICAgcmV0dXJuIFRleHRVbmRlcmxpbmVPZmZzZXQ6OmNyZWF0ZVdpdGhB
dXRvKCk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgVGV4dERlY29yYXRpb25UaGlja25lc3MgYmxlbmRG
dW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IFRleHREZWNv
cmF0aW9uVGhpY2tuZXNzJiBmcm9tLCBjb25zdCBUZXh0RGVjb3JhdGlvblRoaWNrbmVzcyYgdG8s
IGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoZnJvbS5pc0xlbmd0aCgpICYmIHRvLmlzTGVu
Z3RoKCkpCi0gICAgICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3JlYXRlV2l0
aExlbmd0aChibGVuZEZ1bmMoYW5pbSwgZnJvbS5sZW5ndGhWYWx1ZSgpLCB0by5sZW5ndGhWYWx1
ZSgpLCBwcm9ncmVzcykpOwotICAgIHJldHVybiBUZXh0RGVjb3JhdGlvblRoaWNrbmVzczo6Y3Jl
YXRlV2l0aEF1dG8oKTsKLX0KLQotc3RhdGljIGlubGluZSBMZW5ndGhCb3ggYmxlbmRGdW5jKGNv
bnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0IExlbmd0aEJveCYgZnJv
bSwgY29uc3QgTGVuZ3RoQm94JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIExlbmd0aEJv
eCByZXN1bHQoYmxlbmRGdW5jKGFuaW0sIGZyb20udG9wKCksIHRvLnRvcCgpLCBwcm9ncmVzcyks
Ci0gICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwgZnJvbS5yaWdodCgpLCB0by5y
aWdodCgpLCBwcm9ncmVzcyksCi0gICAgICAgICAgICAgICAgICAgICBibGVuZEZ1bmMoYW5pbSwg
ZnJvbS5ib3R0b20oKSwgdG8uYm90dG9tKCksIHByb2dyZXNzKSwKLSAgICAgICAgICAgICAgICAg
ICAgIGJsZW5kRnVuYyhhbmltLCBmcm9tLmxlZnQoKSwgdG8ubGVmdCgpLCBwcm9ncmVzcykpOwot
ICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgU1ZHTGVuZ3RoVmFsdWUgYmxl
bmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25zdCBTVkdMZW5ndGhW
YWx1ZSYgZnJvbSwgY29uc3QgU1ZHTGVuZ3RoVmFsdWUmIHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17
Ci0gICAgcmV0dXJuIFNWR0xlbmd0aFZhbHVlOjpibGVuZChmcm9tLCB0bywgbmFycm93UHJlY2lz
aW9uVG9GbG9hdChwcm9ncmVzcykpOwotfQotCi1zdGF0aWMgaW5saW5lIFZlY3RvcjxTVkdMZW5n
dGhWYWx1ZT4gYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBjb25z
dCBWZWN0b3I8U1ZHTGVuZ3RoVmFsdWU+JiBmcm9tLCBjb25zdCBWZWN0b3I8U1ZHTGVuZ3RoVmFs
dWU+JiB0bywgZG91YmxlIHByb2dyZXNzKQotewotICAgIHNpemVfdCBmcm9tTGVuZ3RoID0gZnJv
bS5zaXplKCk7Ci0gICAgc2l6ZV90IHRvTGVuZ3RoID0gdG8uc2l6ZSgpOwotICAgIGlmICghZnJv
bUxlbmd0aCkKLSAgICAgICAgcmV0dXJuICFwcm9ncmVzcyA/IGZyb20gOiB0bzsKLSAgICBpZiAo
IXRvTGVuZ3RoKQotICAgICAgICByZXR1cm4gcHJvZ3Jlc3MgPT0gMSA/IGZyb20gOiB0bzsKLSAg
ICBzaXplX3QgcmVzdWx0TGVuZ3RoID0gZnJvbUxlbmd0aDsKLSAgICBpZiAoZnJvbUxlbmd0aCAh
PSB0b0xlbmd0aCkgewotICAgICAgICBpZiAoIXJlbWFpbmRlcihzdGQ6Om1heChmcm9tTGVuZ3Ro
LCB0b0xlbmd0aCksIHN0ZDo6bWluKGZyb21MZW5ndGgsIHRvTGVuZ3RoKSkpCi0gICAgICAgICAg
ICByZXN1bHRMZW5ndGggPSBzdGQ6Om1heChmcm9tTGVuZ3RoLCB0b0xlbmd0aCk7Ci0gICAgICAg
IGVsc2UKLSAgICAgICAgICAgIHJlc3VsdExlbmd0aCA9IGZyb21MZW5ndGggKiB0b0xlbmd0aDsK
LSAgICB9Ci0gICAgVmVjdG9yPFNWR0xlbmd0aFZhbHVlPiByZXN1bHQocmVzdWx0TGVuZ3RoKTsK
LSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlc3VsdExlbmd0aDsgKytpKQotICAgICAgICBy
ZXN1bHRbaV0gPSBTVkdMZW5ndGhWYWx1ZTo6YmxlbmQoZnJvbVtpICUgZnJvbUxlbmd0aF0sIHRv
W2kgJSB0b0xlbmd0aF0sIG5hcnJvd1ByZWNpc2lvblRvRmxvYXQocHJvZ3Jlc3MpKTsKLSAgICBy
ZXR1cm4gcmVzdWx0OwotfQotCi1zdGF0aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBjcm9z
c2ZhZGVCbGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgU3R5bGVDYWNoZWRJ
bWFnZSogZnJvbVN0eWxlSW1hZ2UsIFN0eWxlQ2FjaGVkSW1hZ2UqIHRvU3R5bGVJbWFnZSwgZG91
YmxlIHByb2dyZXNzKQotewotICAgIC8vIElmIHByb2dyZXNzIGlzIGF0IG9uZSBvZiB0aGUgZXh0
cmVtZXMsIHdlIHdhbnQgZ2V0Q29tcHV0ZWRTdHlsZSB0byBzaG93IHRoZSBpbWFnZSwKLSAgICAv
LyBub3QgYSBjb21wbGV0ZWQgY3Jvc3MtZmFkZSwgc28gd2UgaGFuZCBiYWNrIG9uZSBvZiB0aGUg
ZXhpc3RpbmcgaW1hZ2VzLgotICAgIGlmICghcHJvZ3Jlc3MpCi0gICAgICAgIHJldHVybiBmcm9t
U3R5bGVJbWFnZTsKLSAgICBpZiAocHJvZ3Jlc3MgPT0gMSkKLSAgICAgICAgcmV0dXJuIHRvU3R5
bGVJbWFnZTsKLSAgICBpZiAoIWZyb21TdHlsZUltYWdlLT5jYWNoZWRJbWFnZSgpIHx8ICF0b1N0
eWxlSW1hZ2UtPmNhY2hlZEltYWdlKCkpCi0gICAgICAgIHJldHVybiB0b1N0eWxlSW1hZ2U7Ci0K
LSAgICBhdXRvIGZyb21JbWFnZVZhbHVlID0gQ1NTSW1hZ2VWYWx1ZTo6Y3JlYXRlKCpmcm9tU3R5
bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSk7Ci0gICAgYXV0byB0b0ltYWdlVmFsdWUgPSBDU1NJbWFn
ZVZhbHVlOjpjcmVhdGUoKnRvU3R5bGVJbWFnZS0+Y2FjaGVkSW1hZ2UoKSk7Ci0gICAgYXV0byBw
ZXJjZW50YWdlVmFsdWUgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKHByb2dyZXNzLCBDU1NV
bml0VHlwZTo6Q1NTX05VTUJFUik7Ci0KLSAgICBhdXRvIGNyb3NzZmFkZVZhbHVlID0gQ1NTQ3Jv
c3NmYWRlVmFsdWU6OmNyZWF0ZShXVEZNb3ZlKGZyb21JbWFnZVZhbHVlKSwgV1RGTW92ZSh0b0lt
YWdlVmFsdWUpLCBXVEZNb3ZlKHBlcmNlbnRhZ2VWYWx1ZSkpOwotICAgIHJldHVybiBTdHlsZUdl
bmVyYXRlZEltYWdlOjpjcmVhdGUoV1RGTW92ZShjcm9zc2ZhZGVWYWx1ZSkpOwotfQotCi1zdGF0
aWMgaW5saW5lIFJlZlB0cjxTdHlsZUltYWdlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlC
bGVuZGluZ0NsaWVudCogYW5pbSwgU3R5bGVJbWFnZSogZnJvbSwgU3R5bGVJbWFnZSogdG8sIGRv
dWJsZSBwcm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20gfHwgIXRvKQotICAgICAgICByZXR1cm4g
dG87Ci0KLSAgICBmcm9tID0gZnJvbS0+c2VsZWN0ZWRJbWFnZSgpOwotICAgIHRvID0gdG8tPnNl
bGVjdGVkSW1hZ2UoKTsKLQotICAgIGlmICghZnJvbSB8fCAhdG8pCi0gICAgICAgIHJldHVybiB0
bzsgICAgCi0KLSAgICAvLyBBbmltYXRpb24gYmV0d2VlbiB0d28gZ2VuZXJhdGVkIGltYWdlcy4g
Q3Jvc3MgZmFkZSBmb3IgYWxsIG90aGVyIGNhc2VzLgotICAgIGlmIChpczxTdHlsZUdlbmVyYXRl
ZEltYWdlPigqZnJvbSkgJiYgaXM8U3R5bGVHZW5lcmF0ZWRJbWFnZT4oKnRvKSkgewotICAgICAg
ICBDU1NJbWFnZUdlbmVyYXRvclZhbHVlJiBmcm9tR2VuZXJhdGVkID0gZG93bmNhc3Q8U3R5bGVH
ZW5lcmF0ZWRJbWFnZT4oKmZyb20pLmltYWdlVmFsdWUoKTsKLSAgICAgICAgQ1NTSW1hZ2VHZW5l
cmF0b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlPigq
dG8pLmltYWdlVmFsdWUoKTsKLQotICAgICAgICBpZiAoaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4o
ZnJvbUdlbmVyYXRlZCkgJiYgaXM8Q1NTRmlsdGVySW1hZ2VWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7
Ci0gICAgICAgICAgICAvLyBBbmltYXRpb24gb2YgZ2VuZXJhdGVkIGltYWdlcyBqdXN0IHBvc3Np
YmxlIGlmIGlucHV0IGltYWdlcyBhcmUgZXF1YWwuCi0gICAgICAgICAgICAvLyBPdGhlcndpc2Ug
ZmFsbCBiYWNrIHRvIGNyb3NzIGZhZGUgYW5pbWF0aW9uLgotICAgICAgICAgICAgQ1NTRmlsdGVy
SW1hZ2VWYWx1ZSYgZnJvbUZpbHRlciA9IGRvd25jYXN0PENTU0ZpbHRlckltYWdlVmFsdWU+KGZy
b21HZW5lcmF0ZWQpOwotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIg
PSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCk7Ci0gICAgICAgICAg
ICBpZiAoZnJvbUZpbHRlci5lcXVhbElucHV0SW1hZ2VzKHRvRmlsdGVyKSAmJiBmcm9tRmlsdGVy
LmNhY2hlZEltYWdlKCkpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGJsZW5kRmlsdGVyKGFuaW0s
IGZyb21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSwgZnJvbUZpbHRlci5maWx0ZXJPcGVyYXRpb25zKCks
IHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3MpOwotICAgICAgICB9Ci0KLSAg
ICAgICAgaWYgKGlzPENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2VuZXJhdGVkKSAmJiBpczxDU1ND
cm9zc2ZhZGVWYWx1ZT4odG9HZW5lcmF0ZWQpKSB7Ci0gICAgICAgICAgICBDU1NDcm9zc2ZhZGVW
YWx1ZSYgZnJvbUNyb3NzZmFkZSA9IGRvd25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPihmcm9tR2Vu
ZXJhdGVkKTsKLSAgICAgICAgICAgIENTU0Nyb3NzZmFkZVZhbHVlJiB0b0Nyb3NzZmFkZSA9IGRv
d25jYXN0PENTU0Nyb3NzZmFkZVZhbHVlPih0b0dlbmVyYXRlZCk7Ci0gICAgICAgICAgICBpZiAo
ZnJvbUNyb3NzZmFkZS5lcXVhbElucHV0SW1hZ2VzKHRvQ3Jvc3NmYWRlKSkgewotICAgICAgICAg
ICAgICAgIGlmIChhdXRvIGNyb3NzZmFkZUJsZW5kID0gdG9Dcm9zc2ZhZGUuYmxlbmQoZnJvbUNy
b3NzZmFkZSwgcHJvZ3Jlc3MpKQotICAgICAgICAgICAgICAgICAgICByZXR1cm4gU3R5bGVHZW5l
cmF0ZWRJbWFnZTo6Y3JlYXRlKCpjcm9zc2ZhZGVCbGVuZCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgIH0KLQotICAgICAgICAvLyBGSVhNRTogQWRkIHN1cHBvcnQgZm9yIGFuaW1hdGlvbiBiZXR3
ZWVuIHR3byAqZ3JhZGllbnQoKSBmdW5jdGlvbnMuCi0gICAgICAgIC8vIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTk5NTYKLSAgICB9IGVsc2UgaWYgKGlzPFN0eWxl
R2VuZXJhdGVkSW1hZ2U+KCpmcm9tKSAmJiBpczxTdHlsZUNhY2hlZEltYWdlPigqdG8pKSB7Ci0g
ICAgICAgIENTU0ltYWdlR2VuZXJhdG9yVmFsdWUmIGZyb21HZW5lcmF0ZWQgPSBkb3duY2FzdDxT
dHlsZUdlbmVyYXRlZEltYWdlPigqZnJvbSkuaW1hZ2VWYWx1ZSgpOwotICAgICAgICBpZiAoaXM8
Q1NTRmlsdGVySW1hZ2VWYWx1ZT4oZnJvbUdlbmVyYXRlZCkpIHsKLSAgICAgICAgICAgIENTU0Zp
bHRlckltYWdlVmFsdWUmIGZyb21GaWx0ZXIgPSBkb3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVl
Pihmcm9tR2VuZXJhdGVkKTsKLSAgICAgICAgICAgIGlmIChmcm9tRmlsdGVyLmNhY2hlZEltYWdl
KCkgJiYgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4oKnRvKS5jYWNoZWRJbWFnZSgpID09IGZy
b21GaWx0ZXIuY2FjaGVkSW1hZ2UoKSkKLSAgICAgICAgICAgICAgICByZXR1cm4gYmxlbmRGaWx0
ZXIoYW5pbSwgZnJvbUZpbHRlci5jYWNoZWRJbWFnZSgpLCBmcm9tRmlsdGVyLmZpbHRlck9wZXJh
dGlvbnMoKSwgRmlsdGVyT3BlcmF0aW9ucygpLCBwcm9ncmVzcyk7Ci0gICAgICAgIH0KLSAgICAg
ICAgLy8gRklYTUU6IEFkZCBpbnRlcnBvbGF0aW9uIGJldHdlZW4gY3Jvc3MtZmFkZSBhbmQgaW1h
Z2Ugc291cmNlLgotICAgIH0gZWxzZSBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pICYm
IGlzPFN0eWxlR2VuZXJhdGVkSW1hZ2U+KCp0bykpIHsKLSAgICAgICAgQ1NTSW1hZ2VHZW5lcmF0
b3JWYWx1ZSYgdG9HZW5lcmF0ZWQgPSBkb3duY2FzdDxTdHlsZUdlbmVyYXRlZEltYWdlPigqdG8p
LmltYWdlVmFsdWUoKTsKLSAgICAgICAgaWYgKGlzPENTU0ZpbHRlckltYWdlVmFsdWU+KHRvR2Vu
ZXJhdGVkKSkgewotICAgICAgICAgICAgQ1NTRmlsdGVySW1hZ2VWYWx1ZSYgdG9GaWx0ZXIgPSBk
b3duY2FzdDxDU1NGaWx0ZXJJbWFnZVZhbHVlPih0b0dlbmVyYXRlZCk7Ci0gICAgICAgICAgICBp
ZiAodG9GaWx0ZXIuY2FjaGVkSW1hZ2UoKSAmJiBkb3duY2FzdDxTdHlsZUNhY2hlZEltYWdlPigq
ZnJvbSkuY2FjaGVkSW1hZ2UoKSA9PSB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpKQotICAgICAgICAg
ICAgICAgIHJldHVybiBibGVuZEZpbHRlcihhbmltLCB0b0ZpbHRlci5jYWNoZWRJbWFnZSgpLCBG
aWx0ZXJPcGVyYXRpb25zKCksIHRvRmlsdGVyLmZpbHRlck9wZXJhdGlvbnMoKSwgcHJvZ3Jlc3Mp
OwotICAgICAgICB9Ci0gICAgICAgIC8vIEZJWE1FOiBBZGQgaW50ZXJwb2xhdGlvbiBiZXR3ZWVu
IGltYWdlIHNvdXJjZSBhbmQgY3Jvc3MtZmFkZS4KLSAgICB9Ci0KLSAgICAvLyBGSVhNRTogQWRk
IHN1cHBvcnQgY3Jvc3MgZmFkZSBiZXR3ZWVuIGNhY2hlZCBhbmQgZ2VuZXJhdGVkIGltYWdlcy4K
LSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzgyOTMKLSAg
ICBpZiAoaXM8U3R5bGVDYWNoZWRJbWFnZT4oKmZyb20pICYmIGlzPFN0eWxlQ2FjaGVkSW1hZ2U+
KCp0bykpCi0gICAgICAgIHJldHVybiBjcm9zc2ZhZGVCbGVuZChhbmltLCBkb3duY2FzdDxTdHls
ZUNhY2hlZEltYWdlPihmcm9tKSwgZG93bmNhc3Q8U3R5bGVDYWNoZWRJbWFnZT4odG8pLCBwcm9n
cmVzcyk7Ci0KLSAgICByZXR1cm4gdG87Ci19Ci0KLXN0YXRpYyBpbmxpbmUgTmluZVBpZWNlSW1h
Z2UgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIGNvbnN0
IE5pbmVQaWVjZUltYWdlJiBmcm9tLCBjb25zdCBOaW5lUGllY2VJbWFnZSYgdG8sIGRvdWJsZSBw
cm9ncmVzcykKLXsKLSAgICBpZiAoIWZyb20uaGFzSW1hZ2UoKSB8fCAhdG8uaGFzSW1hZ2UoKSkK
LSAgICAgICAgcmV0dXJuIHRvOwotCi0gICAgLy8gRklYTUUgKDc0MTEyKTogU3VwcG9ydCB0cmFu
c2l0aW9uaW5nIGJldHdlZW4gTmluZVBpZWNlSW1hZ2VzIHRoYXQgZGlmZmVyIGJ5IG1vcmUgdGhh
biBpbWFnZSBjb250ZW50LgotCi0gICAgaWYgKGZyb20uaW1hZ2VTbGljZXMoKSAhPSB0by5pbWFn
ZVNsaWNlcygpIHx8IGZyb20uYm9yZGVyU2xpY2VzKCkgIT0gdG8uYm9yZGVyU2xpY2VzKCkgfHwg
ZnJvbS5vdXRzZXQoKSAhPSB0by5vdXRzZXQoKSB8fCBmcm9tLmZpbGwoKSAhPSB0by5maWxsKCkg
fHwgZnJvbS5ob3Jpem9udGFsUnVsZSgpICE9IHRvLmhvcml6b250YWxSdWxlKCkgfHwgZnJvbS52
ZXJ0aWNhbFJ1bGUoKSAhPSB0by52ZXJ0aWNhbFJ1bGUoKSkKLSAgICAgICAgcmV0dXJuIHRvOwot
Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gYW5pbS0+cmVuZGVyZXIoKSkgewotICAgICAgICBp
ZiAoZnJvbS5pbWFnZSgpLT5pbWFnZVNpemUocmVuZGVyZXIsIDEuMCkgIT0gdG8uaW1hZ2UoKS0+
aW1hZ2VTaXplKHJlbmRlcmVyLCAxLjApKQotICAgICAgICAgICAgcmV0dXJuIHRvOwotICAgIH0K
LQotICAgIHJldHVybiBOaW5lUGllY2VJbWFnZShibGVuZEZ1bmMoYW5pbSwgZnJvbS5pbWFnZSgp
LCB0by5pbWFnZSgpLCBwcm9ncmVzcyksCi0gICAgICAgIGZyb20uaW1hZ2VTbGljZXMoKSwgZnJv
bS5maWxsKCksIGZyb20uYm9yZGVyU2xpY2VzKCksIGZyb20ub3V0c2V0KCksIGZyb20uaG9yaXpv
bnRhbFJ1bGUoKSwgZnJvbS52ZXJ0aWNhbFJ1bGUoKSk7Ci19Ci0KLSNpZiBFTkFCTEUoVkFSSUFU
SU9OX0ZPTlRTKQotCi1zdGF0aWMgaW5saW5lIEZvbnRWYXJpYXRpb25TZXR0aW5ncyBibGVuZEZ1
bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgY29uc3QgRm9udFZhcmlh
dGlvblNldHRpbmdzJiBmcm9tLCBjb25zdCBGb250VmFyaWF0aW9uU2V0dGluZ3MmIHRvLCBkb3Vi
bGUgcHJvZ3Jlc3MpCi17Ci0gICAgaWYgKGZyb20uc2l6ZSgpICE9IHRvLnNpemUoKSkKLSAgICAg
ICAgcmV0dXJuIEZvbnRWYXJpYXRpb25TZXR0aW5ncygpOwotICAgIEZvbnRWYXJpYXRpb25TZXR0
aW5ncyByZXN1bHQ7Ci0gICAgdW5zaWduZWQgc2l6ZSA9IGZyb20uc2l6ZSgpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyArK2kpIHsKLSAgICAgICAgYXV0byYgZnJvbUl0ZW0g
PSBmcm9tLmF0KGkpOwotICAgICAgICBhdXRvJiB0b0l0ZW0gPSB0by5hdChpKTsKLSAgICAgICAg
aWYgKGZyb21JdGVtLnRhZygpICE9IHRvSXRlbS50YWcoKSkKLSAgICAgICAgICAgIHJldHVybiBG
b250VmFyaWF0aW9uU2V0dGluZ3MoKTsKLSAgICAgICAgZmxvYXQgaW50ZXJwb2xhdGVkID0gYmxl
bmRGdW5jKGFuaW0sIGZyb21JdGVtLnZhbHVlKCksIHRvSXRlbS52YWx1ZSgpLCBwcm9ncmVzcyk7
Ci0gICAgICAgIHJlc3VsdC5pbnNlcnQoeyBmcm9tSXRlbS50YWcoKSwgaW50ZXJwb2xhdGVkIH0p
OwotICAgIH0KLSAgICByZXR1cm4gcmVzdWx0OwotfQotCi0jZW5kaWYKLQotc3RhdGljIGlubGlu
ZSBGb250U2VsZWN0aW9uVmFsdWUgYmxlbmRGdW5jKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIEZvbnRTZWxlY3Rpb25WYWx1ZSBmcm9tLCBGb250U2VsZWN0aW9uVmFsdWUg
dG8sIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICByZXR1cm4gRm9udFNlbGVjdGlvblZhbHVlKGJs
ZW5kRnVuYyhhbmltLCBzdGF0aWNfY2FzdDxmbG9hdD4oZnJvbSksIHN0YXRpY19jYXN0PGZsb2F0
Pih0byksIHByb2dyZXNzKSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgT3B0aW9uYWw8Rm9udFNlbGVj
dGlvblZhbHVlPiBibGVuZEZ1bmMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5p
bSwgT3B0aW9uYWw8Rm9udFNlbGVjdGlvblZhbHVlPiBmcm9tLCBPcHRpb25hbDxGb250U2VsZWN0
aW9uVmFsdWU+IHRvLCBkb3VibGUgcHJvZ3Jlc3MpCi17Ci0gICAgcmV0dXJuIEZvbnRTZWxlY3Rp
b25WYWx1ZShibGVuZEZ1bmMoYW5pbSwgc3RhdGljX2Nhc3Q8ZmxvYXQ+KGZyb20udmFsdWUoKSks
IHN0YXRpY19jYXN0PGZsb2F0Pih0by52YWx1ZSgpKSwgcHJvZ3Jlc3MpKTsKLX0KLQotY2xhc3Mg
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfTk9OQ09QWUFCTEUo
QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSk7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7Ci1wdWJsaWM6Ci0gICAgZXhwbGljaXQgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShD
U1NQcm9wZXJ0eUlEIHByb3ApCi0gICAgICAgIDogbV9wcm9wKHByb3ApCi0gICAgewotICAgIH0K
LSAgICB2aXJ0dWFsIH5BbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgPSBkZWZhdWx0Owot
Ci0gICAgdmlydHVhbCBib29sIGlzU2hvcnRoYW5kV3JhcHBlcigpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgdmlydHVhbCBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0ID0gMDsKLSAgICB2aXJ0dWFsIGJvb2wgY2FuSW50ZXJw
b2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5kZXJTdHlsZSopIGNvbnN0IHsgcmV0
dXJuIHRydWU7IH0KLSAgICB2aXJ0dWFsIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVu
ZGluZ0NsaWVudCosIFJlbmRlclN0eWxlKiwgY29uc3QgUmVuZGVyU3R5bGUqLCBjb25zdCBSZW5k
ZXJTdHlsZSosIGRvdWJsZSkgY29uc3QgPSAwOwotICAgIAotI2lmICFMT0dfRElTQUJMRUQKLSAg
ICB2aXJ0dWFsIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogcmVzdWx0LCBkb3VibGUpIGNvbnN0ID0gMDsK
LSNlbmRpZgotCi0gICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1f
cHJvcDsgfQotCi0gICAgdmlydHVhbCBib29sIGFuaW1hdGlvbklzQWNjZWxlcmF0ZWQoKSBjb25z
dCB7IHJldHVybiBmYWxzZTsgfQotCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5SUQgbV9wcm9w
OwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyR2V0dGVyKENTU1By
b3BlcnR5SUQgcHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QpCi0gICAgICAg
IDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wKQotICAgICAgICAsIG1fZ2V0dGVy
KGdldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEg
fHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAoYS0+Km1f
Z2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgfQotCi0gICAgVCB2YWx1ZShjb25z
dCBSZW5kZXJTdHlsZSogYSkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiAoYS0+Km1fZ2V0
dGVyKSgpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNv
bnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5
bGUqIHJlc3VsdCwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRv
ICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3Bl
Y3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAg
IH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgVCAoUmVuZGVyU3R5bGU6OiptX2dldHRlciko
KSBjb25zdDsKLX07Ci0KLXRlbXBsYXRlIDx0eXBlbmFtZSBUPgotY2xhc3MgUHJvcGVydHlXcmFw
cGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUPiB7Ci0gICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQg
cHJvcCwgVCAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxl
Ojoqc2V0dGVyKShUKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD4ocHJvcCwg
Z2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAg
dm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5kZXJT
dHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIsIGRv
dWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIChkc3QtPiptX3Nl
dHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQ+OjptX2dl
dHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VD46Om1fZ2V0dGVyKSgpLCBwcm9n
cmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKFQpOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBSZWZDb3VudGVk
UHJvcGVydHlXcmFwcGVyIDogcHVibGljIFByb3BlcnR5V3JhcHBlckdldHRlcjxUKj4gewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBUKiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkg
Y29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShSZWZQdHI8VD4mJikpCi0gICAgICAg
IDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9z
ZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1By
b3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRl
clN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBv
dmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwg
KGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0
eVdyYXBwZXJHZXR0ZXI8VCo+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXBy
b3RlY3RlZDoKLSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShSZWZQdHI8VD4mJik7
Ci19OwotCi1jbGFzcyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlXcmFw
cGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
LXB1YmxpYzoKLSAgICBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBwcm9wLCBj
b25zdCBMZW5ndGgmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKExlbmd0aCYmKSkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj4ocHJvcCwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRl
cikKLSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBjYW5JbnRlcnBvbGF0ZShjb25zdCBSZW5kZXJT
dHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAg
ICAgICByZXR1cm4gIShhLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+Ojpt
X2dldHRlcikoKS5pc0F1dG8oKSAmJiAhKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3Qg
TGVuZ3RoJj46Om1fZ2V0dGVyKSgpLmlzQXV0bygpOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQo
Y29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwg
Y29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCAoYS0+KlByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dl
dHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChSZW5k
ZXJTdHlsZTo6Km1fc2V0dGVyKShMZW5ndGgmJik7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5hbWUg
VD4KLWNsYXNzIExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IFQmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHBy
b3AsIGNvbnN0IFQmIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFQmJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNv
bnN0IFQmPihwcm9wLCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsK
LSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQq
IGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5k
ZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAg
ICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJH
ZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgKGItPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+OjptX2dldHRlcikoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLXByb3RlY3RlZDoK
LSAgICB2b2lkIChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShUJiYpOwotfTsKLQotY2xhc3MgUHJv
cGVydHlXcmFwcGVyQ2xpcFBhdGggOiBwdWJsaWMgUmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxD
bGlwUGF0aE9wZXJhdGlvbj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIFByb3BlcnR5V3JhcHBlckNsaXBQYXRoKENTU1Byb3BlcnR5SUQgcHJvcCwgQ2xpcFBh
dGhPcGVyYXRpb24qIChSZW5kZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVy
U3R5bGU6OipzZXR0ZXIpKFJlZlB0cjxDbGlwUGF0aE9wZXJhdGlvbj4mJikpCi0gICAgICAgIDog
UmVmQ291bnRlZFByb3BlcnR5V3JhcHBlcjxDbGlwUGF0aE9wZXJhdGlvbj4ocHJvcCwgZ2V0dGVy
LCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0
eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAg
ICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBhcmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBk
b2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYgZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxz
ZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRydWUuCi0gICAgICAgIGlmIChhID09IGIpCi0g
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIENsaXBQYXRoT3BlcmF0aW9uKiBjbGlwUGF0aEEg
PSAoYS0+Km1fZ2V0dGVyKSgpOwotICAgICAgICBDbGlwUGF0aE9wZXJhdGlvbiogY2xpcFBhdGhC
ID0gKGItPiptX2dldHRlcikoKTsKLSAgICAgICAgaWYgKGNsaXBQYXRoQSA9PSBjbGlwUGF0aEIp
Ci0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgaWYgKCFjbGlwUGF0aEEgfHwgIWNs
aXBQYXRoQikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuICpjbGlw
UGF0aEEgPT0gKmNsaXBQYXRoQjsKLSAgICB9Ci19OwotCi0jaWYgRU5BQkxFKFZBUklBVElPTl9G
T05UUykKLWNsYXNzIFByb3BlcnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyA6IHB1Ymxp
YyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFZhcmlhdGlvblNldHRpbmdzPiB7Ci0gICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyRm9udFZhcmlhdGlv
blNldHRpbmdzKENTU1Byb3BlcnR5SUQgcHJvcCwgRm9udFZhcmlhdGlvblNldHRpbmdzIChSZW5k
ZXJTdHlsZTo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6OipzZXR0ZXIpKEZv
bnRWYXJpYXRpb25TZXR0aW5ncykpCi0gICAgICAgIDogUHJvcGVydHlXcmFwcGVyPEZvbnRWYXJp
YXRpb25TZXR0aW5ncz4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGNv
bnN0IEZvbnRWYXJpYXRpb25TZXR0aW5ncyYgdmFyaWF0aW9uU2V0dGluZ3NBID0gKGEtPiptX2dl
dHRlcikoKTsKLSAgICAgICAgY29uc3QgRm9udFZhcmlhdGlvblNldHRpbmdzJiB2YXJpYXRpb25T
ZXR0aW5nc0IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotICAgICAgICByZXR1cm4gdmFyaWF0aW9uU2V0
dGluZ3NBID09IHZhcmlhdGlvblNldHRpbmdzQjsKLSAgICB9Ci19OwotI2VuZGlmCi0KLWNsYXNz
IFByb3BlcnR5V3JhcHBlclNoYXBlIDogcHVibGljIFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8
U2hhcGVWYWx1ZT4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAg
IFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5SUQgcHJvcCwgU2hhcGVWYWx1ZSogKFJl
bmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlciko
UmVmUHRyPFNoYXBlVmFsdWU+JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBw
ZXI8U2hhcGVWYWx1ZT4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikg
Y29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIC8vIElmIHRoZSBzdHlsZSBwb2ludGVycyBh
cmUgdGhlIHNhbWUsIGRvbid0IGJvdGhlciBkb2luZyB0aGUgdGVzdC4KLSAgICAgICAgLy8gSWYg
ZWl0aGVyIGlzIG51bGwsIHJldHVybiBmYWxzZS4gSWYgYm90aCBhcmUgbnVsbCwgcmV0dXJuIHRy
dWUuCi0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAg
ICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFNo
YXBlVmFsdWUqIHNoYXBlQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIFNoYXBlVmFsdWUq
IHNoYXBlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIGlmIChzaGFwZUEgPT0gc2hhcGVC
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghc2hhcGVBIHx8ICFzaGFw
ZUIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIHJldHVybiAqc2hhcGVBID09
ICpzaGFwZUI7Ci0gICAgfQotfTsKLQotY2xhc3MgU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlciA6
IHB1YmxpYyBSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+IHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBTdHlsZUltYWdlUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5SUQgcHJvcCwgU3R5bGVJbWFnZSogKFJlbmRlclN0eWxlOjoqZ2V0dGVy
KSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoUmVmUHRyPFN0eWxlSW1hZ2U+
JiYpKQotICAgICAgICA6IFJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXI8U3R5bGVJbWFnZT4ocHJv
cCwgZ2V0dGVyLCBzZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIFN0eWxl
SW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIFN0eWxlSW1hZ2UqIGlt
YWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAgIHJldHVybiBhcmVQb2ludGluZ1RvRXF1
YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsKLSAgICB9Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBw
ZXJDb2xvciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3ImPiB7Ci0g
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVy
Q29sb3IoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0
dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkK
LSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3ImPihwcm9wLCBnZXR0
ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIoc2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lk
IGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxl
KiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91Ymxl
IHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVy
KShibGVuZEZ1bmMoYW5pbSwgKGEtPipQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgQ29sb3Im
Pjo6bV9nZXR0ZXIpKCksIChiLT4qUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IENvbG9yJj46
Om1fZ2V0dGVyKSgpLCBwcm9ncmVzcykpOwotICAgIH0KLQotcHJvdGVjdGVkOgotICAgIHZvaWQg
KFJlbmRlclN0eWxlOjoqbV9zZXR0ZXIpKGNvbnN0IENvbG9yJik7Ci19OwotCi1jbGFzcyBQcm9w
ZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHkgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVy
dHlXcmFwcGVyQWNjZWxlcmF0ZWRPcGFjaXR5KCkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8
ZmxvYXQ+KENTU1Byb3BlcnR5T3BhY2l0eSwgJlJlbmRlclN0eWxlOjpvcGFjaXR5LCAmUmVuZGVy
U3R5bGU6OnNldE9wYWNpdHkpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgYW5pbWF0aW9uSXNB
Y2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KLQotICAgIHZvaWQg
YmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgUmVuZGVyU3R5bGUq
IGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBkb3VibGUg
cHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBkc3QtPnNldE9wYWNpdHko
YmxlbmRGdW5jKGFuaW0sIGEtPm9wYWNpdHkoKSwgYi0+b3BhY2l0eSgpLCBwcm9ncmVzcykpOwot
ICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtIDog
cHVibGljIFByb3BlcnR5V3JhcHBlcjxjb25zdCBUcmFuc2Zvcm1PcGVyYXRpb25zJj4gewotICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIFByb3BlcnR5V3JhcHBlckFj
Y2VsZXJhdGVkVHJhbnNmb3JtKCkKLSAgICAgICAgOiBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgVHJh
bnNmb3JtT3BlcmF0aW9ucyY+KENTU1Byb3BlcnR5VHJhbnNmb3JtLCAmUmVuZGVyU3R5bGU6OnRy
YW5zZm9ybSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm0pCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgYW5pbWF0aW9uSXNBY2NlbGVyYXRlZCgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRy
dWU7IH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCog
YW5pbSwgUmVuZGVyU3R5bGUqIGRzdCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBkc3QtPnNldFRyYW5zZm9ybShibGVuZEZ1bmMoYW5pbSwgYS0+dHJhbnNmb3JtKCksIGItPnRy
YW5zZm9ybSgpLCBwcm9ncmVzcykpOwotICAgIH0KLX07Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
ckZpbHRlciA6IHB1YmxpYyBQcm9wZXJ0eVdyYXBwZXI8Y29uc3QgRmlsdGVyT3BlcmF0aW9ucyY+
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdy
YXBwZXJGaWx0ZXIoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlELCBjb25zdCBGaWx0ZXJPcGVyYXRp
b25zJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
c2V0dGVyKShjb25zdCBGaWx0ZXJPcGVyYXRpb25zJikpCi0gICAgICAgIDogUHJvcGVydHlXcmFw
cGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPihwcm9wZXJ0eUlELCBnZXR0ZXIsIHNldHRlcikK
LSAgICB7Ci0gICAgfQotCi0gICAgYm9vbCBhbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgY29uc3Qg
b3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBwcm9wZXJ0eSgpID09IENTU1Byb3BlcnR5
RmlsdGVyCi0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICAgICAgICAgIHx8IHByb3Bl
cnR5KCkgPT0gQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlcgotI2VuZGlmCi0gICAgICAg
ICAgICA7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5n
Q2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29u
c3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPjo6bV9nZXR0ZXIpKCksIChiLT4q
UHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmPjo6bV9nZXR0ZXIp
KCksIHByb2dyZXNzLCBwcm9wZXJ0eSgpKSk7Ci0gICAgfQotfTsKLQotc3RhdGljIGlubGluZSBz
aXplX3Qgc2hhZG93TGlzdExlbmd0aChjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3cpCi17Ci0gICAg
c2l6ZV90IGNvdW50OwotICAgIGZvciAoY291bnQgPSAwOyBzaGFkb3c7IHNoYWRvdyA9IHNoYWRv
dy0+bmV4dCgpKQotICAgICAgICArK2NvdW50OwotICAgIHJldHVybiBjb3VudDsKLX0KLQotc3Rh
dGljIGlubGluZSBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dGb3JCbGVuZGluZyhjb25zdCBTaGFk
b3dEYXRhKiBzcmNTaGFkb3csIGNvbnN0IFNoYWRvd0RhdGEqIG90aGVyU2hhZG93KQotewotICAg
IHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0U2hhZG93RGF0YShMYXlv
dXRQb2ludCgpLCAwLCAwLCBTaGFkb3dTdHlsZTo6Tm9ybWFsLCBmYWxzZSwgQ29sb3I6OnRyYW5z
cGFyZW50QmxhY2spOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZh
dWx0SW5zZXRTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpJbnNl
dCwgZmFsc2UsIENvbG9yOjp0cmFuc3BhcmVudEJsYWNrKTsKLSAgICBzdGF0aWMgTmV2ZXJEZXN0
cm95ZWQ8U2hhZG93RGF0YT4gZGVmYXVsdFdlYktpdEJveFNoYWRvd0RhdGEoTGF5b3V0UG9pbnQo
KSwgMCwgMCwgU2hhZG93U3R5bGU6Ok5vcm1hbCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50Qmxh
Y2spOwotICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxTaGFkb3dEYXRhPiBkZWZhdWx0SW5zZXRX
ZWJLaXRCb3hTaGFkb3dEYXRhKExheW91dFBvaW50KCksIDAsIDAsIFNoYWRvd1N0eWxlOjpJbnNl
dCwgdHJ1ZSwgQ29sb3I6OnRyYW5zcGFyZW50QmxhY2spOwotCi0gICAgaWYgKHNyY1NoYWRvdykK
LSAgICAgICAgcmV0dXJuIHNyY1NoYWRvdzsKLQotICAgIGlmIChvdGhlclNoYWRvdy0+c3R5bGUo
KSA9PSBTaGFkb3dTdHlsZTo6SW5zZXQpCi0gICAgICAgIHJldHVybiBvdGhlclNoYWRvdy0+aXNX
ZWJraXRCb3hTaGFkb3coKSA/ICZkZWZhdWx0SW5zZXRXZWJLaXRCb3hTaGFkb3dEYXRhLmdldCgp
IDogJmRlZmF1bHRJbnNldFNoYWRvd0RhdGEuZ2V0KCk7Ci0KLSAgICByZXR1cm4gb3RoZXJTaGFk
b3ctPmlzV2Via2l0Qm94U2hhZG93KCkgPyAmZGVmYXVsdFdlYktpdEJveFNoYWRvd0RhdGEuZ2V0
KCkgOiAmZGVmYXVsdFNoYWRvd0RhdGEuZ2V0KCk7Ci19Ci0KLWNsYXNzIFByb3BlcnR5V3JhcHBl
clNoYWRvdyA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdyYXBwZXJTaGFkb3co
Q1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OipnZXR0
ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShzdGQ6OnVuaXF1ZV9wdHI8
U2hhZG93RGF0YT4sIGJvb2wpKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJh
c2UocHJvcCkKLSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8
fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBjb25zdCBTaGFkb3dE
YXRhKiBzaGFkb3dBID0gKGEtPiptX2dldHRlcikoKTsKLSAgICAgICAgY29uc3QgU2hhZG93RGF0
YSogc2hhZG93QiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0KLSAgICAgICAgd2hpbGUgKHRydWUpIHsK
LSAgICAgICAgICAgIC8vIGVuZCBvZiBib3RoIGxpc3RzCi0gICAgICAgICAgICBpZiAoIXNoYWRv
d0EgJiYgIXNoYWRvd0IpCi0gICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAgICAg
ICAgIC8vIGVuZCBvZiBqdXN0IG9uZSBvZiB0aGUgbGlzdHMKLSAgICAgICAgICAgIGlmICghc2hh
ZG93QSB8fCAhc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAg
ICAgICAgIGlmICgqc2hhZG93QSAhPSAqc2hhZG93QikKLSAgICAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICAgICAgICAgIHNoYWRvd0EgPSBzaGFkb3dBLT5uZXh0KCk7Ci0gICAgICAg
ICAgICBzaGFkb3dCID0gc2hhZG93Qi0+bmV4dCgpOwotICAgICAgICB9Ci0KLSAgICAgICAgcmV0
dXJuIHRydWU7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwg
Y29uc3QgUmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAg
ICB7Ci0gICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0EgPSAoYS0+Km1fZ2V0dGVyKSgp
OwotICAgICAgICBjb25zdCBTaGFkb3dEYXRhKiBzaGFkb3dCID0gKGItPiptX2dldHRlcikoKTsK
LQotICAgICAgICBpbnQgZnJvbUxlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgoc2hhZG93QSk7Ci0g
ICAgICAgIGludCB0b0xlbmd0aCA9IHNoYWRvd0xpc3RMZW5ndGgoc2hhZG93Qik7Ci0KLSAgICAg
ICAgaWYgKGZyb21MZW5ndGggPT0gdG9MZW5ndGggfHwgKGZyb21MZW5ndGggPD0gMSAmJiB0b0xl
bmd0aCA8PSAxKSkgewotICAgICAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZFNpbXBsZU9y
TWF0Y2hlZFNoYWRvd0xpc3RzKGFuaW0sIHByb2dyZXNzLCBzaGFkb3dBLCBzaGFkb3dCKSwgZmFs
c2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0KLSAgICAgICAgKGRzdC0+Km1f
c2V0dGVyKShibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhhbmltLCBwcm9ncmVzcywgc2hhZG93
QSwgc2hhZG93QiwgZnJvbUxlbmd0aCwgdG9MZW5ndGgpLCBmYWxzZSk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNoYWRv
d0RhdGEgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMo
cHJvZ3Jlc3MpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U2hhZG93RGF0YT4gYmxlbmRTaW1wbGVPck1hdGNoZWRTaGFkb3dMaXN0cyhjb25zdCBDU1NQ
cm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IFNoYWRv
d0RhdGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IpIGNvbnN0Ci0gICAgewot
ICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gbmV3U2hhZG93RGF0YTsKLSAgICAg
ICAgU2hhZG93RGF0YSogbGFzdFNoYWRvdyA9IDA7Ci0KLSAgICAgICAgd2hpbGUgKHNoYWRvd0Eg
fHwgc2hhZG93QikgewotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0g
c2hhZG93Rm9yQmxlbmRpbmcoc2hhZG93QSwgc2hhZG93Qik7Ci0gICAgICAgICAgICBjb25zdCBT
aGFkb3dEYXRhKiBkc3RTaGFkb3cgPSBzaGFkb3dGb3JCbGVuZGluZyhzaGFkb3dCLCBzaGFkb3dB
KTsKLQotICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNoYWRvd0RhdGE+IGJsZW5kZWRTaGFk
b3cgPSBibGVuZEZ1bmMoYW5pbSwgc3JjU2hhZG93LCBkc3RTaGFkb3csIHByb2dyZXNzKTsKLSAg
ICAgICAgICAgIFNoYWRvd0RhdGEqIGJsZW5kZWRTaGFkb3dQdHIgPSBibGVuZGVkU2hhZG93Lmdl
dCgpOwotCi0gICAgICAgICAgICBpZiAoIWxhc3RTaGFkb3cpCi0gICAgICAgICAgICAgICAgbmV3
U2hhZG93RGF0YSA9IFdURk1vdmUoYmxlbmRlZFNoYWRvdyk7Ci0gICAgICAgICAgICBlbHNlCi0g
ICAgICAgICAgICAgICAgbGFzdFNoYWRvdy0+c2V0TmV4dChXVEZNb3ZlKGJsZW5kZWRTaGFkb3cp
KTsKLQotICAgICAgICAgICAgbGFzdFNoYWRvdyA9IGJsZW5kZWRTaGFkb3dQdHI7Ci0KLSAgICAg
ICAgICAgIHNoYWRvd0EgPSBzaGFkb3dBID8gc2hhZG93QS0+bmV4dCgpIDogMDsKLSAgICAgICAg
ICAgIHNoYWRvd0IgPSBzaGFkb3dCID8gc2hhZG93Qi0+bmV4dCgpIDogMDsKLSAgICAgICAgfQot
Ci0gICAgICAgIHJldHVybiBuZXdTaGFkb3dEYXRhOwotICAgIH0KLQotICAgIHN0ZDo6dW5pcXVl
X3B0cjxTaGFkb3dEYXRhPiBibGVuZE1pc21hdGNoZWRTaGFkb3dMaXN0cyhjb25zdCBDU1NQcm9w
ZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBkb3VibGUgcHJvZ3Jlc3MsIGNvbnN0IFNoYWRvd0Rh
dGEqIHNoYWRvd0EsIGNvbnN0IFNoYWRvd0RhdGEqIHNoYWRvd0IsIGludCBmcm9tTGVuZ3RoLCBp
bnQgdG9MZW5ndGgpIGNvbnN0Ci0gICAgewotICAgICAgICAvLyBUaGUgc2hhZG93cyBpbiBTaGFk
b3dEYXRhIGFyZSBzdG9yZWQgaW4gcmV2ZXJzZSBvcmRlciwgc28gd2hlbiBhbmltYXRpbmcgbWlz
bWF0Y2hlZCBsaXN0cywKLSAgICAgICAgLy8gcmV2ZXJzZSB0aGVtIGFuZCBtYXRjaCBmcm9tIHRo
ZSBlbmQuCi0gICAgICAgIFZlY3Rvcjxjb25zdCBTaGFkb3dEYXRhKiwgND4gZnJvbVNoYWRvd3Mo
ZnJvbUxlbmd0aCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSBmcm9tTGVuZ3RoIC0gMTsgaSA+PSAw
OyAtLWkpIHsKLSAgICAgICAgICAgIGZyb21TaGFkb3dzW2ldID0gc2hhZG93QTsKLSAgICAgICAg
ICAgIHNoYWRvd0EgPSBzaGFkb3dBLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICBWZWN0
b3I8Y29uc3QgU2hhZG93RGF0YSosIDQ+IHRvU2hhZG93cyh0b0xlbmd0aCk7Ci0gICAgICAgIGZv
ciAoaW50IGkgPSB0b0xlbmd0aCAtIDE7IGkgPj0gMDsgLS1pKSB7Ci0gICAgICAgICAgICB0b1No
YWRvd3NbaV0gPSBzaGFkb3dCOwotICAgICAgICAgICAgc2hhZG93QiA9IHNoYWRvd0ItPm5leHQo
KTsKLSAgICAgICAgfQotCi0gICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTaGFkb3dEYXRhPiBuZXdT
aGFkb3dEYXRhOwotCi0gICAgICAgIGludCBtYXhMZW5ndGggPSBzdGQ6Om1heChmcm9tTGVuZ3Ro
LCB0b0xlbmd0aCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbWF4TGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEqIGZyb21TaGFkb3cgPSBpIDwgZnJvbUxl
bmd0aCA/IGZyb21TaGFkb3dzW2ldIDogMDsKLSAgICAgICAgICAgIGNvbnN0IFNoYWRvd0RhdGEq
IHRvU2hhZG93ID0gaSA8IHRvTGVuZ3RoID8gdG9TaGFkb3dzW2ldIDogMDsKLQotICAgICAgICAg
ICAgY29uc3QgU2hhZG93RGF0YSogc3JjU2hhZG93ID0gc2hhZG93Rm9yQmxlbmRpbmcoZnJvbVNo
YWRvdywgdG9TaGFkb3cpOwotICAgICAgICAgICAgY29uc3QgU2hhZG93RGF0YSogZHN0U2hhZG93
ID0gc2hhZG93Rm9yQmxlbmRpbmcodG9TaGFkb3csIGZyb21TaGFkb3cpOwotCi0gICAgICAgICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4gYmxlbmRlZFNoYWRvdyA9IGJsZW5kRnVuYyhh
bmltLCBzcmNTaGFkb3csIGRzdFNoYWRvdywgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgLy8gSW5z
ZXJ0IGF0IHRoZSBzdGFydCBvZiB0aGUgbGlzdCB0byBwcmVzZXJ2ZSB0aGUgb3JkZXIuCi0gICAg
ICAgICAgICBibGVuZGVkU2hhZG93LT5zZXROZXh0KFdURk1vdmUobmV3U2hhZG93RGF0YSkpOwot
ICAgICAgICAgICAgbmV3U2hhZG93RGF0YSA9IFdURk1vdmUoYmxlbmRlZFNoYWRvdyk7Ci0gICAg
ICAgIH0KLQotICAgICAgICByZXR1cm4gbmV3U2hhZG93RGF0YTsKLSAgICB9Ci0KLSAgICBjb25z
dCBTaGFkb3dEYXRhKiAoUmVuZGVyU3R5bGU6OiptX2dldHRlcikoKSBjb25zdDsKLSAgICB2b2lk
IChSZW5kZXJTdHlsZTo6Km1fc2V0dGVyKShzdGQ6OnVuaXF1ZV9wdHI8U2hhZG93RGF0YT4sIGJv
b2wpOwotfTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IgOiBwdWJs
aWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NT
UHJvcGVydHlJRCBwcm9wLCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChSZW5kZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAg
OiBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV9nZXR0ZXIo
Z2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0gICAgfQotCi0gICAg
Ym9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJl
dHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoYSk7Ci0gICAgICAgIENvbG9y
IHRvQ29sb3IgPSB2YWx1ZShiKTsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkg
JiYgIXRvQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0KLSAgICAg
ICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJvbUNvbG9yID0gYS0+
Y29sb3IoKTsKLSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIHRv
Q29sb3IgPSBiLT5jb2xvcigpOwotCi0gICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xv
cjsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGll
bnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBS
ZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAg
ICAgICAgQ29sb3IgZnJvbUNvbG9yID0gdmFsdWUoYSk7Ci0gICAgICAgIENvbG9yIHRvQ29sb3Ig
PSB2YWx1ZShiKTsKLQotICAgICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29s
b3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgcmV0dXJuOwotCi0gICAgICAgIGlmICghZnJvbUNv
bG9yLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGZyb21Db2xvciA9IGEtPmNvbG9yKCk7Ci0gICAg
ICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICB0b0NvbG9yID0gYi0+Y29s
b3IoKTsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgZnJvbUNvbG9y
LCB0b0NvbG9yLCBwcm9ncmVzcykpOwotICAgIH0KLQotICAgIENvbG9yIHZhbHVlKGNvbnN0IFJl
bmRlclN0eWxlKiBhKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIChhLT4qbV9nZXR0ZXIp
KCk7Ci0gICAgfQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3Qg
UmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSog
cmVzdWx0LCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICAvLyBG
SVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmltYXRpb25z
LCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHkoKSkg
PDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIgYXQgIiA8
PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jlc3MpIDw8
ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAg
ICBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci0gICAgdm9p
ZCAoUmVuZGVyU3R5bGU6OiptX3NldHRlcikoY29uc3QgQ29sb3ImKTsKLX07Ci0KLQotZW51bSBN
YXliZUludmFsaWRDb2xvclRhZyB7IE1heWJlSW52YWxpZENvbG9yIH07Ci1jbGFzcyBQcm9wZXJ0
eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvciA6IHB1YmxpYyBBbmltYXRpb25Qcm9wZXJ0eVdy
YXBwZXJCYXNlIHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQ
cm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIGNv
bnN0IENvbG9yJiAoUmVuZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0
eWxlOjoqc2V0dGVyKShjb25zdCBDb2xvciYpLAotICAgICAgICBjb25zdCBDb2xvciYgKFJlbmRl
clN0eWxlOjoqdmlzaXRlZEdldHRlcikoKSBjb25zdCwgdm9pZCAoUmVuZGVyU3R5bGU6Oip2aXNp
dGVkU2V0dGVyKShjb25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3Jh
cHBlckJhc2UocHJvcCkKLSAgICAgICAgLCBtX3dyYXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdy
YXBwZXJDb2xvcj4ocHJvcCwgZ2V0dGVyLCBzZXR0ZXIpKQotICAgICAgICAsIG1fdmlzaXRlZFdy
YXBwZXIobWFrZVVuaXF1ZTxQcm9wZXJ0eVdyYXBwZXJDb2xvcj4ocHJvcCwgdmlzaXRlZEdldHRl
ciwgdmlzaXRlZFNldHRlcikpCi0gICAgewotICAgIH0KLSAgICBQcm9wZXJ0eVdyYXBwZXJWaXNp
dGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUlEIHByb3AsIE1heWJlSW52YWxpZENvbG9yVGFn
LCBjb25zdCBDb2xvciYgKFJlbmRlclN0eWxlOjoqZ2V0dGVyKSgpIGNvbnN0LCB2b2lkIChSZW5k
ZXJTdHlsZTo6KnNldHRlcikoY29uc3QgQ29sb3ImKSwKLSAgICAgICAgY29uc3QgQ29sb3ImIChS
ZW5kZXJTdHlsZTo6KnZpc2l0ZWRHZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoq
dmlzaXRlZFNldHRlcikoY29uc3QgQ29sb3ImKSkKLSAgICAgICAgOiBBbmltYXRpb25Qcm9wZXJ0
eVdyYXBwZXJCYXNlKHByb3ApCi0gICAgICAgICwgbV93cmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVy
dHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3I+KHByb3AsIGdldHRlciwgc2V0dGVyKSkKLSAgICAg
ICAgLCBtX3Zpc2l0ZWRXcmFwcGVyKG1ha2VVbmlxdWU8UHJvcGVydHlXcmFwcGVyTWF5YmVJbnZh
bGlkQ29sb3I+KHByb3AsIHZpc2l0ZWRHZXR0ZXIsIHZpc2l0ZWRTZXR0ZXIpKQotICAgIHsKLSAg
ICB9Ci0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0
eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fd3JhcHBlci0+
ZXF1YWxzKGEsIGIpICYmIG1fdmlzaXRlZFdyYXBwZXItPmVxdWFscyhhLCBiKTsKLSAgICB9Ci0g
ICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBSZW5k
ZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIs
IGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIG1fd3JhcHBl
ci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAgICAgIG1fdmlzaXRlZFdy
YXBwZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwotICAgIH0KLQotI2lmICFM
T0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgY29uc3QgUmVuZGVyU3R5bGUqIHJlc3VsdCwgZG91YmxlIHByb2dy
ZXNzKSBjb25zdCBmaW5hbAotICAgIHsKLSAgICAgICAgbV93cmFwcGVyLT5sb2dCbGVuZChhLCBi
LCByZXN1bHQsIHByb2dyZXNzKTsKLSAgICAgICAgbV92aXNpdGVkV3JhcHBlci0+bG9nQmxlbmQo
YSwgYiwgcmVzdWx0LCBwcm9ncmVzcyk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2U+IG1fd3JhcHBlcjsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZT4gbV92aXNp
dGVkV3JhcHBlcjsKLX07Ci0KLS8vIFdyYXBwZXIgYmFzZSBjbGFzcyBmb3IgYW4gYW5pbWF0YWJs
ZSBwcm9wZXJ0eSBpbiBhIEZpbGxMYXllcgotY2xhc3MgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVy
dHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0g
ICAgRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5KQotICAgICAgICA6IG1fcHJvcGVydHkocHJvcGVydHkpCi0gICAgewotICAgIH0KLSAg
ICB2aXJ0dWFsIH5GaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKCkgPSBkZWZh
dWx0OwotCi0gICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJv
cGVydHk7IH0KLQotICAgIHZpcnR1YWwgYm9vbCBlcXVhbHMoY29uc3QgRmlsbExheWVyKiwgY29u
c3QgRmlsbExheWVyKikgY29uc3QgPSAwOwotICAgIHZpcnR1YWwgdm9pZCBibGVuZChjb25zdCBD
U1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiwgRmlsbExheWVyKiwgY29uc3QgRmlsbExheWVyKiwg
Y29uc3QgRmlsbExheWVyKiwgZG91YmxlKSBjb25zdCA9IDA7Ci0KLSNpZiAhTE9HX0RJU0FCTEVE
Ci0gICAgdmlydHVhbCB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqLCBjb25zdCBGaWxsTGF5ZXIqLCBkb3VibGUpIGNvbnN0ID0gMDsKLSNlbmRp
ZgotcHJpdmF0ZToKLSAgICBDU1NQcm9wZXJ0eUlEIG1fcHJvcGVydHk7Ci19OwotCi10ZW1wbGF0
ZSA8dHlwZW5hbWUgVD4KLWNsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlciA6IHB1
YmxpYyBGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlIHsKLSAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKLSAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShGaWxsTGF5ZXJQcm9w
ZXJ0eVdyYXBwZXJHZXR0ZXIpOwotcHVibGljOgotICAgIEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBUIChGaWxsTGF5ZXI6OipnZXR0ZXIpKCkg
Y29uc3QpCi0gICAgICAgIDogRmlsbExheWVyQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShw
cm9wZXJ0eSkKLSAgICAgICAgLCBtX2dldHRlcihnZXR0ZXIpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgZXF1YWxzKGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAgICAgIHJldHVy
biB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgICAgIHJldHVybiAoYS0+Km1fZ2V0dGVyKSgpID09IChiLT4qbV9nZXR0ZXIpKCk7Ci0g
ICAgfQotCi0gICAgVCB2YWx1ZShjb25zdCBGaWxsTGF5ZXIqIGxheWVyKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIChsYXllci0+Km1fZ2V0dGVyKSgpOwotICAgIH0KLQotI2lmICFMT0df
RElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5kKGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25z
dCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgTE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0
cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdldFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAi
IGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRvICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRl
eHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAt
PiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAgIH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAg
VCAoRmlsbExheWVyOjoqbV9nZXR0ZXIpKCkgY29uc3Q7Ci19OwotCi10ZW1wbGF0ZSA8dHlwZW5h
bWUgVD4KLWNsYXNzIEZpbGxMYXllclByb3BlcnR5V3JhcHBlciA6IHB1YmxpYyBGaWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgVCYgKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAo
RmlsbExheWVyOjoqc2V0dGVyKShUKSkKLSAgICAgICAgOiBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBw
ZXJHZXR0ZXI8Y29uc3QgVCY+KHByb3BlcnR5LCBnZXR0ZXIpCi0gICAgICAgICwgbV9zZXR0ZXIo
c2V0dGVyKQotICAgIHsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5
QmxlbmRpbmdDbGllbnQqIGFuaW0sIEZpbGxMYXllciogZHN0LCBjb25zdCBGaWxsTGF5ZXIqIGEs
IGNvbnN0IEZpbGxMYXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgKGRzdC0+Km1fc2V0dGVyKShibGVuZEZ1bmMoYW5pbSwgKGEtPipGaWxsTGF5
ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgKGItPipGaWxs
TGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgVCY+OjptX2dldHRlcikoKSwgcHJvZ3Jl
c3MpKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25z
dCBGaWxsTGF5ZXIqIHJlc3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIq
IGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19X
SVRIX1NUUkVBTShBbmltYXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9w
ZXJ0eU5hbWUoRmlsbExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6cHJvcGVy
dHkoKSkKLSAgICAgICAgICAgIDw8ICIgZnJvbSAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBUJj46OnZhbHVlKGEpCi0gICAgICAgICAgICA8PCAiIHRvICIgPDwgRmls
bExheWVyUHJvcGVydHlXcmFwcGVyR2V0dGVyPGNvbnN0IFQmPjo6dmFsdWUoYikKLSAgICAgICAg
ICAgIDw8ICIgYXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdl
cnMocHJvZ3Jlc3MpIDw8ICIgLT4gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8
Y29uc3QgVCY+Ojp2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLQotcHJvdGVjdGVkOgot
ICAgIHZvaWQgKEZpbGxMYXllcjo6Km1fc2V0dGVyKShUKTsKLX07Ci0KLWNsYXNzIEZpbGxMYXll
clBvc2l0aW9uUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5V3JhcHBl
ckdldHRlcjxjb25zdCBMZW5ndGgmPiB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1w
dWJsaWM6Ci0gICAgRmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSwgY29uc3QgTGVuZ3RoJiAoRmlsbExheWVyOjoqbGVuZ3RoR2V0dGVyKSgpIGNv
bnN0LCB2b2lkIChGaWxsTGF5ZXI6OipsZW5ndGhTZXR0ZXIpKExlbmd0aCksIEVkZ2UgKEZpbGxM
YXllcjo6Km9yaWdpbkdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVyOjoqb3JpZ2luU2V0
dGVyKShFZGdlKSwgRWRnZSBmYXJFZGdlKQotICAgICAgICA6IEZpbGxMYXllclByb3BlcnR5V3Jh
cHBlckdldHRlcjxjb25zdCBMZW5ndGgmPihwcm9wZXJ0eSwgbGVuZ3RoR2V0dGVyKQotICAgICAg
ICAsIG1fbGVuZ3RoU2V0dGVyKGxlbmd0aFNldHRlcikKLSAgICAgICAgLCBtX29yaWdpbkdldHRl
cihvcmlnaW5HZXR0ZXIpCi0gICAgICAgICwgbV9vcmlnaW5TZXR0ZXIob3JpZ2luU2V0dGVyKQot
ICAgICAgICAsIG1fZmFyRWRnZShmYXJFZGdlKQotICAgIHsKLSAgICB9Ci0KLSAgICBib29sIGVx
dWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXllciogYikgY29uc3Qgb3ZlcnJp
ZGUKLSAgICB7Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAg
ICAgIExlbmd0aCBmcm9tTGVuZ3RoID0gKGEtPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0
ZXI8Y29uc3QgTGVuZ3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICBMZW5ndGggdG9MZW5ndGgg
PSAoYi0+KkZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxjb25zdCBMZW5ndGgmPjo6bV9n
ZXR0ZXIpKCk7Ci0gICAgICAgIAotICAgICAgICBFZGdlIGZyb21FZGdlID0gKGEtPiptX29yaWdp
bkdldHRlcikoKTsKLSAgICAgICAgRWRnZSB0b0VkZ2UgPSAoYi0+Km1fb3JpZ2luR2V0dGVyKSgp
OwotICAgICAgICAKLSAgICAgICAgcmV0dXJuIGZyb21MZW5ndGggPT0gdG9MZW5ndGggJiYgZnJv
bUVkZ2UgPT0gdG9FZGdlOwotICAgIH0KLQotICAgIHZvaWQgYmxlbmQoY29uc3QgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudCogYW5pbSwgRmlsbExheWVyKiBkc3QsIGNvbnN0IEZpbGxMYXllciog
YSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0g
ICAgewotICAgICAgICBMZW5ndGggZnJvbUxlbmd0aCA9IChhLT4qRmlsbExheWVyUHJvcGVydHlX
cmFwcGVyR2V0dGVyPGNvbnN0IExlbmd0aCY+OjptX2dldHRlcikoKTsKLSAgICAgICAgTGVuZ3Ro
IHRvTGVuZ3RoID0gKGItPipGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8Y29uc3QgTGVu
Z3RoJj46Om1fZ2V0dGVyKSgpOwotICAgICAgICAKLSAgICAgICAgRWRnZSBmcm9tRWRnZSA9IChh
LT4qbV9vcmlnaW5HZXR0ZXIpKCk7Ci0gICAgICAgIEVkZ2UgdG9FZGdlID0gKGItPiptX29yaWdp
bkdldHRlcikoKTsKLSAgICAgICAgCi0gICAgICAgIGlmIChmcm9tRWRnZSAhPSB0b0VkZ2UpIHsK
LSAgICAgICAgICAgIC8vIENvbnZlcnQgdGhlIHJpZ2h0L2JvdHRvbSBpbnRvIGEgY2FsYyBleHBy
ZXNzaW9uLAotICAgICAgICAgICAgaWYgKGZyb21FZGdlID09IG1fZmFyRWRnZSkKLSAgICAgICAg
ICAgICAgICBmcm9tTGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKGZyb21M
ZW5ndGgpOwotICAgICAgICAgICAgZWxzZSBpZiAodG9FZGdlID09IG1fZmFyRWRnZSkgewotICAg
ICAgICAgICAgICAgIHRvTGVuZ3RoID0gY29udmVydFRvMTAwUGVyY2VudE1pbnVzTGVuZ3RoKHRv
TGVuZ3RoKTsKLSAgICAgICAgICAgICAgICAoZHN0LT4qbV9vcmlnaW5TZXR0ZXIpKGZyb21FZGdl
KTsgLy8gTm93IHdlIGhhdmUgYSBjYWxjKDEwMCUgLSBsKSwgaXQncyByZWxhdGl2ZSB0byB0aGUg
bGVmdC90b3AgZWRnZS4KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotCi0gICAgICAgIChkc3Qt
PiptX2xlbmd0aFNldHRlcikoYmxlbmRGdW5jKGFuaW0sIGZyb21MZW5ndGgsIHRvTGVuZ3RoLCBw
cm9ncmVzcykpOwotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2b2lkIGxvZ0JsZW5k
KGNvbnN0IEZpbGxMYXllciogcmVzdWx0LCBjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxM
YXllciogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAg
TE9HX1dJVEhfU1RSRUFNKEFuaW1hdGlvbnMsIHN0cmVhbSA8PCAiICBibGVuZGluZyAiIDw8IGdl
dFByb3BlcnR5TmFtZShwcm9wZXJ0eSgpKSA8PCAiIGZyb20gIiA8PCB2YWx1ZShhKSA8PCAiIHRv
ICIgPDwgdmFsdWUoYikgPDwgIiBhdCAiIDw8IFRleHRTdHJlYW06OkZvcm1hdE51bWJlclJlc3Bl
Y3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykgPDwgIiAtPiAiIDw8IHZhbHVlKHJlc3VsdCkpOwotICAg
IH0KLSNlbmRpZgotCi1wcm90ZWN0ZWQ6Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9sZW5ndGhT
ZXR0ZXIpKExlbmd0aCk7Ci0gICAgRWRnZSAoRmlsbExheWVyOjoqbV9vcmlnaW5HZXR0ZXIpKCkg
Y29uc3Q7Ci0gICAgdm9pZCAoRmlsbExheWVyOjoqbV9vcmlnaW5TZXR0ZXIpKEVkZ2UpOwotICAg
IEVkZ2UgbV9mYXJFZGdlOwotfTsKLQotdGVtcGxhdGUgPHR5cGVuYW1lIFQ+Ci1jbGFzcyBGaWxs
TGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEZpbGxMYXllclByb3BlcnR5
V3JhcHBlckdldHRlcjxUKj4gewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGlj
OgotICAgIEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgVCogKEZpbGxMYXllcjo6KmdldHRlcikoKSBjb25zdCwgdm9pZCAoRmlsbExheWVy
Ojoqc2V0dGVyKShSZWZQdHI8VD4mJikpCi0gICAgICAgIDogRmlsbExheWVyUHJvcGVydHlXcmFw
cGVyR2V0dGVyPFQqPihwcm9wZXJ0eSwgZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRl
cikKLSAgICB7Ci0gICAgfQotCi0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5k
aW5nQ2xpZW50KiBhbmltLCBGaWxsTGF5ZXIqIGRzdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25z
dCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9ncmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0g
ICAgICAgIChkc3QtPiptX3NldHRlcikoYmxlbmRGdW5jKGFuaW0sIChhLT4qRmlsbExheWVyUHJv
cGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIChiLT4qRmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyR2V0dGVyPFQqPjo6bV9nZXR0ZXIpKCksIHByb2dyZXNzKSk7Ci0gICAgfQotCi0j
aWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgRmlsbExheWVyKiByZXN1
bHQsIGNvbnN0IEZpbGxMYXllciogYSwgY29uc3QgRmlsbExheWVyKiBiLCBkb3VibGUgcHJvZ3Jl
c3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0
aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nICIgPDwgZ2V0UHJvcGVydHlOYW1lKEZpbGxMYXll
clByb3BlcnR5V3JhcHBlckdldHRlcjxUKj46OnByb3BlcnR5KCkpCi0gICAgICAgICAgICA8PCAi
IGZyb20gIiA8PCBGaWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXJHZXR0ZXI8VCo+Ojp2YWx1ZShhKQot
ICAgICAgICAgICAgPDwgIiB0byAiIDw8IEZpbGxMYXllclByb3BlcnR5V3JhcHBlckdldHRlcjxU
Kj46OnZhbHVlKGIpCi0gICAgICAgICAgICA8PCAiIGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0
TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHByb2dyZXNzKSA8PCAiIC0+ICIgPDwgRmlsbExheWVy
UHJvcGVydHlXcmFwcGVyR2V0dGVyPFQqPjo6dmFsdWUocmVzdWx0KSk7Ci0gICAgfQotI2VuZGlm
Ci0KLXByb3RlY3RlZDoKLSAgICB2b2lkIChGaWxsTGF5ZXI6OiptX3NldHRlcikoUmVmUHRyPFQ+
JiYpOwotfTsKLQotY2xhc3MgRmlsbExheWVyU3R5bGVJbWFnZVByb3BlcnR5V3JhcHBlciA6IHB1
YmxpYyBGaWxsTGF5ZXJSZWZDb3VudGVkUHJvcGVydHlXcmFwcGVyPFN0eWxlSW1hZ2U+IHsKLSAg
ICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBGaWxsTGF5ZXJTdHlsZUlt
YWdlUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJvcGVydHksIFN0eWxlSW1hZ2UqIChG
aWxsTGF5ZXI6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKEZpbGxMYXllcjo6KnNldHRlcikoUmVm
UHRyPFN0eWxlSW1hZ2U+JiYpKQotICAgICAgICA6IEZpbGxMYXllclJlZkNvdW50ZWRQcm9wZXJ0
eVdyYXBwZXI8U3R5bGVJbWFnZT4ocHJvcGVydHksIGdldHRlciwgc2V0dGVyKQotICAgIHsKLSAg
ICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBGaWxsTGF5ZXIqIGEsIGNvbnN0IEZpbGxMYXll
ciogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgaWYgKGEgPT0gYikKLSAgICAgICAg
ICAgcmV0dXJuIHRydWU7Ci0gICAgICAgaWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwotCi0gICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQSA9IChhLT4qbV9nZXR0ZXIpKCk7
Ci0gICAgICAgIFN0eWxlSW1hZ2UqIGltYWdlQiA9IChiLT4qbV9nZXR0ZXIpKCk7Ci0gICAgICAg
IHJldHVybiBhcmVQb2ludGluZ1RvRXF1YWxEYXRhKGltYWdlQSwgaW1hZ2VCKTsKLSAgICB9Ci0K
LSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9pZCBsb2dCbGVuZChjb25zdCBGaWxsTGF5ZXIqIHJl
c3VsdCwgY29uc3QgRmlsbExheWVyKiBhLCBjb25zdCBGaWxsTGF5ZXIqIGIsIGRvdWJsZSBwcm9n
cmVzcykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmlt
YXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgIiA8PCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVy
dHkoKSkgPDwgIiBmcm9tICIgPDwgdmFsdWUoYSkgPDwgIiB0byAiIDw8IHZhbHVlKGIpIDw8ICIg
YXQgIiA8PCBUZXh0U3RyZWFtOjpGb3JtYXROdW1iZXJSZXNwZWN0aW5nSW50ZWdlcnMocHJvZ3Jl
c3MpIDw8ICIgLT4gIiA8PCB2YWx1ZShyZXN1bHQpKTsKLSAgICB9Ci0jZW5kaWYKLX07Ci0KLWNs
YXNzIEZpbGxMYXllcnNQcm9wZXJ0eVdyYXBwZXIgOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlX
cmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAg
dHlwZWRlZiBjb25zdCBGaWxsTGF5ZXImIChSZW5kZXJTdHlsZTo6KkxheWVyc0dldHRlcikoKSBj
b25zdDsKLSAgICB0eXBlZGVmIEZpbGxMYXllciYgKFJlbmRlclN0eWxlOjoqTGF5ZXJzQWNjZXNz
b3IpKCk7Ci0KLSAgICBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5SUQgcHJv
cGVydHksIExheWVyc0dldHRlciBnZXR0ZXIsIExheWVyc0FjY2Vzc29yIGFjY2Vzc29yKQotICAg
ICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJvcGVydHkpCi0gICAgICAgICwg
bV9sYXllcnNHZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fbGF5ZXJzQWNjZXNzb3IoYWNjZXNz
b3IpCi0gICAgewotICAgICAgICBzd2l0Y2ggKHByb3BlcnR5KSB7Ci0gICAgICAgIGNhc2UgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRpb25YOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Vi
a2l0TWFza1Bvc2l0aW9uWDoKLSAgICAgICAgICAgIG1fZmlsbExheWVyUHJvcGVydHlXcmFwcGVy
ID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJQb3NpdGlvblByb3BlcnR5V3JhcHBlcj4ocHJvcGVydHks
ICZGaWxsTGF5ZXI6OnhQb3NpdGlvbiwgJkZpbGxMYXllcjo6c2V0WFBvc2l0aW9uLCAmRmlsbExh
eWVyOjpiYWNrZ3JvdW5kWE9yaWdpbiwgJkZpbGxMYXllcjo6c2V0QmFja2dyb3VuZFhPcmlnaW4s
IEVkZ2U6OlJpZ2h0KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIENTU1Byb3Bl
cnR5QmFja2dyb3VuZFBvc2l0aW9uWToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdE1h
c2tQb3NpdGlvblk6Ci0gICAgICAgICAgICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1h
a2VVbmlxdWU8RmlsbExheWVyUG9zaXRpb25Qcm9wZXJ0eVdyYXBwZXI+KHByb3BlcnR5LCAmRmls
bExheWVyOjp5UG9zaXRpb24sICZGaWxsTGF5ZXI6OnNldFlQb3NpdGlvbiwgJkZpbGxMYXllcjo6
YmFja2dyb3VuZFlPcmlnaW4sICZGaWxsTGF5ZXI6OnNldEJhY2tncm91bmRZT3JpZ2luLCBFZGdl
OjpCb3R0b20pOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIGNhc2UgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kU2l6ZToKLSAgICAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tncm91bmRT
aXplOgotICAgICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFza1NpemU6Ci0gICAgICAgICAg
ICBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlciA9IG1ha2VVbmlxdWU8RmlsbExheWVyUHJvcGVy
dHlXcmFwcGVyPExlbmd0aFNpemU+Pihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6c2l6ZUxlbmd0aCwg
JkZpbGxMYXllcjo6c2V0U2l6ZUxlbmd0aCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZToKLSAgICAgICAgICAgIG1fZmlsbExheWVy
UHJvcGVydHlXcmFwcGVyID0gbWFrZVVuaXF1ZTxGaWxsTGF5ZXJTdHlsZUltYWdlUHJvcGVydHlX
cmFwcGVyPihwcm9wZXJ0eSwgJkZpbGxMYXllcjo6aW1hZ2UsICZGaWxsTGF5ZXI6OnNldEltYWdl
KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHls
ZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAg
ICBpZiAoYSA9PSBiKQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8
fCAhYikKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBhdXRvKiBmcm9tTGF5
ZXIgPSAmKGEtPiptX2xheWVyc0dldHRlcikoKTsKLSAgICAgICAgYXV0byogdG9MYXllciA9ICYo
Yi0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotCi0gICAgICAgIHdoaWxlIChmcm9tTGF5ZXIgJiYgdG9M
YXllcikgewotICAgICAgICAgICAgaWYgKCFtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlci0+ZXF1
YWxzKGZyb21MYXllciwgdG9MYXllcikpCi0gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwot
Ci0gICAgICAgICAgICBmcm9tTGF5ZXIgPSBmcm9tTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAg
IHRvTGF5ZXIgPSB0b0xheWVyLT5uZXh0KCk7Ci0gICAgICAgIH0KLQotICAgICAgICByZXR1cm4g
dHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdD
bGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25z
dCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsK
LSAgICAgICAgYXV0byogYUxheWVyID0gJihhLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0gICAgICAg
IGF1dG8qIGJMYXllciA9ICYoYi0+Km1fbGF5ZXJzR2V0dGVyKSgpOwotICAgICAgICBhdXRvKiBk
c3RMYXllciA9ICYoZHN0LT4qbV9sYXllcnNBY2Nlc3NvcikoKTsKLQotICAgICAgICB3aGlsZSAo
YUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgewotICAgICAgICAgICAgbV9maWxsTGF5ZXJQ
cm9wZXJ0eVdyYXBwZXItPmJsZW5kKGFuaW0sIGRzdExheWVyLCBhTGF5ZXIsIGJMYXllciwgcHJv
Z3Jlc3MpOwotICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7Ci0gICAgICAgICAg
ICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAgIGRzdExheWVyID0gZHN0TGF5
ZXItPm5leHQoKTsKLSAgICAgICAgfQotICAgIH0KLQotI2lmICFMT0dfRElTQUJMRUQKLSAgICB2
b2lkIGxvZ0JsZW5kKGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tLCBjb25zdCBSZW5kZXJTdHlsZSog
dG8sIGNvbnN0IFJlbmRlclN0eWxlKiByZXN1bHQsIGRvdWJsZSBwcm9ncmVzcykgY29uc3QgZmlu
YWwKLSAgICB7Ci0gICAgICAgIGF1dG8qIGFMYXllciA9ICYoZnJvbS0+Km1fbGF5ZXJzR2V0dGVy
KSgpOwotICAgICAgICBhdXRvKiBiTGF5ZXIgPSAmKHRvLT4qbV9sYXllcnNHZXR0ZXIpKCk7Ci0g
ICAgICAgIGF1dG8qIGRzdExheWVyID0gJihyZXN1bHQtPiptX2xheWVyc0dldHRlcikoKTsKLQot
ICAgICAgICB3aGlsZSAoYUxheWVyICYmIGJMYXllciAmJiBkc3RMYXllcikgewotICAgICAgICAg
ICAgbV9maWxsTGF5ZXJQcm9wZXJ0eVdyYXBwZXItPmxvZ0JsZW5kKGRzdExheWVyLCBhTGF5ZXIs
IGJMYXllciwgcHJvZ3Jlc3MpOwotICAgICAgICAgICAgYUxheWVyID0gYUxheWVyLT5uZXh0KCk7
Ci0gICAgICAgICAgICBiTGF5ZXIgPSBiTGF5ZXItPm5leHQoKTsKLSAgICAgICAgICAgIGRzdExh
eWVyID0gZHN0TGF5ZXItPm5leHQoKTsKLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi1wcml2
YXRlOgotICAgIHN0ZDo6dW5pcXVlX3B0cjxGaWxsTGF5ZXJBbmltYXRpb25Qcm9wZXJ0eVdyYXBw
ZXJCYXNlPiBtX2ZpbGxMYXllclByb3BlcnR5V3JhcHBlcjsKLQotICAgIExheWVyc0dldHRlciBt
X2xheWVyc0dldHRlcjsKLSAgICBMYXllcnNBY2Nlc3NvciBtX2xheWVyc0FjY2Vzc29yOwotfTsK
LQotY2xhc3MgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyIDogcHVibGljIEFuaW1hdGlvblByb3Bl
cnR5V3JhcHBlckJhc2UgewotICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgot
ICAgIFNob3J0aGFuZFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBWZWN0
b3I8QW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IGxvbmdoYW5kV3JhcHBlcnMpCi0gICAg
ICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShwcm9wZXJ0eSkKLSAgICAgICAgLCBt
X3Byb3BlcnR5V3JhcHBlcnMoV1RGTW92ZShsb25naGFuZFdyYXBwZXJzKSkKLSAgICB7Ci0gICAg
fQotCi0gICAgYm9vbCBpc1Nob3J0aGFuZFdyYXBwZXIoKSBjb25zdCBvdmVycmlkZSB7IHJldHVy
biB0cnVlOyB9Ci0KLSAgICBib29sIGVxdWFscyhjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBpZiAoYSA9PSBi
KQotICAgICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgICAgIGlmICghYSB8fCAhYikKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgICAgICBmb3IgKGF1dG8mIHdyYXBwZXIgOiBtX3By
b3BlcnR5V3JhcHBlcnMpIHsKLSAgICAgICAgICAgIGlmICghd3JhcHBlci0+ZXF1YWxzKGEsIGIp
KQotICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgfQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRp
bmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBj
b25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAg
IHsKLSAgICAgICAgZm9yIChhdXRvJiB3cmFwcGVyIDogbV9wcm9wZXJ0eVdyYXBwZXJzKQotICAg
ICAgICAgICAgd3JhcHBlci0+YmxlbmQoYW5pbSwgZHN0LCBhLCBiLCBwcm9ncmVzcyk7Ci0gICAg
fQotCi0jaWYgIUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5
bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiLCBjb25zdCBSZW5kZXJTdHlsZSogZHN0LCBkb3Vi
bGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAgICBmb3IgKGF1dG8mIHdyYXBw
ZXIgOiBtX3Byb3BlcnR5V3JhcHBlcnMpCi0gICAgICAgICAgICB3cmFwcGVyLT5sb2dCbGVuZChh
LCBiLCBkc3QsIHByb2dyZXNzKTsKLSAgICB9Ci0jZW5kaWYKLQotICAgIGNvbnN0IFZlY3RvcjxB
bmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4mIHByb3BlcnR5V3JhcHBlcnMoKSBjb25zdCB7
IHJldHVybiBtX3Byb3BlcnR5V3JhcHBlcnM7IH0KLQotcHJpdmF0ZToKLSAgICBWZWN0b3I8QW5p
bWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSo+IG1fcHJvcGVydHlXcmFwcGVyczsKLX07Ci0KLWNs
YXNzIFByb3BlcnR5V3JhcHBlckZsZXggOiBwdWJsaWMgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgUHJvcGVy
dHlXcmFwcGVyRmxleCgpCi0gICAgICAgIDogQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZShD
U1NQcm9wZXJ0eUZsZXgpCi0gICAgewotICAgIH0KLQotICAgIGJvb2wgZXF1YWxzKGNvbnN0IFJl
bmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYikgY29uc3Qgb3ZlcnJpZGUKLSAgICB7
Ci0gICAgICAgIGlmIChhID09IGIpCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICAgICAg
aWYgKCFhIHx8ICFiKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIHJldHVy
biBhLT5mbGV4QmFzaXMoKSA9PSBiLT5mbGV4QmFzaXMoKSAmJiBhLT5mbGV4R3JvdygpID09IGIt
PmZsZXhHcm93KCkgJiYgYS0+ZmxleFNocmluaygpID09IGItPmZsZXhTaHJpbmsoKTsKLSAgICB9
Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0s
IFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYiwgZG91YmxlIHByb2dyZXNzKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgZHN0
LT5zZXRGbGV4QmFzaXMoYmxlbmRGdW5jKGFuaW0sIGEtPmZsZXhCYXNpcygpLCBiLT5mbGV4QmFz
aXMoKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgZHN0LT5zZXRGbGV4R3JvdyhibGVuZEZ1bmMoYW5p
bSwgYS0+ZmxleEdyb3coKSwgYi0+ZmxleEdyb3coKSwgcHJvZ3Jlc3MpKTsKLSAgICAgICAgZHN0
LT5zZXRGbGV4U2hyaW5rKGJsZW5kRnVuYyhhbmltLCBhLT5mbGV4U2hyaW5rKCksIGItPmZsZXhT
aHJpbmsoKSwgcHJvZ3Jlc3MpKTsKLSAgICB9Ci0KLSNpZiAhTE9HX0RJU0FCTEVECi0gICAgdm9p
ZCBsb2dCbGVuZChjb25zdCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgY29uc3Qg
UmVuZGVyU3R5bGUqLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IGZpbmFsCi0gICAgewotICAgICAg
ICAvLyBGSVhNRTogYmV0dGVyIGxvZ2dpbmcuCi0gICAgICAgIExPR19XSVRIX1NUUkVBTShBbmlt
YXRpb25zLCBzdHJlYW0gPDwgIiAgYmxlbmRpbmcgZmxleCBhdCAiIDw8IFRleHRTdHJlYW06OkZv
cm1hdE51bWJlclJlc3BlY3RpbmdJbnRlZ2Vycyhwcm9ncmVzcykpOwotICAgIH0KLSNlbmRpZgot
fTsKLQotY2xhc3MgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQgOiBwdWJsaWMgQW5pbWF0aW9uUHJv
cGVydHlXcmFwcGVyQmFzZSB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6
Ci0gICAgUHJvcGVydHlXcmFwcGVyU1ZHUGFpbnQoQ1NTUHJvcGVydHlJRCBwcm9wLCBTVkdQYWlu
dFR5cGUgKFJlbmRlclN0eWxlOjoqcGFpbnRUeXBlR2V0dGVyKSgpIGNvbnN0LCBDb2xvciAoUmVu
ZGVyU3R5bGU6OipnZXR0ZXIpKCkgY29uc3QsIHZvaWQgKFJlbmRlclN0eWxlOjoqc2V0dGVyKShj
b25zdCBDb2xvciYpKQotICAgICAgICA6IEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UocHJv
cCkKLSAgICAgICAgLCBtX3BhaW50VHlwZUdldHRlcihwYWludFR5cGVHZXR0ZXIpCi0gICAgICAg
ICwgbV9nZXR0ZXIoZ2V0dGVyKQotICAgICAgICAsIG1fc2V0dGVyKHNldHRlcikKLSAgICB7Ci0g
ICAgfQotCi0gICAgYm9vbCBlcXVhbHMoY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRl
clN0eWxlKiBiKSBjb25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKGEgPT0gYikKLSAg
ICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICBpZiAoIWEgfHwgIWIpCi0gICAgICAgICAg
ICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkg
IT0gKGItPiptX3BhaW50VHlwZUdldHRlcikoKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
LQotICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQgYW5pbWF0aW9ucyBiZXR3ZWVuIFNWR1BhaW50
cyB0aGF0IGFyZSBwdXJlIENvbG9yIHZhbHVlcy4KLSAgICAgICAgLy8gRm9yIGV2ZXJ5dGhpbmcg
ZWxzZSB3ZSBtdXN0IHJldHVybiB0cnVlIGZvciB0aGlzIG1ldGhvZCwgb3RoZXJ3aXNlCi0gICAg
ICAgIC8vIHdlIHdpbGwgdHJ5IHRvIGFuaW1hdGUgYmV0d2VlbiB2YWx1ZXMgZm9yZXZlci4KLSAg
ICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIpKCkgPT0gU1ZHUGFpbnRUeXBlOjpSR0JD
b2xvcikgewotICAgICAgICAgICAgQ29sb3IgZnJvbUNvbG9yID0gKGEtPiptX2dldHRlcikoKTsK
LSAgICAgICAgICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotCi0gICAgICAg
ICAgICBpZiAoIWZyb21Db2xvci5pc1ZhbGlkKCkgJiYgIXRvQ29sb3IuaXNWYWxpZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgICAgICAgICBpZiAoIWZyb21Db2xvci5p
c1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgZnJvbUNvbG9yID0gQ29sb3IoKTsKLSAgICAgICAg
ICAgIGlmICghdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICAgICAgdG9Db2xvciA9IENv
bG9yKCk7Ci0KLSAgICAgICAgICAgIHJldHVybiBmcm9tQ29sb3IgPT0gdG9Db2xvcjsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0KLSAgICB2b2lkIGJsZW5kKGNvbnN0
IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqIGFuaW0sIFJlbmRlclN0eWxlKiBkc3QsIGNvbnN0
IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHlsZSogYiwgZG91YmxlIHByb2dyZXNzKSBj
b25zdCBvdmVycmlkZQotICAgIHsKLSAgICAgICAgaWYgKChhLT4qbV9wYWludFR5cGVHZXR0ZXIp
KCkgIT0gU1ZHUGFpbnRUeXBlOjpSR0JDb2xvcgotICAgICAgICAgICAgfHwgKGItPiptX3BhaW50
VHlwZUdldHRlcikoKSAhPSBTVkdQYWludFR5cGU6OlJHQkNvbG9yKQotICAgICAgICAgICAgcmV0
dXJuOwotCi0gICAgICAgIENvbG9yIGZyb21Db2xvciA9IChhLT4qbV9nZXR0ZXIpKCk7Ci0gICAg
ICAgIENvbG9yIHRvQ29sb3IgPSAoYi0+Km1fZ2V0dGVyKSgpOwotCi0gICAgICAgIGlmICghZnJv
bUNvbG9yLmlzVmFsaWQoKSAmJiAhdG9Db2xvci5pc1ZhbGlkKCkpCi0gICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgaWYgKCFmcm9tQ29sb3IuaXNWYWxpZCgpKQotICAgICAgICAgICAgZnJv
bUNvbG9yID0gQ29sb3IoKTsKLSAgICAgICAgaWYgKCF0b0NvbG9yLmlzVmFsaWQoKSkKLSAgICAg
ICAgICAgIHRvQ29sb3IgPSBDb2xvcigpOwotICAgICAgICAoZHN0LT4qbV9zZXR0ZXIpKGJsZW5k
RnVuYyhhbmltLCBmcm9tQ29sb3IsIHRvQ29sb3IsIHByb2dyZXNzKSk7Ci0gICAgfQotCi0jaWYg
IUxPR19ESVNBQkxFRAotICAgIHZvaWQgbG9nQmxlbmQoY29uc3QgUmVuZGVyU3R5bGUqLCBjb25z
dCBSZW5kZXJTdHlsZSosIGNvbnN0IFJlbmRlclN0eWxlKiwgZG91YmxlIHByb2dyZXNzKSBjb25z
dCBmaW5hbAotICAgIHsKLSAgICAgICAgLy8gRklYTUU6IGJldHRlciBsb2dnaW5nLgotICAgICAg
ICBMT0dfV0lUSF9TVFJFQU0oQW5pbWF0aW9ucywgc3RyZWFtIDw8ICIgIGJsZW5kaW5nIFNWR1Bh
aW50IGF0ICIgPDwgVGV4dFN0cmVhbTo6Rm9ybWF0TnVtYmVyUmVzcGVjdGluZ0ludGVnZXJzKHBy
b2dyZXNzKSk7Ci0gICAgfQotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgU1ZHUGFpbnRUeXBlIChS
ZW5kZXJTdHlsZTo6Km1fcGFpbnRUeXBlR2V0dGVyKSgpIGNvbnN0OwotICAgIENvbG9yIChSZW5k
ZXJTdHlsZTo6Km1fZ2V0dGVyKSgpIGNvbnN0OwotICAgIHZvaWQgKFJlbmRlclN0eWxlOjoqbV9z
ZXR0ZXIpKGNvbnN0IENvbG9yJik7Ci19OwotCi1jbGFzcyBQcm9wZXJ0eVdyYXBwZXJGb250U3R5
bGUgOiBwdWJsaWMgUHJvcGVydHlXcmFwcGVyPE9wdGlvbmFsPEZvbnRTZWxlY3Rpb25WYWx1ZT4+
IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBQcm9wZXJ0eVdy
YXBwZXJGb250U3R5bGUoKQotICAgICAgICA6IFByb3BlcnR5V3JhcHBlcjxPcHRpb25hbDxGb250
U2VsZWN0aW9uVmFsdWU+PihDU1NQcm9wZXJ0eUZvbnRTdHlsZSwgJlJlbmRlclN0eWxlOjpmb250
SXRhbGljLCAmUmVuZGVyU3R5bGU6OnNldEZvbnRJdGFsaWMpCi0gICAgewotICAgIH0KLQotICAg
IGJvb2wgY2FuSW50ZXJwb2xhdGUoY29uc3QgUmVuZGVyU3R5bGUqIGZyb20sIGNvbnN0IFJlbmRl
clN0eWxlKiB0bykgY29uc3Qgb3ZlcnJpZGUKLSAgICB7Ci0gICAgICAgIHJldHVybiBmcm9tLT5m
b250SXRhbGljKCkgJiYgdG8tPmZvbnRJdGFsaWMoKSAmJiBmcm9tLT5mb250RGVzY3JpcHRpb24o
KS5mb250U3R5bGVBeGlzKCkgPT0gRm9udFN0eWxlQXhpczo6c2xudCAmJiB0by0+Zm9udERlc2Ny
aXB0aW9uKCkuZm9udFN0eWxlQXhpcygpID09IEZvbnRTdHlsZUF4aXM6OnNsbnQ7Ci0gICAgfQot
Ci0gICAgdm9pZCBibGVuZChjb25zdCBDU1NQcm9wZXJ0eUJsZW5kaW5nQ2xpZW50KiBhbmltLCBS
ZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogZnJvbSwgY29uc3QgUmVuZGVyU3R5
bGUqIHRvLCBkb3VibGUgcHJvZ3Jlc3MpIGNvbnN0IG92ZXJyaWRlCi0gICAgewotICAgICAgICBh
dXRvIGRpc2NyZXRlID0gIWNhbkludGVycG9sYXRlKGZyb20sIHRvKTsKLQotICAgICAgICBhdXRv
IGJsZW5kZWRTdHlsZUF4aXMgPSBGb250U3R5bGVBeGlzOjpzbG50OwotICAgICAgICBpZiAoZGlz
Y3JldGUpCi0gICAgICAgICAgICBibGVuZGVkU3R5bGVBeGlzID0gKHByb2dyZXNzIDwgMC41ID8g
ZnJvbSA6IHRvKS0+Zm9udERlc2NyaXB0aW9uKCkuZm9udFN0eWxlQXhpcygpOwotCi0gICAgICAg
IGF1dG8gZnJvbUZvbnRJdGFsaWMgPSBmcm9tLT5mb250SXRhbGljKCk7Ci0gICAgICAgIGF1dG8g
dG9Gb250SXRhbGljID0gdG8tPmZvbnRJdGFsaWMoKTsKLSAgICAgICAgYXV0byBibGVuZGVkRm9u
dEl0YWxpYyA9IHByb2dyZXNzIDwgMC41ID8gZnJvbUZvbnRJdGFsaWMgOiB0b0ZvbnRJdGFsaWM7
Ci0gICAgICAgIGlmICghZGlzY3JldGUpCi0gICAgICAgICAgICBibGVuZGVkRm9udEl0YWxpYyA9
IGJsZW5kRnVuYyhhbmltLCBmcm9tRm9udEl0YWxpYywgdG9Gb250SXRhbGljLCBwcm9ncmVzcyk7
Ci0KLSAgICAgICAgRm9udFNlbGVjdG9yKiBjdXJyZW50Rm9udFNlbGVjdG9yID0gZHN0LT5mb250
Q2FzY2FkZSgpLmZvbnRTZWxlY3RvcigpOwotICAgICAgICBhdXRvIGRlc2NyaXB0aW9uID0gZHN0
LT5mb250RGVzY3JpcHRpb24oKTsKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0SXRhbGljKGJsZW5k
ZWRGb250SXRhbGljKTsKLSAgICAgICAgZGVzY3JpcHRpb24uc2V0Rm9udFN0eWxlQXhpcyhibGVu
ZGVkU3R5bGVBeGlzKTsKLSAgICAgICAgZHN0LT5zZXRGb250RGVzY3JpcHRpb24oV1RGTW92ZShk
ZXNjcmlwdGlvbikpOwotICAgICAgICBkc3QtPmZvbnRDYXNjYWRlKCkudXBkYXRlKGN1cnJlbnRG
b250U2VsZWN0b3IpOwotICAgIH0KLX07Ci0KLWNsYXNzIENTU1Byb3BlcnR5QW5pbWF0aW9uV3Jh
cHBlck1hcCB7Ci0gICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Ci1wdWJsaWM6Ci0gICAgc3Rh
dGljIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYgc2luZ2xldG9uKCkKLSAgICB7Ci0g
ICAgICAgIC8vIEZJWE1FOiBUaGlzIGRhdGEgaXMgbmV2ZXIgZGVzdHJveWVkLiBNYXliZSB3ZSBz
aG91bGQgcmVmIGNvdW50IGl0IGFuZCB0b3NzIGl0IHdoZW4gdGhlIGxhc3QgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlciBpcyBkZXN0cm95ZWQ/Ci0gICAgICAgIHN0YXRpYyBOZXZlckRlc3Ryb3llZDxD
U1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA+IG1hcDsKLSAgICAgICAgcmV0dXJuIG1hcDsK
LSAgICB9Ci0KLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKiB3cmFwcGVyRm9yUHJv
cGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQotICAgIHsKLSAgICAgICAgaWYgKHByb3Bl
cnR5SUQgPCBmaXJzdENTU1Byb3BlcnR5IHx8IHByb3BlcnR5SUQgPiBsYXN0Q1NTUHJvcGVydHkp
Ci0gICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICB1bnNpZ25lZCB3cmFwcGVy
SW5kZXggPSBpbmRleEZyb21Qcm9wZXJ0eUlEKHByb3BlcnR5SUQpOwotICAgICAgICBpZiAod3Jh
cHBlckluZGV4ID09IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXgpCi0gICAgICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKLQotICAgICAgICByZXR1cm4gbV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBw
ZXJJbmRleF0uZ2V0KCk7Ci0gICAgfQotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFz
ZSogd3JhcHBlckZvckluZGV4KHVuc2lnbmVkIGluZGV4KQotICAgIHsKLSAgICAgICAgQVNTRVJU
KGluZGV4IDwgbV9wcm9wZXJ0eVdyYXBwZXJzLnNpemUoKSk7Ci0gICAgICAgIHJldHVybiBtX3By
b3BlcnR5V3JhcHBlcnNbaW5kZXhdLmdldCgpOwotICAgIH0KLQotICAgIHVuc2lnbmVkIHNpemUo
KQotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlXcmFwcGVycy5zaXplKCk7Ci0gICAg
fQotCi1wcml2YXRlOgotICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCgpOwotICAg
IH5DU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKSA9IGRlbGV0ZTsKLQotICAgIHVuc2ln
bmVkIGNoYXImIGluZGV4RnJvbVByb3BlcnR5SUQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEKQot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fcHJvcGVydHlUb0lkTWFwW3Byb3BlcnR5SUQgLSBmaXJz
dENTU1Byb3BlcnR5XTsKLSAgICB9Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEFuaW1h
dGlvblByb3BlcnR5V3JhcHBlckJhc2U+PiBtX3Byb3BlcnR5V3JhcHBlcnM7Ci0gICAgdW5zaWdu
ZWQgY2hhciBtX3Byb3BlcnR5VG9JZE1hcFtudW1DU1NQcm9wZXJ0aWVzXTsKLQotICAgIHN0YXRp
YyBjb25zdCB1bnNpZ25lZCBjaGFyIGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXggPSBVQ0hB
Ul9NQVg7Ci0KLSAgICBmcmllbmQgY2xhc3MgV1RGOjpOZXZlckRlc3Ryb3llZDxDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA+OwotfTsKLQotQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVy
TWFwOjpDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXAoKQotewotICAgIC8vIGJ1aWxkIHRo
ZSBsaXN0IG9mIHByb3BlcnR5IHdyYXBwZXJzIHRvIGRvIHRoZSBjb21wYXJpc29ucyBhbmQgYmxl
bmRzCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSogYW5pbWF0YWJsZUxvbmdoYW5k
UHJvcGVydHlXcmFwcGVyc1tdID0gewotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVy
KENTU1Byb3BlcnR5TGVmdCwgJlJlbmRlclN0eWxlOjpsZWZ0LCAmUmVuZGVyU3R5bGU6OnNldExl
ZnQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UmlnaHQs
ICZSZW5kZXJTdHlsZTo6cmlnaHQsICZSZW5kZXJTdHlsZTo6c2V0UmlnaHQpLAotICAgICAgICBu
ZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5VG9wLCAmUmVuZGVyU3R5bGU6OnRv
cCwgJlJlbmRlclN0eWxlOjpzZXRUb3ApLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5Qm90dG9tLCAmUmVuZGVyU3R5bGU6OmJvdHRvbSwgJlJlbmRlclN0eWxl
OjpzZXRCb3R0b20pLAotCi0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJv
cGVydHlXaWR0aCwgJlJlbmRlclN0eWxlOjp3aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRXaWR0aCks
Ci0gICAgICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNaW5XaWR0aCwg
JlJlbmRlclN0eWxlOjptaW5XaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNaW5XaWR0aCksCi0gICAg
ICAgIG5ldyBMZW5ndGhQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlNYXhXaWR0aCwgJlJlbmRl
clN0eWxlOjptYXhXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRNYXhXaWR0aCksCi0KLSAgICAgICAg
bmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUhlaWdodCwgJlJlbmRlclN0eWxl
OjpoZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0SGVpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1pbkhlaWdodCwgJlJlbmRlclN0eWxlOjptaW5IZWln
aHQsICZSZW5kZXJTdHlsZTo6c2V0TWluSGVpZ2h0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eU1heEhlaWdodCwgJlJlbmRlclN0eWxlOjptYXhIZWlnaHQs
ICZSZW5kZXJTdHlsZTo6c2V0TWF4SGVpZ2h0KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFw
cGVyRmxleCgpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3Bl
cnR5Qm9yZGVyTGVmdFdpZHRoLCAmUmVuZGVyU3R5bGU6OmJvcmRlckxlZnRXaWR0aCwgJlJlbmRl
clN0eWxlOjpzZXRCb3JkZXJMZWZ0V2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVy
PGZsb2F0PihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0V2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVy
UmlnaHRXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJSaWdodFdpZHRoKSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlCb3JkZXJUb3BXaWR0aCwgJlJl
bmRlclN0eWxlOjpib3JkZXJUb3BXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJUb3BXaWR0
aCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5Qm9yZGVy
Qm90dG9tV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9tV2lkdGgsICZSZW5kZXJTdHls
ZTo6c2V0Qm9yZGVyQm90dG9tV2lkdGgpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luTGVmdCwgJlJlbmRlclN0eWxlOjptYXJnaW5MZWZ0LCAmUmVu
ZGVyU3R5bGU6OnNldE1hcmdpbkxlZnQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luUmlnaHQsICZSZW5kZXJTdHlsZTo6bWFyZ2luUmlnaHQsICZS
ZW5kZXJTdHlsZTo6c2V0TWFyZ2luUmlnaHQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlX
cmFwcGVyKENTU1Byb3BlcnR5TWFyZ2luVG9wLCAmUmVuZGVyU3R5bGU6Om1hcmdpblRvcCwgJlJl
bmRlclN0eWxlOjpzZXRNYXJnaW5Ub3ApLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFw
cGVyKENTU1Byb3BlcnR5TWFyZ2luQm90dG9tLCAmUmVuZGVyU3R5bGU6Om1hcmdpbkJvdHRvbSwg
JlJlbmRlclN0eWxlOjpzZXRNYXJnaW5Cb3R0b20pLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVy
dHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ0xlZnQsICZSZW5kZXJTdHlsZTo6cGFkZGluZ0xl
ZnQsICZSZW5kZXJTdHlsZTo6c2V0UGFkZGluZ0xlZnQpLAotICAgICAgICBuZXcgTGVuZ3RoUHJv
cGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ1JpZ2h0LCAmUmVuZGVyU3R5bGU6OnBhZGRp
bmdSaWdodCwgJlJlbmRlclN0eWxlOjpzZXRQYWRkaW5nUmlnaHQpLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ1RvcCwgJlJlbmRlclN0eWxlOjpw
YWRkaW5nVG9wLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdUb3ApLAotICAgICAgICBuZXcgTGVu
Z3RoUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5UGFkZGluZ0JvdHRvbSwgJlJlbmRlclN0eWxl
OjpwYWRkaW5nQm90dG9tLCAmUmVuZGVyU3R5bGU6OnNldFBhZGRpbmdCb3R0b20pLAotCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNh
cmV0Q29sb3IsICZSZW5kZXJTdHlsZTo6Y2FyZXRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRDYXJl
dENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ2FyZXRDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRWaXNpdGVkTGlua0NhcmV0Q29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBw
ZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUNvbG9yLCAmUmVuZGVyU3R5bGU6OmNv
bG9yLCAmUmVuZGVyU3R5bGU6OnNldENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5rQ29s
b3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2xvciksCi0KLSAgICAgICAgbmV3IFBy
b3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5QmFja2dyb3VuZENv
bG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kQ29sb3IsICZS
ZW5kZXJTdHlsZTo6c2V0QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRMaW5r
QmFja2dyb3VuZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rQmFja2dyb3VuZENv
bG9yKSwKLQotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eUJhY2tncm91bmRJbWFnZSwgJlJlbmRlclN0eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVy
U3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAotICAgICAgICBuZXcgU3R5bGVJbWFnZVBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxpc3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6Omxp
c3RTdHlsZUltYWdlLCAmUmVuZGVyU3R5bGU6OnNldExpc3RTdHlsZUltYWdlKSwKLSAgICAgICAg
bmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrSW1hZ2Us
ICZSZW5kZXJTdHlsZTo6bWFza0ltYWdlLCAmUmVuZGVyU3R5bGU6OnNldE1hc2tJbWFnZSksCi0K
LSAgICAgICAgbmV3IFN0eWxlSW1hZ2VQcm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCb3JkZXJJ
bWFnZVNvdXJjZSwgJlJlbmRlclN0eWxlOjpib3JkZXJJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxl
OjpzZXRCb3JkZXJJbWFnZVNvdXJjZSksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVy
dHlXcmFwcGVyPExlbmd0aEJveD4oQ1NTUHJvcGVydHlCb3JkZXJJbWFnZVNsaWNlLCAmUmVuZGVy
U3R5bGU6OmJvcmRlckltYWdlU2xpY2VzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckltYWdlU2xp
Y2VzKSwKLSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94
PihDU1NQcm9wZXJ0eUJvcmRlckltYWdlV2lkdGgsICZSZW5kZXJTdHlsZTo6Ym9yZGVySW1hZ2VX
aWR0aCwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJJbWFnZVdpZHRoKSwKLSAgICAgICAgbmV3IExl
bmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoQm94PihDU1NQcm9wZXJ0eUJvcmRlcklt
YWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6OmJvcmRlckltYWdlT3V0c2V0LCAmUmVuZGVyU3R5bGU6
OnNldEJvcmRlckltYWdlT3V0c2V0KSwKLQotICAgICAgICBuZXcgU3R5bGVJbWFnZVByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdE1hc2tCb3hJbWFnZVNvdXJjZSwgJlJlbmRlclN0eWxl
OjptYXNrQm94SW1hZ2VTb3VyY2UsICZSZW5kZXJTdHlsZTo6c2V0TWFza0JveEltYWdlU291cmNl
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxjb25zdCBOaW5lUGllY2VJbWFnZSY+KENT
U1Byb3BlcnR5V2Via2l0TWFza0JveEltYWdlLCAmUmVuZGVyU3R5bGU6Om1hc2tCb3hJbWFnZSwg
JlJlbmRlclN0eWxlOjpzZXRNYXNrQm94SW1hZ2UpLAotCi0gICAgICAgIG5ldyBGaWxsTGF5ZXJz
UHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uWCwgJlJlbmRlclN0
eWxlOjpiYWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXll
cnMpLAotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUJh
Y2tncm91bmRQb3NpdGlvblksICZSZW5kZXJTdHlsZTo6YmFja2dyb3VuZExheWVycywgJlJlbmRl
clN0eWxlOjplbnN1cmVCYWNrZ3JvdW5kTGF5ZXJzKSwKLSAgICAgICAgbmV3IEZpbGxMYXllcnNQ
cm9wZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlCYWNrZ3JvdW5kU2l6ZSwgJlJlbmRlclN0eWxlOjpi
YWNrZ3JvdW5kTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZUJhY2tncm91bmRMYXllcnMpLAot
ICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdlYmtpdEJh
Y2tncm91bmRTaXplLCAmUmVuZGVyU3R5bGU6OmJhY2tncm91bmRMYXllcnMsICZSZW5kZXJTdHls
ZTo6ZW5zdXJlQmFja2dyb3VuZExheWVycyksCi0KLSAgICAgICAgbmV3IEZpbGxMYXllcnNQcm9w
ZXJ0eVdyYXBwZXIoQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb25YLCAmUmVuZGVyU3R5bGU6
Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5zdXJlTWFza0xheWVycyksCi0gICAgICAgIG5l
dyBGaWxsTGF5ZXJzUHJvcGVydHlXcmFwcGVyKENTU1Byb3BlcnR5V2Via2l0TWFza1Bvc2l0aW9u
WSwgJlJlbmRlclN0eWxlOjptYXNrTGF5ZXJzLCAmUmVuZGVyU3R5bGU6OmVuc3VyZU1hc2tMYXll
cnMpLAotICAgICAgICBuZXcgRmlsbExheWVyc1Byb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVdl
YmtpdE1hc2tTaXplLCAmUmVuZGVyU3R5bGU6Om1hc2tMYXllcnMsICZSZW5kZXJTdHlsZTo6ZW5z
dXJlTWFza0xheWVycyksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NT
UHJvcGVydHlGb250U2l6ZSwgJlJlbmRlclN0eWxlOjpjb21wdXRlZEZvbnRTaXplLCAmUmVuZGVy
U3R5bGU6OnNldEZvbnRTaXplKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjx1bnNpZ25l
ZCBzaG9ydD4oQ1NTUHJvcGVydHlDb2x1bW5SdWxlV2lkdGgsICZSZW5kZXJTdHlsZTo6Y29sdW1u
UnVsZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtblJ1bGVXaWR0aCksCi0gICAgICAgIG5l
dyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPEdhcExlbmd0aD4oQ1NTUHJvcGVydHlDb2x1
bW5HYXAsICZSZW5kZXJTdHlsZTo6Y29sdW1uR2FwLCAmUmVuZGVyU3R5bGU6OnNldENvbHVtbkdh
cCksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPEdhcExlbmd0aD4o
Q1NTUHJvcGVydHlSb3dHYXAsICZSZW5kZXJTdHlsZTo6cm93R2FwLCAmUmVuZGVyU3R5bGU6OnNl
dFJvd0dhcCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8dW5zaWduZWQgc2hvcnQ+KENT
U1Byb3BlcnR5Q29sdW1uQ291bnQsICZSZW5kZXJTdHlsZTo6Y29sdW1uQ291bnQsICZSZW5kZXJT
dHlsZTo6c2V0Q29sdW1uQ291bnQpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0
PihDU1NQcm9wZXJ0eUNvbHVtbldpZHRoLCAmUmVuZGVyU3R5bGU6OmNvbHVtbldpZHRoLCAmUmVu
ZGVyU3R5bGU6OnNldENvbHVtbldpZHRoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxm
bG9hdD4oQ1NTUHJvcGVydHlXZWJraXRCb3JkZXJIb3Jpem9udGFsU3BhY2luZywgJlJlbmRlclN0
eWxlOjpob3Jpem9udGFsQm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRIb3Jpem9udGFs
Qm9yZGVyU3BhY2luZyksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1By
b3BlcnR5V2Via2l0Qm9yZGVyVmVydGljYWxTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OnZlcnRpY2Fs
Qm9yZGVyU3BhY2luZywgJlJlbmRlclN0eWxlOjpzZXRWZXJ0aWNhbEJvcmRlclNwYWNpbmcpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGludD4oQ1NTUHJvcGVydHlaSW5kZXgsICZSZW5k
ZXJTdHlsZTo6c3BlY2lmaWVkWkluZGV4LCAmUmVuZGVyU3R5bGU6OnNldFNwZWNpZmllZFpJbmRl
eCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8c2hvcnQ+KENTU1Byb3BlcnR5T3JwaGFu
cywgJlJlbmRlclN0eWxlOjpvcnBoYW5zLCAmUmVuZGVyU3R5bGU6OnNldE9ycGhhbnMpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPHNob3J0PihDU1NQcm9wZXJ0eVdpZG93cywgJlJlbmRl
clN0eWxlOjp3aWRvd3MsICZSZW5kZXJTdHlsZTo6c2V0V2lkb3dzKSwKLSAgICAgICAgbmV3IExl
bmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUxpbmVIZWlnaHQsICZSZW5kZXJTdHlsZTo6
c3BlY2lmaWVkTGluZUhlaWdodCwgJlJlbmRlclN0eWxlOjpzZXRMaW5lSGVpZ2h0KSwKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlPdXRsaW5lT2Zmc2V0LCAm
UmVuZGVyU3R5bGU6Om91dGxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6c2V0T3V0bGluZU9mZnNl
dCksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5T3V0bGlu
ZVdpZHRoLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVXaWR0aCwgJlJlbmRlclN0eWxlOjpzZXRPdXRs
aW5lV2lkdGgpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0
eUxldHRlclNwYWNpbmcsICZSZW5kZXJTdHlsZTo6bGV0dGVyU3BhY2luZywgJlJlbmRlclN0eWxl
OjpzZXRMZXR0ZXJTcGFjaW5nKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVdvcmRTcGFjaW5nLCAmUmVuZGVyU3R5bGU6OndvcmRTcGFjaW5nLCAmUmVuZGVy
U3R5bGU6OnNldFdvcmRTcGFjaW5nKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBl
cihDU1NQcm9wZXJ0eVRleHRJbmRlbnQsICZSZW5kZXJTdHlsZTo6dGV4dEluZGVudCwgJlJlbmRl
clN0eWxlOjpzZXRUZXh0SW5kZW50KSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZs
b2F0PihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlLCAmUmVuZGVyU3R5bGU6OnBlcnNwZWN0aXZlLCAm
UmVuZGVyU3R5bGU6OnNldFBlcnNwZWN0aXZlKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3JpZ2luWCwgJlJlbmRlclN0eWxlOjpwZXJz
cGVjdGl2ZU9yaWdpblgsICZSZW5kZXJTdHlsZTo6c2V0UGVyc3BlY3RpdmVPcmlnaW5YKSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVBlcnNwZWN0aXZlT3Jp
Z2luWSwgJlJlbmRlclN0eWxlOjpwZXJzcGVjdGl2ZU9yaWdpblksICZSZW5kZXJTdHlsZTo6c2V0
UGVyc3BlY3RpdmVPcmlnaW5ZKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblgsICZSZW5kZXJTdHlsZTo6dHJhbnNmb3JtT3JpZ2lu
WCwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5YKSwKLSAgICAgICAgbmV3IExlbmd0
aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVRyYW5zZm9ybU9yaWdpblksICZSZW5kZXJTdHls
ZTo6dHJhbnNmb3JtT3JpZ2luWSwgJlJlbmRlclN0eWxlOjpzZXRUcmFuc2Zvcm1PcmlnaW5ZKSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlUcmFuc2Zvcm1P
cmlnaW5aLCAmUmVuZGVyU3R5bGU6OnRyYW5zZm9ybU9yaWdpblosICZSZW5kZXJTdHlsZTo6c2V0
VHJhbnNmb3JtT3JpZ2luWiksCi0gICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFw
cGVyPExlbmd0aFNpemU+KENTU1Byb3BlcnR5Qm9yZGVyVG9wTGVmdFJhZGl1cywgJlJlbmRlclN0
eWxlOjpib3JkZXJUb3BMZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcExlZnRS
YWRpdXMpLAotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhT
aXplPihDU1NQcm9wZXJ0eUJvcmRlclRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRl
clRvcFJpZ2h0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcFJpZ2h0UmFkaXVzKSwK
LSAgICAgICAgbmV3IExlbmd0aFZhcmlhbnRQcm9wZXJ0eVdyYXBwZXI8TGVuZ3RoU2l6ZT4oQ1NT
UHJvcGVydHlCb3JkZXJCb3R0b21MZWZ0UmFkaXVzLCAmUmVuZGVyU3R5bGU6OmJvcmRlckJvdHRv
bUxlZnRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tTGVmdFJhZGl1cyksCi0g
ICAgICAgIG5ldyBMZW5ndGhWYXJpYW50UHJvcGVydHlXcmFwcGVyPExlbmd0aFNpemU+KENTU1By
b3BlcnR5Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6Ym9yZGVyQm90dG9t
UmlnaHRSYWRpdXMsICZSZW5kZXJTdHlsZTo6c2V0Qm9yZGVyQm90dG9tUmlnaHRSYWRpdXMpLAot
ICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFZpc2liaWxpdHk+KENTU1Byb3BlcnR5VmlzaWJp
bGl0eSwgJlJlbmRlclN0eWxlOjp2aXNpYmlsaXR5LCAmUmVuZGVyU3R5bGU6OnNldFZpc2liaWxp
dHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eVpvb20s
ICZSZW5kZXJTdHlsZTo6em9vbSwgJlJlbmRlclN0eWxlOjpzZXRab29tV2l0aG91dFJldHVyblZh
bHVlKSwKLQotICAgICAgICBuZXcgTGVuZ3RoVmFyaWFudFByb3BlcnR5V3JhcHBlcjxMZW5ndGhC
b3g+KENTU1Byb3BlcnR5Q2xpcCwgJlJlbmRlclN0eWxlOjpjbGlwLCAmUmVuZGVyU3R5bGU6OnNl
dENsaXApLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJBY2NlbGVyYXRlZE9wYWNpdHko
KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckFjY2VsZXJhdGVkVHJhbnNmb3JtKCksCi0g
ICAgICAgIAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyRmlsdGVyKENTU1Byb3BlcnR5Rmls
dGVyLCAmUmVuZGVyU3R5bGU6OmZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRGaWx0ZXIpLAotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJGaWx0
ZXIoQ1NTUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciwgJlJlbmRlclN0eWxlOjpiYWNrZHJv
cEZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRCYWNrZHJvcEZpbHRlciksCi0jZW5kaWYKLSAgICAg
ICAgbmV3IFByb3BlcnR5V3JhcHBlckZpbHRlcihDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXIs
ICZSZW5kZXJTdHlsZTo6YXBwbGVDb2xvckZpbHRlciwgJlJlbmRlclN0eWxlOjpzZXRBcHBsZUNv
bG9yRmlsdGVyKSwKLQotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyQ2xpcFBhdGgoQ1NTUHJv
cGVydHlDbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpjbGlwUGF0aCwgJlJlbmRlclN0eWxlOjpzZXRD
bGlwUGF0aCksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlclNoYXBlKENTU1Byb3BlcnR5
U2hhcGVPdXRzaWRlLCAmUmVuZGVyU3R5bGU6OnNoYXBlT3V0c2lkZSwgJlJlbmRlclN0eWxlOjpz
ZXRTaGFwZU91dHNpZGUpLAotICAgICAgICBuZXcgTGVuZ3RoUHJvcGVydHlXcmFwcGVyKENTU1By
b3BlcnR5U2hhcGVNYXJnaW4sICZSZW5kZXJTdHlsZTo6c2hhcGVNYXJnaW4sICZSZW5kZXJTdHls
ZTo6c2V0U2hhcGVNYXJnaW4pLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihD
U1NQcm9wZXJ0eVNoYXBlSW1hZ2VUaHJlc2hvbGQsICZSZW5kZXJTdHlsZTo6c2hhcGVJbWFnZVRo
cmVzaG9sZCwgJlJlbmRlclN0eWxlOjpzZXRTaGFwZUltYWdlVGhyZXNob2xkKSwKLQotICAgICAg
ICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlDb2x1
bW5SdWxlQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmNvbHVtblJ1bGVD
b2xvciwgJlJlbmRlclN0eWxlOjpzZXRDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlz
aXRlZExpbmtDb2x1bW5SdWxlQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtDb2x1
bW5SdWxlQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVk
Q29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0U3Ryb2tlQ29sb3IsIE1heWJlSW52YWxpZENvbG9y
LCAmUmVuZGVyU3R5bGU6OnRleHRTdHJva2VDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRUZXh0U3Ry
b2tlQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IsICZSZW5k
ZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtUZXh0U3Ryb2tlQ29sb3IpLAotICAgICAgICBuZXcgUHJv
cGVydHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlXZWJraXRUZXh0Rmls
bENvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0eWxlOjp0ZXh0RmlsbENvbG9yLCAm
UmVuZGVyU3R5bGU6OnNldFRleHRGaWxsQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtU
ZXh0RmlsbENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFZpc2l0ZWRMaW5rVGV4dEZpbGxDb2xvciks
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihDU1NQcm9w
ZXJ0eUJvcmRlckxlZnRDb2xvciwgTWF5YmVJbnZhbGlkQ29sb3IsICZSZW5kZXJTdHlsZTo6Ym9y
ZGVyTGVmdENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0
eWxlOjp2aXNpdGVkTGlua0JvcmRlckxlZnRDb2xvciwgJlJlbmRlclN0eWxlOjpzZXRWaXNpdGVk
TGlua0JvcmRlckxlZnRDb2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVk
QWZmZWN0ZWRDb2xvcihDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0Q29sb3IsIE1heWJlSW52YWxpZENv
bG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclJpZ2h0Q29sb3IsICZSZW5kZXJTdHlsZTo6c2V0Qm9y
ZGVyUmlnaHRDb2xvciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlclJpZ2h0Q29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJSaWdodENvbG9yKSwKLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclZpc2l0ZWRBZmZlY3RlZENvbG9yKENTU1Byb3BlcnR5Qm9yZGVy
VG9wQ29sb3IsIE1heWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6OmJvcmRlclRvcENvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldEJvcmRlclRvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnZpc2l0ZWRM
aW5rQm9yZGVyVG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtCb3JkZXJUb3BD
b2xvciksCi0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXJWaXNpdGVkQWZmZWN0ZWRDb2xvcihD
U1NQcm9wZXJ0eUJvcmRlckJvdHRvbUNvbG9yLCBNYXliZUludmFsaWRDb2xvciwgJlJlbmRlclN0
eWxlOjpib3JkZXJCb3R0b21Db2xvciwgJlJlbmRlclN0eWxlOjpzZXRCb3JkZXJCb3R0b21Db2xv
ciwgJlJlbmRlclN0eWxlOjp2aXNpdGVkTGlua0JvcmRlckJvdHRvbUNvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldFZpc2l0ZWRMaW5rQm9yZGVyQm90dG9tQ29sb3IpLAotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyVmlzaXRlZEFmZmVjdGVkQ29sb3IoQ1NTUHJvcGVydHlPdXRsaW5lQ29sb3IsIE1h
eWJlSW52YWxpZENvbG9yLCAmUmVuZGVyU3R5bGU6Om91dGxpbmVDb2xvciwgJlJlbmRlclN0eWxl
OjpzZXRPdXRsaW5lQ29sb3IsICZSZW5kZXJTdHlsZTo6dmlzaXRlZExpbmtPdXRsaW5lQ29sb3Is
ICZSZW5kZXJTdHlsZTo6c2V0VmlzaXRlZExpbmtPdXRsaW5lQ29sb3IpLAotCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlCb3hTaGFkb3csICZSZW5kZXJTdHls
ZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyksCi0gICAgICAgIG5ldyBQ
cm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlXZWJraXRCb3hTaGFkb3csICZSZW5kZXJT
dHlsZTo6Ym94U2hhZG93LCAmUmVuZGVyU3R5bGU6OnNldEJveFNoYWRvdyksCi0gICAgICAgIG5l
dyBQcm9wZXJ0eVdyYXBwZXJTaGFkb3coQ1NTUHJvcGVydHlUZXh0U2hhZG93LCAmUmVuZGVyU3R5
bGU6OnRleHRTaGFkb3csICZSZW5kZXJTdHlsZTo6c2V0VGV4dFNoYWRvdyksCi0KLSAgICAgICAg
bmV3IFByb3BlcnR5V3JhcHBlclNWR1BhaW50KENTU1Byb3BlcnR5RmlsbCwgJlJlbmRlclN0eWxl
OjpmaWxsUGFpbnRUeXBlLCAmUmVuZGVyU3R5bGU6OmZpbGxQYWludENvbG9yLCAmUmVuZGVyU3R5
bGU6OnNldEZpbGxQYWludENvbG9yKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9h
dD4oQ1NTUHJvcGVydHlGaWxsT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpmaWxsT3BhY2l0eSwgJlJl
bmRlclN0eWxlOjpzZXRGaWxsT3BhY2l0eSksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBl
clNWR1BhaW50KENTU1Byb3BlcnR5U3Ryb2tlLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVBhaW50VHlw
ZSwgJlJlbmRlclN0eWxlOjpzdHJva2VQYWludENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldFN0cm9r
ZVBhaW50Q29sb3IpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPGZsb2F0PihDU1NQcm9w
ZXJ0eVN0cm9rZU9wYWNpdHksICZSZW5kZXJTdHlsZTo6c3Ryb2tlT3BhY2l0eSwgJlJlbmRlclN0
eWxlOjpzZXRTdHJva2VPcGFjaXR5KSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxWZWN0
b3I8U1ZHTGVuZ3RoVmFsdWU+PihDU1NQcm9wZXJ0eVN0cm9rZURhc2hhcnJheSwgJlJlbmRlclN0
eWxlOjpzdHJva2VEYXNoQXJyYXksICZSZW5kZXJTdHlsZTo6c2V0U3Ryb2tlRGFzaEFycmF5KSwK
LSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxmbG9hdD4oQ1NTUHJvcGVydHlTdHJva2VNaXRl
cmxpbWl0LCAmUmVuZGVyU3R5bGU6OnN0cm9rZU1pdGVyTGltaXQsICZSZW5kZXJTdHlsZTo6c2V0
U3Ryb2tlTWl0ZXJMaW1pdCksCi0KLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihD
U1NQcm9wZXJ0eUN4LCAmUmVuZGVyU3R5bGU6OmN4LCAmUmVuZGVyU3R5bGU6OnNldEN4KSwKLSAg
ICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eUN5LCAmUmVuZGVyU3R5
bGU6OmN5LCAmUmVuZGVyU3R5bGU6OnNldEN5KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVIsICZSZW5kZXJTdHlsZTo6ciwgJlJlbmRlclN0eWxlOjpzZXRS
KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJ4LCAmUmVu
ZGVyU3R5bGU6OnJ4LCAmUmVuZGVyU3R5bGU6OnNldFJ4KSwKLSAgICAgICAgbmV3IExlbmd0aFBy
b3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVJ5LCAmUmVuZGVyU3R5bGU6OnJ5LCAmUmVuZGVyU3R5
bGU6OnNldFJ5KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0
eVN0cm9rZURhc2hvZmZzZXQsICZSZW5kZXJTdHlsZTo6c3Ryb2tlRGFzaE9mZnNldCwgJlJlbmRl
clN0eWxlOjpzZXRTdHJva2VEYXNoT2Zmc2V0KSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5
V3JhcHBlcihDU1NQcm9wZXJ0eVN0cm9rZVdpZHRoLCAmUmVuZGVyU3R5bGU6OnN0cm9rZVdpZHRo
LCAmUmVuZGVyU3R5bGU6OnNldFN0cm9rZVdpZHRoKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3Bl
cnR5V3JhcHBlcihDU1NQcm9wZXJ0eVgsICZSZW5kZXJTdHlsZTo6eCwgJlJlbmRlclN0eWxlOjpz
ZXRYKSwKLSAgICAgICAgbmV3IExlbmd0aFByb3BlcnR5V3JhcHBlcihDU1NQcm9wZXJ0eVksICZS
ZW5kZXJTdHlsZTo6eSwgJlJlbmRlclN0eWxlOjpzZXRZKSwKLQotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPGZsb2F0PihDU1NQcm9wZXJ0eUZsb29kT3BhY2l0eSwgJlJlbmRlclN0eWxlOjpm
bG9vZE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0Rmxvb2RPcGFjaXR5KSwKLSAgICAgICAgbmV3
IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENvbG9yKENTU1Byb3BlcnR5Rmxvb2RDb2xvciwg
JlJlbmRlclN0eWxlOjpmbG9vZENvbG9yLCAmUmVuZGVyU3R5bGU6OnNldEZsb29kQ29sb3IpLAot
Ci0gICAgICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8ZmxvYXQ+KENTU1Byb3BlcnR5U3RvcE9wYWNp
dHksICZSZW5kZXJTdHlsZTo6c3RvcE9wYWNpdHksICZSZW5kZXJTdHlsZTo6c2V0U3RvcE9wYWNp
dHkpLAotICAgICAgICBuZXcgUHJvcGVydHlXcmFwcGVyTWF5YmVJbnZhbGlkQ29sb3IoQ1NTUHJv
cGVydHlTdG9wQ29sb3IsICZSZW5kZXJTdHlsZTo6c3RvcENvbG9yLCAmUmVuZGVyU3R5bGU6OnNl
dFN0b3BDb2xvciksCi0KLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlck1heWJlSW52YWxpZENv
bG9yKENTU1Byb3BlcnR5TGlnaHRpbmdDb2xvciwgJlJlbmRlclN0eWxlOjpsaWdodGluZ0NvbG9y
LCAmUmVuZGVyU3R5bGU6OnNldExpZ2h0aW5nQ29sb3IpLAotCi0gICAgICAgIG5ldyBQcm9wZXJ0
eVdyYXBwZXI8U1ZHTGVuZ3RoVmFsdWU+KENTU1Byb3BlcnR5QmFzZWxpbmVTaGlmdCwgJlJlbmRl
clN0eWxlOjpiYXNlbGluZVNoaWZ0VmFsdWUsICZSZW5kZXJTdHlsZTo6c2V0QmFzZWxpbmVTaGlm
dFZhbHVlKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxTVkdMZW5ndGhWYWx1ZT4oQ1NT
UHJvcGVydHlLZXJuaW5nLCAmUmVuZGVyU3R5bGU6Omtlcm5pbmcsICZSZW5kZXJTdHlsZTo6c2V0
S2VybmluZyksCi0jaWYgRU5BQkxFKFZBUklBVElPTl9GT05UUykKLSAgICAgICAgbmV3IFByb3Bl
cnR5V3JhcHBlckZvbnRWYXJpYXRpb25TZXR0aW5ncyhDU1NQcm9wZXJ0eUZvbnRWYXJpYXRpb25T
ZXR0aW5ncywgJlJlbmRlclN0eWxlOjpmb250VmFyaWF0aW9uU2V0dGluZ3MsICZSZW5kZXJTdHls
ZTo6c2V0Rm9udFZhcmlhdGlvblNldHRpbmdzKSwKLSNlbmRpZgotICAgICAgICBuZXcgUHJvcGVy
dHlXcmFwcGVyPEZvbnRTZWxlY3Rpb25WYWx1ZT4oQ1NTUHJvcGVydHlGb250V2VpZ2h0LCAmUmVu
ZGVyU3R5bGU6OmZvbnRXZWlnaHQsICZSZW5kZXJTdHlsZTo6c2V0Rm9udFdlaWdodCksCi0gICAg
ICAgIG5ldyBQcm9wZXJ0eVdyYXBwZXI8Rm9udFNlbGVjdGlvblZhbHVlPihDU1NQcm9wZXJ0eUZv
bnRTdHJldGNoLCAmUmVuZGVyU3R5bGU6OmZvbnRTdHJldGNoLCAmUmVuZGVyU3R5bGU6OnNldEZv
bnRTdHJldGNoKSwKLSAgICAgICAgbmV3IFByb3BlcnR5V3JhcHBlckZvbnRTdHlsZSgpLAotICAg
ICAgICBuZXcgUHJvcGVydHlXcmFwcGVyPFRleHREZWNvcmF0aW9uVGhpY2tuZXNzPihDU1NQcm9w
ZXJ0eVRleHREZWNvcmF0aW9uVGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnRleHREZWNvcmF0aW9u
VGhpY2tuZXNzLCAmUmVuZGVyU3R5bGU6OnNldFRleHREZWNvcmF0aW9uVGhpY2tuZXNzKSwKLSAg
ICAgICAgbmV3IFByb3BlcnR5V3JhcHBlcjxUZXh0VW5kZXJsaW5lT2Zmc2V0PihDU1NQcm9wZXJ0
eVRleHRVbmRlcmxpbmVPZmZzZXQsICZSZW5kZXJTdHlsZTo6dGV4dFVuZGVybGluZU9mZnNldCwg
JlJlbmRlclN0eWxlOjpzZXRUZXh0VW5kZXJsaW5lT2Zmc2V0KSwKLSAgICB9OwotICAgIGNvbnN0
IHVuc2lnbmVkIGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3VudCA9IFdURl9BUlJBWV9M
RU5HVEgoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydHlXcmFwcGVycyk7Ci0KLSAgICBzdGF0aWMg
Y29uc3QgQ1NTUHJvcGVydHlJRCBhbmltYXRhYmxlU2hvcnRoYW5kUHJvcGVydGllc1tdID0gewot
ICAgICAgICBDU1NQcm9wZXJ0eUJhY2tncm91bmQsIC8vIGZvciBiYWNrZ3JvdW5kLWNvbG9yLCBi
YWNrZ3JvdW5kLXBvc2l0aW9uLCBiYWNrZ3JvdW5kLWltYWdlCi0gICAgICAgIENTU1Byb3BlcnR5
QmFja2dyb3VuZFBvc2l0aW9uLAotICAgICAgICBDU1NQcm9wZXJ0eUZvbnQsIC8vIGZvciBmb250
LXNpemUsIGZvbnQtd2VpZ2h0Ci0gICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFzaywgLy8gZm9y
IG1hc2stcG9zaXRpb24KLSAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sCi0g
ICAgICAgIENTU1Byb3BlcnR5Qm9yZGVyVG9wLCBDU1NQcm9wZXJ0eUJvcmRlclJpZ2h0LCBDU1NQ
cm9wZXJ0eUJvcmRlckJvdHRvbSwgQ1NTUHJvcGVydHlCb3JkZXJMZWZ0LAotICAgICAgICBDU1NQ
cm9wZXJ0eUJvcmRlckNvbG9yLAotICAgICAgICBDU1NQcm9wZXJ0eUJvcmRlclJhZGl1cywKLSAg
ICAgICAgQ1NTUHJvcGVydHlCb3JkZXJXaWR0aCwKLSAgICAgICAgQ1NTUHJvcGVydHlCb3JkZXIs
Ci0gICAgICAgIENTU1Byb3BlcnR5Qm9yZGVySW1hZ2UsCi0gICAgICAgIENTU1Byb3BlcnR5Qm9y
ZGVyU3BhY2luZywKLSAgICAgICAgQ1NTUHJvcGVydHlMaXN0U3R5bGUsIC8vIGZvciBsaXN0LXN0
eWxlLWltYWdlCi0gICAgICAgIENTU1Byb3BlcnR5TWFyZ2luLAotICAgICAgICBDU1NQcm9wZXJ0
eU91dGxpbmUsCi0gICAgICAgIENTU1Byb3BlcnR5UGFkZGluZywKLSAgICAgICAgQ1NTUHJvcGVy
dHlXZWJraXRUZXh0U3Ryb2tlLAotICAgICAgICBDU1NQcm9wZXJ0eUNvbHVtblJ1bGUsCi0gICAg
ICAgIENTU1Byb3BlcnR5V2Via2l0Qm9yZGVyUmFkaXVzLAotICAgICAgICBDU1NQcm9wZXJ0eVRy
YW5zZm9ybU9yaWdpbgotICAgIH07Ci0gICAgY29uc3QgdW5zaWduZWQgYW5pbWF0YWJsZVNob3J0
aGFuZFByb3BlcnRpZXNDb3VudCA9IFdURl9BUlJBWV9MRU5HVEgoYW5pbWF0YWJsZVNob3J0aGFu
ZFByb3BlcnRpZXMpOwotCi0gICAgLy8gVE9ETzoKLSAgICAvLwotICAgIC8vICBDU1NQcm9wZXJ0
eVZlcnRpY2FsQWxpZ24KLSAgICAvLwotICAgIC8vIENvbXBvdW5kIHByb3BlcnRpZXMgdGhhdCBo
YXZlIGNvbXBvbmVudHMgdGhhdCBzaG91bGQgYmUgYW5pbWF0YWJsZToKLSAgICAvLwotICAgIC8v
ICBDU1NQcm9wZXJ0eUNvbHVtbnMKLSAgICAvLyAgQ1NTUHJvcGVydHlXZWJraXRCb3hSZWZsZWN0
Ci0KLSAgICAvLyBNYWtlIHN1cmUgdW51c2VkIHNsb3RzIGhhdmUgYSB2YWx1ZQotICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQ1NTUHJvcGVydGllczsgKytpKQotICAgICAgICBtX3Byb3BlcnR5
VG9JZE1hcFtpXSA9IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXg7Ci0KLSAgICBDT01QSUxF
X0FTU0VSVChhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0aWVzQ291bnQgKyBhbmltYXRhYmxlU2hv
cnRoYW5kUHJvcGVydGllc0NvdW50IDwgVUNIQVJfTUFYLCBudW1iZXJPZkFuaW1hdGFibGVQcm9w
ZXJ0aWVzTXVzdEJlTGVzc1RoYW5VQ2hhck1heCk7Ci0gICAgbV9wcm9wZXJ0eVdyYXBwZXJzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoYW5pbWF0YWJsZUxvbmdoYW5kUHJvcGVydGllc0NvdW50ICsg
YW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudCk7Ci0KLSAgICAvLyBGaXJzdCB3ZSBw
dXQgdGhlIG5vbi1zaG9ydGhhbmQgcHJvcGVydHkgd3JhcHBlcnMgaW50byB0aGUgbWFwLCBzbyB0
aGUgc2hvcnRoYW5kLWJ1aWxkaW5nCi0gICAgLy8gY29kZSBjYW4gZmluZCB0aGVtLgotCi0gICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFuaW1hdGFibGVMb25naGFuZFByb3BlcnRpZXNDb3Vu
dDsgKytpKSB7Ci0gICAgICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIg
PSBhbmltYXRhYmxlTG9uZ2hhbmRQcm9wZXJ0eVdyYXBwZXJzW2ldOwotICAgICAgICBtX3Byb3Bl
cnR5V3JhcHBlcnMudW5jaGVja2VkQXBwZW5kKHN0ZDo6dW5pcXVlX3B0cjxBbmltYXRpb25Qcm9w
ZXJ0eVdyYXBwZXJCYXNlPih3cmFwcGVyKSk7Ci0gICAgICAgIGluZGV4RnJvbVByb3BlcnR5SUQo
d3JhcHBlci0+cHJvcGVydHkoKSkgPSBpOwotICAgIH0KLQotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgYW5pbWF0YWJsZVNob3J0aGFuZFByb3BlcnRpZXNDb3VudDsgKytpKSB7Ci0gICAgICAg
IENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGFuaW1hdGFibGVTaG9ydGhhbmRQcm9wZXJ0aWVz
W2ldOwotICAgICAgICBhdXRvIHNob3J0aGFuZCA9IHNob3J0aGFuZEZvclByb3BlcnR5KHByb3Bl
cnR5SUQpOwotICAgICAgICBpZiAoIXNob3J0aGFuZC5sZW5ndGgoKSkKLSAgICAgICAgICAgIGNv
bnRpbnVlOwotCi0gICAgICAgIFZlY3RvcjxBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJCYXNlKj4g
bG9uZ2hhbmRXcmFwcGVyczsKLSAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy5yZXNlcnZlSW5pdGlh
bENhcGFjaXR5KHNob3J0aGFuZC5sZW5ndGgoKSk7Ci0gICAgICAgIGZvciAoYXV0byBsb25naGFu
ZCA6IHNob3J0aGFuZCkgewotICAgICAgICAgICAgdW5zaWduZWQgd3JhcHBlckluZGV4ID0gaW5k
ZXhGcm9tUHJvcGVydHlJRChsb25naGFuZCk7Ci0gICAgICAgICAgICBpZiAod3JhcHBlckluZGV4
ID09IGNJbnZhbGlkUHJvcGVydHlXcmFwcGVySW5kZXgpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBBU1NFUlQobV9wcm9wZXJ0eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0p
OwotICAgICAgICAgICAgbG9uZ2hhbmRXcmFwcGVycy51bmNoZWNrZWRBcHBlbmQobV9wcm9wZXJ0
eVdyYXBwZXJzW3dyYXBwZXJJbmRleF0uZ2V0KCkpOwotICAgICAgICB9Ci0KLSAgICAgICAgbV9w
cm9wZXJ0eVdyYXBwZXJzLnVuY2hlY2tlZEFwcGVuZChtYWtlVW5pcXVlPFNob3J0aGFuZFByb3Bl
cnR5V3JhcHBlcj4ocHJvcGVydHlJRCwgV1RGTW92ZShsb25naGFuZFdyYXBwZXJzKSkpOwotICAg
ICAgICBpbmRleEZyb21Qcm9wZXJ0eUlEKHByb3BlcnR5SUQpID0gYW5pbWF0YWJsZUxvbmdoYW5k
UHJvcGVydGllc0NvdW50ICsgaTsKLSAgICB9Ci19Ci0KLXN0YXRpYyBib29sIGdhdGhlckVuY2xv
c2luZ1Nob3J0aGFuZFByb3BlcnRpZXMoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSwgQW5pbWF0aW9u
UHJvcGVydHlXcmFwcGVyQmFzZSogd3JhcHBlciwgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiYgcHJv
cGVydHlTZXQpCi17Ci0gICAgaWYgKCF3cmFwcGVyLT5pc1Nob3J0aGFuZFdyYXBwZXIoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgU2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKiBzaG9y
dGhhbmRXcmFwcGVyID0gc3RhdGljX2Nhc3Q8U2hvcnRoYW5kUHJvcGVydHlXcmFwcGVyKj4od3Jh
cHBlcik7Ci0gICAgYm9vbCBjb250YWluZWQgPSBmYWxzZTsKLSAgICBmb3IgKGF1dG8mIGN1cnJX
cmFwcGVyIDogc2hvcnRoYW5kV3JhcHBlci0+cHJvcGVydHlXcmFwcGVycygpKSB7Ci0gICAgICAg
IGlmIChnYXRoZXJFbmNsb3NpbmdTaG9ydGhhbmRQcm9wZXJ0aWVzKHByb3BlcnR5LCBjdXJyV3Jh
cHBlciwgcHJvcGVydHlTZXQpIHx8IGN1cnJXcmFwcGVyLT5wcm9wZXJ0eSgpID09IHByb3BlcnR5
KQotICAgICAgICAgICAgY29udGFpbmVkID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBpZiAoY29udGFp
bmVkKQotICAgICAgICBwcm9wZXJ0eVNldC5hZGQod3JhcHBlci0+cHJvcGVydHkoKSk7Ci0KLSAg
ICByZXR1cm4gY29udGFpbmVkOwotfQotCi0vLyBSZXR1cm5zIHRydWUgaWYgd2UgbmVlZCB0byBz
dGFydCBhbmltYXRpb24gdGltZXJzCi12b2lkIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFBy
b3BlcnRpZXMoY29uc3QgQ1NTUHJvcGVydHlCbGVuZGluZ0NsaWVudCogYW5pbSwgQ1NTUHJvcGVy
dHlJRCBwcm9wLCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcykKLXsKLSAgICBBU1NFUlQocHJvcCAhPSBD
U1NQcm9wZXJ0eUludmFsaWQpOwotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVyQmFzZSog
d3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9uKCkud3Jh
cHBlckZvclByb3BlcnR5KHByb3ApOwotICAgIGlmICh3cmFwcGVyKSB7Ci0gICAgICAgIHdyYXBw
ZXItPmJsZW5kKGFuaW0sIGRzdCwgYSwgYiwgcHJvZ3Jlc3MpOwotI2lmICFMT0dfRElTQUJMRUQK
LSAgICAgICAgd3JhcHBlci0+bG9nQmxlbmQoYSwgYiwgZHN0LCBwcm9ncmVzcyk7Ci0jZW5kaWYK
LSAgICB9Ci19Ci0KLWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmlzUHJvcGVydHlBbmltYXRh
YmxlKENTU1Byb3BlcnR5SUQgcHJvcCkKLXsKLSAgICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRp
b25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci19Ci0K
LWJvb2wgQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVydHlJc0FjY2VsZXJh
dGVkKENTU1Byb3BlcnR5SUQgcHJvcCkKLXsKLSAgICBBbmltYXRpb25Qcm9wZXJ0eVdyYXBwZXJC
YXNlKiB3cmFwcGVyID0gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24o
KS53cmFwcGVyRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgcmV0dXJuIHdyYXBwZXIgPyB3cmFwcGVy
LT5hbmltYXRpb25Jc0FjY2VsZXJhdGVkKCkgOiBmYWxzZTsKLX0KLQotLy8gTm90ZTogdGhpcyBp
cyBpbmVmZmljaWVudC4gSXQncyBvbmx5IGNhbGxlZCBmcm9tIHBhdXNlVHJhbnNpdGlvbkF0VGlt
ZSgpLgotSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0
YWJsZVNob3J0aGFuZHNBZmZlY3RpbmdQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KQot
ewotICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcCYgbWFwID0gQ1NTUHJvcGVydHlB
bmltYXRpb25XcmFwcGVyTWFwOjpzaW5nbGV0b24oKTsKLQotICAgIEhhc2hTZXQ8Q1NTUHJvcGVy
dHlJRD4gZm91bmRQcm9wZXJ0aWVzOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtYXAu
c2l6ZSgpOyArK2kpCi0gICAgICAgIGdhdGhlckVuY2xvc2luZ1Nob3J0aGFuZFByb3BlcnRpZXMo
cHJvcGVydHksIG1hcC53cmFwcGVyRm9ySW5kZXgoaSksIGZvdW5kUHJvcGVydGllcyk7Ci0KLSAg
ICByZXR1cm4gZm91bmRQcm9wZXJ0aWVzOwotfQotCi1ib29sIENTU1Byb3BlcnR5QW5pbWF0aW9u
Ojpwcm9wZXJ0aWVzRXF1YWwoQ1NTUHJvcGVydHlJRCBwcm9wLCBjb25zdCBSZW5kZXJTdHlsZSog
YSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpCi17Ci0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFwcGVy
QmFzZSogd3JhcHBlciA9IENTU1Byb3BlcnR5QW5pbWF0aW9uV3JhcHBlck1hcDo6c2luZ2xldG9u
KCkud3JhcHBlckZvclByb3BlcnR5KHByb3ApOwotICAgIGlmICh3cmFwcGVyKQotICAgICAgICBy
ZXR1cm4gd3JhcHBlci0+ZXF1YWxzKGEsIGIpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29s
IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpjYW5Qcm9wZXJ0eUJlSW50ZXJwb2xhdGVkKENTU1Byb3Bl
cnR5SUQgcHJvcCwgY29uc3QgUmVuZGVyU3R5bGUqIGEsIGNvbnN0IFJlbmRlclN0eWxlKiBiKQot
ewotICAgIEFuaW1hdGlvblByb3BlcnR5V3JhcHBlckJhc2UqIHdyYXBwZXIgPSBDU1NQcm9wZXJ0
eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpLndyYXBwZXJGb3JQcm9wZXJ0eShwcm9w
KTsKLSAgICBpZiAod3JhcHBlcikKLSAgICAgICAgcmV0dXJuIHdyYXBwZXItPmNhbkludGVycG9s
YXRlKGEsIGIpOwotICAgIHJldHVybiBmYWxzZTsKLX0KLQotQ1NTUHJvcGVydHlJRCBDU1NQcm9w
ZXJ0eUFuaW1hdGlvbjo6Z2V0UHJvcGVydHlBdEluZGV4KGludCBpLCBPcHRpb25hbDxib29sPiYg
aXNTaG9ydGhhbmQpCi17Ci0gICAgQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwJiBtYXAg
PSBDU1NQcm9wZXJ0eUFuaW1hdGlvbldyYXBwZXJNYXA6OnNpbmdsZXRvbigpOwotCi0gICAgaWYg
KGkgPCAwIHx8IHN0YXRpY19jYXN0PHVuc2lnbmVkPihpKSA+PSBtYXAuc2l6ZSgpKQotICAgICAg
ICByZXR1cm4gQ1NTUHJvcGVydHlJbnZhbGlkOwotCi0gICAgQW5pbWF0aW9uUHJvcGVydHlXcmFw
cGVyQmFzZSogd3JhcHBlciA9IG1hcC53cmFwcGVyRm9ySW5kZXgoaSk7Ci0gICAgaXNTaG9ydGhh
bmQgPSB3cmFwcGVyLT5pc1Nob3J0aGFuZFdyYXBwZXIoKTsKLSAgICByZXR1cm4gd3JhcHBlci0+
cHJvcGVydHkoKTsKLX0KLQotaW50IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXROdW1Qcm9wZXJ0
aWVzKCkKLXsKLSAgICByZXR1cm4gQ1NTUHJvcGVydHlBbmltYXRpb25XcmFwcGVyTWFwOjpzaW5n
bGV0b24oKS5zaXplKCk7Ci19Ci0KLX0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2Fu
aW1hdGlvbi9DU1NQcm9wZXJ0eUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCBjZGUyYzg3NTgzMjM4MGM1M2Y1MGE1NWYwZWQ0NGVmNmQ4NDQ0MTliLi4wMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
YW5pbWF0aW9uL0NTU1Byb3BlcnR5QW5pbWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCAr
MCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
Ci0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2Yg
QXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmli
dXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQK
LSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVu
IHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
QU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVE
Ci0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBP
TiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0K
LSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUg
PHd0Zi9IYXNoU2V0Lmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ1NTUHJvcGVy
dHlCbGVuZGluZ0NsaWVudDsKLWNsYXNzIFJlbmRlclN0eWxlOwotCi1jbGFzcyBDU1NQcm9wZXJ0
eUFuaW1hdGlvbiB7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIGJvb2wgaXNQcm9wZXJ0eUFuaW1hdGFi
bGUoQ1NTUHJvcGVydHlJRCk7Ci0gICAgc3RhdGljIGJvb2wgYW5pbWF0aW9uT2ZQcm9wZXJ0eUlz
QWNjZWxlcmF0ZWQoQ1NTUHJvcGVydHlJRCk7Ci0gICAgc3RhdGljIGJvb2wgcHJvcGVydGllc0Vx
dWFsKENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiBhLCBjb25zdCBSZW5kZXJTdHls
ZSogYik7Ci0gICAgc3RhdGljIGJvb2wgY2FuUHJvcGVydHlCZUludGVycG9sYXRlZChDU1NQcm9w
ZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3QgUmVuZGVyU3R5bGUqIGIpOwotICAg
IHN0YXRpYyBDU1NQcm9wZXJ0eUlEIGdldFByb3BlcnR5QXRJbmRleChpbnQsIE9wdGlvbmFsPGJv
b2w+JiBpc1Nob3J0aGFuZCk7Ci0gICAgc3RhdGljIGludCBnZXROdW1Qcm9wZXJ0aWVzKCk7Ci0K
LSAgICBzdGF0aWMgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBhbmltYXRhYmxlU2hvcnRoYW5kc0Fm
ZmVjdGluZ1Byb3BlcnR5KENTU1Byb3BlcnR5SUQpOwotCi0gICAgLy8gUmV0dXJuIHRydWUgaWYg
d2UgbmVlZCB0byBzdGFydCBzb2Z0d2FyZSBhbmltYXRpb24gdGltZXJzCi0gICAgc3RhdGljIHZv
aWQgYmxlbmRQcm9wZXJ0aWVzKGNvbnN0IENTU1Byb3BlcnR5QmxlbmRpbmdDbGllbnQqLCBDU1NQ
cm9wZXJ0eUlELCBSZW5kZXJTdHlsZSogZHN0LCBjb25zdCBSZW5kZXJTdHlsZSogYSwgY29uc3Qg
UmVuZGVyU3R5bGUqIGIsIGRvdWJsZSBwcm9ncmVzcyk7Ci19OwotCi19IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRl
QW5pbWF0aW9uLmNwcApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTNjNDliY2Y2ZDkx
ZjRkY2RmNTQ2NzE0YTU0MzY4M2UxMmQ0Nzk3Ni4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9Db21wb3Np
dGVBbmltYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNTg0ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAot
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBw
bGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNl
ZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhp
cyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJV
VE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBB
UkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
Ci0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkNvbXBvc2l0ZUFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTQW5p
bWF0aW9uQ29udHJvbGxlclByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlv
bi5oIgotI2luY2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJJbXBsaWNpdEFu
aW1hdGlvbi5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiTG9n
Z2luZy5oIgotI2luY2x1ZGUgIlJlbmRlckVsZW1lbnQuaCIKLSNpbmNsdWRlICJSZW5kZXJTdHls
ZS5oIgotI2luY2x1ZGUgIlN0eWxlQWRqdXN0ZXIuaCIKLSNpbmNsdWRlIDx3dGYvTmV2ZXJEZXN0
cm95ZWQuaD4KLSNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+Ci0KLW5hbWVzcGFjZSBXZWJD
b3JlIHsKLQotQ29tcG9zaXRlQW5pbWF0aW9uOjpDb21wb3NpdGVBbmltYXRpb24oQ1NTQW5pbWF0
aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIpCi0gICAgOiBtX2FuaW1h
dGlvbkNvbnRyb2xsZXIoYW5pbWF0aW9uQ29udHJvbGxlcikKLXsKLSAgICBtX3N1c3BlbmRlZCA9
IG1fYW5pbWF0aW9uQ29udHJvbGxlci5pc1N1c3BlbmRlZCgpICYmICFtX2FuaW1hdGlvbkNvbnRy
b2xsZXIuYWxsb3dzTmV3QW5pbWF0aW9uc1doaWxlU3VzcGVuZGVkKCk7Ci19Ci0KLUNvbXBvc2l0
ZUFuaW1hdGlvbjo6fkNvbXBvc2l0ZUFuaW1hdGlvbigpCi17Ci0gICAgLy8gVG9zcyB0aGUgcmVm
cyB0byBhbGwgYW5pbWF0aW9ucywgYnV0IG1ha2Ugc3VyZSB3ZSByZW1vdmUgdGhlbSBmcm9tCi0g
ICAgLy8gYW55IHdhaXRpbmcgbGlzdHMgZmlyc3QuCi0KLSAgICBjbGVhckVsZW1lbnQoKTsKLSAg
ICBtX3RyYW5zaXRpb25zLmNsZWFyKCk7Ci0gICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2xlYXIo
KTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OmNsZWFyRWxlbWVudCgpCi17Ci0gICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICAvLyBDbGVhciB0aGUgcmVu
ZGVyZXJzIGZyb20gYWxsIHJ1bm5pbmcgYW5pbWF0aW9ucywgaW4gY2FzZSB3ZSBhcmUgaW4gdGhl
IG1pZGRsZSBvZgotICAgICAgICAvLyBhbiBhbmltYXRpb24gY2FsbGJhY2sgKHNlZSBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIwNTIpCi0gICAgICAgIGZvciAoYXV0
byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGFu
aW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCp0cmFuc2l0aW9uKTsK
LSAgICAgICAgICAgIHRyYW5zaXRpb24tPmNsZWFyKCk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAg
aWYgKCFtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFt
ZUFuaW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1h
dGlvbiA6IG1fa2V5ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBhbmlt
YXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqYW5pbWF0aW9uKTsKLSAg
ICAgICAgICAgIGFuaW1hdGlvbi0+Y2xlYXIoKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9p
ZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZVRyYW5zaXRpb25zKEVsZW1lbnQmIGVsZW1lbnQs
IGNvbnN0IFJlbmRlclN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJn
ZXRTdHlsZSkKLXsKLSAgICAvLyBJZiBjdXJyZW50U3R5bGUgaXMgbnVsbCBvciB0aGVyZSBhcmUg
bm8gb2xkIG9yIG5ldyB0cmFuc2l0aW9ucywganVzdCBza2lwIGl0Ci0gICAgaWYgKCFjdXJyZW50
U3R5bGUgfHwgKCF0YXJnZXRTdHlsZS50cmFuc2l0aW9ucygpICYmIG1fdHJhbnNpdGlvbnMuaXNF
bXB0eSgpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gTWFyayBhbGwgZXhpc3RpbmcgdHJh
bnNpdGlvbnMgYXMgbm8gbG9uZ2VyIGFjdGl2ZS4gV2Ugd2lsbCBtYXJrIHRoZSBzdGlsbCBhY3Rp
dmUgb25lcwotICAgIC8vIGluIHRoZSBuZXh0IGxvb3AgYW5kIHRoZW4gdG9zcyB0aGUgb25lcyB0
aGF0IGRpZG4ndCBnZXQgbWFya2VkLgotICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJh
bnNpdGlvbnMudmFsdWVzKCkpCi0gICAgICAgIHRyYW5zaXRpb24tPnNldEFjdGl2ZShmYWxzZSk7
Ci0gICAgICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbW9kaWZpZWRDdXJy
ZW50U3R5bGU7Ci0gICAgCi0gICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHdlIG5lZWQgdG8gdXBkYXRl
IHRoZSBhY3RpdmUgdHJhbnNpdGlvbnMKLSAgICBpZiAodGFyZ2V0U3R5bGUudHJhbnNpdGlvbnMo
KSkgewotICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHRhcmdldFN0eWxlLnRyYW5zaXRp
b25zKCktPnNpemUoKTsgKytpKSB7Ci0gICAgICAgICAgICBhdXRvJiBhbmltYXRpb24gPSB0YXJn
ZXRTdHlsZS50cmFuc2l0aW9ucygpLT5hbmltYXRpb24oaSk7Ci0gICAgICAgICAgICBib29sIGlz
QWN0aXZlVHJhbnNpdGlvbiA9IGFuaW1hdGlvbi5kdXJhdGlvbigpIHx8IGFuaW1hdGlvbi5kZWxh
eSgpID4gMDsKLQotICAgICAgICAgICAgYXV0byBtb2RlID0gYW5pbWF0aW9uLnByb3BlcnR5KCku
bW9kZTsKLSAgICAgICAgICAgIGlmIChtb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6
Ok5vbmUgfHwgbW9kZSA9PSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpVbmtub3duUHJvcGVy
dHkpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIENTU1Byb3BlcnR5
SUQgcHJvcCA9IGFuaW1hdGlvbi5wcm9wZXJ0eSgpLmlkOwotCi0gICAgICAgICAgICBib29sIGFs
bCA9IG1vZGUgPT0gQW5pbWF0aW9uOjpUcmFuc2l0aW9uTW9kZTo6QWxsOwotCi0gICAgICAgICAg
ICAvLyBIYW5kbGUgYm90aCB0aGUgJ2FsbCcgYW5kIHNpbmdsZSBwcm9wZXJ0eSBjYXNlcy4gRm9y
IHRoZSBzaW5nbGUgcHJvcCBjYXNlLCB3ZSBtYWtlIG9ubHkgb25lIHBhc3MKLSAgICAgICAgICAg
IC8vIHRocm91Z2ggdGhlIGxvb3AuCi0gICAgICAgICAgICBmb3IgKGludCBwcm9wZXJ0eUluZGV4
ID0gMDsgcHJvcGVydHlJbmRleCA8IENTU1Byb3BlcnR5QW5pbWF0aW9uOjpnZXROdW1Qcm9wZXJ0
aWVzKCk7ICsrcHJvcGVydHlJbmRleCkgewotICAgICAgICAgICAgICAgIGlmIChhbGwpIHsKLSAg
ICAgICAgICAgICAgICAgICAgLy8gR2V0IHRoZSBuZXh0IHByb3BlcnR5IHdoaWNoIGlzIG5vdCBh
IHNob3J0aGFuZC4KLSAgICAgICAgICAgICAgICAgICAgT3B0aW9uYWw8Ym9vbD4gaXNTaG9ydGhh
bmQ7Ci0gICAgICAgICAgICAgICAgICAgIHByb3AgPSBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6Z2V0
UHJvcGVydHlBdEluZGV4KHByb3BlcnR5SW5kZXgsIGlzU2hvcnRoYW5kKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGlzU2hvcnRoYW5kICYmICppc1Nob3J0aGFuZCkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAg
IGlmIChwcm9wID09IENTU1Byb3BlcnR5SW52YWxpZCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWFsbCkKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgLy8gSW1wbGljaXRBbmltYXRpb25zIGFyZSBhbHdheXMgaGFzaGVkIGJ5IGFj
dHVhbCBwcm9wZXJ0aWVzLCBuZXZlciBhbmltYXRlQWxsLgotICAgICAgICAgICAgICAgIEFTU0VS
VChwcm9wID49IGZpcnN0Q1NTUHJvcGVydHkgJiYgcHJvcCA8IChmaXJzdENTU1Byb3BlcnR5ICsg
bnVtQ1NTUHJvcGVydGllcykpOwotCi0gICAgICAgICAgICAgICAgLy8gSWYgdGhlcmUgaXMgYSBy
dW5uaW5nIGFuaW1hdGlvbiBmb3IgdGhpcyBwcm9wZXJ0eSwgdGhlIHRyYW5zaXRpb24gaXMgb3Zl
cnJpZGRlbgotICAgICAgICAgICAgICAgIC8vIGFuZCB3ZSBoYXZlIHRvIHVzZSB0aGUgdW5hbmlt
YXRlZFN0eWxlIGZyb20gdGhlIGFuaW1hdGlvbi4gV2UgZG8gdGhlIHRlc3QKLSAgICAgICAgICAg
ICAgICAvLyBhZ2FpbnN0IHRoZSB1bmFuaW1hdGVkIHN0eWxlIGhlcmUsIGJ1dCB3ZSAib3ZlcnJp
ZGUiIHRoZSB0cmFuc2l0aW9uIGxhdGVyLgotICAgICAgICAgICAgICAgIGF1dG8qIGtleWZyYW1l
QW5pbWF0aW9uID0gYW5pbWF0aW9uRm9yUHJvcGVydHkocHJvcCk7Ci0gICAgICAgICAgICAgICAg
YXV0byogZnJvbVN0eWxlID0ga2V5ZnJhbWVBbmltYXRpb24gPyAma2V5ZnJhbWVBbmltYXRpb24t
PnVuYW5pbWF0ZWRTdHlsZSgpIDogY3VycmVudFN0eWxlOwotCi0gICAgICAgICAgICAgICAgLy8g
U2VlIGlmIHRoZXJlIGlzIGEgY3VycmVudCB0cmFuc2l0aW9uIGZvciB0aGlzIHByb3AKLSAgICAg
ICAgICAgICAgICBJbXBsaWNpdEFuaW1hdGlvbiogaW1wbEFuaW0gPSBtX3RyYW5zaXRpb25zLmdl
dChwcm9wKTsKLSAgICAgICAgICAgICAgICBib29sIGVxdWFsID0gdHJ1ZTsKLQotICAgICAgICAg
ICAgICAgIGlmIChpbXBsQW5pbSkgewotICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSBhcmUg
cG9zdCBhY3RpdmUgZG9uJ3QgYm90aGVyIHNldHRpbmcgdGhlIGFjdGl2ZSBmbGFnLiBUaGlzIHdp
bGwgY2F1c2UKLSAgICAgICAgICAgICAgICAgICAgLy8gdGhpcyBhbmltYXRpb24gdG8gZ2V0IHJl
bW92ZWQgYXQgdGhlIGVuZCBvZiB0aGlzIGZ1bmN0aW9uLgotICAgICAgICAgICAgICAgICAgICBp
ZiAoIWltcGxBbmltLT5wb3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBpbXBs
QW5pbS0+c2V0QWN0aXZlKHRydWUpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgLy8gVGhpcyBtaWdodCBiZSBhIHRyYW5zaXRpb24gdGhhdCBpcyBqdXN0IGZpbmlz
aGluZy4gVGhhdCB3b3VsZCBiZSB0aGUgY2FzZQotICAgICAgICAgICAgICAgICAgICAvLyBpZiBp
dCB3ZXJlIHBvc3RBY3RpdmUuIEJ1dCB3ZSBzdGlsbCBuZWVkIHRvIGNoZWNrIGZvciBlcXVhbGl0
eSBiZWNhdXNlCi0gICAgICAgICAgICAgICAgICAgIC8vIGl0IGNvdWxkIGJlIGp1c3QgZmluaXNo
aW5nIEFORCBjaGFuZ2luZyB0byBhIG5ldyBnb2FsIHN0YXRlLgotICAgICAgICAgICAgICAgICAg
ICAvLwotICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGltcGxBbmltIG1pZ2h0IGFsc28gbm90
IGJlIGFuIGFscmVhZHkgcnVubmluZyB0cmFuc2l0aW9uLiBJdCBtaWdodCBiZQotICAgICAgICAg
ICAgICAgICAgICAvLyBuZXdseSBhZGRlZCB0byB0aGUgbGlzdCBpbiBhIHByZXZpb3VzIGl0ZXJh
dGlvbi4gVGhpcyB3b3VsZCBoYXBwZW4gaWYKLSAgICAgICAgICAgICAgICAgICAgLy8geW91IGhh
dmUgYm90aCBhbiBleHBsaWNpdCB0cmFuc2l0aW9uLXByb3BlcnR5IGFuZCAnYWxsJyBpbiB0aGUg
c2FtZQotICAgICAgICAgICAgICAgICAgICAvLyBsaXN0LiBJbiB0aGlzIGNhc2UsIHRoZSBsYXR0
ZXIgb25lIG92ZXJyaWRlcyB0aGUgZWFybGllciBvbmUsIHNvIHdlCi0gICAgICAgICAgICAgICAg
ICAgIC8vIGJlaGF2ZSBhcyB0aG91Z2ggdGhpcyBpcyBhIHJ1bm5pbmcgYW5pbWF0aW9uIGJlaW5n
IHJlcGxhY2VkLgotICAgICAgICAgICAgICAgICAgICBpZiAoIWltcGxBbmltLT5pc1RhcmdldFBy
b3BlcnR5RXF1YWwocHJvcCwgJnRhcmdldFN0eWxlKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gRm9yIGFjY2VsZXJhdGVkIGFuaW1hdGlvbnMgd2UgbmVlZCB0byByZXR1cm4gYSBuZXcg
UmVuZGVyU3R5bGUgd2l0aCB0aGUgX2N1cnJlbnRfIHZhbHVlCi0gICAgICAgICAgICAgICAgICAg
ICAgICAvLyBvZiB0aGUgcHJvcGVydHksIHNvIHRoYXQgcmVzdGFydGVkIHRyYW5zaXRpb25zIHVz
ZSB0aGUgY29ycmVjdCBzdGFydGluZyBwb2ludC4KLSAgICAgICAgICAgICAgICAgICAgICAgIGlm
IChDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQo
cHJvcCkgJiYgaW1wbEFuaW0tPmlzQWNjZWxlcmF0ZWQoKSkgewotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGlmICghbW9kaWZpZWRDdXJyZW50U3R5bGUpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG1vZGlmaWVkQ3VycmVudFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCpjdXJyZW50U3R5bGUpOwotCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1wbEFuaW0t
PmJsZW5kUHJvcGVydHlWYWx1ZUluU3R5bGUocHJvcCwgbW9kaWZpZWRDdXJyZW50U3R5bGUuZ2V0
KCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAg
TE9HKEFuaW1hdGlvbnMsICJSZW1vdmluZyBleGlzdGluZyBJbXBsaWNpdEFuaW1hdGlvbiAlcCBm
b3IgcHJvcGVydHkgJXMiLCBpbXBsQW5pbSwgZ2V0UHJvcGVydHlOYW1lKHByb3ApKTsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGFuaW1hdGlvbkNvbnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVS
ZW1vdmVkKCppbXBsQW5pbSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX3RyYW5zaXRpb25z
LnJlbW92ZShwcm9wKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGVxdWFsID0gZmFsc2U7Ci0g
ICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBuZWVkIHRvIHN0YXJ0IGEgdHJhbnNpdGlvbiBpZiBpdCBpcyBhY3Rp
dmUgYW5kIHRoZSBwcm9wZXJ0aWVzIGRvbid0IG1hdGNoCi0gICAgICAgICAgICAgICAgICAgIGVx
dWFsID0gIWlzQWN0aXZlVHJhbnNpdGlvbiB8fCBDU1NQcm9wZXJ0eUFuaW1hdGlvbjo6cHJvcGVy
dGllc0VxdWFsKHByb3AsIGZyb21TdHlsZSwgJnRhcmdldFN0eWxlKSB8fCAhQ1NTUHJvcGVydHlB
bmltYXRpb246OmNhblByb3BlcnR5QmVJbnRlcnBvbGF0ZWQocHJvcCwgZnJvbVN0eWxlLCAmdGFy
Z2V0U3R5bGUpOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdlIGNh
biBiZSBpbiB0aGlzIGxvb3Agd2l0aCBhbiBpbmFjdGl2ZSB0cmFuc2l0aW9uICghaXNBY3RpdmVU
cmFuc2l0aW9uKS4gV2UgbmVlZAotICAgICAgICAgICAgICAgIC8vIHRvIGRvIHRoYXQgdG8gY2hl
Y2sgdG8gc2VlIGlmIHdlIGFyZSBjYW5jZWxpbmcgYSB0cmFuc2l0aW9uLiBCdXQgd2UgZG9uJ3Qg
d2FudCB0bwotICAgICAgICAgICAgICAgIC8vIHN0YXJ0IG9uZSBvZiB0aGUgaW5hY3RpdmUgdHJh
bnNpdGlvbnMuIFNvIHNob3J0IGNpcmN1aXQgdGhhdCBoZXJlLiAoU2VlCi0gICAgICAgICAgICAg
ICAgLy8gPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDc4Nz4KLSAg
ICAgICAgICAgICAgICBpZiAoIWVxdWFsICYmIGlzQWN0aXZlVHJhbnNpdGlvbikgewotICAgICAg
ICAgICAgICAgICAgICAvLyBBZGQgdGhlIG5ldyB0cmFuc2l0aW9uCi0gICAgICAgICAgICAgICAg
ICAgIGF1dG8gaW1wbGljaXRBbmltYXRpb24gPSBJbXBsaWNpdEFuaW1hdGlvbjo6Y3JlYXRlKGFu
aW1hdGlvbiwgcHJvcCwgZWxlbWVudCwgKnRoaXMsIG1vZGlmaWVkQ3VycmVudFN0eWxlID8gKm1v
ZGlmaWVkQ3VycmVudFN0eWxlIDogKmZyb21TdHlsZSk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChtX3N1c3BlbmRlZCAmJiBpbXBsaWNpdEFuaW1hdGlvbi0+aGFzU3R5bGUoKSkKLSAgICAgICAg
ICAgICAgICAgICAgICAgIGltcGxpY2l0QW5pbWF0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0
aW9uUGxheVN0YXRlOjpQYXVzZWQpOwotCi0gICAgICAgICAgICAgICAgICAgIExPRyhBbmltYXRp
b25zLCAiQ3JlYXRlZCBJbXBsaWNpdEFuaW1hdGlvbiAlcCBvbiBlbGVtZW50ICVwIGZvciBwcm9w
ZXJ0eSAlcyBkdXJhdGlvbiAlLjJmIGRlbGF5ICUuMmYiLCBpbXBsaWNpdEFuaW1hdGlvbi5wdHIo
KSwgJmVsZW1lbnQsIGdldFByb3BlcnR5TmFtZShwcm9wKSwgYW5pbWF0aW9uLmR1cmF0aW9uKCks
IGFuaW1hdGlvbi5kZWxheSgpKTsKLSAgICAgICAgICAgICAgICAgICAgbV90cmFuc2l0aW9ucy5z
ZXQocHJvcCwgV1RGTW92ZShpbXBsaWNpdEFuaW1hdGlvbikpOwotICAgICAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgICAgIC8vIFdlIG9ubHkgbmVlZCBvbmUgcGFzcyBmb3IgdGhlIHNpbmds
ZSBwcm9wIGNhc2UKLSAgICAgICAgICAgICAgICBpZiAoIWFsbCkKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBNYWtl
IGEgbGlzdCBvZiB0cmFuc2l0aW9ucyB0byBiZSByZW1vdmVkCi0gICAgVmVjdG9yPGludD4gdG9C
ZVJlbW92ZWQ7Ci0gICAgZm9yIChhdXRvJiB0cmFuc2l0aW9uIDogbV90cmFuc2l0aW9ucy52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoIXRyYW5zaXRpb24tPmFjdGl2ZSgpKSB7Ci0gICAgICAgICAg
ICBhbmltYXRpb25Db250cm9sbGVyKCkuYW5pbWF0aW9uV2lsbEJlUmVtb3ZlZCgqdHJhbnNpdGlv
bik7Ci0gICAgICAgICAgICB0b0JlUmVtb3ZlZC5hcHBlbmQodHJhbnNpdGlvbi0+YW5pbWF0aW5n
UHJvcGVydHkoKSk7Ci0gICAgICAgICAgICBMT0coQW5pbWF0aW9ucywgIlJlbW92aW5nIEltcGxp
Y2l0QW5pbWF0aW9uICVwIGZyb20gZWxlbWVudCAlcCBmb3IgcHJvcGVydHkgJXMiLCB0cmFuc2l0
aW9uLmdldCgpLCAmZWxlbWVudCwgZ2V0UHJvcGVydHlOYW1lKHRyYW5zaXRpb24tPmFuaW1hdGlu
Z1Byb3BlcnR5KCkpKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIC8vIE5vdyByZW1vdmUgdGhl
IHRyYW5zaXRpb25zIGZyb20gdGhlIGxpc3QKLSAgICBmb3IgKGF1dG8gcHJvcGVydHlUb1JlbW92
ZSA6IHRvQmVSZW1vdmVkKQotICAgICAgICBtX3RyYW5zaXRpb25zLnJlbW92ZShwcm9wZXJ0eVRv
UmVtb3ZlKTsKLX0KLQotdm9pZCBDb21wb3NpdGVBbmltYXRpb246OnVwZGF0ZUtleWZyYW1lQW5p
bWF0aW9ucyhFbGVtZW50JiBlbGVtZW50LCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxl
LCBjb25zdCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpCi17Ci0gICAgLy8gTm90aGluZyB0byBk
byBpZiB3ZSBkb24ndCBoYXZlIGFueSBhbmltYXRpb25zLCBhbmQgZGlkbid0IGhhdmUgYW55IGJl
Zm9yZQotICAgIGlmIChtX2tleWZyYW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkgJiYgIXRhcmdldFN0
eWxlLmhhc0FuaW1hdGlvbnMoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9rZXlmcmFtZUFu
aW1hdGlvbnMuY2hlY2tDb25zaXN0ZW5jeSgpOwotICAgIAotICAgIGlmIChjdXJyZW50U3R5bGUg
JiYgY3VycmVudFN0eWxlLT5oYXNBbmltYXRpb25zKCkgJiYgdGFyZ2V0U3R5bGUuaGFzQW5pbWF0
aW9ucygpICYmICooY3VycmVudFN0eWxlLT5hbmltYXRpb25zKCkpID09ICoodGFyZ2V0U3R5bGUu
YW5pbWF0aW9ucygpKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgQW5pbWF0aW9uTmFtZU1hcCBu
ZXdBbmltYXRpb25zOwotCi0gICAgLy8gVG9zcyB0aGUgYW5pbWF0aW9uIG9yZGVyIG1hcC4KLSAg
ICBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuY2xlYXIoKTsKLQotICAgIHN0YXRpYyBNYWlu
VGhyZWFkTmV2ZXJEZXN0cm95ZWQ8Y29uc3QgQXRvbVN0cmluZz4gbm9uZSgibm9uZSIsIEF0b21T
dHJpbmc6OkNvbnN0cnVjdEZyb21MaXRlcmFsKTsKLSAgICAKLSAgICAvLyBOb3cgbWFyayBhbnkg
c3RpbGwgYWN0aXZlIGFuaW1hdGlvbnMgYXMgYWN0aXZlIGFuZCBhZGQgYW55IG5ldyBhbmltYXRp
b25zLgotICAgIGlmICh0YXJnZXRTdHlsZS5hbmltYXRpb25zKCkpIHsKLSAgICAgICAgaW50IG51
bUFuaW1zID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpLT5zaXplKCk7Ci0gICAgICAgIGZvciAo
aW50IGkgPSAwOyBpIDwgbnVtQW5pbXM7ICsraSkgewotICAgICAgICAgICAgYXV0byYgYW5pbWF0
aW9uID0gdGFyZ2V0U3R5bGUuYW5pbWF0aW9ucygpLT5hbmltYXRpb24oaSk7Ci0gICAgICAgICAg
ICBBdG9tU3RyaW5nIGFuaW1hdGlvbk5hbWUoYW5pbWF0aW9uLm5hbWUoKSk7Ci0KLSAgICAgICAg
ICAgIGlmICghYW5pbWF0aW9uLmlzVmFsaWRBbmltYXRpb24oKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgLy8gU2VlIGlmIHRoZXJlIGlzIGEg
Y3VycmVudCBhbmltYXRpb24gZm9yIHRoaXMgbmFtZS4KLSAgICAgICAgICAgIFJlZlB0cjxLZXlm
cmFtZUFuaW1hdGlvbj4ga2V5ZnJhbWVBbmltID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KGFu
aW1hdGlvbk5hbWUuaW1wbCgpKTsKLSAgICAgICAgICAgIGlmIChrZXlmcmFtZUFuaW0pIHsKLSAg
ICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLmFkZChrZXlmcmFtZUFuaW0tPm5hbWUoKS5pbXBs
KCksIGtleWZyYW1lQW5pbSk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoa2V5ZnJhbWVBbmltLT5w
b3N0QWN0aXZlKCkpCi0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgICAg
ICAgICAgLy8gQW5pbWF0aW9ucyBtYXRjaCwgYnV0IHBsYXkgc3RhdGVzIG1heSBkaWZmZXIuIFVw
ZGF0ZSBpZiBuZWVkZWQuCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVBbmltLT51cGRhdGVQbGF5
U3RhdGUoYW5pbWF0aW9uLnBsYXlTdGF0ZSgpKTsKLQotICAgICAgICAgICAgICAgIC8vIFNldCB0
aGUgc2F2ZWQgYW5pbWF0aW9uIHRvIHRoaXMgbmV3IG9uZSwganVzdCBpbiBjYXNlIHRoZSBwbGF5
IHN0YXRlIGhhcyBjaGFuZ2VkLgotICAgICAgICAgICAgICAgIGtleWZyYW1lQW5pbS0+c2V0QW5p
bWF0aW9uKGFuaW1hdGlvbik7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKChhbmltYXRpb24uZHVy
YXRpb24oKSB8fCBhbmltYXRpb24uZGVsYXkoKSkgJiYgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50
KCkgJiYgYW5pbWF0aW9uTmFtZSAhPSBub25lKSB7Ci0gICAgICAgICAgICAgICAga2V5ZnJhbWVB
bmltID0gS2V5ZnJhbWVBbmltYXRpb246OmNyZWF0ZShhbmltYXRpb24sIGVsZW1lbnQsICp0aGlz
LCB0YXJnZXRTdHlsZSk7Ci0gICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJDcmVhdGlu
ZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBvbiBlbGVtZW50ICVwIHdpdGgga2V5ZnJhbWVzICVzLCBk
dXJhdGlvbiAlLjJmLCBkZWxheSAlLjJmLCBpdGVyYXRpb25zICUuMmYiLCBrZXlmcmFtZUFuaW0u
Z2V0KCksICZlbGVtZW50LCBhbmltYXRpb24ubmFtZSgpLnV0ZjgoKS5kYXRhKCksIGFuaW1hdGlv
bi5kdXJhdGlvbigpLCBhbmltYXRpb24uZGVsYXkoKSwgYW5pbWF0aW9uLml0ZXJhdGlvbkNvdW50
KCkpOwotCi0gICAgICAgICAgICAgICAgaWYgKG1fc3VzcGVuZGVkKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGtleWZyYW1lQW5pbS0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlvblBsYXlTdGF0ZTo6
UGF1c2VkKTsKLSAgICAgICAgICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICIgIChjcmVhdGVk
IGluIHN1c3BlbmRlZC9wYXVzZWQgc3RhdGUpIik7Ci0gICAgICAgICAgICAgICAgfQotI2lmICFM
T0dfRElTQUJMRUQKLSAgICAgICAgICAgICAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IGtleWZy
YW1lQW5pbS0+a2V5ZnJhbWVzKCkucHJvcGVydGllcygpKQotICAgICAgICAgICAgICAgICAgICBM
T0coQW5pbWF0aW9ucywgIiAgcHJvcGVydHkgJXMiLCBnZXRQcm9wZXJ0eU5hbWUocHJvcGVydHlJ
RCkpOwotI2VuZGlmCi0KLSAgICAgICAgICAgICAgICBuZXdBbmltYXRpb25zLnNldChrZXlmcmFt
ZUFuaW0tPm5hbWUoKS5pbXBsKCksIGtleWZyYW1lQW5pbSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIC8vIEFkZCB0aGlzIHRvIHRoZSBhbmltYXRpb24gb3JkZXIg
bWFwLgotICAgICAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkKLSAgICAgICAgICAgICAgICBtX2tl
eWZyYW1lQW5pbWF0aW9uT3JkZXJNYXAuYXBwZW5kKGtleWZyYW1lQW5pbS0+bmFtZSgpLmltcGwo
KSk7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0gICAgLy8gTWFrZSBhIGxpc3Qgb2YgYW5pbWF0
aW9ucyB0byBiZSByZW1vdmVkLgotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFt
ZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKCFuZXdBbmltYXRpb25zLmNvbnRh
aW5zKGFuaW1hdGlvbi0+bmFtZSgpLmltcGwoKSkpIHsKLSAgICAgICAgICAgIGFuaW1hdGlvbkNv
bnRyb2xsZXIoKS5hbmltYXRpb25XaWxsQmVSZW1vdmVkKCphbmltYXRpb24pOwotICAgICAgICAg
ICAgYW5pbWF0aW9uLT5jbGVhcigpOwotICAgICAgICAgICAgTE9HKEFuaW1hdGlvbnMsICJSZW1v
dmluZyBLZXlmcmFtZUFuaW1hdGlvbiAlcCBmcm9tIGVsZW1lbnQgJXAiLCBhbmltYXRpb24uZ2V0
KCksICZlbGVtZW50KTsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBzdGQ6OnN3YXAobmV3
QW5pbWF0aW9ucywgbV9rZXlmcmFtZUFuaW1hdGlvbnMpOwotfQotCi1BbmltYXRpb25VcGRhdGUg
Q29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRlKEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFJlbmRl
clN0eWxlKiBjdXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSkKLXsK
LSAgICAvLyBXZSBkb24ndCBkbyBhbnkgdHJhbnNpdGlvbnMgaWYgd2UgZG9uJ3QgaGF2ZSBhIGN1
cnJlbnRTdHlsZSAob24gc3RhcnR1cCkuCi0gICAgdXBkYXRlVHJhbnNpdGlvbnMoZWxlbWVudCwg
Y3VycmVudFN0eWxlLCB0YXJnZXRTdHlsZSk7Ci0gICAgdXBkYXRlS2V5ZnJhbWVBbmltYXRpb25z
KGVsZW1lbnQsIGN1cnJlbnRTdHlsZSwgdGFyZ2V0U3R5bGUpOwotICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIE9wdGlvblNldDxBbmltYXRpb25JbXBh
Y3Q+IGltYXBjdDsKLQotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRT
dHlsZTsKLQotICAgIGlmIChjdXJyZW50U3R5bGUpIHsKLSAgICAgICAgLy8gTm93IHRoYXQgd2Ug
aGF2ZSB0cmFuc2l0aW9uIG9iamVjdHMgcmVhZHksIGxldCB0aGVtIGtub3cgYWJvdXQgdGhlIG5l
dyBnb2FsIHN0YXRlLiAgV2Ugd2FudCB0aGVtCi0gICAgICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5k
ZXJTdHlsZSomIG9ubHkgaWYgbmVlZGVkLgotICAgICAgICBib29sIGNoZWNrRm9yU3RhY2tpbmdD
b250ZXh0ID0gZmFsc2U7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNp
dGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGF1dG8gY2hhbmdlcyA9IHRyYW5zaXRpb24t
PmFuaW1hdGUoKnRoaXMsIHRhcmdldFN0eWxlLCBhbmltYXRlZFN0eWxlKTsKLSAgICAgICAgICAg
IGlmIChjaGFuZ2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCkpCi0gICAg
ICAgICAgICAgICAgY2hlY2tGb3JTdGFja2luZ0NvbnRleHQgfD0gV2lsbENoYW5nZURhdGE6OnBy
b3BlcnR5Q3JlYXRlc1N0YWNraW5nQ29udGV4dCh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0
eSgpKTsKLQotICAgICAgICAgICAgaWYgKGNoYW5nZXMuY29udGFpbnMoQW5pbWF0ZUNoYW5nZTo6
UnVubmluZ1N0YXRlQ2hhbmdlKSAmJiB0cmFuc2l0aW9uLT5hZmZlY3RzQWNjZWxlcmF0ZWRQcm9w
ZXJ0eSgpKQotICAgICAgICAgICAgICAgIGltYXBjdC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpSZXF1
aXJlc1JlY29tcG9zaXRlKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmIChhbmltYXRlZFN0eWxl
ICYmIGNoZWNrRm9yU3RhY2tpbmdDb250ZXh0KSB7Ci0gICAgICAgICAgICAvLyBOb3RlIHRoYXQg
dGhpcyBpcyBzaW1pbGFyIHRvIGNvZGUgaW4gU3R5bGU6OkFkanVzdGVyOjphZGp1c3QoKSBidXQg
b25seSBuZWVkcyB0byBjb25zdWx0Ci0gICAgICAgICAgICAvLyBhbmltYXRhYmxlIHByb3BlcnRp
ZXMgdGhhdCBjYW4gdHJpZ2dlciBzdGFja2luZyBjb250ZXh0LgotICAgICAgICAgICAgaWYgKGFu
aW1hdGVkU3R5bGUtPm9wYWNpdHkoKSA8IDEuMGYKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRl
ZFN0eWxlLT5oYXNUcmFuc2Zvcm1SZWxhdGVkUHJvcGVydHkoKQotICAgICAgICAgICAgICAgIHx8
IGFuaW1hdGVkU3R5bGUtPmhhc01hc2soKQotICAgICAgICAgICAgICAgIHx8IGFuaW1hdGVkU3R5
bGUtPmNsaXBQYXRoKCkKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0eWxlLT5ib3hSZWZs
ZWN0KCkKLSAgICAgICAgICAgICAgICB8fCBhbmltYXRlZFN0eWxlLT5oYXNGaWx0ZXIoKQotI2lm
IEVOQUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgICAgICAgICAgICAgfHwgYW5pbWF0ZWRTdHls
ZS0+aGFzQmFja2Ryb3BGaWx0ZXIoKQotI2VuZGlmCi0gICAgICAgICAgICAgICAgKQotICAgICAg
ICAgICAgaW1hcGN0LmFkZChBbmltYXRpb25JbXBhY3Q6OkZvcmNlc1N0YWNraW5nQ29udGV4dCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICAvLyBOb3cgdGhhdCB3ZSBoYXZlIGFuaW1hdGlvbiBv
YmplY3RzIHJlYWR5LCBsZXQgdGhlbSBrbm93IGFib3V0IHRoZSBuZXcgZ29hbCBzdGF0ZS4gIFdl
IHdhbnQgdGhlbQotICAgIC8vIHRvIGZpbGwgaW4gYSBSZW5kZXJTdHlsZSomIG9ubHkgaWYgbmVl
ZGVkLgotICAgIGZvciAoYXV0byYgbmFtZSA6IG1fa2V5ZnJhbWVBbmltYXRpb25PcmRlck1hcCkg
ewotICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1lQW5pbSA9IG1fa2V5
ZnJhbWVBbmltYXRpb25zLmdldChuYW1lKTsKLSAgICAgICAgaWYgKGtleWZyYW1lQW5pbSkgewot
ICAgICAgICAgICAgYXV0byBjaGFuZ2VzID0ga2V5ZnJhbWVBbmltLT5hbmltYXRlKCp0aGlzLCB0
YXJnZXRTdHlsZSwgYW5pbWF0ZWRTdHlsZSk7Ci0gICAgICAgICAgICBpZiAoY2hhbmdlcy5jb250
YWlucyhBbmltYXRlQ2hhbmdlOjpSdW5uaW5nU3RhdGVDaGFuZ2UpICYmIGtleWZyYW1lQW5pbS0+
YWZmZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSkKLSAgICAgICAgICAgICAgICBpbWFwY3QuYWRk
KEFuaW1hdGlvbkltcGFjdDo6UmVxdWlyZXNSZWNvbXBvc2l0ZSk7Ci0KLSAgICAgICAgICAgIGlm
IChjaGFuZ2VzLmNvbnRhaW5zKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCkgJiYga2V5ZnJh
bWVBbmltLT50cmlnZ2Vyc1N0YWNraW5nQ29udGV4dCgpKQotICAgICAgICAgICAgICAgIGltYXBj
dC5hZGQoQW5pbWF0aW9uSW1wYWN0OjpGb3JjZXNTdGFja2luZ0NvbnRleHQpOwotCi0gICAgICAg
ICAgICBtX2hhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQgfD0ga2V5ZnJhbWVBbmltLT5k
ZXBlbmRzT25MYXlvdXQoKTsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiB7IFdURk1v
dmUoYW5pbWF0ZWRTdHlsZSksIGltYXBjdCB9OwotfQotCi1zdGQ6OnVuaXF1ZV9wdHI8UmVuZGVy
U3R5bGU+IENvbXBvc2l0ZUFuaW1hdGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0Ci17Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiByZXN1bHRTdHlsZTsKLSAgICBmb3IgKGF1
dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKQotICAgICAgICB0cmFuc2l0
aW9uLT5nZXRBbmltYXRlZFN0eWxlKHJlc3VsdFN0eWxlKTsKLQotICAgIG1fa2V5ZnJhbWVBbmlt
YXRpb25zLmNoZWNrQ29uc2lzdGVuY3koKTsKLQotICAgIGZvciAoYXV0byYgbmFtZSA6IG1fa2V5
ZnJhbWVBbmltYXRpb25PcmRlck1hcCkgewotICAgICAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRp
b24+IGtleWZyYW1lQW5pbWF0aW9uID0gbV9rZXlmcmFtZUFuaW1hdGlvbnMuZ2V0KG5hbWUpOwot
ICAgICAgICBpZiAoa2V5ZnJhbWVBbmltYXRpb24pCi0gICAgICAgICAgICBrZXlmcmFtZUFuaW1h
dGlvbi0+Z2V0QW5pbWF0ZWRTdHlsZShyZXN1bHRTdHlsZSk7Ci0gICAgfQotICAgIAotICAgIHJl
dHVybiByZXN1bHRTdHlsZTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4gQ29tcG9zaXRlQW5pbWF0
aW9uOjp0aW1lVG9OZXh0U2VydmljZSgpIGNvbnN0Ci17Ci0gICAgLy8gUmV0dXJucyB0aGUgdGlt
ZSBhdCB3aGljaCBuZXh0IHNlcnZpY2UgaXMgcmVxdWlyZWQuIFdURjo6bnVsbG9wdCBtZWFucyBu
byBzZXJ2aWNlIGlzIHJlcXVpcmVkLiAwIG1lYW5zCi0gICAgLy8gc2VydmljZSBpcyByZXF1aXJl
ZCBub3csIGFuZCA+IDAgbWVhbnMgc2VydmljZSBpcyByZXF1aXJlZCB0aGF0IG1hbnkgc2Vjb25k
cyBpbiB0aGUgZnV0dXJlLgotICAgIE9wdGlvbmFsPFNlY29uZHM+IG1pblQ7Ci0gICAgCi0gICAg
aWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5z
aXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxT
ZWNvbmRzPiB0ID0gdHJhbnNpdGlvbi0+dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICAgICAgICAg
IGlmICghdCkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIGlmICghbWlu
VCB8fCB0LnZhbHVlKCkgPCBtaW5ULnZhbHVlKCkpCi0gICAgICAgICAgICAgICAgbWluVCA9IHQu
dmFsdWUoKTsKLSAgICAgICAgICAgIGlmIChtaW5ULnZhbHVlKCkgPT0gMF9zKQotICAgICAgICAg
ICAgICAgIHJldHVybiAwX3M7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKCFtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMuY2hl
Y2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5ZnJh
bWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBPcHRpb25hbDxTZWNvbmRzPiB0
ID0gYW5pbWF0aW9uLT50aW1lVG9OZXh0U2VydmljZSgpOwotICAgICAgICAgICAgaWYgKCF0KQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaWYgKCFtaW5UIHx8IHQudmFs
dWUoKSA8IG1pblQudmFsdWUoKSkKLSAgICAgICAgICAgICAgICBtaW5UID0gdC52YWx1ZSgpOwot
ICAgICAgICAgICAgaWYgKG1pblQudmFsdWUoKSA9PSAwX3MpCi0gICAgICAgICAgICAgICAgcmV0
dXJuIDBfczsKLSAgICAgICAgfQotICAgIH0KLQotICAgIHJldHVybiBtaW5UOwotfQotCi1LZXlm
cmFtZUFuaW1hdGlvbiogQ29tcG9zaXRlQW5pbWF0aW9uOjphbmltYXRpb25Gb3JQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIEtleWZyYW1lQW5pbWF0aW9uKiBy
ZXN1bHQgPSBudWxscHRyOwotCi0gICAgLy8gV2Ugd2FudCB0byBzZW5kIGJhY2sgdGhlIGxhc3Qg
YW5pbWF0aW9uIHdpdGggdGhlIHByb3BlcnR5IGlmIHRoZXJlIGFyZSBtdWx0aXBsZXMuCi0gICAg
Ly8gU28gd2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggYWxsIGFuaW1hdGlvbnMKLSAgICBpZiAo
IW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBtX2tleWZyYW1lQW5p
bWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZvciAoYXV0byYgYW5pbWF0aW9u
IDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmIChhbmlt
YXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgICAg
ICByZXN1bHQgPSBhbmltYXRpb24uZ2V0KCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1
cm4gcmVzdWx0OwotfQotCi1ib29sIENvbXBvc2l0ZUFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9m
VHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICAvLyBJ
ZiBtb3JlIHRoYW4gb25lIHRyYW5zaXRpb24gYW5kIGFuaW1hdGlvbiBhZmZlY3QgdHJhbnNmb3Jt
LCBnaXZlIHVwLgotICAgIGJvb2wgc2VlblRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwotICAg
IAotICAgIGZvciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVz
KCkpIHsKLSAgICAgICAgaWYgKCFhbmltYXRpb24tPmhhc0FuaW1hdGlvbkZvclByb3BlcnR5KENT
U1Byb3BlcnR5VHJhbnNmb3JtKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlm
IChzZWVuVHJhbnNmb3JtQW5pbWF0aW9uKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgICAgIHNlZW5UcmFuc2Zvcm1BbmltYXRpb24gPSB0cnVlOwotCi0gICAgICAgIGlmICghYW5p
bWF0aW9uLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKSkKLSAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24g
OiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmlt
YXRpbmdQcm9wZXJ0eSgpICE9IENTU1Byb3BlcnR5VHJhbnNmb3JtIHx8ICF0cmFuc2l0aW9uLT5o
YXNTdHlsZSgpKQotICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgaWYgKHNlZW5UcmFu
c2Zvcm1BbmltYXRpb24pCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYg
KCF0cmFuc2l0aW9uLT5jb21wdXRlRXh0ZW50T2ZUcmFuc2Zvcm1BbmltYXRpb24oYm91bmRzKSkK
LSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0gICAgCi0gICAgcmV0dXJuIHRydWU7
Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpzdXNwZW5kQW5pbWF0aW9ucygpCi17Ci0g
ICAgaWYgKG1fc3VzcGVuZGVkKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX3N1c3BlbmRlZCA9
IHRydWU7Ci0KLSAgICBpZiAoIW1fa2V5ZnJhbWVBbmltYXRpb25zLmlzRW1wdHkoKSkgewotICAg
ICAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVja0NvbnNpc3RlbmN5KCk7Ci0gICAgICAgIGZv
ciAoYXV0byYgYW5pbWF0aW9uIDogbV9rZXlmcmFtZUFuaW1hdGlvbnMudmFsdWVzKCkpCi0gICAg
ICAgICAgICBhbmltYXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmltYXRpb25QbGF5U3RhdGU6OlBh
dXNlZCk7Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAg
ICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0g
ICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+aGFzU3R5bGUoKSkKLSAgICAgICAgICAgICAgICB0
cmFuc2l0aW9uLT51cGRhdGVQbGF5U3RhdGUoQW5pbWF0aW9uUGxheVN0YXRlOjpQYXVzZWQpOwot
ICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENvbXBvc2l0ZUFuaW1hdGlvbjo6cmVzdW1lQW5p
bWF0aW9ucygpCi17Ci0gICAgaWYgKCFtX3N1c3BlbmRlZCkKLSAgICAgICAgcmV0dXJuOwotCi0g
ICAgbV9zdXNwZW5kZWQgPSBmYWxzZTsKLQotICAgIGlmICghbV9rZXlmcmFtZUFuaW1hdGlvbnMu
aXNFbXB0eSgpKSB7Ci0gICAgICAgIG1fa2V5ZnJhbWVBbmltYXRpb25zLmNoZWNrQ29uc2lzdGVu
Y3koKTsKLSAgICAgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5pbWF0aW9u
cy52YWx1ZXMoKSkgewotICAgICAgICAgICAgaWYgKGFuaW1hdGlvbi0+cGxheVN0YXRlUGxheWlu
ZygpKQotICAgICAgICAgICAgICAgIGFuaW1hdGlvbi0+dXBkYXRlUGxheVN0YXRlKEFuaW1hdGlv
blBsYXlTdGF0ZTo6UGxheWluZyk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoIW1fdHJh
bnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAgICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1f
dHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5oYXNT
dHlsZSgpKQotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnVwZGF0ZVBsYXlTdGF0ZShBbmlt
YXRpb25QbGF5U3RhdGU6OlBsYXlpbmcpOwotICAgICAgICB9Ci0gICAgfQotfQotCi12b2lkIENv
bXBvc2l0ZUFuaW1hdGlvbjo6b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMoQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKLXsKLSAgICBpZiAoIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpKSB7Ci0gICAg
ICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAg
ICAgICAgICAgIGlmICh0cmFuc2l0aW9uLT5hbmltYXRpbmdQcm9wZXJ0eSgpID09IHByb3BlcnR5
KQotICAgICAgICAgICAgICAgIHRyYW5zaXRpb24tPnNldE92ZXJyaWRkZW4odHJ1ZSk7Ci0gICAg
ICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgQ29tcG9zaXRlQW5pbWF0aW9uOjpyZXN1bWVPdmVycmlk
ZGVuSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQgcHJvcGVydHkpCi17Ci0gICAgaWYg
KCFtX3RyYW5zaXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRp
b24gOiBtX3RyYW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlv
bi0+YW5pbWF0aW5nUHJvcGVydHkoKSA9PSBwcm9wZXJ0eSkKLSAgICAgICAgICAgICAgICB0cmFu
c2l0aW9uLT5zZXRPdmVycmlkZGVuKGZhbHNlKTsKLSAgICAgICAgfQotICAgIH0KLX0KLQotYm9v
bCBDb21wb3NpdGVBbmltYXRpb246OmlzQW5pbWF0aW5nUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eSwgYm9vbCBhY2NlbGVyYXRlZE9ubHkpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX2tleWZy
YW1lQW5pbWF0aW9ucy5pc0VtcHR5KCkpIHsKLSAgICAgICAgbV9rZXlmcmFtZUFuaW1hdGlvbnMu
Y2hlY2tDb25zaXN0ZW5jeSgpOwotICAgICAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IG1fa2V5
ZnJhbWVBbmltYXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAoYW5pbWF0aW9uLT5p
c0FuaW1hdGluZ1Byb3BlcnR5KHByb3BlcnR5LCBhY2NlbGVyYXRlZE9ubHkpKQotICAgICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKCFtX3RyYW5z
aXRpb25zLmlzRW1wdHkoKSkgewotICAgICAgICBmb3IgKGF1dG8mIHRyYW5zaXRpb24gOiBtX3Ry
YW5zaXRpb25zLnZhbHVlcygpKSB7Ci0gICAgICAgICAgICBpZiAodHJhbnNpdGlvbi0+aXNBbmlt
YXRpbmdQcm9wZXJ0eShwcm9wZXJ0eSwgYWNjZWxlcmF0ZWRPbmx5KSkKLSAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKLSAgICAgICAgfQotICAgIH0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0K
LWJvb2wgQ29tcG9zaXRlQW5pbWF0aW9uOjpwYXVzZUFuaW1hdGlvbkF0VGltZShjb25zdCBBdG9t
U3RyaW5nJiBuYW1lLCBkb3VibGUgdCkKLXsKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0KLSAgICBSZWZQdHI8S2V5ZnJhbWVBbmltYXRpb24+IGtleWZyYW1l
QW5pbSA9IG1fa2V5ZnJhbWVBbmltYXRpb25zLmdldChuYW1lLmltcGwoKSk7Ci0gICAgaWYgKCFr
ZXlmcmFtZUFuaW0gfHwgIWtleWZyYW1lQW5pbS0+cnVubmluZygpKQotICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0KLSAgICBrZXlmcmFtZUFuaW0tPmZyZWV6ZUF0VGltZSh0KTsKLSAgICByZXR1cm4g
dHJ1ZTsKLX0KLQotYm9vbCBDb21wb3NpdGVBbmltYXRpb246OnBhdXNlVHJhbnNpdGlvbkF0VGlt
ZShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5LCBkb3VibGUgdCkKLXsKLSAgICBpZiAoKHByb3BlcnR5
IDwgZmlyc3RDU1NQcm9wZXJ0eSkgfHwgKHByb3BlcnR5ID49IGZpcnN0Q1NTUHJvcGVydHkgKyBu
dW1DU1NQcm9wZXJ0aWVzKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgSW1wbGljaXRB
bmltYXRpb24qIGltcGxBbmltID0gbV90cmFuc2l0aW9ucy5nZXQocHJvcGVydHkpOwotICAgIGlm
ICghaW1wbEFuaW0pIHsKLSAgICAgICAgLy8gQ2hlY2sgdG8gc2VlIGlmIHRoaXMgcHJvcGVydHkg
aXMgYmVpbmcgYW5pbWF0ZWQgdmlhIGEgc2hvcnRoYW5kLgotICAgICAgICAvLyBUaGlzIGNvZGUg
aXMgb25seSB1c2VkIGZvciB0ZXN0aW5nLCBzbyBwZXJmb3JtYW5jZSBpcyBub3QgY3JpdGljYWwg
aGVyZS4KLSAgICAgICAgSGFzaFNldDxDU1NQcm9wZXJ0eUlEPiBzaG9ydGhhbmRQcm9wZXJ0aWVz
ID0gQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGFibGVTaG9ydGhhbmRzQWZmZWN0aW5nUHJv
cGVydHkocHJvcGVydHkpOwotICAgICAgICBib29sIGFueVBhdXNlZCA9IGZhbHNlOwotICAgICAg
ICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IHNob3J0aGFuZFByb3BlcnRpZXMpIHsKLSAgICAgICAg
ICAgIGlmIChwYXVzZVRyYW5zaXRpb25BdFRpbWUocHJvcGVydHlJRCwgdCkpCi0gICAgICAgICAg
ICAgICAgYW55UGF1c2VkID0gdHJ1ZTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gYW55UGF1
c2VkOwotICAgIH0KLQotICAgIGlmICghaW1wbEFuaW0tPnJ1bm5pbmcoKSkKLSAgICAgICAgcmV0
dXJuIGZhbHNlOwotCi0gICAgaWYgKCh0ID49IDAuMCkgJiYgKHQgPD0gaW1wbEFuaW0tPmR1cmF0
aW9uKCkpKSB7Ci0gICAgICAgIGltcGxBbmltLT5mcmVlemVBdFRpbWUodCk7Ci0gICAgICAgIHJl
dHVybiB0cnVlOwotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsKLX0KLQotdW5zaWduZWQgQ29t
cG9zaXRlQW5pbWF0aW9uOjpudW1iZXJPZkFjdGl2ZUFuaW1hdGlvbnMoKSBjb25zdAotewotICAg
IHVuc2lnbmVkIGNvdW50ID0gMDsKLSAgICAKLSAgICBtX2tleWZyYW1lQW5pbWF0aW9ucy5jaGVj
a0NvbnNpc3RlbmN5KCk7Ci0gICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiBtX2tleWZyYW1lQW5p
bWF0aW9ucy52YWx1ZXMoKSkgewotICAgICAgICBpZiAoYW5pbWF0aW9uLT5ydW5uaW5nKCkpCi0g
ICAgICAgICAgICArK2NvdW50OwotICAgIH0KLQotICAgIGZvciAoYXV0byYgdHJhbnNpdGlvbiA6
IG1fdHJhbnNpdGlvbnMudmFsdWVzKCkpIHsKLSAgICAgICAgaWYgKHRyYW5zaXRpb24tPnJ1bm5p
bmcoKSkKLSAgICAgICAgICAgICsrY291bnQ7Ci0gICAgfQotICAgIAotICAgIHJldHVybiBjb3Vu
dDsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGFnZS9hbmltYXRpb24vQ29tcG9zaXRlQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggOTQyMjY5MjM5NmQyZmJhNjg4MGQxY2Q5ZjljOGQ2OWI4MmU3YjBjNS4uMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9Db21wb3NpdGVBbmltYXRpb24uaAorKysgL2Rldi9udWxsCkBAIC0xLDEw
MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA3IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoK
LSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQotICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250
cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2
ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0
dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBM
SUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBB
UFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9S
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0g
KiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICov
Ci0KLSNwcmFnbWEgb25jZQotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgot
I2luY2x1ZGUgIkltcGxpY2l0QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiS2V5ZnJhbWVBbmltYXRp
b24uaCIKLSNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L0F0b21T
dHJpbmcuaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBDU1NBbmltYXRpb25Db250
cm9sbGVyUHJpdmF0ZTsKLWNsYXNzIENTU0FuaW1hdGlvbkNvbnRyb2xsZXI7Ci1jbGFzcyBSZW5k
ZXJFbGVtZW50OwotY2xhc3MgUmVuZGVyU3R5bGU7Ci0KLS8vIEEgQ29tcG9zaXRlQW5pbWF0aW9u
IHJlcHJlc2VudHMgYSBjb2xsZWN0aW9uIG9mIGFuaW1hdGlvbnMgdGhhdCBhcmUgcnVubmluZwot
Ly8gb24gYSBzaW5nbGUgUmVuZGVyRWxlbWVudCwgc3VjaCBhcyBhIG51bWJlciBvZiBwcm9wZXJ0
aWVzIHRyYW5zaXRpb25pbmcgYXQgb25jZS4KLWNsYXNzIENvbXBvc2l0ZUFuaW1hdGlvbiA6IHB1
YmxpYyBSZWZDb3VudGVkPENvbXBvc2l0ZUFuaW1hdGlvbj4gewotICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBSZWY8Q29tcG9zaXRlQW5pbWF0aW9uPiBj
cmVhdGUoQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIp
Ci0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBDb21wb3NpdGVBbmltYXRpb24o
YW5pbWF0aW9uQ29udHJvbGxlcikpOwotICAgIH07Ci0KLSAgICB+Q29tcG9zaXRlQW5pbWF0aW9u
KCk7Ci0gICAgCi0gICAgdm9pZCBjbGVhckVsZW1lbnQoKTsKLQotICAgIEFuaW1hdGlvblVwZGF0
ZSBhbmltYXRlKEVsZW1lbnQmLCBjb25zdCBSZW5kZXJTdHlsZSogY3VycmVudFN0eWxlLCBjb25z
dCBSZW5kZXJTdHlsZSYgdGFyZ2V0U3R5bGUpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJT
dHlsZT4gZ2V0QW5pbWF0ZWRTdHlsZSgpIGNvbnN0OwotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9m
VHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdDsKLQotICAgIE9wdGlvbmFsPFNl
Y29uZHM+IHRpbWVUb05leHRTZXJ2aWNlKCkgY29uc3Q7Ci0gICAgCi0gICAgQ1NTQW5pbWF0aW9u
Q29udHJvbGxlclByaXZhdGUmIGFuaW1hdGlvbkNvbnRyb2xsZXIoKSBjb25zdCB7IHJldHVybiBt
X2FuaW1hdGlvbkNvbnRyb2xsZXI7IH0KLQotICAgIHZvaWQgc3VzcGVuZEFuaW1hdGlvbnMoKTsK
LSAgICB2b2lkIHJlc3VtZUFuaW1hdGlvbnMoKTsKLSAgICBib29sIGlzU3VzcGVuZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9zdXNwZW5kZWQ7IH0KLSAgICAKLSAgICBib29sIGhhc0FuaW1hdGlvbnMo
KSBjb25zdCAgeyByZXR1cm4gIW1fdHJhbnNpdGlvbnMuaXNFbXB0eSgpIHx8ICFtX2tleWZyYW1l
QW5pbWF0aW9ucy5pc0VtcHR5KCk7IH0KLQotICAgIGJvb2wgaXNBbmltYXRpbmdQcm9wZXJ0eShD
U1NQcm9wZXJ0eUlELCBib29sIGFjY2VsZXJhdGVkT25seSkgY29uc3Q7Ci0KLSAgICBLZXlmcmFt
ZUFuaW1hdGlvbiogYW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkgY29uc3Q7Ci0K
LSAgICB2b2lkIG92ZXJyaWRlSW1wbGljaXRBbmltYXRpb25zKENTU1Byb3BlcnR5SUQpOwotICAg
IHZvaWQgcmVzdW1lT3ZlcnJpZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhDU1NQcm9wZXJ0eUlEKTsK
LQotICAgIGJvb2wgcGF1c2VBbmltYXRpb25BdFRpbWUoY29uc3QgQXRvbVN0cmluZyYgbmFtZSwg
ZG91YmxlIHQpOwotICAgIGJvb2wgcGF1c2VUcmFuc2l0aW9uQXRUaW1lKENTU1Byb3BlcnR5SUQs
IGRvdWJsZSk7Ci0gICAgdW5zaWduZWQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3Q7
Ci0KLSAgICBib29sIGhhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQoKSBjb25zdCB7IHJl
dHVybiBtX2hhc0FuaW1hdGlvblRoYXREZXBlbmRzT25MYXlvdXQ7IH0KLQotcHJpdmF0ZToKLSAg
ICBDb21wb3NpdGVBbmltYXRpb24oQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmKTsKLQot
ICAgIHZvaWQgdXBkYXRlVHJhbnNpdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBj
dXJyZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgdm9pZCB1
cGRhdGVLZXlmcmFtZUFuaW1hdGlvbnMoRWxlbWVudCYsIGNvbnN0IFJlbmRlclN0eWxlKiBjdXJy
ZW50U3R5bGUsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRTdHlsZSk7Ci0gICAgCi0gICAgdHlw
ZWRlZiBIYXNoTWFwPGludCwgUmVmUHRyPEltcGxpY2l0QW5pbWF0aW9uPj4gQ1NTUHJvcGVydHlU
cmFuc2l0aW9uc01hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8QXRvbVN0cmluZ0ltcGwqLCBSZWZQ
dHI8S2V5ZnJhbWVBbmltYXRpb24+PiBBbmltYXRpb25OYW1lTWFwOwotCi0gICAgYm9vbCBtX3N1
c3BlbmRlZCB7IGZhbHNlIH07Ci0gICAgYm9vbCBtX2hhc0FuaW1hdGlvblRoYXREZXBlbmRzT25M
YXlvdXQgeyBmYWxzZSB9OwotCi0gICAgQ1NTQW5pbWF0aW9uQ29udHJvbGxlclByaXZhdGUmIG1f
YW5pbWF0aW9uQ29udHJvbGxlcjsKLSAgICBDU1NQcm9wZXJ0eVRyYW5zaXRpb25zTWFwIG1fdHJh
bnNpdGlvbnM7Ci0gICAgQW5pbWF0aW9uTmFtZU1hcCBtX2tleWZyYW1lQW5pbWF0aW9uczsKLSAg
ICBWZWN0b3I8QXRvbVN0cmluZ0ltcGwqPiBtX2tleWZyYW1lQW5pbWF0aW9uT3JkZXJNYXA7Ci19
OwotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
YWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdl
L2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDQ1MzlmNmE1M2VjNTE1MGM5MDczN2QyMGUxYmIyYTViYjQwYTA5YTguLjAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGFn
ZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uY3BwCisrKyAvZGV2L251bGwKQEAgLTEsMzc4
ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0Ogot
ICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAgICAgaXRzIGNvbnRy
aWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZl
ZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0
ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1Q
TElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJ
RUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAqIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVTRSwgREFUQSwgT1Ig
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKLSAq
IE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8K
LQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkltcGxpY2l0QW5pbWF0aW9uLmgiCi0K
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyUHJpdmF0ZS5oIgotI2luY2x1ZGUgIkNT
U1Byb3BlcnR5QW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiQ29tcG9zaXRlQW5pbWF0aW9uLmgiCi0j
aWYgUExBVEZPUk0oSU9TX0ZBTUlMWSkKLSNpbmNsdWRlICJDb250ZW50Q2hhbmdlT2JzZXJ2ZXIu
aCIKLSNlbmRpZgotI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJHZW9tZXRyeVV0
aWxpdGllcy5oIgotI2luY2x1ZGUgIktleWZyYW1lQW5pbWF0aW9uLmgiCi0jaW5jbHVkZSAiUmVu
ZGVyQm94LmgiCi0jaW5jbHVkZSAiU3R5bGVQZW5kaW5nUmVzb3VyY2VzLmgiCi0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotSW1wbGljaXRBbmltYXRpb246OkltcGxpY2l0QW5pbWF0aW9uKGNvbnN0
IEFuaW1hdGlvbiYgdHJhbnNpdGlvbiwgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSwg
RWxlbWVudCYgZWxlbWVudCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24s
IGNvbnN0IFJlbmRlclN0eWxlJiBmcm9tU3R5bGUpCi0gICAgOiBBbmltYXRpb25CYXNlKHRyYW5z
aXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlvbikKLSAgICAsIG1fZnJvbVN0eWxlKFJl
bmRlclN0eWxlOjpjbG9uZVB0cihmcm9tU3R5bGUpKQotICAgICwgbV90cmFuc2l0aW9uUHJvcGVy
dHkodHJhbnNpdGlvbi5wcm9wZXJ0eSgpLmlkKQotICAgICwgbV9hbmltYXRpbmdQcm9wZXJ0eShh
bmltYXRpbmdQcm9wZXJ0eSkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGVsZW1l
bnQuZG9jdW1lbnQoKS5jb250ZW50Q2hhbmdlT2JzZXJ2ZXIoKS5kaWRBZGRUcmFuc2l0aW9uKGVs
ZW1lbnQsIHRyYW5zaXRpb24pOwotI2VuZGlmCi0gICAgQVNTRVJUKGFuaW1hdGluZ1Byb3BlcnR5
ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci19Ci0KLUltcGxpY2l0QW5pbWF0aW9uOjp+SW1wbGlj
aXRBbmltYXRpb24oKQotewotI2lmIFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGF1dG8q
IGVsZW1lbnQgPSB0aGlzLT5lbGVtZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCku
Y29udGVudENoYW5nZU9ic2VydmVyKCkuZGlkUmVtb3ZlVHJhbnNpdGlvbigqZWxlbWVudCwgbV9h
bmltYXRpbmdQcm9wZXJ0eSk7Ci0jZW5kaWYKLSAgICAvLyAvLyBNYWtlIHN1cmUgdG8gdGVsbCB0
aGUgcmVuZGVyZXIgdGhhdCB3ZSBhcmUgZW5kaW5nLiBUaGlzIHdpbGwgbWFrZSBzdXJlIGFueSBh
Y2NlbGVyYXRlZCBhbmltYXRpb25zIGFyZSByZW1vdmVkLgotICAgIGlmICghcG9zdEFjdGl2ZSgp
KQotICAgICAgICBlbmRBbmltYXRpb24oKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBpbkxpc3Rl
bmVyVHlwZSkgY29uc3QKLXsKLSAgICByZXR1cm4gZWxlbWVudCgpLT5kb2N1bWVudCgpLmhhc0xp
c3RlbmVyVHlwZShpbkxpc3RlbmVyVHlwZSk7Ci19Ci0KLU9wdGlvblNldDxBbmltYXRlQ2hhbmdl
PiBJbXBsaWNpdEFuaW1hdGlvbjo6YW5pbWF0ZShDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0
ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5bGUmIHRhcmdldFN0eWxlLCBzdGQ6OnVuaXF1ZV9w
dHI8UmVuZGVyU3R5bGU+JiBhbmltYXRlZFN0eWxlKQotewotICAgIC8vIElmIHdlIGdldCB0aGlz
IGZhciBhbmQgdGhlIGFuaW1hdGlvbiBpcyBkb25lLCBpdCBtZWFucyB3ZSBhcmUgY2xlYW5pbmcg
dXAgYSBqdXN0IGZpbmlzaGVkIGFuaW1hdGlvbi4KLSAgICAvLyBTbyBqdXN0IHJldHVybi4gRXZl
cnl0aGluZyBpcyBhbHJlYWR5IGFsbCBjbGVhbmVkIHVwLgotICAgIGlmIChwb3N0QWN0aXZlKCkp
Ci0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBBbmltYXRpb25TdGF0ZSBvbGRTdGF0ZSA9IHN0
YXRlKCk7Ci0KLSAgICAvLyBSZXNldCB0byBzdGFydCB0aGUgdHJhbnNpdGlvbiBpZiB3ZSBhcmUg
bmV3Ci0gICAgaWYgKGlzTmV3KCkpCi0gICAgICAgIHJlc2V0KHRhcmdldFN0eWxlLCBjb21wb3Np
dGVBbmltYXRpb24pOwotCi0gICAgLy8gUnVuIGEgY3ljbGUgb2YgYW5pbWF0aW9uLgotICAgIC8v
IFdlIGtub3cgd2Ugd2lsbCBuZWVkIGEgbmV3IHJlbmRlciBzdHlsZSwgc28gbWFrZSBvbmUgaWYg
bmVlZGVkCi0gICAgaWYgKCFhbmltYXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0g
UmVuZGVyU3R5bGU6OmNsb25lUHRyKHRhcmdldFN0eWxlKTsKLQotICAgIENTU1Byb3BlcnR5QW5p
bWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgbV9hbmltYXRpbmdQcm9wZXJ0eSwgYW5pbWF0
ZWRTdHlsZS5nZXQoKSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHlsZS5nZXQoKSwgcHJvZ3Jl
c3MoKSk7Ci0gICAgLy8gRklYTUU6IHdlIGFsc28gbmVlZCB0byBkZXRlY3QgY2FzZXMgd2hlcmUg
d2UgaGF2ZSB0byBzb2Z0d2FyZSBhbmltYXRlIGZvciBvdGhlciByZWFzb25zLAotICAgIC8vIHN1
Y2ggYXMgYSBjaGlsZCB1c2luZyBpbmhlcml0aW5nIHRoZSB0cmFuc2Zvcm0uIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzkwMgotCi0gICAgLy8gRmlyZSB0aGUgc3Rh
cnQgdGltZW91dCBpZiBuZWVkZWQKLSAgICBmaXJlQW5pbWF0aW9uRXZlbnRzSWZOZWVkZWQoKTsK
LQotICAgIE9wdGlvblNldDxBbmltYXRlQ2hhbmdlPiBjaGFuZ2UoQW5pbWF0ZUNoYW5nZTo6U3R5
bGVCbGVuZGVkKTsKLSAgICBpZiAoc3RhdGUoKSAhPSBvbGRTdGF0ZSkKLSAgICAgICAgY2hhbmdl
LmFkZChBbmltYXRlQ2hhbmdlOjpTdGF0ZUNoYW5nZSk7Ci0KLSAgICBpZiAoKGlzUGF1c2VkU3Rh
dGUob2xkU3RhdGUpIHx8IGlzUnVubmluZ1N0YXRlKG9sZFN0YXRlKSkgIT0gKGlzUGF1c2VkU3Rh
dGUoc3RhdGUoKSkgfHwgaXNSdW5uaW5nU3RhdGUoc3RhdGUoKSkpKQotICAgICAgICBjaGFuZ2Uu
YWRkKEFuaW1hdGVDaGFuZ2U6OlJ1bm5pbmdTdGF0ZUNoYW5nZSk7Ci0KLSAgICByZXR1cm4gY2hh
bmdlOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpnZXRBbmltYXRlZFN0eWxlKHN0ZDo6
dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1hdGVkU3R5bGUpCi17Ci0gICAgaWYgKCFhbmlt
YXRlZFN0eWxlKQotICAgICAgICBhbmltYXRlZFN0eWxlID0gUmVuZGVyU3R5bGU6OmNsb25lUHRy
KCptX3RvU3R5bGUpOwotCi0gICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJvcGVydGll
cyh0aGlzLCBtX2FuaW1hdGluZ1Byb3BlcnR5LCBhbmltYXRlZFN0eWxlLmdldCgpLCBtX2Zyb21T
dHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygpKTsKLX0KLQotYm9vbCBJbXBs
aWNpdEFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9uKExheW91dFJl
Y3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBBU1NFUlQoaGFzU3R5bGUoKSk7Ci0KLSAgICBpZiAo
IWlzPFJlbmRlckJveD4ocmVuZGVyZXIoKSkpCi0gICAgICAgIHJldHVybiB0cnVlOyAvLyBOb24t
Ym94ZXMgZG9uJ3QgZ2V0IHRyYW5zZm9ybWVkOwotCi0gICAgQVNTRVJUKG1fYW5pbWF0aW5nUHJv
cGVydHkgPT0gQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOwotCi0gICAgUmVuZGVyQm94JiBib3ggPSBk
b3duY2FzdDxSZW5kZXJCb3g+KCpyZW5kZXJlcigpKTsKLSAgICBGbG9hdFJlY3QgcmVuZGVyZXJC
b3ggPSBzbmFwUmVjdFRvRGV2aWNlUGl4ZWxzKGJveC5ib3JkZXJCb3hSZWN0KCksIGJveC5kb2N1
bWVudCgpLmRldmljZVNjYWxlRmFjdG9yKCkpOwotCi0gICAgTGF5b3V0UmVjdCBzdGFydEJvdW5k
cyA9IGJvdW5kczsKLSAgICBMYXlvdXRSZWN0IGVuZEJvdW5kcyA9IGJvdW5kczsKLQotICAgIGlm
ICh0cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2goKSkgewotICAgICAgICBpZiAoIWNvbXB1dGVU
cmFuc2Zvcm1lZEV4dGVudFZpYVRyYW5zZm9ybUxpc3QocmVuZGVyZXJCb3gsICptX2Zyb21TdHls
ZSwgc3RhcnRCb3VuZHMpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgICAgIGlm
ICghY29tcHV0ZVRyYW5zZm9ybWVkRXh0ZW50VmlhVHJhbnNmb3JtTGlzdChyZW5kZXJlckJveCwg
Km1fdG9TdHlsZSwgZW5kQm91bmRzKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9
IGVsc2UgewotICAgICAgICBpZiAoIWNvbXB1dGVUcmFuc2Zvcm1lZEV4dGVudFZpYU1hdHJpeChy
ZW5kZXJlckJveCwgKm1fZnJvbVN0eWxlLCBzdGFydEJvdW5kcykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICAgICAgaWYgKCFjb21wdXRlVHJhbnNmb3JtZWRFeHRlbnRWaWFNYXRy
aXgocmVuZGVyZXJCb3gsICptX3RvU3R5bGUsIGVuZEJvdW5kcykpCi0gICAgICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgYm91bmRzID0gdW5pb25SZWN0KHN0YXJ0Qm91bmRzLCBl
bmRCb3VuZHMpOwotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEltcGxpY2l0QW5pbWF0aW9u
OjphZmZlY3RzQWNjZWxlcmF0ZWRQcm9wZXJ0eSgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIENTU1By
b3BlcnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChtX2FuaW1h
dGluZ1Byb3BlcnR5KTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6c3RhcnRBbmltYXRp
b24oZG91YmxlIHRpbWVPZmZzZXQpCi17Ci0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmV0dXJuIHJlbmRlcmVyLT5zdGFydFRyYW5zaXRpb24odGlt
ZU9mZnNldCwgbV9hbmltYXRpbmdQcm9wZXJ0eSwgbV9mcm9tU3R5bGUuZ2V0KCksIG1fdG9TdHls
ZS5nZXQoKSk7Ci0gICAgcmV0dXJuIGZhbHNlOwotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0aW9u
OjpwYXVzZUFuaW1hdGlvbihkb3VibGUgdGltZU9mZnNldCkKLXsKLSAgICBpZiAoYXV0byogcmVu
ZGVyZXIgPSB0aGlzLT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+dHJhbnNpdGlvblBh
dXNlZCh0aW1lT2Zmc2V0LCBtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLSAgICAvLyBSZXN0b3JlIHRo
ZSBvcmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICBpZiAoIXBhdXNlZCgpKQotICAgICAg
ICBzZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQoKSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmlt
YXRpb246OmNsZWFyKCkKLXsKLSNpZiBQTEFURk9STShJT1NfRkFNSUxZKQotICAgIGlmIChhdXRv
KiBlbGVtZW50ID0gdGhpcy0+ZWxlbWVudCgpKQotICAgICAgICBlbGVtZW50LT5kb2N1bWVudCgp
LmNvbnRlbnRDaGFuZ2VPYnNlcnZlcigpLmRpZFJlbW92ZVRyYW5zaXRpb24oKmVsZW1lbnQsIG1f
YW5pbWF0aW5nUHJvcGVydHkpOwotI2VuZGlmCi0gICAgQW5pbWF0aW9uQmFzZTo6Y2xlYXIoKTsK
LX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6ZW5kQW5pbWF0aW9uKGJvb2wpCi17Ci0gICAg
aWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXIt
PnRyYW5zaXRpb25GaW5pc2hlZChtX2FuaW1hdGluZ1Byb3BlcnR5KTsKLX0KLQotdm9pZCBJbXBs
aWNpdEFuaW1hdGlvbjo6b25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBzZWRUaW1lKQotewotI2lm
IFBMQVRGT1JNKElPU19GQU1JTFkpCi0gICAgaWYgKGF1dG8qIGVsZW1lbnQgPSB0aGlzLT5lbGVt
ZW50KCkpCi0gICAgICAgIGVsZW1lbnQtPmRvY3VtZW50KCkuY29udGVudENoYW5nZU9ic2VydmVy
KCkuZGlkRmluaXNoVHJhbnNpdGlvbigqZWxlbWVudCwgbV9hbmltYXRpbmdQcm9wZXJ0eSk7Ci0j
ZW5kaWYKLSAgICAvLyBJZiB3ZSBoYXZlIGEga2V5ZnJhbWUgYW5pbWF0aW9uIG9uIHRoaXMgcHJv
cGVydHksIHRoaXMgdHJhbnNpdGlvbiBpcyBiZWluZyBvdmVycmlkZGVuLiBUaGUga2V5ZnJhbWUK
LSAgICAvLyBhbmltYXRpb24ga2VlcHMgYW4gdW5hbmltYXRlZCBzdHlsZSBpbiBjYXNlIGEgdHJh
bnNpdGlvbiBzdGFydHMgd2hpbGUgdGhlIGtleWZyYW1lIGFuaW1hdGlvbiBpcwotICAgIC8vIHJ1
bm5pbmcuIEJ1dCBub3cgdGhhdCB0aGUgdHJhbnNpdGlvbiBoYXMgY29tcGxldGVkLCB3ZSBuZWVk
IHRvIHVwZGF0ZSB0aGlzIHN0eWxlIHdpdGggaXRzIG5ldwotICAgIC8vIGRlc3RpbmF0aW9uLiBJ
ZiB3ZSBkaWRuJ3QsIHRoZSBuZXh0IHRpbWUgdGhyb3VnaCB3ZSB3b3VsZCB0aGluayBhIHRyYW5z
aXRpb24gaGFkIHN0YXJ0ZWQKLSAgICAvLyAoY29tcGFyaW5nIHRoZSBvbGQgdW5hbmltYXRlZCBz
dHlsZSB3aXRoIHRoZSBuZXcgZmluYWwgc3R5bGUgb2YgdGhlIHRyYW5zaXRpb24pLgotICAgIGlm
IChhdXRvKiBhbmltYXRpb24gPSBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uRm9yUHJv
cGVydHkobV9hbmltYXRpbmdQcm9wZXJ0eSkpCi0gICAgICAgIGFuaW1hdGlvbi0+c2V0VW5hbmlt
YXRlZFN0eWxlKFJlbmRlclN0eWxlOjpjbG9uZVB0cigqbV90b1N0eWxlKSk7Ci0KLSAgICBzZW5k
VHJhbnNpdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5kRXZlbnQsIGVsYXBzZWRU
aW1lKTsKLSAgICBlbmRBbmltYXRpb24oKTsKLX0KLQotYm9vbCBJbXBsaWNpdEFuaW1hdGlvbjo6
c2VuZFRyYW5zaXRpb25FdmVudChjb25zdCBBdG9tU3RyaW5nJiBldmVudFR5cGUsIGRvdWJsZSBl
bGFwc2VkVGltZSkKLXsKLSAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0
aW9uZW5kRXZlbnQpIHsKLSAgICAgICAgRG9jdW1lbnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5
cGUgPSBEb2N1bWVudDo6VFJBTlNJVElPTkVORF9MSVNURU5FUjsKLQotICAgICAgICBpZiAoc2hv
dWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIobGlzdGVuZXJUeXBlKSkgewotICAgICAgICAgICAgU3Ry
aW5nIHByb3BlcnR5TmFtZSA9IGdldFByb3BlcnR5TmFtZVN0cmluZyhtX2FuaW1hdGluZ1Byb3Bl
cnR5KTsKLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIERpc3BhdGNoIHRoZSBldmVu
dAotICAgICAgICAgICAgYXV0byBlbGVtZW50ID0gbWFrZVJlZlB0cih0aGlzLT5lbGVtZW50KCkp
OwotCi0gICAgICAgICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxlbWVudC0+ZG9jdW1lbnQoKS5i
YWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90SW5CYWNrRm9yd2FyZENhY2hl
KTsKLSAgICAgICAgICAgIGlmICghZWxlbWVudCkKLSAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0KLSAgICAgICAgICAgIC8vIFNjaGVkdWxlIGV2ZW50IGhhbmRsaW5nCi0gICAgICAgICAg
ICBtX2NvbXBvc2l0ZUFuaW1hdGlvbi0+YW5pbWF0aW9uQ29udHJvbGxlcigpLmFkZEV2ZW50VG9E
aXNwYXRjaCgqZWxlbWVudCwgZXZlbnRUeXBlLCBwcm9wZXJ0eU5hbWUsIGVsYXBzZWRUaW1lKTsK
LQotICAgICAgICAgICAgLy8gUmVzdG9yZSB0aGUgb3JpZ2luYWwgKHVuYW5pbWF0ZWQpIHN0eWxl
Ci0gICAgICAgICAgICBpZiAoZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS50cmFuc2l0aW9uZW5k
RXZlbnQgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgICAgICBzZXROZWVkc1N0
eWxlUmVjYWxjKGVsZW1lbnQuZ2V0KCkpOwotCi0gICAgICAgICAgICByZXR1cm4gdHJ1ZTsgLy8g
RGlkIGRpc3BhdGNoIGFuIGV2ZW50Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4gZmFs
c2U7IC8vIERpZG4ndCBkaXNwYXRjaCBhbiBldmVudAotfQotCi12b2lkIEltcGxpY2l0QW5pbWF0
aW9uOjpyZXNldChjb25zdCBSZW5kZXJTdHlsZSYgdG8sIENvbXBvc2l0ZUFuaW1hdGlvbiYgY29t
cG9zaXRlQW5pbWF0aW9uKQotewotICAgIEFTU0VSVChtX2Zyb21TdHlsZSk7Ci0KLSAgICBtX3Rv
U3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodG8pOwotCi0gICAgaWYgKGVsZW1lbnQoKSkK
LSAgICAgICAgU3R5bGU6OmxvYWRQZW5kaW5nUmVzb3VyY2VzKCptX3RvU3R5bGUsIGVsZW1lbnQo
KS0+ZG9jdW1lbnQoKSwgZWxlbWVudCgpKTsKLQotICAgIC8vIFJlc3RhcnQgdGhlIHRyYW5zaXRp
b24uCi0gICAgaWYgKG1fZnJvbVN0eWxlICYmIG1fdG9TdHlsZSAmJiAhY29tcG9zaXRlQW5pbWF0
aW9uLmlzU3VzcGVuZGVkKCkpCi0gICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25T
dGF0ZUlucHV0OjpSZXN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0KLSAgICAvLyBTZXQgdGhlIHRyYW5z
Zm9ybSBhbmltYXRpb24gbGlzdC4KLSAgICB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlzdCgp
OwotICAgIGNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYgRU5BQkxF
KEZJTFRFUlNfTEVWRUxfMikKLSAgICBjaGVja0Zvck1hdGNoaW5nQmFja2Ryb3BGaWx0ZXJGdW5j
dGlvbkxpc3RzKCk7Ci0jZW5kaWYKLSAgICBjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5j
dGlvbkxpc3RzKCk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OnNldE92ZXJyaWRkZW4o
Ym9vbCBiKQotewotICAgIGlmIChiID09IG1fb3ZlcnJpZGRlbikKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgbV9vdmVycmlkZGVuID0gYjsKLSAgICB1cGRhdGVTdGF0ZU1hY2hpbmUobV9vdmVycmlk
ZGVuID8gQW5pbWF0aW9uU3RhdGVJbnB1dDo6UGF1c2VPdmVycmlkZSA6IEFuaW1hdGlvblN0YXRl
SW5wdXQ6OlJlc3VtZU92ZXJyaWRlLCAtMSk7Ci19Ci0KLWJvb2wgSW1wbGljaXRBbmltYXRpb246
OmFmZmVjdHNQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHByb3BlcnR5KSBjb25zdAotewotICAgIHJl
dHVybiAobV9hbmltYXRpbmdQcm9wZXJ0eSA9PSBwcm9wZXJ0eSk7Ci19Ci0KLWJvb2wgSW1wbGlj
aXRBbmltYXRpb246OmlzVGFyZ2V0UHJvcGVydHlFcXVhbChDU1NQcm9wZXJ0eUlEIHByb3AsIGNv
bnN0IFJlbmRlclN0eWxlKiB0YXJnZXRTdHlsZSkKLXsKLSAgICAvLyBXZSBjYW4gZ2V0IGhlcmUg
Zm9yIGEgdHJhbnNpdGlvbiB0aGF0IGhhcyBub3Qgc3RhcnRlZCB5ZXQuIFRoaXMgd291bGQgbWFr
ZSBtX3RvU3R5bGUgdW5zZXQgYW5kIG51bGwuIAotICAgIC8vIFNvIHdlIGNoZWNrIHRoYXQgaGVy
ZSAoc2VlIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjY3MDY+KQot
ICAgIGlmICghbV90b1N0eWxlKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIENT
U1Byb3BlcnR5QW5pbWF0aW9uOjpwcm9wZXJ0aWVzRXF1YWwocHJvcCwgbV90b1N0eWxlLmdldCgp
LCB0YXJnZXRTdHlsZSk7Ci19Ci0KLXZvaWQgSW1wbGljaXRBbmltYXRpb246OmJsZW5kUHJvcGVy
dHlWYWx1ZUluU3R5bGUoQ1NTUHJvcGVydHlJRCBwcm9wLCBSZW5kZXJTdHlsZSogY3VycmVudFN0
eWxlKQotewotICAgIC8vIFdlIHNob3VsZCBuZXZlciBhZGQgYSB0cmFuc2l0aW9uIHdpdGggYSAw
IGR1cmF0aW9uIGFuZCBkZWxheS4gQnV0IGlmIHdlIGV2ZXIgZGlkCi0gICAgLy8gaXQgd291bGQg
aGF2ZSBhIG51bGwgdG9TdHlsZS4gU28ganVzdCBpbiBjYXNlLCBsZXQncyBjaGVjayB0aGF0IGhl
cmUuIChTZWUKLSAgICAvLyA8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTI0Nzg3PgotICAgIGlmICghbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0gICAgICAgIAot
ICAgIENTU1Byb3BlcnR5QW5pbWF0aW9uOjpibGVuZFByb3BlcnRpZXModGhpcywgcHJvcCwgY3Vy
cmVudFN0eWxlLCBtX2Zyb21TdHlsZS5nZXQoKSwgbV90b1N0eWxlLmdldCgpLCBwcm9ncmVzcygp
KTsKLX0KLQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6dmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlv
bkxpc3QoKQotewotICAgIG1fdHJhbnNmb3JtRnVuY3Rpb25MaXN0c01hdGNoID0gZmFsc2U7Ci0g
ICAgCi0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47
Ci0gICAgICAgIAotICAgIGNvbnN0IFRyYW5zZm9ybU9wZXJhdGlvbnMqIHZhbCA9ICZtX2Zyb21T
dHlsZS0+dHJhbnNmb3JtKCk7Ci0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogdG9WYWwg
PSAmbV90b1N0eWxlLT50cmFuc2Zvcm0oKTsKLQotICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5p
c0VtcHR5KCkpCi0gICAgICAgIHZhbCA9IHRvVmFsOwotCi0gICAgaWYgKHZhbC0+b3BlcmF0aW9u
cygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAKLSAgICAvLyBBbiBlbXB0
eSB0cmFuc2Zvcm0gbGlzdCBtYXRjaGVzIGFueXRoaW5nLgotICAgIGlmICh2YWwgIT0gdG9WYWwg
JiYgIXRvVmFsLT5vcGVyYXRpb25zKCkuaXNFbXB0eSgpICYmICF2YWwtPm9wZXJhdGlvbnNNYXRj
aCgqdG9WYWwpKQotICAgICAgICByZXR1cm47Ci0KLSAgICAvLyBUcmFuc2Zvcm0gbGlzdHMgbWF0
Y2guCi0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSB0cnVlOwotfQotCi1zdGF0
aWMgYm9vbCBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goY29uc3QgRmlsdGVyT3BlcmF0aW9ucyogZnJv
bU9wZXJhdGlvbnMsIGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHRvT3BlcmF0aW9ucykKLXsKLSAg
ICBpZiAoZnJvbU9wZXJhdGlvbnMtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAgIGZy
b21PcGVyYXRpb25zID0gJnRvT3BlcmF0aW9uczsKLQotICAgIGlmIChmcm9tT3BlcmF0aW9ucy0+
b3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgaWYg
KGZyb21PcGVyYXRpb25zICE9ICZ0b09wZXJhdGlvbnMgJiYgIXRvT3BlcmF0aW9ucy5vcGVyYXRp
b25zKCkuaXNFbXB0eSgpICYmICFmcm9tT3BlcmF0aW9ucy0+b3BlcmF0aW9uc01hdGNoKHRvT3Bl
cmF0aW9ucykpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQot
Ci12b2lkIEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25M
aXN0cygpCi17Ci0gICAgbV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsKLQotICAg
IGlmICghbV9mcm9tU3R5bGUgfHwgIW1fdG9TdHlsZSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9maWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBmaWx0ZXJPcGVyYXRpb25zTWF0Y2goJm1fZnJv
bVN0eWxlLT5maWx0ZXIoKSwgbV90b1N0eWxlLT5maWx0ZXIoKSk7Ci19Ci0KLSNpZiBFTkFCTEUo
RklMVEVSU19MRVZFTF8yKQotdm9pZCBJbXBsaWNpdEFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGlu
Z0JhY2tkcm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpCi17Ci0gICAgbV9iYWNrZHJvcEZpbHRlckZ1
bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotCi0gICAgaWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90
b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBtX2JhY2tkcm9wRmlsdGVyRnVuY3Rpb25M
aXN0c01hdGNoID0gZmlsdGVyT3BlcmF0aW9uc01hdGNoKCZtX2Zyb21TdHlsZS0+YmFja2Ryb3BG
aWx0ZXIoKSwgbV90b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKTsKLX0KLSNlbmRpZgotCi12b2lk
IEltcGxpY2l0QW5pbWF0aW9uOjpjaGVja0Zvck1hdGNoaW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxp
c3RzKCkKLXsKLSAgICBtX2ZpbHRlckZ1bmN0aW9uTGlzdHNNYXRjaCA9IGZhbHNlOwotCi0gICAg
aWYgKCFtX2Zyb21TdHlsZSB8fCAhbV90b1N0eWxlKQotICAgICAgICByZXR1cm47Ci0KLSAgICBt
X2NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gZmlsdGVyT3BlcmF0aW9uc01hdGNoKCZt
X2Zyb21TdHlsZS0+YXBwbGVDb2xvckZpbHRlcigpLCBtX3RvU3R5bGUtPmFwcGxlQ29sb3JGaWx0
ZXIoKSk7Ci19Ci0KLU9wdGlvbmFsPFNlY29uZHM+IEltcGxpY2l0QW5pbWF0aW9uOjp0aW1lVG9O
ZXh0U2VydmljZSgpCi17Ci0gICAgT3B0aW9uYWw8U2Vjb25kcz4gdCA9IEFuaW1hdGlvbkJhc2U6
OnRpbWVUb05leHRTZXJ2aWNlKCk7Ci0gICAgaWYgKCF0IHx8IHQudmFsdWUoKSAhPSAwX3MgfHwg
cHJlQWN0aXZlKCkpCi0jaWYgQ09NUElMRVIoTVNWQykgJiYgX01TQ19WRVIgPj0gMTkyMAotICAg
ICAgICByZXR1cm4gV1RGTW92ZSh0KTsKLSNlbHNlCi0gICAgICAgIHJldHVybiB0OwotI2VuZGlm
Ci0KLSAgICAvLyBBIHJldHVybiB2YWx1ZSBvZiAwIG1lYW5zIHdlIG5lZWQgc2VydmljZS4gQnV0
IGlmIHRoaXMgaXMgYW4gYWNjZWxlcmF0ZWQgYW5pbWF0aW9uIHdlIAotICAgIC8vIG9ubHkgbmVl
ZCBzZXJ2aWNlIGF0IHRoZSBlbmQgb2YgdGhlIHRyYW5zaXRpb24uCi0gICAgaWYgKENTU1Byb3Bl
cnR5QW5pbWF0aW9uOjphbmltYXRpb25PZlByb3BlcnR5SXNBY2NlbGVyYXRlZChtX2FuaW1hdGlu
Z1Byb3BlcnR5KSAmJiBpc0FjY2VsZXJhdGVkKCkpIHsKLSAgICAgICAgYm9vbCBpc0xvb3Bpbmc7
Ci0gICAgICAgIGdldFRpbWVUb05leHRFdmVudCh0LnZhbHVlKCksIGlzTG9vcGluZyk7Ci0gICAg
fQotICAgIHJldHVybiB0OwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vSW1wbGljaXRBbmltYXRpb24uaApkZWxldGVkIGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggNzJiODRhZGNlY2Y5MjhkODRlMTVhNDBjNWM4ODU3NjA1ZjNl
NjQ2Mi4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlvbi9JbXBsaWNpdEFuaW1hdGlvbi5oCisrKyAvZGV2L251
bGwKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDcgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0g
KiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVz
dCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCi0gKiAyLiAgUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCi0gKiAzLiAgTmVpdGhl
ciB0aGUgbmFtZSBvZiBBcHBsZSBJbmMuICgiQXBwbGUiKSBub3IgdGhlIG5hbWVzIG9mCi0gKiAg
ICAgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJv
ZHVjdHMgZGVyaXZlZAotICogICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFIElNUExJRUQKLSAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKLSAqIERJU0NMQUlNRUQuIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKLSAq
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09O
U0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBS
T0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7Ci0gKiBMT1NTIE9GIFVT
RSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENB
VVNFRCBBTkQKLSAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRS
QUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0Ug
T1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKLSAqIFRI
SVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBE
QU1BR0UuCi0gKi8KLQotI3ByYWdtYSBvbmNlCi0KLSNpbmNsdWRlICJBbmltYXRpb25CYXNlLmgi
Ci0jaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgotI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgUmVuZGVyRWxlbWVudDsKLQotLy8gQW4gSW1w
bGljaXRBbmltYXRpb24gdHJhY2tzIHRoZSBzdGF0ZSBvZiBhIHRyYW5zaXRpb24gb2YgYSBzcGVj
aWZpYyBDU1MgcHJvcGVydHkKLS8vIGZvciBhIHNpbmdsZSBSZW5kZXJFbGVtZW50LgotY2xhc3Mg
SW1wbGljaXRBbmltYXRpb24gOiBwdWJsaWMgQW5pbWF0aW9uQmFzZSB7Ci1wdWJsaWM6Ci0gICAg
c3RhdGljIFJlZjxJbXBsaWNpdEFuaW1hdGlvbj4gY3JlYXRlKGNvbnN0IEFuaW1hdGlvbiYgYW5p
bWF0aW9uLCBDU1NQcm9wZXJ0eUlEIGFuaW1hdGluZ1Byb3BlcnR5LCBFbGVtZW50JiBlbGVtZW50
LCBDb21wb3NpdGVBbmltYXRpb24mIGNvbXBvc2l0ZUFuaW1hdGlvbiwgY29uc3QgUmVuZGVyU3R5
bGUmIGZyb21TdHlsZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZigqbmV3IEltcGxp
Y2l0QW5pbWF0aW9uKGFuaW1hdGlvbiwgYW5pbWF0aW5nUHJvcGVydHksIGVsZW1lbnQsIGNvbXBv
c2l0ZUFuaW1hdGlvbiwgZnJvbVN0eWxlKSk7Ci0gICAgfTsKLSAgICAKLSAgICBDU1NQcm9wZXJ0
eUlEIHRyYW5zaXRpb25Qcm9wZXJ0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdHJhbnNpdGlvblByb3Bl
cnR5OyB9Ci0gICAgQ1NTUHJvcGVydHlJRCBhbmltYXRpbmdQcm9wZXJ0eSgpIGNvbnN0IHsgcmV0
dXJuIG1fYW5pbWF0aW5nUHJvcGVydHk7IH0KLQotICAgIHZvaWQgb25BbmltYXRpb25FbmQoZG91
YmxlIGVsYXBzZWRUaW1lKSBvdmVycmlkZTsKLSAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJs
ZSB0aW1lT2Zmc2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0
aW1lT2Zmc2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZEFuaW1hdGlvbihib29sIGZpbGxpbmdG
b3J3YXJkcyA9IGZhbHNlKSBvdmVycmlkZTsKLQotICAgIE9wdGlvblNldDxBbmltYXRlQ2hhbmdl
PiBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB0YXJnZXRT
dHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7Ci0gICAg
dm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgcmVzZXQoY29uc3QgUmVuZGVyU3R5bGUmIHRv
LCBDb21wb3NpdGVBbmltYXRpb24mKTsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNm
b3JtQW5pbWF0aW9uKExheW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGJvb2wgYWZm
ZWN0c0FjY2VsZXJhdGVkUHJvcGVydHkoKSBjb25zdDsKLQotICAgIHZvaWQgc2V0T3ZlcnJpZGRl
bihib29sKTsKLSAgICBib29sIG92ZXJyaWRkZW4oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiBt
X292ZXJyaWRkZW47IH0KLQotICAgIGJvb2wgYWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQp
IGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBoYXNTdHlsZSgpIGNvbnN0IHsgcmV0dXJuIG1f
ZnJvbVN0eWxlICYmIG1fdG9TdHlsZTsgfQotCi0gICAgYm9vbCBpc1RhcmdldFByb3BlcnR5RXF1
YWwoQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqKTsKLQotICAgIHZvaWQgYmxlbmRQ
cm9wZXJ0eVZhbHVlSW5TdHlsZShDU1NQcm9wZXJ0eUlELCBSZW5kZXJTdHlsZSopOwotCi0gICAg
T3B0aW9uYWw8U2Vjb25kcz4gdGltZVRvTmV4dFNlcnZpY2UoKSBvdmVycmlkZTsKLSAgICAKLSAg
ICBib29sIGFjdGl2ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYWN0aXZlOyB9Ci0gICAgdm9pZCBzZXRB
Y3RpdmUoYm9vbCBiKSB7IG1fYWN0aXZlID0gYjsgfQotCi0gICAgY29uc3QgUmVuZGVyU3R5bGUm
IHVuYW5pbWF0ZWRTdHlsZSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuICptX2Zyb21TdHlsZTsg
fQotCi0gICAgdm9pZCBjbGVhcigpIG92ZXJyaWRlOwotCi1wcm90ZWN0ZWQ6Ci0gICAgYm9vbCBz
aG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBlKSBjb25zdDsg
ICAgCi0gICAgYm9vbCBzZW5kVHJhbnNpdGlvbkV2ZW50KGNvbnN0IEF0b21TdHJpbmcmLCBkb3Vi
bGUgZWxhcHNlZFRpbWUpOwotCi0gICAgdm9pZCB2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0aW9uTGlz
dCgpOwotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0JhY2tk
cm9wRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2VuZGlmCi0gICAgdm9pZCBjaGVja0Zvck1hdGNo
aW5nQ29sb3JGaWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0KLXByaXZhdGU6Ci0gICAgSW1wbGljaXRB
bmltYXRpb24oY29uc3QgQW5pbWF0aW9uJiwgQ1NTUHJvcGVydHlJRCwgRWxlbWVudCYsIENvbXBv
c2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJik7Ci0gICAgdmlydHVhbCB+SW1wbGlj
aXRBbmltYXRpb24oKTsKLQotICAgIC8vIFRoZSB0d28gc3R5bGVzIHRoYXQgd2UgYXJlIGJsZW5k
aW5nLgotICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gbV9mcm9tU3R5bGU7Ci0gICAg
c3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBtX3RvU3R5bGU7Ci0KLSAgICBDU1NQcm9wZXJ0
eUlEIG1fdHJhbnNpdGlvblByb3BlcnR5OyAvLyBUcmFuc2l0aW9uIHByb3BlcnR5IGFzIHNwZWNp
ZmllZCBpbiB0aGUgUmVuZGVyU3R5bGUuCi0gICAgQ1NTUHJvcGVydHlJRCBtX2FuaW1hdGluZ1By
b3BlcnR5OyAvLyBTcGVjaWZpYyBwcm9wZXJ0eSBmb3IgdGhpcyBJbXBsaWNpdEFuaW1hdGlvbgot
Ci0gICAgYm9vbCBtX2FjdGl2ZSB7IHRydWUgfTsgLy8gVXNlZCBmb3IgY3VsbGluZyB0aGUgbGlz
dCBvZiB0cmFuc2l0aW9ucy4KLSAgICBib29sIG1fb3ZlcnJpZGRlbiB7IGZhbHNlIH07IC8vIFRy
dWUgd2hlbiB0aGVyZSBpcyBhIGtleWZyYW1lIGFuaW1hdGlvbiB0aGF0IG92ZXJyaWRlcyB0aGUg
dHJhbnNpdGlvbmluZyBwcm9wZXJ0eQotfTsKLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24u
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9hbmltYXRpb24vS2V5ZnJhbWVBbmltYXRpb24uY3Bw
CmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiMWI1NzE1MDc3MjM4NzdiNWViZjMzMmJi
MDhjODUwOTc3Nzk4OGM0Li4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmNw
cAorKysgL2Rldi9udWxsCkBAIC0xLDU0MyArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDA3LCAyMDEyIEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiAgUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuIAotICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uIAotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgSW5jLiAoIkFwcGxlIikgbm9y
IHRoZSBuYW1lcyBvZgotICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5k
b3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKLSAqICAgICBmcm9tIHRoaXMgc29mdHdh
cmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIAotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJLZXlmcmFtZUFuaW1hdGlvbi5oIgotCi0jaW5jbHVkZSAiQ1NTQW5pbWF0aW9uQ29u
dHJvbGxlclByaXZhdGUuaCIKLSNpbmNsdWRlICJDU1NQcm9wZXJ0eUFuaW1hdGlvbi5oIgotI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKLSNpbmNsdWRlICJDb21wb3NpdGVBbmltYXRpb24u
aCIKLSNpbmNsdWRlICJFdmVudE5hbWVzLmgiCi0jaW5jbHVkZSAiR2VvbWV0cnlVdGlsaXRpZXMu
aCIKLSNpbmNsdWRlICJSZW5kZXJCb3guaCIKLSNpbmNsdWRlICJSZW5kZXJTdHlsZS5oIgotI2lu
Y2x1ZGUgIlN0eWxlUGVuZGluZ1Jlc291cmNlcy5oIgotI2luY2x1ZGUgIlN0eWxlUmVzb2x2ZXIu
aCIKLSNpbmNsdWRlICJTdHlsZVNjb3BlLmgiCi0jaW5jbHVkZSAiVHJhbnNsYXRlVHJhbnNmb3Jt
T3BlcmF0aW9uLmgiCi0jaW5jbHVkZSAiV2lsbENoYW5nZURhdGEuaCIKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1LZXlmcmFtZUFuaW1hdGlvbjo6S2V5ZnJhbWVBbmltYXRpb24oY29uc3QgQW5p
bWF0aW9uJiBhbmltYXRpb24sIEVsZW1lbnQmIGVsZW1lbnQsIENvbXBvc2l0ZUFuaW1hdGlvbiYg
Y29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKQot
ICAgIDogQW5pbWF0aW9uQmFzZShhbmltYXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlv
bikKLSAgICAsIG1fa2V5ZnJhbWVzKGFuaW1hdGlvbi5uYW1lKCkpCi0gICAgLCBtX3VuYW5pbWF0
ZWRTdHlsZShSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodW5hbmltYXRlZFN0eWxlKSkKLXsKLSAgICBy
ZXNvbHZlS2V5ZnJhbWVTdHlsZXMoKTsKLQotICAgIC8vIFVwZGF0ZSB0aGUgbV90cmFuc2Zvcm1G
dW5jdGlvbkxpc3RWYWxpZCBmbGFnIGJhc2VkIG9uIHdoZXRoZXIgdGhlIGZ1bmN0aW9uIGxpc3Rz
IGluIHRoZSBrZXlmcmFtZXMgbWF0Y2guCi0gICAgdmFsaWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxp
c3QoKTsKLSAgICBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cygpOwotI2lmIEVO
QUJMRShGSUxURVJTX0xFVkVMXzIpCi0gICAgY2hlY2tGb3JNYXRjaGluZ0JhY2tkcm9wRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwotI2VuZGlmCi0gICAgY2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVy
RnVuY3Rpb25MaXN0cygpOwotCi0gICAgZm9yIChhdXRvIHByb3BlcnR5SUQgOiBtX2tleWZyYW1l
cy5wcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgaWYgKFdpbGxDaGFuZ2VEYXRhOjpwcm9wZXJ0eUNy
ZWF0ZXNTdGFja2luZ0NvbnRleHQocHJvcGVydHlJRCkpCi0gICAgICAgICAgICBtX3RyaWdnZXJz
U3RhY2tpbmdDb250ZXh0ID0gdHJ1ZTsKLSAgICAgICAgCi0gICAgICAgIGlmIChDU1NQcm9wZXJ0
eUFuaW1hdGlvbjo6YW5pbWF0aW9uT2ZQcm9wZXJ0eUlzQWNjZWxlcmF0ZWQocHJvcGVydHlJRCkp
Ci0gICAgICAgICAgICBtX2hhc0FjY2VsZXJhdGVkUHJvcGVydHkgPSB0cnVlOwotICAgICAgICAK
LSAgICAgICAgaWYgKG1fdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQgJiYgbV9oYXNBY2NlbGVyYXRl
ZFByb3BlcnR5KQotICAgICAgICAgICAgYnJlYWs7Ci0gICAgfQotCi0gICAgY29tcHV0ZUxheW91
dERlcGVuZGVuY3koKTsKLX0KLQotS2V5ZnJhbWVBbmltYXRpb246On5LZXlmcmFtZUFuaW1hdGlv
bigpCi17Ci0gICAgLy8gTWFrZSBzdXJlIHRvIHRlbGwgdGhlIHJlbmRlcmVyIHRoYXQgd2UgYXJl
IGVuZGluZy4gVGhpcyB3aWxsIG1ha2Ugc3VyZSBhbnkgYWNjZWxlcmF0ZWQgYW5pbWF0aW9ucyBh
cmUgcmVtb3ZlZC4KLSAgICBpZiAoIXBvc3RBY3RpdmUoKSkKLSAgICAgICAgZW5kQW5pbWF0aW9u
KCk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmNvbXB1dGVMYXlvdXREZXBlbmRlbmN5
KCkKLXsKLSAgICBpZiAoIW1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlU
cmFuc2Zvcm0pKQotICAgICAgICByZXR1cm47Ci0KLSAgICBzaXplX3QgbnVtS2V5ZnJhbWVzID0g
bV9rZXlmcmFtZXMuc2l6ZSgpOwotICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtS2V5ZnJh
bWVzOyBpKyspIHsKLSAgICAgICAgYXV0byoga2V5ZnJhbWVTdHlsZSA9IG1fa2V5ZnJhbWVzW2ld
LnN0eWxlKCk7Ci0gICAgICAgIGlmICgha2V5ZnJhbWVTdHlsZSkgewotICAgICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAg
ICAgICBpZiAoa2V5ZnJhbWVTdHlsZS0+aGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgICAgIGF1
dG8mIHRyYW5zZm9ybU9wZXJhdGlvbnMgPSBrZXlmcmFtZVN0eWxlLT50cmFuc2Zvcm0oKTsKLSAg
ICAgICAgICAgIGZvciAoY29uc3QgYXV0byYgb3BlcmF0aW9uIDogdHJhbnNmb3JtT3BlcmF0aW9u
cy5vcGVyYXRpb25zKCkpIHsKLSAgICAgICAgICAgICAgICBpZiAob3BlcmF0aW9uLT5pc1RyYW5z
bGF0ZVRyYW5zZm9ybU9wZXJhdGlvblR5cGUoKSkgewotICAgICAgICAgICAgICAgICAgICBhdXRv
IHRyYW5zbGF0aW9uID0gZG93bmNhc3Q8VHJhbnNsYXRlVHJhbnNmb3JtT3BlcmF0aW9uPihvcGVy
YXRpb24uZ2V0KCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAodHJhbnNsYXRpb24tPngoKS5p
c1BlcmNlbnQoKSB8fCB0cmFuc2xhdGlvbi0+eSgpLmlzUGVyY2VudCgpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBtX2RlcGVuZHNPbkxheW91dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OmZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUlEIHBy
b3BlcnR5LCBjb25zdCBSZW5kZXJTdHlsZSomIGZyb21TdHlsZSwgY29uc3QgUmVuZGVyU3R5bGUq
JiB0b1N0eWxlLCBkb3VibGUmIHByb2cpIGNvbnN0Ci17Ci0gICAgc2l6ZV90IG51bUtleWZyYW1l
cyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAgICBpZiAoIW51bUtleWZyYW1lcykKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgLy8gRmluZCB0aGUgZmlyc3Qga2V5Ci0gICAgZG91YmxlIGVsYXBzZWRU
aW1lID0gZ2V0RWxhcHNlZFRpbWUoKTsKLSAgICBpZiAobV9hbmltYXRpb24tPmR1cmF0aW9uKCkg
JiYgbV9hbmltYXRpb24tPml0ZXJhdGlvbkNvdW50KCkgIT0gQW5pbWF0aW9uOjpJdGVyYXRpb25D
b3VudEluZmluaXRlKQotICAgICAgICBlbGFwc2VkVGltZSA9IHN0ZDo6bWluKGVsYXBzZWRUaW1l
LCBtX2FuaW1hdGlvbi0+ZHVyYXRpb24oKSAqIG1fYW5pbWF0aW9uLT5pdGVyYXRpb25Db3VudCgp
KTsKLQotICAgIGNvbnN0IGRvdWJsZSBmcmFjdGlvbmFsVGltZSA9IHRoaXMtPmZyYWN0aW9uYWxU
aW1lKDEsIGVsYXBzZWRUaW1lLCAwKTsKLSAgICBBU1NFUlQoIW1fa2V5ZnJhbWVzWzBdLmtleSgp
KTsKLSAgICBBU1NFUlQobV9rZXlmcmFtZXNbbV9rZXlmcmFtZXMuc2l6ZSgpIC0gMV0ua2V5KCkg
PT0gMSk7Ci0KLSAgICBpbnQgcHJldkluZGV4ID0gLTE7Ci0gICAgaW50IG5leHRJbmRleCA9IC0x
OwotICAgIC8vIEZJWE1FOiB3aXRoIGEgbG90IG9mIGtleXMsIHRoaXMgbGluZWFyIHNlYXJjaCB3
aWxsIGJlIHNsb3cuIFdlIGNvdWxkIGJpbmFyeSBzZWFyY2guCi0gICAgZm9yIChzaXplX3QgaSA9
IDA7IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVl
JiBjdXJyS2V5RnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKLQotICAgICAgICBpZiAoIWN1cnJLZXlG
cmFtZS5jb250YWluc1Byb3BlcnR5KHByb3BlcnR5KSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwot
Ci0gICAgICAgIGlmIChmcmFjdGlvbmFsVGltZSA8IGN1cnJLZXlGcmFtZS5rZXkoKSkgewotICAg
ICAgICAgICAgbmV4dEluZGV4ID0gaTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9Ci0g
ICAgICAgIHByZXZJbmRleCA9IGk7Ci0gICAgfQotCi0gICAgaWYgKHByZXZJbmRleCA9PSAtMSkK
LSAgICAgICAgcHJldkluZGV4ID0gMDsKLSAgICBpZiAobmV4dEluZGV4ID09IC0xKQotICAgICAg
ICBuZXh0SW5kZXggPSBtX2tleWZyYW1lcy5zaXplKCkgLSAxOwotCi0gICAgY29uc3QgS2V5ZnJh
bWVWYWx1ZSYgcHJldktleWZyYW1lID0gbV9rZXlmcmFtZXNbcHJldkluZGV4XTsKLSAgICBjb25z
dCBLZXlmcmFtZVZhbHVlJiBuZXh0S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tuZXh0SW5kZXhdOwot
Ci0gICAgZnJvbVN0eWxlID0gcHJldktleWZyYW1lLnN0eWxlKCk7Ci0gICAgdG9TdHlsZSA9IG5l
eHRLZXlmcmFtZS5zdHlsZSgpOwotCi0gICAgZG91YmxlIG9mZnNldCA9IHByZXZLZXlmcmFtZS5r
ZXkoKTsKLSAgICBkb3VibGUgc2NhbGUgPSAxLjAgLyAobmV4dEluZGV4ID09IHByZXZJbmRleCA/
ICAxIDogKG5leHRLZXlmcmFtZS5rZXkoKSAtIHByZXZLZXlmcmFtZS5rZXkoKSkpOwotCi0gICAg
cHJvZyA9IHByb2dyZXNzKHNjYWxlLCBvZmZzZXQsIHByZXZLZXlmcmFtZS50aW1pbmdGdW5jdGlv
bigpKTsKLX0KLQotT3B0aW9uU2V0PEFuaW1hdGVDaGFuZ2U+IEtleWZyYW1lQW5pbWF0aW9uOjph
bmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYgY29tcG9zaXRlQW5pbWF0aW9uLCBjb25zdCBSZW5k
ZXJTdHlsZSYgdGFyZ2V0U3R5bGUsIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4mIGFuaW1h
dGVkU3R5bGUpCi17Ci0gICAgQW5pbWF0aW9uU3RhdGUgb2xkU3RhdGUgPSBzdGF0ZSgpOwotCi0g
ICAgLy8gVXBkYXRlIHN0YXRlIGFuZCBmaXJlIHRoZSBzdGFydCB0aW1lb3V0IGlmIG5lZWRlZCAo
RklYTUU6IHRoaXMgZnVuY3Rpb24gbmVlZHMgYSBiZXR0ZXIgbmFtZSkuCi0gICAgZmlyZUFuaW1h
dGlvbkV2ZW50c0lmTmVlZGVkKCk7Ci0KLSAgICAvLyBJZiB3ZSBoYXZlIG5vdCB5ZXQgc3RhcnRl
ZCwgd2Ugd2lsbCBub3QgaGF2ZSBhIHZhbGlkIHN0YXJ0IHRpbWUsIHNvIGp1c3Qgc3RhcnQgdGhl
IGFuaW1hdGlvbiBpZiBuZWVkZWQuCi0gICAgaWYgKGlzTmV3KCkpIHsKLSAgICAgICAgaWYgKG1f
YW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltYXRpb25QbGF5U3RhdGU6OlBsYXlpbmcgJiYg
IWNvbXBvc2l0ZUFuaW1hdGlvbi5pc1N1c3BlbmRlZCgpKQotICAgICAgICAgICAgdXBkYXRlU3Rh
dGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OlN0YXJ0QW5pbWF0aW9uLCAtMSk7Ci0gICAg
ICAgIGVsc2UgaWYgKG1fYW5pbWF0aW9uLT5wbGF5U3RhdGUoKSA9PSBBbmltYXRpb25QbGF5U3Rh
dGU6OlBhdXNlZCkKLSAgICAgICAgICAgIHVwZGF0ZVN0YXRlTWFjaGluZShBbmltYXRpb25TdGF0
ZUlucHV0OjpQbGF5U3RhdGVQYXVzZWQsIC0xKTsKLSAgICB9Ci0KLSAgICAvLyBJZiB3ZSBnZXQg
dGhpcyBmYXIgYW5kIHRoZSBhbmltYXRpb24gaXMgZG9uZSwgaXQgbWVhbnMgd2UgYXJlIGNsZWFu
aW5nIHVwIGEganVzdC1maW5pc2hlZCBhbmltYXRpb24uCi0gICAgLy8gSWYgc28sIHdlIG5lZWQg
dG8gc2VuZCBiYWNrIHRoZSB0YXJnZXRTdHlsZS4KLSAgICBpZiAocG9zdEFjdGl2ZSgpKSB7Ci0g
ICAgICAgIGlmICghYW5pbWF0ZWRTdHlsZSkKLSAgICAgICAgICAgIGFuaW1hdGVkU3R5bGUgPSBS
ZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotICAgICAgICByZXR1cm4geyB9Owot
ICAgIH0KLQotICAgIC8vIElmIHdlIGFyZSB3YWl0aW5nIGZvciB0aGUgc3RhcnQgdGltZXIsIHdl
IGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBzdHlsZSB5ZXQuCi0gICAgLy8gU3BlY2lhbCBjYXNl
IDEgLSBpZiB0aGUgZGVsYXkgdGltZSBpcyAwLCB0aGVuIHdlIGRvIHdhbnQgdG8gc2V0IHRoZSBm
aXJzdCBmcmFtZSBvZiB0aGUKLSAgICAvLyBhbmltYXRpb24gcmlnaHQgYXdheS4gVGhpcyBhdm9p
ZHMgYSBmbGFzaCB3aGVuIHRoZSBhbmltYXRpb24gc3RhcnRzLgotICAgIC8vIFNwZWNpYWwgY2Fz
ZSAyIC0gaWYgdGhlcmUgaXMgYSBiYWNrd2FyZHMgZmlsbCBtb2RlLCB0aGVuIHdlIHdhbnQgdG8g
Y29udGludWUKLSAgICAvLyB0aHJvdWdoIHRvIHRoZSBzdHlsZSBibGVuZCBzbyB0aGF0IHdlIGdl
dCB0aGUgZnJvbVN0eWxlLgotICAgIGlmICh3YWl0aW5nVG9TdGFydCgpICYmIG1fYW5pbWF0aW9u
LT5kZWxheSgpID4gMCAmJiAhbV9hbmltYXRpb24tPmZpbGxzQmFja3dhcmRzKCkpCi0gICAgICAg
IHJldHVybiB7IH07Ci0gICAgCi0gICAgLy8gSWYgd2UgaGF2ZSBubyBrZXlmcmFtZXMsIGRvbid0
IGFuaW1hdGUuCi0gICAgaWYgKCFtX2tleWZyYW1lcy5zaXplKCkpIHsKLSAgICAgICAgdXBkYXRl
U3RhdGVNYWNoaW5lKEFuaW1hdGlvblN0YXRlSW5wdXQ6OkVuZEFuaW1hdGlvbiwgLTEpOwotICAg
ICAgICByZXR1cm4geyB9OwotICAgIH0KLQotICAgIC8vIFJ1biBhIGN5Y2xlIG9mIGFuaW1hdGlv
bi4KLSAgICAvLyBXZSBrbm93IHdlIHdpbGwgbmVlZCBhIG5ldyByZW5kZXIgc3R5bGUsIHNvIG1h
a2Ugb25lIGlmIG5lZWRlZC4KLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAgIGFuaW1h
dGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIodGFyZ2V0U3R5bGUpOwotCi0gICAgLy8g
RklYTUU6IHdlIG5lZWQgdG8gYmUgbW9yZSBlZmZpY2llbnQgYWJvdXQgZGV0ZXJtaW5pbmcgd2hp
Y2gga2V5ZnJhbWVzIHdlIGFyZSBhbmltYXRpbmcgYmV0d2Vlbi4KLSAgICAvLyBXZSBzaG91bGQg
Y2FjaGUgdGhlIGxhc3QgcGFpciBvciBzb21ldGhpbmcuCi0gICAgZm9yIChhdXRvIHByb3BlcnR5
SUQgOiBtX2tleWZyYW1lcy5wcm9wZXJ0aWVzKCkpIHsKLSAgICAgICAgLy8gR2V0IHRoZSBmcm9t
L3RvIHN0eWxlcyBhbmQgcHJvZ3Jlc3MgYmV0d2VlbgotICAgICAgICBjb25zdCBSZW5kZXJTdHls
ZSogZnJvbVN0eWxlID0gbnVsbHB0cjsKLSAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5
bGUgPSBudWxscHRyOwotICAgICAgICBkb3VibGUgcHJvZ3Jlc3MgPSAwOwotICAgICAgICBmZXRj
aEludGVydmFsRW5kcG9pbnRzRm9yUHJvcGVydHkocHJvcGVydHlJRCwgZnJvbVN0eWxlLCB0b1N0
eWxlLCBwcm9ncmVzcyk7Ci0KLSAgICAgICAgQ1NTUHJvcGVydHlBbmltYXRpb246OmJsZW5kUHJv
cGVydGllcyh0aGlzLCBwcm9wZXJ0eUlELCBhbmltYXRlZFN0eWxlLmdldCgpLCBmcm9tU3R5bGUs
IHRvU3R5bGUsIHByb2dyZXNzKTsKLSAgICB9Ci0KLSAgICBPcHRpb25TZXQ8QW5pbWF0ZUNoYW5n
ZT4gY2hhbmdlKEFuaW1hdGVDaGFuZ2U6OlN0eWxlQmxlbmRlZCk7Ci0gICAgaWYgKHN0YXRlKCkg
IT0gb2xkU3RhdGUpCi0gICAgICAgIGNoYW5nZS5hZGQoQW5pbWF0ZUNoYW5nZTo6U3RhdGVDaGFu
Z2UpOwotCi0gICAgaWYgKChpc1BhdXNlZFN0YXRlKG9sZFN0YXRlKSB8fCBpc1J1bm5pbmdTdGF0
ZShvbGRTdGF0ZSkpICE9IChpc1BhdXNlZFN0YXRlKHN0YXRlKCkpIHx8IGlzUnVubmluZ1N0YXRl
KHN0YXRlKCkpKSkKLSAgICAgICAgY2hhbmdlLmFkZChBbmltYXRlQ2hhbmdlOjpSdW5uaW5nU3Rh
dGVDaGFuZ2UpOwotCi0gICAgcmV0dXJuIGNoYW5nZTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1h
dGlvbjo6Z2V0QW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+JiBhbmlt
YXRlZFN0eWxlKQotewotICAgIC8vIElmIHdlJ3JlIGRvbmUsIG9yIGluIHRoZSBkZWxheSBwaGFz
ZSBhbmQgd2UncmUgbm90IGJhY2t3YXJkcyBmaWxsaW5nLCB0ZWxsIHRoZSBjYWxsZXIgdG8gdXNl
IHRoZSBjdXJyZW50IHN0eWxlLgotICAgIGlmIChwb3N0QWN0aXZlKCkgfHwgKHdhaXRpbmdUb1N0
YXJ0KCkgJiYgbV9hbmltYXRpb24tPmRlbGF5KCkgPiAwICYmICFtX2FuaW1hdGlvbi0+ZmlsbHNC
YWNrd2FyZHMoKSkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmICghbV9rZXlmcmFtZXMuc2l6
ZSgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoIWFuaW1hdGVkU3R5bGUpCi0gICAgICAg
IGFuaW1hdGVkU3R5bGUgPSBSZW5kZXJTdHlsZTo6Y2xvbmVQdHIocmVuZGVyZXIoKS0+c3R5bGUo
KSk7Ci0KLSAgICBmb3IgKGF1dG8gcHJvcGVydHlJRCA6IG1fa2V5ZnJhbWVzLnByb3BlcnRpZXMo
KSkgewotICAgICAgICAvLyBHZXQgdGhlIGZyb20vdG8gc3R5bGVzIGFuZCBwcm9ncmVzcyBiZXR3
ZWVuCi0gICAgICAgIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUgPSBudWxscHRyOwotICAg
ICAgICBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSA9IG51bGxwdHI7Ci0gICAgICAgIGRvdWJs
ZSBwcm9ncmVzcyA9IDA7Ci0gICAgICAgIGZldGNoSW50ZXJ2YWxFbmRwb2ludHNGb3JQcm9wZXJ0
eShwcm9wZXJ0eUlELCBmcm9tU3R5bGUsIHRvU3R5bGUsIHByb2dyZXNzKTsKLQotICAgICAgICBD
U1NQcm9wZXJ0eUFuaW1hdGlvbjo6YmxlbmRQcm9wZXJ0aWVzKHRoaXMsIHByb3BlcnR5SUQsIGFu
aW1hdGVkU3R5bGUuZ2V0KCksIGZyb21TdHlsZSwgdG9TdHlsZSwgcHJvZ3Jlc3MpOwotICAgIH0K
LX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6Y29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5p
bWF0aW9uKExheW91dFJlY3QmIGJvdW5kcykgY29uc3QKLXsKLSAgICBBU1NFUlQobV9rZXlmcmFt
ZXMuY29udGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpOwotCi0gICAgaWYgKCFp
czxSZW5kZXJCb3g+KHJlbmRlcmVyKCkpKQotICAgICAgICByZXR1cm4gdHJ1ZTsgLy8gTm9uLWJv
eGVzIGRvbid0IGdldCB0cmFuc2Zvcm1lZDsKLQotICAgIGF1dG8mIGJveCA9IGRvd25jYXN0PFJl
bmRlckJveD4oKnJlbmRlcmVyKCkpOwotICAgIGF1dG8gcmVuZGVyZXJCb3ggPSBzbmFwUmVjdFRv
RGV2aWNlUGl4ZWxzKGJveC5ib3JkZXJCb3hSZWN0KCksIGJveC5kb2N1bWVudCgpLmRldmljZVNj
YWxlRmFjdG9yKCkpOwotCi0gICAgTGF5b3V0UmVjdCBjdW11bGF0aXZlQm91bmRzOwotCi0gICAg
Zm9yIChhdXRvJiBrZXlmcmFtZSA6IG1fa2V5ZnJhbWVzLmtleWZyYW1lcygpKSB7Ci0gICAgICAg
IGNvbnN0IFJlbmRlclN0eWxlKiBrZXlmcmFtZVN0eWxlID0ga2V5ZnJhbWUuc3R5bGUoKTsKLQot
ICAgICAgICBpZiAoIWtleWZyYW1lLmNvbnRhaW5zUHJvcGVydHkoQ1NTUHJvcGVydHlUcmFuc2Zv
cm0pKSB7Ci0gICAgICAgICAgICAvLyBJZiB0aGUgZmlyc3Qga2V5ZnJhbWUgaXMgbWlzc2luZyB0
cmFuc2Zvcm0gc3R5bGUsIHVzZSB0aGUgY3VycmVudCBzdHlsZS4KLSAgICAgICAgICAgIGlmICgh
a2V5ZnJhbWUua2V5KCkpCi0gICAgICAgICAgICAgICAga2V5ZnJhbWVTdHlsZSA9ICZib3guc3R5
bGUoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAg
ICAgfQotCi0gICAgICAgIGF1dG8ga2V5ZnJhbWVCb3VuZHMgPSBib3VuZHM7Ci0gICAgICAgIAot
ICAgICAgICBib29sIGNhbkNvbXB1dGU7Ci0gICAgICAgIGlmICh0cmFuc2Zvcm1GdW5jdGlvbkxp
c3RzTWF0Y2goKSkKLSAgICAgICAgICAgIGNhbkNvbXB1dGUgPSBjb21wdXRlVHJhbnNmb3JtZWRF
eHRlbnRWaWFUcmFuc2Zvcm1MaXN0KHJlbmRlcmVyQm94LCAqa2V5ZnJhbWVTdHlsZSwga2V5ZnJh
bWVCb3VuZHMpOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBjYW5Db21wdXRlID0gY29tcHV0
ZVRyYW5zZm9ybWVkRXh0ZW50VmlhTWF0cml4KHJlbmRlcmVyQm94LCAqa2V5ZnJhbWVTdHlsZSwg
a2V5ZnJhbWVCb3VuZHMpOwotICAgICAgICAKLSAgICAgICAgaWYgKCFjYW5Db21wdXRlKQotICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgY3VtdWxhdGl2ZUJvdW5k
cy51bml0ZShrZXlmcmFtZUJvdW5kcyk7Ci0gICAgfQotCi0gICAgYm91bmRzID0gY3VtdWxhdGl2
ZUJvdW5kczsKLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotYm9vbCBLZXlmcmFtZUFuaW1hdGlvbjo6
aGFzQW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkgY29uc3QKLXsK
LSAgICByZXR1cm4gbV9rZXlmcmFtZXMuY29udGFpbnNQcm9wZXJ0eShwcm9wZXJ0eSk7Ci19Ci0K
LWJvb2wgS2V5ZnJhbWVBbmltYXRpb246OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0
KQotewotICAgIGlmIChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCi0gICAgICAg
IHJldHVybiByZW5kZXJlci0+c3RhcnRBbmltYXRpb24odGltZU9mZnNldCwgbV9hbmltYXRpb24s
IG1fa2V5ZnJhbWVzKTsKLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmlt
YXRpb246OnBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0KQotewotICAgIGlmICghZWxl
bWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlz
LT5yZW5kZXJlcigpKQotICAgICAgICByZW5kZXJlci0+YW5pbWF0aW9uUGF1c2VkKHRpbWVPZmZz
ZXQsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUoKSk7Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBv
cmlnaW5hbCAodW5hbmltYXRlZCkgc3R5bGUKLSAgICBpZiAoIXBhdXNlZCgpKQotICAgICAgICBz
ZXROZWVkc1N0eWxlUmVjYWxjKGVsZW1lbnQoKSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRp
b246OmVuZEFuaW1hdGlvbihib29sIGZpbGxpbmdGb3J3YXJkcykKLXsKLSAgICBpZiAoIWVsZW1l
bnQoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+
cmVuZGVyZXIoKSkKLSAgICAgICAgcmVuZGVyZXItPmFuaW1hdGlvbkZpbmlzaGVkKG1fa2V5ZnJh
bWVzLmFuaW1hdGlvbk5hbWUoKSk7Ci0KLSAgICAvLyBSZXN0b3JlIHRoZSBvcmlnaW5hbCAodW5h
bmltYXRlZCkgc3R5bGUKLSAgICBpZiAoIWZpbGxpbmdGb3J3YXJkcyAmJiAhcGF1c2VkKCkpCi0g
ICAgICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoZWxlbWVudCgpKTsKLX0KLQotYm9vbCBLZXlmcmFt
ZUFuaW1hdGlvbjo6c2hvdWxkU2VuZEV2ZW50Rm9yTGlzdGVuZXIoRG9jdW1lbnQ6Okxpc3RlbmVy
VHlwZSBsaXN0ZW5lclR5cGUpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIGVsZW1lbnQoKS0+ZG9jdW1l
bnQoKS5oYXNMaXN0ZW5lclR5cGUobGlzdGVuZXJUeXBlKTsKLX0KLQotdm9pZCBLZXlmcmFtZUFu
aW1hdGlvbjo6b25BbmltYXRpb25TdGFydChkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgc2Vu
ZEFuaW1hdGlvbkV2ZW50KGV2ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50LCBlbGFwc2Vk
VGltZSk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246Om9uQW5pbWF0aW9uSXRlcmF0aW9u
KGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAgICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1l
cygpLmFuaW1hdGlvbml0ZXJhdGlvbkV2ZW50LCBlbGFwc2VkVGltZSk7Ci19Ci0KLXZvaWQgS2V5
ZnJhbWVBbmltYXRpb246Om9uQW5pbWF0aW9uRW5kKGRvdWJsZSBlbGFwc2VkVGltZSkKLXsKLSAg
ICBzZW5kQW5pbWF0aW9uRXZlbnQoZXZlbnROYW1lcygpLmFuaW1hdGlvbmVuZEV2ZW50LCBlbGFw
c2VkVGltZSk7Ci0gICAgZW5kQW5pbWF0aW9uKG1fYW5pbWF0aW9uLT5maWxsc0ZvcndhcmRzKCkp
OwotfQotCi1ib29sIEtleWZyYW1lQW5pbWF0aW9uOjpzZW5kQW5pbWF0aW9uRXZlbnQoY29uc3Qg
QXRvbVN0cmluZyYgZXZlbnRUeXBlLCBkb3VibGUgZWxhcHNlZFRpbWUpCi17Ci0gICAgRG9jdW1l
bnQ6Okxpc3RlbmVyVHlwZSBsaXN0ZW5lclR5cGU7Ci0gICAgaWYgKGV2ZW50VHlwZSA9PSBldmVu
dE5hbWVzKCkud2Via2l0QW5pbWF0aW9uSXRlcmF0aW9uRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2
ZW50TmFtZXMoKS5hbmltYXRpb25pdGVyYXRpb25FdmVudCkKLSAgICAgICAgbGlzdGVuZXJUeXBl
ID0gRG9jdW1lbnQ6OkFOSU1BVElPTklURVJBVElPTl9MSVNURU5FUjsKLSAgICBlbHNlIGlmIChl
dmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvbkVuZEV2ZW50IHx8IGV2ZW50
VHlwZSA9PSBldmVudE5hbWVzKCkuYW5pbWF0aW9uZW5kRXZlbnQpCi0gICAgICAgIGxpc3RlbmVy
VHlwZSA9IERvY3VtZW50OjpBTklNQVRJT05FTkRfTElTVEVORVI7Ci0gICAgZWxzZSB7Ci0gICAg
ICAgIEFTU0VSVChldmVudFR5cGUgPT0gZXZlbnROYW1lcygpLndlYmtpdEFuaW1hdGlvblN0YXJ0
RXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRpb25zdGFydEV2ZW50KTsK
LSAgICAgICAgaWYgKG1fc3RhcnRFdmVudERpc3BhdGNoZWQpCi0gICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIG1fc3RhcnRFdmVudERpc3BhdGNoZWQgPSB0cnVlOwotICAgICAgICBs
aXN0ZW5lclR5cGUgPSBEb2N1bWVudDo6QU5JTUFUSU9OU1RBUlRfTElTVEVORVI7Ci0gICAgfQot
Ci0gICAgaWYgKHNob3VsZFNlbmRFdmVudEZvckxpc3RlbmVyKGxpc3RlbmVyVHlwZSkpIHsKLSAg
ICAgICAgLy8gRGlzcGF0Y2ggdGhlIGV2ZW50Ci0gICAgICAgIGF1dG8gZWxlbWVudCA9IG1ha2VS
ZWZQdHIodGhpcy0+ZWxlbWVudCgpKTsKLQotICAgICAgICBBU1NFUlQoIWVsZW1lbnQgfHwgZWxl
bWVudC0+ZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVudDo6Tm90
SW5CYWNrRm9yd2FyZENhY2hlKTsKLSAgICAgICAgaWYgKCFlbGVtZW50KQotICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotCi0gICAgICAgIC8vIFNjaGVkdWxlIGV2ZW50IGhhbmRsaW5nCi0gICAg
ICAgIG1fY29tcG9zaXRlQW5pbWF0aW9uLT5hbmltYXRpb25Db250cm9sbGVyKCkuYWRkRXZlbnRU
b0Rpc3BhdGNoKCplbGVtZW50LCBldmVudFR5cGUsIG1fa2V5ZnJhbWVzLmFuaW1hdGlvbk5hbWUo
KSwgZWxhcHNlZFRpbWUpOwotCi0gICAgICAgIC8vIFJlc3RvcmUgdGhlIG9yaWdpbmFsICh1bmFu
aW1hdGVkKSBzdHlsZQotICAgICAgICBpZiAoKGV2ZW50VHlwZSA9PSBldmVudE5hbWVzKCkud2Vi
a2l0QW5pbWF0aW9uRW5kRXZlbnQgfHwgZXZlbnRUeXBlID09IGV2ZW50TmFtZXMoKS5hbmltYXRp
b25lbmRFdmVudCkgJiYgZWxlbWVudC0+cmVuZGVyZXIoKSkKLSAgICAgICAgICAgIHNldE5lZWRz
U3R5bGVSZWNhbGMoZWxlbWVudC5nZXQoKSk7Ci0KLSAgICAgICAgcmV0dXJuIHRydWU7IC8vIERp
ZCBkaXNwYXRjaCBhbiBldmVudAotICAgIH0KLQotICAgIHJldHVybiBmYWxzZTsgLy8gRGlkIG5v
dCBkaXNwYXRjaCBhbiBldmVudAotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpvdmVycmlk
ZUFuaW1hdGlvbnMoKQotewotICAgIC8vIFRoaXMgd2lsbCBvdmVycmlkZSBpbXBsaWNpdCBhbmlt
YXRpb25zIHRoYXQgbWF0Y2ggdGhlIHByb3BlcnRpZXMgaW4gdGhlIGtleWZyYW1lIGFuaW1hdGlv
bgotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygpKQot
ICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+b3ZlcnJpZGVJbXBsaWNpdEFuaW1hdGlvbnMo
cHJvcGVydHlJRCk7Ci19Ci0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OnJlc3VtZU92ZXJyaWRk
ZW5BbmltYXRpb25zKCkKLXsKLSAgICAvLyBUaGlzIHdpbGwgcmVzdW1lIG92ZXJyaWRkZW4gaW1w
bGljaXQgYW5pbWF0aW9ucwotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMu
cHJvcGVydGllcygpKQotICAgICAgICBjb21wb3NpdGVBbmltYXRpb24oKS0+cmVzdW1lT3ZlcnJp
ZGRlbkltcGxpY2l0QW5pbWF0aW9ucyhwcm9wZXJ0eUlEKTsKLX0KLQotYm9vbCBLZXlmcmFtZUFu
aW1hdGlvbjo6YWZmZWN0c1Byb3BlcnR5KENTU1Byb3BlcnR5SUQgcHJvcGVydHkpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkocHJvcGVydHkpOwotfQot
Ci12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjpyZXNvbHZlS2V5ZnJhbWVTdHlsZXMoKQotewotICAg
IGlmICghZWxlbWVudCgpKQotICAgICAgICByZXR1cm47Ci0KLSAgICBpZiAoYXV0byogc3R5bGVT
Y29wZSA9IFN0eWxlOjpTY29wZTo6Zm9yT3JkaW5hbCgqZWxlbWVudCgpLCBtX2FuaW1hdGlvbi0+
bmFtZVN0eWxlU2NvcGVPcmRpbmFsKCkpKQotICAgICAgICBzdHlsZVNjb3BlLT5yZXNvbHZlcigp
LmtleWZyYW1lU3R5bGVzRm9yQW5pbWF0aW9uKCplbGVtZW50KCksIG1fdW5hbmltYXRlZFN0eWxl
LmdldCgpLCBtX2tleWZyYW1lcyk7Ci0KLSAgICAvLyBFbnN1cmUgcmVzb3VyY2UgbG9hZHMgZm9y
IGFsbCB0aGUgZnJhbWVzLgotICAgIGZvciAoYXV0byYga2V5ZnJhbWUgOiBtX2tleWZyYW1lcy5r
ZXlmcmFtZXMoKSkgewotICAgICAgICBpZiAoYXV0byogc3R5bGUgPSBjb25zdF9jYXN0PFJlbmRl
clN0eWxlKj4oa2V5ZnJhbWUuc3R5bGUoKSkpCi0gICAgICAgICAgICBTdHlsZTo6bG9hZFBlbmRp
bmdSZXNvdXJjZXMoKnN0eWxlLCBlbGVtZW50KCktPmRvY3VtZW50KCksIGVsZW1lbnQoKSk7Ci0g
ICAgfQotfQotCi12b2lkIEtleWZyYW1lQW5pbWF0aW9uOjp2YWxpZGF0ZVRyYW5zZm9ybUZ1bmN0
aW9uTGlzdCgpCi17Ci0gICAgbV90cmFuc2Zvcm1GdW5jdGlvbkxpc3RzTWF0Y2ggPSBmYWxzZTsK
LSAgICAKLSAgICBpZiAobV9rZXlmcmFtZXMuc2l6ZSgpIDwgMiB8fCAhbV9rZXlmcmFtZXMuY29u
dGFpbnNQcm9wZXJ0eShDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpCi0gICAgICAgIHJldHVybjsKLQot
ICAgIC8vIEVtcHR5IHRyYW5zZm9ybXMgbWF0Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhlIGZpcnN0
IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVmZXJlbmNlCi0gICAgc2l6ZV90IG51bUtleWZyYW1l
cyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAgICBzaXplX3QgZmlyc3ROb25FbXB0eVRyYW5zZm9y
bUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7Ci0KLSAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEtleWZyYW1lVmFsdWUmIGN1
cnJlbnRLZXlmcmFtZSA9IG1fa2V5ZnJhbWVzW2ldOwotICAgICAgICBpZiAoY3VycmVudEtleWZy
YW1lLnN0eWxlKCktPnRyYW5zZm9ybSgpLm9wZXJhdGlvbnMoKS5zaXplKCkpIHsKLSAgICAgICAg
ICAgIGZpcnN0Tm9uRW1wdHlUcmFuc2Zvcm1LZXlmcmFtZUluZGV4ID0gaTsKLSAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICB9Ci0gICAgfQotICAgIAotICAgIGlmIChmaXJzdE5vbkVtcHR5VHJh
bnNmb3JtS2V5ZnJhbWVJbmRleCA9PSBudW1LZXlmcmFtZXMpCi0gICAgICAgIHJldHVybjsKLSAg
ICAgICAgCi0gICAgY29uc3QgVHJhbnNmb3JtT3BlcmF0aW9ucyogZmlyc3RWYWwgPSAmbV9rZXlm
cmFtZXNbZmlyc3ROb25FbXB0eVRyYW5zZm9ybUtleWZyYW1lSW5kZXhdLnN0eWxlKCktPnRyYW5z
Zm9ybSgpOwotICAgIAotICAgIC8vIFNlZSBpZiB0aGUga2V5ZnJhbWVzIGFyZSB2YWxpZAotICAg
IGZvciAoc2l6ZV90IGkgPSBmaXJzdE5vbkVtcHR5VHJhbnNmb3JtS2V5ZnJhbWVJbmRleCArIDE7
IGkgPCBudW1LZXlmcmFtZXM7ICsraSkgewotICAgICAgICBjb25zdCBLZXlmcmFtZVZhbHVlJiBj
dXJyZW50S2V5ZnJhbWUgPSBtX2tleWZyYW1lc1tpXTsKLSAgICAgICAgY29uc3QgVHJhbnNmb3Jt
T3BlcmF0aW9ucyogdmFsID0gJmN1cnJlbnRLZXlmcmFtZS5zdHlsZSgpLT50cmFuc2Zvcm0oKTsK
LSAgICAgICAgCi0gICAgICAgIC8vIEFuIGVtdHB5IHRyYW5zZm9ybSBsaXN0IG1hdGNoZXMgYW55
dGhpbmcuCi0gICAgICAgIGlmICh2YWwtPm9wZXJhdGlvbnMoKS5pc0VtcHR5KCkpCi0gICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgCi0gICAgICAgIGlmICghZmlyc3RWYWwtPm9wZXJhdGlv
bnNNYXRjaCgqdmFsKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICB9Ci0KLSAgICBtX3RyYW5z
Zm9ybUZ1bmN0aW9uTGlzdHNNYXRjaCA9IHRydWU7Ci19Ci0KLWJvb2wgS2V5ZnJhbWVBbmltYXRp
b246OmNoZWNrRm9yTWF0Y2hpbmdGaWx0ZXJGdW5jdGlvbkxpc3RzKENTU1Byb3BlcnR5SUQgcHJv
cGVydHlJRCwgY29uc3Qgc3RkOjpmdW5jdGlvbjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiAoY29u
c3QgUmVuZGVyU3R5bGUmKT4mIGZpbHRlcnNHZXR0ZXIpIGNvbnN0Ci17Ci0gICAgaWYgKG1fa2V5
ZnJhbWVzLnNpemUoKSA8IDIgfHwgIW1fa2V5ZnJhbWVzLmNvbnRhaW5zUHJvcGVydHkocHJvcGVy
dHlJRCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIC8vIEVtcHR5IGZpbHRlcnMgbWF0
Y2ggYW55dGhpbmcsIHNvIGZpbmQgdGhlIGZpcnN0IG5vbi1lbXB0eSBlbnRyeSBhcyB0aGUgcmVm
ZXJlbmNlCi0gICAgc2l6ZV90IG51bUtleWZyYW1lcyA9IG1fa2V5ZnJhbWVzLnNpemUoKTsKLSAg
ICBzaXplX3QgZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXggPSBudW1LZXlmcmFtZXM7Ci0KLSAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUtleWZyYW1lczsgKytpKSB7Ci0gICAgICAgIGlm
IChmaWx0ZXJzR2V0dGVyKCptX2tleWZyYW1lc1tpXS5zdHlsZSgpKS5vcGVyYXRpb25zKCkuc2l6
ZSgpKSB7Ci0gICAgICAgICAgICBmaXJzdE5vbkVtcHR5S2V5ZnJhbWVJbmRleCA9IGk7Ci0gICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLSAgICAKLSAgICBpZiAoZmlyc3ROb25F
bXB0eUtleWZyYW1lSW5kZXggPT0gbnVtS2V5ZnJhbWVzKQotICAgICAgICByZXR1cm4gZmFsc2U7
Ci0KLSAgICBhdXRvJiBmaXJzdFZhbCA9IGZpbHRlcnNHZXR0ZXIoKm1fa2V5ZnJhbWVzW2ZpcnN0
Tm9uRW1wdHlLZXlmcmFtZUluZGV4XS5zdHlsZSgpKTsKLSAgICAKLSAgICBmb3IgKHNpemVfdCBp
ID0gZmlyc3ROb25FbXB0eUtleWZyYW1lSW5kZXggKyAxOyBpIDwgbnVtS2V5ZnJhbWVzOyArK2kp
IHsKLSAgICAgICAgYXV0byYgdmFsdWUgPSBmaWx0ZXJzR2V0dGVyKCptX2tleWZyYW1lc1tpXS5z
dHlsZSgpKTsKLQotICAgICAgICAvLyBBbiBlbXRweSBmaWx0ZXIgbGlzdCBtYXRjaGVzIGFueXRo
aW5nLgotICAgICAgICBpZiAodmFsdWUub3BlcmF0aW9ucygpLmlzRW1wdHkoKSkKLSAgICAgICAg
ICAgIGNvbnRpbnVlOwotCi0gICAgICAgIGlmICghZmlyc3RWYWwub3BlcmF0aW9uc01hdGNoKHZh
bHVlKSkKLSAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICB9Ci0KLSAgICByZXR1cm4gdHJ1
ZTsKLX0KLQotdm9pZCBLZXlmcmFtZUFuaW1hdGlvbjo6Y2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1
bmN0aW9uTGlzdHMoKQotewotICAgIG1fZmlsdGVyRnVuY3Rpb25MaXN0c01hdGNoID0gY2hlY2tG
b3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlGaWx0ZXIsIFtdIChjb25z
dCBSZW5kZXJTdHlsZSYgc3R5bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAg
ICAgcmV0dXJuIHN0eWxlLmZpbHRlcigpOwotICAgIH0pOwotfQotCi0jaWYgRU5BQkxFKEZJTFRF
UlNfTEVWRUxfMikKLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246OmNoZWNrRm9yTWF0Y2hpbmdCYWNr
ZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKQotewotICAgIG1fYmFja2Ryb3BGaWx0ZXJGdW5jdGlv
bkxpc3RzTWF0Y2ggPSBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rpb25MaXN0cyhDU1NQcm9w
ZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyLCBbXSAoY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlKSAt
PiBjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiB7Ci0gICAgICAgIHJldHVybiBzdHlsZS5iYWNrZHJv
cEZpbHRlcigpOwotICAgIH0pOwotfQotI2VuZGlmCi0KLXZvaWQgS2V5ZnJhbWVBbmltYXRpb246
OmNoZWNrRm9yTWF0Y2hpbmdDb2xvckZpbHRlckZ1bmN0aW9uTGlzdHMoKQotewotICAgIG1fY29s
b3JGaWx0ZXJGdW5jdGlvbkxpc3RzTWF0Y2ggPSBjaGVja0Zvck1hdGNoaW5nRmlsdGVyRnVuY3Rp
b25MaXN0cyhDU1NQcm9wZXJ0eUFwcGxlQ29sb3JGaWx0ZXIsIFtdIChjb25zdCBSZW5kZXJTdHls
ZSYgc3R5bGUpIC0+IGNvbnN0IEZpbHRlck9wZXJhdGlvbnMmIHsKLSAgICAgICAgcmV0dXJuIHN0
eWxlLmFwcGxlQ29sb3JGaWx0ZXIoKTsKLSAgICB9KTsKLX0KLQotT3B0aW9uYWw8U2Vjb25kcz4g
S2V5ZnJhbWVBbmltYXRpb246OnRpbWVUb05leHRTZXJ2aWNlKCkKLXsKLSAgICBPcHRpb25hbDxT
ZWNvbmRzPiB0ID0gQW5pbWF0aW9uQmFzZTo6dGltZVRvTmV4dFNlcnZpY2UoKTsKLSAgICBpZiAo
IXQgfHwgdC52YWx1ZSgpICE9IDBfcyB8fCBwcmVBY3RpdmUoKSkKLSNpZiBDT01QSUxFUihNU1ZD
KSAmJiBfTVNDX1ZFUiA+PSAxOTIwCi0gICAgICAgIHJldHVybiBXVEZNb3ZlKHQpOwotI2Vsc2UK
LSAgICAgICAgcmV0dXJuIHQ7Ci0jZW5kaWYKLQotICAgIC8vIEEgcmV0dXJuIHZhbHVlIG9mIDAg
bWVhbnMgd2UgbmVlZCBzZXJ2aWNlLiBCdXQgaWYgd2Ugb25seSBoYXZlIGFjY2VsZXJhdGVkIGFu
aW1hdGlvbnMgd2UgCi0gICAgLy8gb25seSBuZWVkIHNlcnZpY2UgYXQgdGhlIGVuZCBvZiB0aGUg
dHJhbnNpdGlvbi4KLSAgICBib29sIGFjY2VsZXJhdGVkUHJvcGVydGllc09ubHkgPSB0cnVlOwot
ICAgIAotICAgIGZvciAoYXV0byBwcm9wZXJ0eUlEIDogbV9rZXlmcmFtZXMucHJvcGVydGllcygp
KSB7Ci0gICAgICAgIGlmICghQ1NTUHJvcGVydHlBbmltYXRpb246OmFuaW1hdGlvbk9mUHJvcGVy
dHlJc0FjY2VsZXJhdGVkKHByb3BlcnR5SUQpIHx8ICFpc0FjY2VsZXJhdGVkKCkpIHsKLSAgICAg
ICAgICAgIGFjY2VsZXJhdGVkUHJvcGVydGllc09ubHkgPSBmYWxzZTsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKGFjY2VsZXJhdGVkUHJvcGVydGllc09u
bHkpIHsKLSAgICAgICAgYm9vbCBpc0xvb3Bpbmc7Ci0gICAgICAgIGdldFRpbWVUb05leHRFdmVu
dCh0LnZhbHVlKCksIGlzTG9vcGluZyk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHQ7Ci19Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5p
bWF0aW9uL0tleWZyYW1lQW5pbWF0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL2FuaW1hdGlv
bi9LZXlmcmFtZUFuaW1hdGlvbi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0OTJl
MzkxNTVjNGE5Yjc4YzFjNmQ2ZmVlMWMyZWUzZTBiYjZiZjM4Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL3BhZ2UvYW5pbWF0aW9u
L0tleWZyYW1lQW5pbWF0aW9uLmgKKysrIC9kZXYvbnVsbApAQCAtMSwxMTMgKzAsMCBAQAotLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwNyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0g
KgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0Ci0gKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLiAKLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAq
ICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLiAKLSAqIDMuICBOZWl0aGVyIHRoZSBuYW1lIG9mIEFwcGxlIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LiAKLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09O
VFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFIEFSRQotICogRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWQotICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKLSAqIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsKLSAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAotICogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgotICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0jcHJhZ21hIG9u
Y2UKLQotI2luY2x1ZGUgIkFuaW1hdGlvbkJhc2UuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgot
I2luY2x1ZGUgIktleWZyYW1lTGlzdC5oIgotCi1uYW1lc3BhY2UgV2ViQ29yZSB7Ci0KLWNsYXNz
IEZpbHRlck9wZXJhdGlvbnM7Ci1jbGFzcyBSZW5kZXJTdHlsZTsKLQotLy8gQSBLZXlmcmFtZUFu
aW1hdGlvbiB0cmFja3MgdGhlIHN0YXRlIG9mIGFuIGV4cGxpY2l0IGFuaW1hdGlvbiBmb3IgYSBz
aW5nbGUgUmVuZGVyRWxlbWVudC4KLWNsYXNzIEtleWZyYW1lQW5pbWF0aW9uIGZpbmFsIDogcHVi
bGljIEFuaW1hdGlvbkJhc2UgewotcHVibGljOgotICAgIHN0YXRpYyBSZWY8S2V5ZnJhbWVBbmlt
YXRpb24+IGNyZWF0ZShjb25zdCBBbmltYXRpb24mIGFuaW1hdGlvbiwgRWxlbWVudCYgZWxlbWVu
dCwgQ29tcG9zaXRlQW5pbWF0aW9uJiBjb21wb3NpdGVBbmltYXRpb24sIGNvbnN0IFJlbmRlclN0
eWxlJiB1bmFuaW1hdGVkU3R5bGUpCi0gICAgewotICAgICAgICByZXR1cm4gYWRvcHRSZWYoKm5l
dyBLZXlmcmFtZUFuaW1hdGlvbihhbmltYXRpb24sIGVsZW1lbnQsIGNvbXBvc2l0ZUFuaW1hdGlv
biwgdW5hbmltYXRlZFN0eWxlKSk7Ci0gICAgfQotICAgIAotICAgIE9wdGlvblNldDxBbmltYXRl
Q2hhbmdlPiBhbmltYXRlKENvbXBvc2l0ZUFuaW1hdGlvbiYsIGNvbnN0IFJlbmRlclN0eWxlJiB0
YXJnZXRTdHlsZSwgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiYgYW5pbWF0ZWRTdHlsZSk7
Ci0gICAgdm9pZCBnZXRBbmltYXRlZFN0eWxlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4m
KSBvdmVycmlkZTsKLQotICAgIGJvb2wgY29tcHV0ZUV4dGVudE9mVHJhbnNmb3JtQW5pbWF0aW9u
KExheW91dFJlY3QmKSBjb25zdCBvdmVycmlkZTsKLQotICAgIGNvbnN0IEtleWZyYW1lTGlzdCYg
a2V5ZnJhbWVzKCkgY29uc3QgeyByZXR1cm4gbV9rZXlmcmFtZXM7IH0KLQotICAgIGNvbnN0IEF0
b21TdHJpbmcmIG5hbWUoKSBjb25zdCB7IHJldHVybiBtX2tleWZyYW1lcy5hbmltYXRpb25OYW1l
KCk7IH0KLQotICAgIGJvb2wgaGFzQW5pbWF0aW9uRm9yUHJvcGVydHkoQ1NTUHJvcGVydHlJRCkg
Y29uc3Q7Ci0KLSAgICBib29sIHRyaWdnZXJzU3RhY2tpbmdDb250ZXh0KCkgY29uc3QgeyByZXR1
cm4gbV90cmlnZ2Vyc1N0YWNraW5nQ29udGV4dDsgfQotICAgIGJvb2wgZGVwZW5kc09uTGF5b3V0
KCkgY29uc3QgeyByZXR1cm4gbV9kZXBlbmRzT25MYXlvdXQ7IH0KLSAgICBib29sIGFmZmVjdHNB
Y2NlbGVyYXRlZFByb3BlcnR5KCkgY29uc3QgeyByZXR1cm4gbV9oYXNBY2NlbGVyYXRlZFByb3Bl
cnR5OyB9Ci0KLSAgICB2b2lkIHNldFVuYW5pbWF0ZWRTdHlsZShzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlKSB7IG1fdW5hbmltYXRlZFN0eWxlID0gV1RGTW92ZShzdHlsZSk7IH0K
LSAgICBjb25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKCkgY29uc3Qgb3ZlcnJpZGUg
eyByZXR1cm4gKm1fdW5hbmltYXRlZFN0eWxlOyB9Ci0KLSAgICBPcHRpb25hbDxTZWNvbmRzPiB0
aW1lVG9OZXh0U2VydmljZSgpIG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEtleWZyYW1lQW5p
bWF0aW9uKGNvbnN0IEFuaW1hdGlvbiYsIEVsZW1lbnQmLCBDb21wb3NpdGVBbmltYXRpb24mLCBj
b25zdCBSZW5kZXJTdHlsZSYgdW5hbmltYXRlZFN0eWxlKTsKLSAgICB2aXJ0dWFsIH5LZXlmcmFt
ZUFuaW1hdGlvbigpOwotCi0gICAgdm9pZCBvbkFuaW1hdGlvblN0YXJ0KGRvdWJsZSBlbGFwc2Vk
VGltZSkgb3ZlcnJpZGU7Ci0gICAgdm9pZCBvbkFuaW1hdGlvbkl0ZXJhdGlvbihkb3VibGUgZWxh
cHNlZFRpbWUpIG92ZXJyaWRlOwotICAgIHZvaWQgb25BbmltYXRpb25FbmQoZG91YmxlIGVsYXBz
ZWRUaW1lKSBvdmVycmlkZTsKLSAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zm
c2V0KSBvdmVycmlkZTsKLSAgICB2b2lkIHBhdXNlQW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0
KSBvdmVycmlkZTsKLSAgICB2b2lkIGVuZEFuaW1hdGlvbihib29sIGZpbGxpbmdGb3J3YXJkcyA9
IGZhbHNlKSBvdmVycmlkZTsKLQotICAgIHZvaWQgb3ZlcnJpZGVBbmltYXRpb25zKCkgb3ZlcnJp
ZGU7Ci0gICAgdm9pZCByZXN1bWVPdmVycmlkZGVuQW5pbWF0aW9ucygpIG92ZXJyaWRlOwotCi0g
ICAgYm9vbCBzaG91bGRTZW5kRXZlbnRGb3JMaXN0ZW5lcihEb2N1bWVudDo6TGlzdGVuZXJUeXBl
IGluTGlzdGVuZXJUeXBlKSBjb25zdDsKLSAgICBib29sIHNlbmRBbmltYXRpb25FdmVudChjb25z
dCBBdG9tU3RyaW5nJiwgZG91YmxlIGVsYXBzZWRUaW1lKTsKLQotICAgIGJvb2wgYWZmZWN0c1By
b3BlcnR5KENTU1Byb3BlcnR5SUQpIGNvbnN0IG92ZXJyaWRlOwotCi0gICAgYm9vbCBjb21wdXRl
RXh0ZW50T2ZBbmltYXRpb25Gb3JNYXRyaXhBbmltYXRpb24oY29uc3QgRmxvYXRSZWN0JiByZW5k
ZXJlckJveCwgTGF5b3V0UmVjdCYpIGNvbnN0OwotCi0gICAgYm9vbCBjb21wdXRlRXh0ZW50T2ZB
bmltYXRpb25Gb3JNYXRjaGluZ1RyYW5zZm9ybUxpc3RzKGNvbnN0IEZsb2F0UmVjdCYgcmVuZGVy
ZXJCb3gsIExheW91dFJlY3QmKSBjb25zdDsKLQotICAgIHZvaWQgY29tcHV0ZUxheW91dERlcGVu
ZGVuY3koKTsKLSAgICB2b2lkIHJlc29sdmVLZXlmcmFtZVN0eWxlcygpOwotICAgIHZvaWQgdmFs
aWRhdGVUcmFuc2Zvcm1GdW5jdGlvbkxpc3QoKTsKLSAgICB2b2lkIGNoZWNrRm9yTWF0Y2hpbmdG
aWx0ZXJGdW5jdGlvbkxpc3RzKCk7Ci0jaWYgRU5BQkxFKEZJTFRFUlNfTEVWRUxfMikKLSAgICB2
b2lkIGNoZWNrRm9yTWF0Y2hpbmdCYWNrZHJvcEZpbHRlckZ1bmN0aW9uTGlzdHMoKTsKLSNlbmRp
ZgotICAgIHZvaWQgY2hlY2tGb3JNYXRjaGluZ0NvbG9yRmlsdGVyRnVuY3Rpb25MaXN0cygpOwot
ICAgIGJvb2wgY2hlY2tGb3JNYXRjaGluZ0ZpbHRlckZ1bmN0aW9uTGlzdHMoQ1NTUHJvcGVydHlJ
RCwgY29uc3Qgc3RkOjpmdW5jdGlvbjxjb25zdCBGaWx0ZXJPcGVyYXRpb25zJiAoY29uc3QgUmVu
ZGVyU3R5bGUmKT4mKSBjb25zdDsKLSAgICAKLSAgICAvLyBHZXQgdGhlIHN0eWxlcyBmb3IgdGhl
IGdpdmVuIHByb3BlcnR5IHN1cnJvdW5kaW5nIHRoZSBjdXJyZW50IGFuaW1hdGlvbiB0aW1lIGFu
ZCB0aGUgcHJvZ3Jlc3MgYmV0d2VlbiB0aGVtLgotICAgIHZvaWQgZmV0Y2hJbnRlcnZhbEVuZHBv
aW50c0ZvclByb3BlcnR5KENTU1Byb3BlcnR5SUQsIGNvbnN0IFJlbmRlclN0eWxlKiYgZnJvbVN0
eWxlLCBjb25zdCBSZW5kZXJTdHlsZSomIHRvU3R5bGUsIGRvdWJsZSYgcHJvZ3Jlc3MpIGNvbnN0
OwotCi0gICAgS2V5ZnJhbWVMaXN0IG1fa2V5ZnJhbWVzOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxS
ZW5kZXJTdHlsZT4gbV91bmFuaW1hdGVkU3R5bGU7IC8vIFRoZSBzdHlsZSBqdXN0IGJlZm9yZSB3
ZSBzdGFydGVkIGFuaW1hdGlvbgotCi0gICAgYm9vbCBtX3N0YXJ0RXZlbnREaXNwYXRjaGVkIHsg
ZmFsc2UgfTsKLSAgICBib29sIG1fdHJpZ2dlcnNTdGFja2luZ0NvbnRleHQgeyBmYWxzZSB9Owot
ICAgIGJvb2wgbV9oYXNBY2NlbGVyYXRlZFByb3BlcnR5IHsgZmFsc2UgfTsKLSAgICBib29sIG1f
ZGVwZW5kc09uTGF5b3V0IHsgZmFsc2UgfTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL0dyYXBoaWNzTGF5ZXIuaApp
bmRleCA3ZTRmZTNmZDAwY2E1OWQ5Yjc4MmE4YTA0MGY0ZDViNzkxODA5ZmU2Li5lZTM0N2JhODUz
MjYxYzk2MmVhOTk0MmI2ODNmMmEyZGE5MTJhZDExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9HcmFwaGljc0xheWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvR3JhcGhpY3NMYXllci5oCkBAIC00NzQsOSArNDc0LDcgQEAgcHVi
bGljOgogICAgIC8vIFRyYW5zaXRpb25zIGFyZSBpZGVudGlmaWVkIGJ5IGEgc3BlY2lhbCBhbmlt
YXRpb24gbmFtZSB0aGF0IGNhbm5vdCBjbGFzaCB3aXRoIGEga2V5ZnJhbWUgaWRlbnRpZmllci4K
ICAgICBzdGF0aWMgU3RyaW5nIGFuaW1hdGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJv
cGVydHlJRCk7CiAKLSAgICAvLyBSZXR1cm4gdHJ1ZSBpZiB0aGUgYW5pbWF0aW9uIGlzIGhhbmRs
ZWQgYnkgdGhlIGNvbXBvc2l0aW5nIHN5c3RlbS4gSWYgdGhpcyByZXR1cm5zCi0gICAgLy8gZmFs
c2UsIHRoZSBhbmltYXRpb24gd2lsbCBiZSBydW4gYnkgQ1NTQW5pbWF0aW9uQ29udHJvbGxlci4K
LSAgICAvLyBUaGVzZSBtZXRob2RzIGhhbmRsZSBib3RoIHRyYW5zaXRpb25zIGFuZCBrZXlmcmFt
ZSBhbmltYXRpb25zLgorICAgIC8vIFJldHVybiB0cnVlIGlmIHRoZSBhbmltYXRpb24gaXMgaGFu
ZGxlZCBieSB0aGUgY29tcG9zaXRpbmcgc3lzdGVtLgogICAgIHZpcnR1YWwgYm9vbCBhZGRBbmlt
YXRpb24oY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmLCBjb25zdCBGbG9hdFNpemUmIC8qYm94U2l6
ZSovLCBjb25zdCBBbmltYXRpb24qLCBjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBk
b3VibGUgLyp0aW1lT2Zmc2V0Ki8pICB7IHJldHVybiBmYWxzZTsgfQogICAgIHZpcnR1YWwgdm9p
ZCBwYXVzZUFuaW1hdGlvbihjb25zdCBTdHJpbmcmIC8qYW5pbWF0aW9uTmFtZSovLCBkb3VibGUg
Lyp0aW1lT2Zmc2V0Ki8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCByZW1vdmVBbmltYXRpb24oY29u
c3QgU3RyaW5nJiAvKmFuaW1hdGlvbk5hbWUqLykgeyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NMYXllckNBLmNwcAppbmRleCA0NzIw
ZTEyOTllYTY0YjRjYmJkZjlmZTBlYzJiNDNkZmNlNWI0YjFlLi41ZTk2NDdmZmFjODAxM2Y5MjQz
N2Y1ZGFlYjEwYTg3YjU1YWU0MzZjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL0dyYXBoaWNzTGF5ZXJDQS5jcHAKQEAgLTMwNDAsOSArMzA0MCw3
IEBAIHZvaWQgR3JhcGhpY3NMYXllckNBOjp1cGRhdGVDb250ZW50c05lZWRzRGlzcGxheSgpCiAK
IHN0YXRpYyBib29sIGlzS2V5ZnJhbWUoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIGxpc3QpCiB7
Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gbGlzdC5zaXpl
KCkgPiAxOwotICAgIHJldHVybiBsaXN0LnNpemUoKSA+IDI7CisgICAgcmV0dXJuIGxpc3Quc2l6
ZSgpID4gMTsKIH0KIAogYm9vbCBHcmFwaGljc0xheWVyQ0E6OmNyZWF0ZUFuaW1hdGlvbkZyb21L
ZXlmcmFtZXMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlTGlzdCwgY29uc3QgQW5pbWF0
aW9uKiBhbmltYXRpb24sIGNvbnN0IFN0cmluZyYgYW5pbWF0aW9uTmFtZSwgU2Vjb25kcyB0aW1l
T2Zmc2V0KQpAQCAtMzI5MywzOSArMzI5MSwyOSBAQCB2b2lkIEdyYXBoaWNzTGF5ZXJDQTo6c2V0
dXBBbmltYXRpb24oUGxhdGZvcm1DQUFuaW1hdGlvbiogcHJvcGVydHlBbmltLCBjb25zdCBBbgog
ICAgIHByb3BlcnR5QW5pbS0+c2V0QWRkaXRpdmUoYWRkaXRpdmUpOwogICAgIHByb3BlcnR5QW5p
bS0+c2V0RmlsbE1vZGUoZmlsbE1vZGUpOwogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVy
ZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgp
KSB7Ci0gICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTE4Ci0gICAgICAgIC8vIEEgQ1NTIFRyYW5zaXRpb24gaXMgdGhlIG9ubHkgc2Nl
bmFyaW8gd2hlcmUgQW5pbWF0aW9uOjpwcm9wZXJ0eSgpIHdpbGwgaGF2ZQotICAgICAgICAvLyBp
dHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgZG9uJ3Qgc2V0
IHRoZSBhbmltYXRpb24td2lkZQotICAgICAgICAvLyB0aW1pbmcgZnVuY3Rpb24gdG8gd29yayBh
cm91bmQgYSBDb3JlIEFuaW1hdGlvbiBsaW1pdGF0aW9uLgotICAgICAgICBpZiAoYW5pbS0+cHJv
cGVydHkoKS5tb2RlICE9IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNpbmdsZVByb3BlcnR5
KQotICAgICAgICAgICAgcHJvcGVydHlBbmltLT5zZXRUaW1pbmdGdW5jdGlvbihhbmltLT50aW1p
bmdGdW5jdGlvbigpKTsKLSAgICB9CisgICAgLy8gRklYTUU6IGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0yMTU5MTgKKyAgICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRo
ZSBvbmx5IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlvbjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKKyAg
ICAvLyBpdHMgbW9kZSBzZXQgdG8gU2luZ2xlUHJvcGVydHkuIEluIHRoaXMgY2FzZSwgd2UgZG9u
J3Qgc2V0IHRoZSBhbmltYXRpb24td2lkZQorICAgIC8vIHRpbWluZyBmdW5jdGlvbiB0byB3b3Jr
IGFyb3VuZCBhIENvcmUgQW5pbWF0aW9uIGxpbWl0YXRpb24uCisgICAgaWYgKGFuaW0tPnByb3Bl
cnR5KCkubW9kZSAhPSBBbmltYXRpb246OlRyYW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSkK
KyAgICAgICAgcHJvcGVydHlBbmltLT5zZXRUaW1pbmdGdW5jdGlvbihhbmltLT50aW1pbmdGdW5j
dGlvbigpKTsKIH0KIAogY29uc3QgVGltaW5nRnVuY3Rpb24mIEdyYXBoaWNzTGF5ZXJDQTo6dGlt
aW5nRnVuY3Rpb25Gb3JBbmltYXRpb25WYWx1ZShjb25zdCBBbmltYXRpb25WYWx1ZSYgYW5pbVZh
bHVlLCBjb25zdCBBbmltYXRpb24mIGFuaW0pCiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVh
dHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZCgpKSB7Ci0gICAgICAgIGlmIChhbmltLnByb3BlcnR5KCkubW9kZSA9PSBBbmltYXRpb246OlRy
YW5zaXRpb25Nb2RlOjpTaW5nbGVQcm9wZXJ0eSAmJiBhbmltLnRpbWluZ0Z1bmN0aW9uKCkpIHsK
LSAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjE1OTE4Ci0gICAgICAgICAgICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRoZSBvbmx5
IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlvbjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKLSAgICAgICAg
ICAgIC8vIGl0cyBtb2RlIHNldCB0byBTaW5nbGVQcm9wZXJ0eS4gSW4gdGhpcyBjYXNlLCB3ZSBj
aG9zZSBub3QgdG8gc2V0IHNldCB0aGUKLSAgICAgICAgICAgIC8vIGFuaW1hdGlvbi13aWRlIHRp
bWluZyBmdW5jdGlvbiwgc28gd2Ugc2V0IGl0IG9uIHRoZSBzaW5nbGUga2V5ZnJhbWUgaW50ZXJ2
YWwKLSAgICAgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIGEgQ29yZSBBbmltYXRpb24gbGltaXRh
dGlvbi4KLSAgICAgICAgICAgIHJldHVybiAqYW5pbS50aW1pbmdGdW5jdGlvbigpOwotICAgICAg
ICB9Ci0gICAgICAgIGlmIChhbmltVmFsdWUudGltaW5nRnVuY3Rpb24oKSkKLSAgICAgICAgICAg
IHJldHVybiAqYW5pbVZhbHVlLnRpbWluZ0Z1bmN0aW9uKCk7Ci0gICAgICAgIGlmIChhbmltLmRl
ZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZyYW1lcygpKQotICAgICAgICAgICAgcmV0dXJuICph
bmltLmRlZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZyYW1lcygpOwotICAgICAgICByZXR1cm4g
TGluZWFyVGltaW5nRnVuY3Rpb246OnNoYXJlZExpbmVhclRpbWluZ0Z1bmN0aW9uKCk7CisgICAg
aWYgKGFuaW0ucHJvcGVydHkoKS5tb2RlID09IEFuaW1hdGlvbjo6VHJhbnNpdGlvbk1vZGU6OlNp
bmdsZVByb3BlcnR5ICYmIGFuaW0udGltaW5nRnVuY3Rpb24oKSkgeworICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNTkxOAorICAgICAg
ICAvLyBBIENTUyBUcmFuc2l0aW9uIGlzIHRoZSBvbmx5IHNjZW5hcmlvIHdoZXJlIEFuaW1hdGlv
bjo6cHJvcGVydHkoKSB3aWxsIGhhdmUKKyAgICAgICAgLy8gaXRzIG1vZGUgc2V0IHRvIFNpbmds
ZVByb3BlcnR5LiBJbiB0aGlzIGNhc2UsIHdlIGNob3NlIG5vdCB0byBzZXQgc2V0IHRoZQorICAg
ICAgICAvLyBhbmltYXRpb24td2lkZSB0aW1pbmcgZnVuY3Rpb24sIHNvIHdlIHNldCBpdCBvbiB0
aGUgc2luZ2xlIGtleWZyYW1lIGludGVydmFsCisgICAgICAgIC8vIHRvIHdvcmsgYXJvdW5kIGEg
Q29yZSBBbmltYXRpb24gbGltaXRhdGlvbi4KKyAgICAgICAgcmV0dXJuICphbmltLnRpbWluZ0Z1
bmN0aW9uKCk7CiAgICAgfQotCiAgICAgaWYgKGFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpKQog
ICAgICAgICByZXR1cm4gKmFuaW1WYWx1ZS50aW1pbmdGdW5jdGlvbigpOwotICAgIGlmIChhbmlt
LmlzVGltaW5nRnVuY3Rpb25TZXQoKSkKLSAgICAgICAgcmV0dXJuICphbmltLnRpbWluZ0Z1bmN0
aW9uKCk7Ci0gICAgcmV0dXJuIEN1YmljQmV6aWVyVGltaW5nRnVuY3Rpb246OmRlZmF1bHRUaW1p
bmdGdW5jdGlvbigpOworICAgIGlmIChhbmltLmRlZmF1bHRUaW1pbmdGdW5jdGlvbkZvcktleWZy
YW1lcygpKQorICAgICAgICByZXR1cm4gKmFuaW0uZGVmYXVsdFRpbWluZ0Z1bmN0aW9uRm9yS2V5
ZnJhbWVzKCk7CisgICAgcmV0dXJuIExpbmVhclRpbWluZ0Z1bmN0aW9uOjpzaGFyZWRMaW5lYXJU
aW1pbmdGdW5jdGlvbigpOwogfQogCiBib29sIEdyYXBoaWNzTGF5ZXJDQTo6c2V0QW5pbWF0aW9u
RW5kcG9pbnRzKGNvbnN0IEtleWZyYW1lVmFsdWVMaXN0JiB2YWx1ZUxpc3QsIGNvbnN0IEFuaW1h
dGlvbiogYW5pbWF0aW9uLCBQbGF0Zm9ybUNBQW5pbWF0aW9uKiBiYXNpY0FuaW0pCkBAIC0zMzQ2
LDExICszMzM0LDYgQEAgYm9vbCBHcmFwaGljc0xheWVyQ0E6OnNldEFuaW1hdGlvbkVuZHBvaW50
cyhjb25zdCBLZXlmcmFtZVZhbHVlTGlzdCYgdmFsdWVMaXN0LAogICAgICAgICBicmVhazsKICAg
ICB9CiAKLSAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIta2V5ZnJhbWUgYW5pbWF0
aW9ucywgc28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFydAotICAgIC8vIGZvciBh
IHRpbWluZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFuaW1hdGlvbiBjYXNlLCB0
aGUgZmlyc3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5jdGlvbi4KLSAgICBpZiAo
IVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBiYXNpY0FuaW0tPnNldFRpbWluZ0Z1bmN0
aW9uKCZ0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5hdCgwKSwgKmFu
aW1hdGlvbiksICFmb3J3YXJkcyk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMzQ0MCwx
MSArMzQyMyw2IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRUcmFuc2Zvcm1BbmltYXRpb25F
bmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhCiAgICAgICAgIH0KICAgICB9CiAK
LSAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIta2V5ZnJhbWUgYW5pbWF0aW9ucywg
c28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFydAotICAgIC8vIGZvciBhIHRpbWlu
ZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFuaW1hdGlvbiBjYXNlLCB0aGUgZmly
c3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5jdGlvbi4KLSAgICBpZiAoIVJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBiYXNpY0FuaW0tPnNldFRpbWluZ0Z1bmN0aW9uKCZ0
aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5hdCgwKSwgKmFuaW1hdGlv
biksICFmb3J3YXJkcyk7Ci0KICAgICBhdXRvIHZhbHVlRnVuY3Rpb24gPSBnZXRWYWx1ZUZ1bmN0
aW9uTmFtZUZvclRyYW5zZm9ybU9wZXJhdGlvbih0cmFuc2Zvcm1PcFR5cGUpOwogICAgIGlmICh2
YWx1ZUZ1bmN0aW9uICE9IFBsYXRmb3JtQ0FBbmltYXRpb246Ok5vVmFsdWVGdW5jdGlvbikKICAg
ICAgICAgYmFzaWNBbmltLT5zZXRWYWx1ZUZ1bmN0aW9uKHZhbHVlRnVuY3Rpb24pOwpAQCAtMzU1
MSwxMSArMzUyOSw2IEBAIGJvb2wgR3JhcGhpY3NMYXllckNBOjpzZXRGaWx0ZXJBbmltYXRpb25F
bmRwb2ludHMoY29uc3QgS2V5ZnJhbWVWYWx1ZUxpc3QmIHZhbHVlCiAgICAgYmFzaWNBbmltLT5z
ZXRGcm9tVmFsdWUoZnJvbU9wZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsK
ICAgICBiYXNpY0FuaW0tPnNldFRvVmFsdWUodG9PcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJv
cGVydHlJbmRleCk7CiAKLSAgICAvLyBUaGlzIGNvZGVwYXRoIGlzIHVzZWQgZm9yIDIta2V5ZnJh
bWUgYW5pbWF0aW9ucywgc28gd2Ugc3RpbGwgbmVlZCB0byBsb29rIGluIHRoZSBzdGFydAotICAg
IC8vIGZvciBhIHRpbWluZyBmdW5jdGlvbi4gRXZlbiBpbiB0aGUgcmV2ZXJzaW5nIGFuaW1hdGlv
biBjYXNlLCB0aGUgZmlyc3Qga2V5ZnJhbWUgcHJvdmlkZXMgdGhlIHRpbWluZyBmdW5jdGlvbi4K
LSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICBiYXNpY0FuaW0tPnNldFRp
bWluZ0Z1bmN0aW9uKCZ0aW1pbmdGdW5jdGlvbkZvckFuaW1hdGlvblZhbHVlKHZhbHVlTGlzdC5h
dCgwKSwgKmFuaW1hdGlvbiksICFmb3J3YXJkcyk7Ci0KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuY3BwCmluZGV4IGQ2MzU4MTE5
YjRjYzcxNGUxZGU1ODE2NDYzODVjYmVlMzJkYzg1MDMuLmRmZDBiZDk5MTAzZDBjOWQzYWQ3Zjcx
NmQ3OGIxY2YwYzdkNDgwMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxl
bWVudC5jcHAKQEAgLTMyLDYgKzMyLDcgQEAKICNlbmRpZgogI2luY2x1ZGUgIkNvbnRlbnREYXRh
LmgiCiAjaW5jbHVkZSAiQ3Vyc29yTGlzdC5oIgorI2luY2x1ZGUgIkRvY3VtZW50VGltZWxpbmUu
aCIKICNpbmNsdWRlICJFbGVtZW50Q2hpbGRJdGVyYXRvci5oIgogI2luY2x1ZGUgIkV2ZW50SGFu
ZGxlci5oIgogI2luY2x1ZGUgIkZvY3VzQ29udHJvbGxlci5oIgpAQCAtNjYsNiArNjcsNyBAQAog
I2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNlbmRpZgogI2luY2x1ZGUgIlJlbmRlckZy
YWdtZW50Q29udGFpbmVyLmgiCisjaW5jbHVkZSAiUmVuZGVyU3R5bGUuaCIKICNpbmNsdWRlICJS
ZW5kZXJUYWJsZUNhcHRpb24uaCIKICNpbmNsdWRlICJSZW5kZXJUYWJsZUNlbGwuaCIKICNpbmNs
dWRlICJSZW5kZXJUYWJsZUNvbC5oIgpAQCAtMjI5MCw0ICsyMjkyLDE3IEBAIHZvaWQgUmVuZGVy
RWxlbWVudDo6cmVzZXRUZXh0QXV0b3NpemluZygpCiB9CiAjZW5kaWYgLy8gRU5BQkxFKFRFWFRf
QVVUT1NJWklORykKIAorc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBSZW5kZXJFbGVtZW50
OjphbmltYXRlZFN0eWxlKCkKK3sKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHJl
c3VsdDsKKworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IGRvY3VtZW50VGltZWxpbmUoKSkKKyAg
ICAgICAgcmVzdWx0ID0gdGltZWxpbmUtPmFuaW1hdGVkU3R5bGVGb3JSZW5kZXJlcigqdGhpcyk7
CisKKyAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgcmVzdWx0ID0gUmVuZGVyU3R5bGU6OmNsb25l
UHRyKHN0eWxlKCkpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJFbGVtZW50LmgKaW5kZXggZTBhNjJkMGVlMjYwYzc0ODQzZDBlOWUx
NGYyZjJmMzdiMzJkNDgyYy4uYmEzNDhiN2E1MzkwOGY5MTA5ZDc1YTQ0ZmUwZWJhYTE3NWQ1NTQ4
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckVsZW1lbnQuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyRWxlbWVudC5oCkBAIC0zMCw2ICsz
MCw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNsYXNzIENvbnRyb2xTdGF0ZXM7CiBjbGFzcyBL
ZXlmcmFtZUxpc3Q7CiBjbGFzcyBSZW5kZXJCbG9jazsKK2NsYXNzIFJlbmRlclN0eWxlOwogY2xh
c3MgUmVuZGVyVHJlZUJ1aWxkZXI7CiAKIGNsYXNzIFJlbmRlckVsZW1lbnQgOiBwdWJsaWMgUmVu
ZGVyT2JqZWN0IHsKQEAgLTIyNiwxNSArMjI3LDEyIEBAIHB1YmxpYzoKICAgICBSZW5kZXJPYmpl
Y3QqIGF0dGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyUHRyPFJlbmRlck9iamVjdD4gY2hpbGQs
IFJlbmRlck9iamVjdCogYmVmb3JlQ2hpbGQpOwogICAgIFJlbmRlclB0cjxSZW5kZXJPYmplY3Q+
IGRldGFjaFJlbmRlcmVySW50ZXJuYWwoUmVuZGVyT2JqZWN0Jik7CiAKLSAgICB2aXJ0dWFsIGJv
b2wgc3RhcnRUcmFuc2l0aW9uKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICovLCBDU1NQcm9wZXJ0eUlE
LCBjb25zdCBSZW5kZXJTdHlsZSogLyogZnJvbVN0eWxlICovLCBjb25zdCBSZW5kZXJTdHlsZSog
LyogdG9TdHlsZSAqLykgeyByZXR1cm4gZmFsc2U7IH0KLSAgICB2aXJ0dWFsIHZvaWQgdHJhbnNp
dGlvblBhdXNlZChkb3VibGUgLyogdGltZU9mZnNldCAqLywgQ1NTUHJvcGVydHlJRCkgeyB9Ci0g
ICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKSB7IH0KLQog
ICAgIHZpcnR1YWwgYm9vbCBzdGFydEFuaW1hdGlvbihkb3VibGUgLyogdGltZU9mZnNldCAqLywg
Y29uc3QgQW5pbWF0aW9uJiwgY29uc3QgS2V5ZnJhbWVMaXN0JikgeyByZXR1cm4gZmFsc2U7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSAvKiB0aW1lT2Zmc2V0ICov
LCBjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogICAgIHZpcnR1YWwgdm9pZCBhbmltYXRp
b25GaW5pc2hlZChjb25zdCBTdHJpbmcmIC8qIG5hbWUgKi8pIHsgfQogCiAgICAgdmlydHVhbCB2
b2lkIHN1c3BlbmRBbmltYXRpb25zKE1vbm90b25pY1RpbWUgPSBNb25vdG9uaWNUaW1lKCkpIHsg
fQorICAgIHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdHlsZT4gYW5pbWF0ZWRTdHlsZSgpOwogCiBw
cm90ZWN0ZWQ6CiAgICAgZW51bSBCYXNlVHlwZUZsYWcgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJMYXllci5jcHAKaW5kZXggN2QwN2NkYmQ4NDk3MDI4NTNlMWI5MjVhMGJiYzk4ZDdk
ZGFmYTc2Ni4uYTBlMGUyM2U4Y2Y4ZDZlMjY4OWYxY2JiNjI2YzlhYWFkNWU1ZDRhMCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXIuY3BwCkBAIC00Niw3ICs0Niw2IEBACiAj
aW5jbHVkZSAiUmVuZGVyTGF5ZXIuaCIKIAogI2luY2x1ZGUgIkJveFNoYXBlLmgiCi0jaW5jbHVk
ZSAiQ1NTQW5pbWF0aW9uQ29udHJvbGxlci5oIgogI2luY2x1ZGUgIkNTU0ZpbHRlci5oIgogI2lu
Y2x1ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTEzMjcs
MjEgKzEzMjYsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6OmN1cnJlbnRU
cmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKIAogICAgIGF1dG8mIHJlbmRl
ckJveCA9IGRvd25jYXN0PFJlbmRlckJveD4ocmVuZGVyZXIoKSk7CiAKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIo
KS5kb2N1bWVudFRpbWVsaW5lKCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+aXNSdW5u
aW5nQWNjZWxlcmF0ZWRBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyKCksIENTU1Byb3BlcnR5
VHJhbnNmb3JtKSkgewotICAgICAgICAgICAgICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IGN1cnJU
cmFuc2Zvcm07Ci0gICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFJlbmRlclN0eWxlPiBz
dHlsZSA9IHRpbWVsaW5lLT5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7Ci0g
ICAgICAgICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVj
dFRvRGV2aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NC
b3hUeXBlKHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZp
Y2VTY2FsZUZhY3RvcigpKTsKLSAgICAgICAgICAgICAgICBzdHlsZS0+YXBwbHlUcmFuc2Zvcm0o
Y3VyclRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgYXBwbHlPcmlnaW4pOwotICAg
ICAgICAgICAgICAgIG1ha2VNYXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRl
cjNEVHJhbnNmb3JtcygpKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gY3VyclRyYW5zZm9ybTsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGlmIChyZW5k
ZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25S
ZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKKyAgICBpZiAoYXV0
byogdGltZWxpbmUgPSByZW5kZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkgeworICAgICAgICBp
ZiAodGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5pbWF0aW9uT25SZW5kZXJlcihyZW5k
ZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSkpIHsKICAgICAgICAgICAgIFRyYW5zZm9ybWF0
aW9uTWF0cml4IGN1cnJUcmFuc2Zvcm07Ci0gICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UmVu
ZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5hbmltYXRlZFN0
eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5hbmltYXRlZFN0eWxlKCk7CiAgICAgICAg
ICAgICBGbG9hdFJlY3QgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCA9IHNuYXBSZWN0VG9EZXZpY2VQ
aXhlbHMocmVuZGVyQm94LnJlZmVyZW5jZUJveCh0cmFuc2Zvcm1Cb3hUb0NTU0JveFR5cGUoc3R5
bGUtPnRyYW5zZm9ybUJveCgpKSksIHJlbmRlckJveC5kb2N1bWVudCgpLmRldmljZVNjYWxlRmFj
dG9yKCkpOwogICAgICAgICAgICAgc3R5bGUtPmFwcGx5VHJhbnNmb3JtKGN1cnJUcmFuc2Zvcm0s
IHBpeGVsU25hcHBlZEJvcmRlclJlY3QsIGFwcGx5T3JpZ2luKTsKICAgICAgICAgICAgIG1ha2VN
YXRyaXhSZW5kZXJhYmxlKGN1cnJUcmFuc2Zvcm0sIGNhblJlbmRlcjNEVHJhbnNmb3JtcygpKTsK
QEAgLTEzNDksMTEgKzEzMzcsMTAgQEAgVHJhbnNmb3JtYXRpb25NYXRyaXggUmVuZGVyTGF5ZXI6
OmN1cnJlbnRUcmFuc2Zvcm0oUmVuZGVyU3R5bGU6OkFwcGx5VHJhbnNmb3JtT3IKICAgICAgICAg
fQogICAgIH0KIAotCiAgICAgLy8gbV90cmFuc2Zvcm0gaW5jbHVkZXMgdHJhbnNmb3JtLW9yaWdp
biwgc28gd2UgbmVlZCB0byByZWNvbXB1dGUgdGhlIHRyYW5zZm9ybSBoZXJlLgogICAgIGlmIChh
cHBseU9yaWdpbiA9PSBSZW5kZXJTdHlsZTo6RXhjbHVkZVRyYW5zZm9ybU9yaWdpbikgewogICAg
ICAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBjdXJyVHJhbnNmb3JtOwotICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8UmVuZGVyU3R5bGU+IHN0eWxlID0gcmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24o
KS5hbmltYXRlZFN0eWxlRm9yUmVuZGVyZXIocmVuZGVyZXIoKSk7CisgICAgICAgIHN0ZDo6dW5p
cXVlX3B0cjxSZW5kZXJTdHlsZT4gc3R5bGUgPSByZW5kZXJlcigpLmFuaW1hdGVkU3R5bGUoKTsK
ICAgICAgICAgRmxvYXRSZWN0IHBpeGVsU25hcHBlZEJvcmRlclJlY3QgPSBzbmFwUmVjdFRvRGV2
aWNlUGl4ZWxzKHJlbmRlckJveC5yZWZlcmVuY2VCb3godHJhbnNmb3JtQm94VG9DU1NCb3hUeXBl
KHN0eWxlLT50cmFuc2Zvcm1Cb3goKSkpLCByZW5kZXJCb3guZG9jdW1lbnQoKS5kZXZpY2VTY2Fs
ZUZhY3RvcigpKTsKICAgICAgICAgcmVuZGVyQm94LnN0eWxlKCkuYXBwbHlUcmFuc2Zvcm0oY3Vy
clRyYW5zZm9ybSwgcGl4ZWxTbmFwcGVkQm9yZGVyUmVjdCwgUmVuZGVyU3R5bGU6OkV4Y2x1ZGVU
cmFuc2Zvcm1PcmlnaW4pOwogICAgICAgICBtYWtlTWF0cml4UmVuZGVyYWJsZShjdXJyVHJhbnNm
b3JtLCBjYW5SZW5kZXIzRFRyYW5zZm9ybXMoKSk7CkBAIC02MTY1LDIwICs2MTUyLDEzIEBAIGJv
b2wgUmVuZGVyTGF5ZXI6OmdldE92ZXJsYXBCb3VuZHNJbmNsdWRpbmdDaGlsZHJlbkFjY291bnRp
bmdGb3JUcmFuc2Zvcm1BbmltYXRpCiAgICAgYm91bmRzID0gY2FsY3VsYXRlTGF5ZXJCb3VuZHMo
dGhpcywgTGF5b3V0U2l6ZSgpLCBib3VuZHNGbGFncyk7CiAgICAgCiAgICAgTGF5b3V0UmVjdCBh
bmltYXRlZEJvdW5kcyA9IGJvdW5kczsKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsK
LSAgICAgICAgaWYgKGF1dG8qIHRpbWVsaW5lID0gcmVuZGVyZXIoKS5kb2N1bWVudFRpbWVsaW5l
KCkpIHsKLSAgICAgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9mQW5pbWF0aW9u
KHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewotICAgICAgICAgICAgICAgIGJvdW5kcyA9
IGFuaW1hdGVkQm91bmRzOwotICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwotICAgICAgICAg
ICAgfQotICAgICAgICB9Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgaWYgKHJlbmRlcmVyKCkubGVn
YWN5QW5pbWF0aW9uKCkuY29tcHV0ZUV4dGVudE9mQW5pbWF0aW9uKHJlbmRlcmVyKCksIGFuaW1h
dGVkQm91bmRzKSkgeworICAgIGlmIChhdXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1l
bnRUaW1lbGluZSgpKSB7CisgICAgICAgIGlmICh0aW1lbGluZS0+Y29tcHV0ZUV4dGVudE9mQW5p
bWF0aW9uKHJlbmRlcmVyKCksIGFuaW1hdGVkQm91bmRzKSkgewogICAgICAgICAgICAgYm91bmRz
ID0gYW5pbWF0ZWRCb3VuZHM7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQog
ICAgIH0KLSAgICAKKwogICAgIHJldHVybiBmYWxzZTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmNwcAppbmRleCA0ZDU0N2M0YjdmZGQxYWU0
MDlhNmNlNmY4MjkyZjZhNmNkMzAzMjZmLi4yZjdiNTg5MjMyZmE3MjIzNDZmNzAyYThkNDJkZTEz
M2JkZTdlZWE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5
ZXJCYWNraW5nLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJC
YWNraW5nLmNwcApAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgIlJlbmRlckxheWVyQmFja2lu
Zy5oIgogCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25D
b250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5oIgogI2luY2x1
ZGUgIkNTU1Byb3BlcnR5TmFtZXMuaCIKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgpAQCAtMTI1
MSwxMSArMTI1MCw4IEBAIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjp1cGRhdGVHZW9tZXRyeShj
b25zdCBSZW5kZXJMYXllciogY29tcG9zaXRlZEFuY2VzdG9yKQogICAgIGNvbnN0IGF1dG8gZGV2
aWNlU2NhbGVGYWN0b3IgPSB0aGlzLT5kZXZpY2VTY2FsZUZhY3RvcigpOwogCiAgICAgYm9vbCBp
c1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IGZhbHNlOwotICAgIGlmIChS
dW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBpZiAoYXV0byogdGltZWxpbmUgPSByZW5k
ZXJlcigpLmRvY3VtZW50VGltZWxpbmUoKSkKLSAgICAgICAgICAgIGlzUnVubmluZ0FjY2VsZXJh
dGVkVHJhbnNmb3JtQW5pbWF0aW9uID0gdGltZWxpbmUtPmlzUnVubmluZ0FjY2VsZXJhdGVkQW5p
bWF0aW9uT25SZW5kZXJlcihyZW5kZXJlcigpLCBDU1NQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAg
fSBlbHNlCi0gICAgICAgIGlzUnVubmluZ0FjY2VsZXJhdGVkVHJhbnNmb3JtQW5pbWF0aW9uID0g
cmVuZGVyZXIoKS5sZWdhY3lBbmltYXRpb24oKS5pc1J1bm5pbmdBY2NlbGVyYXRlZEFuaW1hdGlv
bk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlUcmFuc2Zvcm0pOworICAgIGlmIChh
dXRvKiB0aW1lbGluZSA9IHJlbmRlcmVyKCkuZG9jdW1lbnRUaW1lbGluZSgpKQorICAgICAgICBp
c1J1bm5pbmdBY2NlbGVyYXRlZFRyYW5zZm9ybUFuaW1hdGlvbiA9IHRpbWVsaW5lLT5pc1J1bm5p
bmdBY2NlbGVyYXRlZEFuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIoKSwgQ1NTUHJvcGVydHlU
cmFuc2Zvcm0pOwogCiAgICAgdXBkYXRlVHJhbnNmb3JtKHN0eWxlKTsKICAgICB1cGRhdGVPcGFj
aXR5KHN0eWxlKTsKQEAgLTM2NDgsOTcgKzM2NDQsOCBAQCB2b2lkIFJlbmRlckxheWVyQmFja2lu
Zzo6YW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3RyaW5nJiBhbmltYXRpb25OYW1lKQogICAgIG1f
b3duaW5nTGF5ZXIuc2V0TmVlZHNDb21wb3NpdGluZ0dlb21ldHJ5VXBkYXRlKCk7CiB9CiAKLWJv
b2wgUmVuZGVyTGF5ZXJCYWNraW5nOjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQs
IENTU1Byb3BlcnR5SUQgcHJvcGVydHksIGNvbnN0IFJlbmRlclN0eWxlKiBmcm9tU3R5bGUsIGNv
bnN0IFJlbmRlclN0eWxlKiB0b1N0eWxlKQotewotICAgIGJvb2wgZGlkQW5pbWF0ZSA9IGZhbHNl
OwotCi0gICAgQVNTRVJUKHByb3BlcnR5ICE9IENTU1Byb3BlcnR5SW52YWxpZCk7Ci0KLSAgICBp
ZiAocHJvcGVydHkgPT0gQ1NTUHJvcGVydHlPcGFjaXR5KSB7Ci0gICAgICAgIGNvbnN0IEFuaW1h
dGlvbiogb3BhY2l0eUFuaW0gPSB0b1N0eWxlLT50cmFuc2l0aW9uRm9yUHJvcGVydHkoQ1NTUHJv
cGVydHlPcGFjaXR5KTsKLSAgICAgICAgaWYgKG9wYWNpdHlBbmltICYmICFvcGFjaXR5QW5pbS0+
aXNFbXB0eU9yWmVyb0R1cmF0aW9uKCkpIHsKLSAgICAgICAgICAgIEtleWZyYW1lVmFsdWVMaXN0
IG9wYWNpdHlWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eU9wYWNpdHkpOwotICAgICAgICAgICAgb3Bh
Y2l0eVZlY3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxGbG9hdEFuaW1hdGlvblZhbHVlPigwLCBjb21w
b3NpdGluZ09wYWNpdHkoZnJvbVN0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICBvcGFj
aXR5VmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZsb2F0QW5pbWF0aW9uVmFsdWU+KDEsIGNvbXBv
c2l0aW5nT3BhY2l0eSh0b1N0eWxlLT5vcGFjaXR5KCkpKSk7Ci0gICAgICAgICAgICAvLyBUaGUg
Ym94U2l6ZSBwYXJhbSBpcyBvbmx5IHVzZWQgZm9yIHRyYW5zZm9ybSBhbmltYXRpb25zICh3aGlj
aCBjYW4gb25seSBydW4gb24gUmVuZGVyQm94ZXMpLCBzbyB3ZSBwYXNzIGFuIGVtcHR5IHNpemUg
aGVyZS4KLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFuaW1hdGlvbihvcGFj
aXR5VmVjdG9yLCBGbG9hdFNpemUoKSwgb3BhY2l0eUFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1h
dGlvbk5hbWVGb3JUcmFuc2l0aW9uKEFuaW1hdGVkUHJvcGVydHlPcGFjaXR5KSwgdGltZU9mZnNl
dCkpIHsKLSAgICAgICAgICAgICAgICAvLyBUbyBlbnN1cmUgdGhhdCB0aGUgY29ycmVjdCBvcGFj
aXR5IGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5h
bCBvcGFjaXR5LgotICAgICAgICAgICAgICAgIHVwZGF0ZU9wYWNpdHkoKnRvU3R5bGUpOwotICAg
ICAgICAgICAgICAgIGRpZEFuaW1hdGUgPSB0cnVlOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgaWYgKHByb3BlcnR5ID09IENTU1Byb3BlcnR5VHJhbnNmb3JtICYmIG1f
b3duaW5nTGF5ZXIuaGFzVHJhbnNmb3JtKCkpIHsKLSAgICAgICAgY29uc3QgQW5pbWF0aW9uKiB0
cmFuc2Zvcm1BbmltID0gdG9TdHlsZS0+dHJhbnNpdGlvbkZvclByb3BlcnR5KENTU1Byb3BlcnR5
VHJhbnNmb3JtKTsKLSAgICAgICAgaWYgKHRyYW5zZm9ybUFuaW0gJiYgIXRyYW5zZm9ybUFuaW0t
PmlzRW1wdHlPclplcm9EdXJhdGlvbigpKSB7Ci0gICAgICAgICAgICBLZXlmcmFtZVZhbHVlTGlz
dCB0cmFuc2Zvcm1WZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSk7Ci0gICAgICAgICAg
ICB0cmFuc2Zvcm1WZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8VHJhbnNmb3JtQW5pbWF0aW9uVmFs
dWU+KDAsIGZyb21TdHlsZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIHRyYW5zZm9ybVZl
Y3Rvci5pbnNlcnQobWFrZVVuaXF1ZTxUcmFuc2Zvcm1BbmltYXRpb25WYWx1ZT4oMSwgdG9TdHls
ZS0+dHJhbnNmb3JtKCkpKTsKLSAgICAgICAgICAgIGlmIChtX2dyYXBoaWNzTGF5ZXItPmFkZEFu
aW1hdGlvbih0cmFuc2Zvcm1WZWN0b3IsIHNuYXBwZWRJbnRSZWN0KHJlbmRlckJveCgpLT5ib3Jk
ZXJCb3hSZWN0KCkpLnNpemUoKSwgdHJhbnNmb3JtQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0
aW9uTmFtZUZvclRyYW5zaXRpb24oQW5pbWF0ZWRQcm9wZXJ0eVRyYW5zZm9ybSksIHRpbWVPZmZz
ZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgdHJh
bnNmb3JtIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBm
aW5hbCB0cmFuc2Zvcm0uCi0gICAgICAgICAgICAgICAgdXBkYXRlVHJhbnNmb3JtKCp0b1N0eWxl
KTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgfQotICAgIH0KLQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eUZpbHRlciAm
JiBtX293bmluZ0xheWVyLmhhc0ZpbHRlcigpKSB7Ci0gICAgICAgIGNvbnN0IEFuaW1hdGlvbiog
ZmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25Gb3JQcm9wZXJ0eShDU1NQcm9wZXJ0eUZp
bHRlcik7Ci0gICAgICAgIGlmIChmaWx0ZXJBbmltICYmICFmaWx0ZXJBbmltLT5pc0VtcHR5T3Ja
ZXJvRHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgZmlsdGVyVmVj
dG9yKEFuaW1hdGVkUHJvcGVydHlGaWx0ZXIpOwotICAgICAgICAgICAgZmlsdGVyVmVjdG9yLmlu
c2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVlPigwLCBmcm9tU3R5bGUtPmZpbHRl
cigpKSk7Ci0gICAgICAgICAgICBmaWx0ZXJWZWN0b3IuaW5zZXJ0KG1ha2VVbmlxdWU8RmlsdGVy
QW5pbWF0aW9uVmFsdWU+KDEsIHRvU3R5bGUtPmZpbHRlcigpKSk7Ci0gICAgICAgICAgICBpZiAo
bV9ncmFwaGljc0xheWVyLT5hZGRBbmltYXRpb24oZmlsdGVyVmVjdG9yLCBGbG9hdFNpemUoKSwg
ZmlsdGVyQW5pbSwgR3JhcGhpY3NMYXllcjo6YW5pbWF0aW9uTmFtZUZvclRyYW5zaXRpb24oQW5p
bWF0ZWRQcm9wZXJ0eUZpbHRlciksIHRpbWVPZmZzZXQpKSB7Ci0gICAgICAgICAgICAgICAgLy8g
VG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5p
bWF0aW9uIGVuZHMsIGFsc28gc2V0IHRoZSBmaW5hbCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAg
dXBkYXRlRmlsdGVycygqdG9TdHlsZSk7Ci0gICAgICAgICAgICAgICAgZGlkQW5pbWF0ZSA9IHRy
dWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSNpZiBFTkFCTEUoRklMVEVS
U19MRVZFTF8yKQotICAgIGlmIChwcm9wZXJ0eSA9PSBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9w
RmlsdGVyICYmIG1fb3duaW5nTGF5ZXIuaGFzQmFja2Ryb3BGaWx0ZXIoKSkgewotICAgICAgICBj
b25zdCBBbmltYXRpb24qIGJhY2tkcm9wRmlsdGVyQW5pbSA9IHRvU3R5bGUtPnRyYW5zaXRpb25G
b3JQcm9wZXJ0eShDU1NQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAgICAgICAgaWYg
KGJhY2tkcm9wRmlsdGVyQW5pbSAmJiAhYmFja2Ryb3BGaWx0ZXJBbmltLT5pc0VtcHR5T3JaZXJv
RHVyYXRpb24oKSkgewotICAgICAgICAgICAgS2V5ZnJhbWVWYWx1ZUxpc3QgYmFja2Ryb3BGaWx0
ZXJWZWN0b3IoQW5pbWF0ZWRQcm9wZXJ0eVdlYmtpdEJhY2tkcm9wRmlsdGVyKTsKLSAgICAgICAg
ICAgIGJhY2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlv
blZhbHVlPigwLCBmcm9tU3R5bGUtPmJhY2tkcm9wRmlsdGVyKCkpKTsKLSAgICAgICAgICAgIGJh
Y2tkcm9wRmlsdGVyVmVjdG9yLmluc2VydChtYWtlVW5pcXVlPEZpbHRlckFuaW1hdGlvblZhbHVl
PigxLCB0b1N0eWxlLT5iYWNrZHJvcEZpbHRlcigpKSk7Ci0gICAgICAgICAgICBpZiAobV9ncmFw
aGljc0xheWVyLT5hZGRBbmltYXRpb24oYmFja2Ryb3BGaWx0ZXJWZWN0b3IsIEZsb2F0U2l6ZSgp
LCBiYWNrZHJvcEZpbHRlckFuaW0sIEdyYXBoaWNzTGF5ZXI6OmFuaW1hdGlvbk5hbWVGb3JUcmFu
c2l0aW9uKEFuaW1hdGVkUHJvcGVydHlXZWJraXRCYWNrZHJvcEZpbHRlciksIHRpbWVPZmZzZXQp
KSB7Ci0gICAgICAgICAgICAgICAgLy8gVG8gZW5zdXJlIHRoYXQgdGhlIGNvcnJlY3QgYmFja2Ry
b3AgZmlsdGVyIGlzIHZpc2libGUgd2hlbiB0aGUgYW5pbWF0aW9uIGVuZHMsIGFsc28gc2V0IHRo
ZSBmaW5hbCBiYWNrZHJvcCBmaWx0ZXIuCi0gICAgICAgICAgICAgICAgdXBkYXRlQmFja2Ryb3BG
aWx0ZXJzKCp0b1N0eWxlKTsKLSAgICAgICAgICAgICAgICBkaWRBbmltYXRlID0gdHJ1ZTsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLSNlbmRpZgotCi0gICAgaWYgKGRpZEFuaW1h
dGUpCi0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29tcG9zaXRpbmdV
cGRhdGUoKTsKLQotICAgIHJldHVybiBkaWRBbmltYXRlOwotfQotCi12b2lkIFJlbmRlckxheWVy
QmFja2luZzo6dHJhbnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJ
RCBwcm9wZXJ0eSkKLXsKLSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9
IGNzc1RvR3JhcGhpY3NMYXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQ
cm9wZXJ0eSAhPSBBbmltYXRlZFByb3BlcnR5SW52YWxpZCkKLSAgICAgICAgbV9ncmFwaGljc0xh
eWVyLT5wYXVzZUFuaW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNp
dGlvbihhbmltYXRlZFByb3BlcnR5KSwgdGltZU9mZnNldCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5
ZXJCYWNraW5nOjp0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eSkKLXsK
LSAgICBBbmltYXRlZFByb3BlcnR5SUQgYW5pbWF0ZWRQcm9wZXJ0eSA9IGNzc1RvR3JhcGhpY3NM
YXllclByb3BlcnR5KHByb3BlcnR5KTsKLSAgICBpZiAoYW5pbWF0ZWRQcm9wZXJ0eSAhPSBBbmlt
YXRlZFByb3BlcnR5SW52YWxpZCkgewotICAgICAgICBtX2dyYXBoaWNzTGF5ZXItPnJlbW92ZUFu
aW1hdGlvbihHcmFwaGljc0xheWVyOjphbmltYXRpb25OYW1lRm9yVHJhbnNpdGlvbihhbmltYXRl
ZFByb3BlcnR5KSk7Ci0gICAgICAgIG1fb3duaW5nTGF5ZXIuc2V0TmVlZHNQb3N0TGF5b3V0Q29t
cG9zaXRpbmdVcGRhdGUoKTsKLSAgICB9Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpu
b3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqLCBjb25zdCBTdHJpbmcm
LCBNb25vdG9uaWNUaW1lIHRpbWUpCit2b2lkIFJlbmRlckxheWVyQmFja2luZzo6bm90aWZ5QW5p
bWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgY29uc3QgU3RyaW5nJiwgTW9ub3Rv
bmljVGltZSkKIHsKLSAgICBpZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZW5k
ZXJlcigpLmxlZ2FjeUFuaW1hdGlvbigpLm5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQocmVuZGVyZXIo
KSwgdGltZSk7CiB9CiAKIHZvaWQgUmVuZGVyTGF5ZXJCYWNraW5nOjpub3RpZnlGbHVzaFJlcXVp
cmVkKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyQmFja2luZy5oIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlckxheWVyQmFja2luZy5oCmluZGV4IDljNzY0N2JiMjY3NmIzZmMxZjkyNmZhZDkyODQ3ZDhm
OGVhN2MwZjAuLjVjMTEyNTI4NzMxOTIwMmNhMDRkMjgyOTVkYTIyYTdjMWYyZGJjYTMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllckJhY2tpbmcuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJCYWNraW5nLmgKQEAgLTE4NCwx
MSArMTg0LDcgQEAgcHVibGljOgogICAgIC8vIE5vdGlmaWNhdGlvbiBmcm9tIHRoZSByZW5kZXJl
ciB0aGF0IGl0cyBjb250ZW50IGNoYW5nZWQuCiAgICAgdm9pZCBjb250ZW50Q2hhbmdlZChDb250
ZW50Q2hhbmdlVHlwZSk7CiAKLSAgICAvLyBJbnRlcmZhY2UgdG8gc3RhcnQsIGZpbmlzaCwgc3Vz
cGVuZCBhbmQgcmVzdW1lIGFuaW1hdGlvbnMgYW5kIHRyYW5zaXRpb25zCi0gICAgYm9vbCBzdGFy
dFRyYW5zaXRpb24oZG91YmxlLCBDU1NQcm9wZXJ0eUlELCBjb25zdCBSZW5kZXJTdHlsZSogZnJv
bVN0eWxlLCBjb25zdCBSZW5kZXJTdHlsZSogdG9TdHlsZSk7Ci0gICAgdm9pZCB0cmFuc2l0aW9u
UGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEKTsKLSAgICB2b2lkIHRyYW5z
aXRpb25GaW5pc2hlZChDU1NQcm9wZXJ0eUlEKTsKLQorICAgIC8vIEludGVyZmFjZSB0byBzdGFy
dCwgZmluaXNoLCBzdXNwZW5kIGFuZCByZXN1bWUgYW5pbWF0aW9ucwogICAgIGJvb2wgc3RhcnRB
bmltYXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIGNvbnN0IEFuaW1hdGlvbiYsIGNvbnN0IEtleWZy
YW1lTGlzdCYpOwogICAgIHZvaWQgYW5pbWF0aW9uUGF1c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBj
b25zdCBTdHJpbmcmIG5hbWUpOwogICAgIHZvaWQgYW5pbWF0aW9uRmluaXNoZWQoY29uc3QgU3Ry
aW5nJiBuYW1lKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllckNvbXBvc2l0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVy
Q29tcG9zaXRvci5jcHAKaW5kZXggMTg0MWY5NmYwYjYyOThjYTUyM2VkN2YxZTY5ODlmMmMyNzZk
ZGQ3NS4uZjIzOWM0YTQ0ODBhZWU3MmEzOTJiMzZjNTI0NWI3Y2Q0MWQ2MmQzNyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckxheWVyQ29tcG9zaXRvci5jcHAKQEAg
LTI4LDcgKzI4LDYgQEAKICNpbmNsdWRlICJSZW5kZXJMYXllckNvbXBvc2l0b3IuaCIKIAogI2lu
Y2x1ZGUgIkFzeW5jU2Nyb2xsaW5nQ29vcmRpbmF0b3IuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRp
b25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTUHJvcGVydHlOYW1lcy5oIgogI2luY2x1ZGUg
IkNhbnZhc1JlbmRlcmluZ0NvbnRleHQuaCIKICNpbmNsdWRlICJDaHJvbWUuaCIKQEAgLTU2MCw5
ICs1NTksNiBAQCB2b2lkIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6Zmx1c2hQZW5kaW5nTGF5ZXJD
aGFuZ2VzKGJvb2wgaXNGbHVzaFJvb3QpCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBh
dXRvJiBmcmFtZVZpZXcgPSBtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCk7Ci0gICAgQW5pbWF0aW9u
VXBkYXRlQmxvY2sgYW5pbWF0aW9uVXBkYXRlQmxvY2soJmZyYW1lVmlldy5mcmFtZSgpLmxlZ2Fj
eUFuaW1hdGlvbigpKTsKLQogICAgIEFTU0VSVCghbV9mbHVzaGluZ0xheWVycyk7CiAgICAgewog
ICAgICAgICBTZXRGb3JTY29wZTxib29sPiBmbHVzaGluZ0xheWVyc1Njb3BlKG1fZmx1c2hpbmdM
YXllcnMsIHRydWUpOwpAQCAtODE5LDggKzgxNSw2IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3Np
dG9yOjp1cGRhdGVDb21wb3NpdGluZ0xheWVycyhDb21wb3NpdGluZ1VwZGF0ZVR5cGUgdXBkYXRl
CiAKICAgICArK21fY29tcG9zaXRpbmdVcGRhdGVDb3VudDsKIAotICAgIEFuaW1hdGlvblVwZGF0
ZUJsb2NrIGFuaW1hdGlvblVwZGF0ZUJsb2NrKCZtX3JlbmRlclZpZXcuZnJhbWVWaWV3KCkuZnJh
bWUoKS5sZWdhY3lBbmltYXRpb24oKSk7Ci0KICAgICBTZXRGb3JTY29wZTxib29sPiBwb3N0TGF5
b3V0Q2hhbmdlKG1faW5Qb3N0TGF5b3V0VXBkYXRlLCB0cnVlKTsKIAogI2lmICFMT0dfRElTQUJM
RUQKQEAgLTI5NzcsMTcgKzI5NzEsNyBAQCBib29sIFJlbmRlckxheWVyQ29tcG9zaXRvcjo6cmVx
dWlyZXNDb21wb3NpdGluZ0ZvckFuaW1hdGlvbihSZW5kZXJMYXllck1vZGVsT2JqZQogICAgICAg
ICB9CiAgICAgfQogCi0gICAgaWYgKFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1
cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICBhdXRvJiBhbmltQ29udHJvbGxlciA9IHJlbmRlcmVyLmxlZ2FjeUFu
aW1hdGlvbigpOwotICAgIHJldHVybiAoYW5pbUNvbnRyb2xsZXIuaXNSdW5uaW5nQW5pbWF0aW9u
T25SZW5kZXJlcihyZW5kZXJlciwgQ1NTUHJvcGVydHlPcGFjaXR5KQotICAgICAgICAmJiAodXNl
c0NvbXBvc2l0aW5nKCkgfHwgKG1fY29tcG9zaXRpbmdUcmlnZ2VycyAmIENocm9tZUNsaWVudDo6
QW5pbWF0ZWRPcGFjaXR5VHJpZ2dlcikpKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1
bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eUZpbHRlcikKLSNp
ZiBFTkFCTEUoRklMVEVSU19MRVZFTF8yKQotICAgICAgICB8fCBhbmltQ29udHJvbGxlci5pc1J1
bm5pbmdBbmltYXRpb25PblJlbmRlcmVyKHJlbmRlcmVyLCBDU1NQcm9wZXJ0eVdlYmtpdEJhY2tk
cm9wRmlsdGVyKQotI2VuZGlmCi0gICAgICAgIHx8IGFuaW1Db250cm9sbGVyLmlzUnVubmluZ0Fu
aW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1Byb3BlcnR5VHJhbnNmb3JtKTsKKyAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpyZXF1aXJlc0Nv
bXBvc2l0aW5nRm9yVHJhbnNmb3JtKFJlbmRlckxheWVyTW9kZWxPYmplY3QmIHJlbmRlcmVyKSBj
b25zdApAQCAtMzUxNSwxMCArMzQ5OSw3IEBAIGJvb2wgUmVuZGVyTGF5ZXJDb21wb3NpdG9yOjpp
c1J1bm5pbmdUcmFuc2Zvcm1BbmltYXRpb24oUmVuZGVyTGF5ZXJNb2RlbE9iamVjdCYKICAgICAg
ICAgICAgIHJldHVybiBlZmZlY3RzU3RhY2stPmlzQ3VycmVudGx5QWZmZWN0aW5nUHJvcGVydHko
Q1NTUHJvcGVydHlUcmFuc2Zvcm0pOwogICAgIH0KIAotICAgIGlmIChSdW50aW1lRW5hYmxlZEZl
YXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgcmV0dXJuIHJlbmRlcmVyLmxlZ2Fj
eUFuaW1hdGlvbigpLmlzUnVubmluZ0FuaW1hdGlvbk9uUmVuZGVyZXIocmVuZGVyZXIsIENTU1By
b3BlcnR5VHJhbnNmb3JtKTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIC8vIElmIGFuIGVsZW1l
bnQgaGFzIGNvbXBvc2l0ZWQgbmVnYXRpdmUgei1pbmRleCBjaGlsZHJlbiwgdGhvc2UgY2hpbGRy
ZW4gcmVuZGVyIGluIGZyb250IG9mIHRoZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVy
aW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuY3BwCmluZGV4IGNmZWNhZTQ0ZDNkZDg4NmFkNjQ3
NDk3YjlhMTFiODQwZTRkMTVkNmIuLmNhZThmNzJmMzZjZDg1MzJhMjU5OGI0OGI2YmViZjgzNTM4
ZjQ0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJMYXllck1v
ZGVsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJN
b2RlbE9iamVjdC5jcHAKQEAgLTI1MCwyNyArMjUwLDYgQEAgdm9pZCBSZW5kZXJMYXllck1vZGVs
T2JqZWN0Ojpjb21wdXRlUmVwYWludExheW91dFJlY3RzKGNvbnN0IFJlbmRlckxheWVyTW9kZWxP
YmoKICAgICAgICAgc2V0UmVwYWludExheW91dFJlY3RzKFJlcGFpbnRMYXlvdXRSZWN0cygqdGhp
cywgcmVwYWludENvbnRhaW5lciwgZ2VvbWV0cnlNYXApKTsKIH0KIAotYm9vbCBSZW5kZXJMYXll
ck1vZGVsT2JqZWN0OjpzdGFydFRyYW5zaXRpb24oZG91YmxlIHRpbWVPZmZzZXQsIENTU1Byb3Bl
cnR5SUQgcHJvcGVydHlJZCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21TdHlsZSwgY29uc3QgUmVu
ZGVyU3R5bGUqIHRvU3R5bGUpCi17Ci0gICAgaWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNr
aW5nKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gbGF5ZXIoKS0+YmFja2lu
ZygpLT5zdGFydFRyYW5zaXRpb24odGltZU9mZnNldCwgcHJvcGVydHlJZCwgZnJvbVN0eWxlLCB0
b1N0eWxlKTsKLX0KLQotdm9pZCBSZW5kZXJMYXllck1vZGVsT2JqZWN0Ojp0cmFuc2l0aW9uUGF1
c2VkKGRvdWJsZSB0aW1lT2Zmc2V0LCBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SWQpCi17Ci0gICAg
aWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBsYXllcigpLT5iYWNraW5nKCktPnRyYW5zaXRpb25QYXVzZWQodGltZU9mZnNldCwgcHJvcGVy
dHlJZCk7Ci19Ci0KLXZvaWQgUmVuZGVyTGF5ZXJNb2RlbE9iamVjdDo6dHJhbnNpdGlvbkZpbmlz
aGVkKENTU1Byb3BlcnR5SUQgcHJvcGVydHlJZCkKLXsKLSAgICBpZiAoIWxheWVyKCkgfHwgIWxh
eWVyKCktPmJhY2tpbmcoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGxheWVyKCktPmJhY2tpbmco
KS0+dHJhbnNpdGlvbkZpbmlzaGVkKHByb3BlcnR5SWQpOwotfQotCiBib29sIFJlbmRlckxheWVy
TW9kZWxPYmplY3Q6OnN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmlt
YXRpb24mIGFuaW1hdGlvbiwgY29uc3QgS2V5ZnJhbWVMaXN0JiBrZXlmcmFtZXMpCiB7CiAgICAg
aWYgKCFsYXllcigpIHx8ICFsYXllcigpLT5iYWNraW5nKCkpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyTGF5ZXJNb2RlbE9iamVjdC5oIGIvU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlckxheWVyTW9kZWxPYmplY3QuaAppbmRleCBhM2IzZGNhZGNhNmQ1
MDQzNzcxM2RiNzJlYTIyYjYzMWZmZTJkYmE3Li5kOTc4MWNlY2M4OTdjMzU4NjlhNzcyOWJhMWNk
MGU3NmUxOTQxZjBhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
TGF5ZXJNb2RlbE9iamVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJM
YXllck1vZGVsT2JqZWN0LmgKQEAgLTY5LDEwICs2OSw2IEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFJlcGFpbnRMYXlvdXRSZWN0cyhjb25zdCBSZXBhaW50TGF5b3V0UmVjdHMmKTsKICAgICB2b2lk
IGNsZWFyUmVwYWludExheW91dFJlY3RzKCk7CiAKLSAgICBib29sIHN0YXJ0VHJhbnNpdGlvbihk
b3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCwgY29uc3QgUmVuZGVyU3R5bGUqIGZyb21T
dHlsZSwgY29uc3QgUmVuZGVyU3R5bGUqIHRvU3R5bGUpIG92ZXJyaWRlOwotICAgIHZvaWQgdHJh
bnNpdGlvblBhdXNlZChkb3VibGUgdGltZU9mZnNldCwgQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7
Ci0gICAgdm9pZCB0cmFuc2l0aW9uRmluaXNoZWQoQ1NTUHJvcGVydHlJRCkgb3ZlcnJpZGU7Ci0K
ICAgICBib29sIHN0YXJ0QW5pbWF0aW9uKGRvdWJsZSB0aW1lT2Zmc2V0LCBjb25zdCBBbmltYXRp
b24mLCBjb25zdCBLZXlmcmFtZUxpc3QmKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblBh
dXNlZChkb3VibGUgdGltZU9mZnNldCwgY29uc3QgU3RyaW5nJiBuYW1lKSBvdmVycmlkZTsKICAg
ICB2b2lkIGFuaW1hdGlvbkZpbmlzaGVkKGNvbnN0IFN0cmluZyYgbmFtZSkgb3ZlcnJpZGU7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmggYi9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyT2JqZWN0LmgKaW5kZXggYTc5MDRhM2QyMmVhZjgw
NGMyMzc0YTg4OTAxMTBlMWRjNWJkNDMyYS4uMjJmMzJiZTc3NGIwNWE0NGRhNTE4NWVlMWNiZDc5
ZTZjNGVlYzhkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlck9i
amVjdC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJPYmplY3QuaApAQCAt
NDYsNyArNDYsNiBAQCBjbGFzcyBUZXh0U3RyZWFtOwogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBj
bGFzcyBBZmZpbmVUcmFuc2Zvcm07Ci1jbGFzcyBDU1NBbmltYXRpb25Db250cm9sbGVyOwogY2xh
c3MgQ29sb3I7CiBjbGFzcyBDdXJzb3I7CiBjbGFzcyBEb2N1bWVudDsKQEAgLTcwNCw3ICs3MDMs
NiBAQCBwdWJsaWM6CiAgICAgdm9pZCBpbWFnZUNoYW5nZWQoQ2FjaGVkSW1hZ2UqLCBjb25zdCBJ
bnRSZWN0KiA9IG51bGxwdHIpIG92ZXJyaWRlOwogICAgIHZpcnR1YWwgdm9pZCBpbWFnZUNoYW5n
ZWQoV3JhcHBlZEltYWdlUHRyLCBjb25zdCBJbnRSZWN0KiA9IG51bGxwdHIpIHsgfQogCi0gICAg
Q1NTQW5pbWF0aW9uQ29udHJvbGxlciYgbGVnYWN5QW5pbWF0aW9uKCkgY29uc3Q7CiAgICAgRG9j
dW1lbnRUaW1lbGluZSogZG9jdW1lbnRUaW1lbGluZSgpIGNvbnN0OwogCiAgICAgLy8gTWFwIHBv
aW50cyBhbmQgcXVhZHMgdGhyb3VnaCBlbGVtZW50cywgcG90ZW50aWFsbHkgdmlhIDNkIHRyYW5z
Zm9ybXMuIFlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0byBjYWxsIHRoZXNlIGRpcmVjdGx5OyB1c2UK
QEAgLTk3MSwxMSArOTY5LDYgQEAgaW5saW5lIFBhZ2UmIFJlbmRlck9iamVjdDo6cGFnZSgpIGNv
bnN0CiAgICAgcmV0dXJuICpmcmFtZSgpLnBhZ2UoKTsKIH0KIAotaW5saW5lIENTU0FuaW1hdGlv
bkNvbnRyb2xsZXImIFJlbmRlck9iamVjdDo6bGVnYWN5QW5pbWF0aW9uKCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gZnJhbWUoKS5sZWdhY3lBbmltYXRpb24oKTsKLX0KLQogaW5saW5lIERvY3VtZW50
VGltZWxpbmUqIFJlbmRlck9iamVjdDo6ZG9jdW1lbnRUaW1lbGluZSgpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGRvY3VtZW50KCkuZXhpc3RpbmdUaW1lbGluZSgpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3JlbmRlcmluZy91cGRhdGluZy9SZW5kZXJUcmVlVXBkYXRlci5jcHAKaW5kZXgg
ZjM5OTNmMDM4Zjc0ZmQzYTBjODk4NWNmOThlMzFhZjJkZjdlZTA4NC4uNTZhZTBlZTdhMDZkYmQ1
NWUyYThkMTE0M2Y5ZjIwNDA2NWYyZmE4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL3VwZGF0aW5nL1JlbmRlclRyZWVVcGRhdGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvdXBkYXRpbmcvUmVuZGVyVHJlZVVwZGF0ZXIuY3BwCkBAIC0yNyw3ICsyNyw2
IEBACiAjaW5jbHVkZSAiUmVuZGVyVHJlZVVwZGF0ZXIuaCIKIAogI2luY2x1ZGUgIkFYT2JqZWN0
Q2FjaGUuaCIKLSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAi
Q29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2VkVHJlZUl0
ZXJhdG9yLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKQEAgLTU0NSw3ICs1NDQsNiBAQCB2b2lk
IFJlbmRlclRyZWVVcGRhdGVyOjp0ZWFyRG93blJlbmRlcmVycyhFbGVtZW50JiByb290LCBUZWFy
ZG93blR5cGUgdGVhcmRvd25UeQogCiAgICAgYXV0byYgZG9jdW1lbnQgPSByb290LmRvY3VtZW50
KCk7CiAgICAgYXV0byogdGltZWxpbmUgPSBkb2N1bWVudC5leGlzdGluZ1RpbWVsaW5lKCk7Ci0g
ICAgYXV0byYgYW5pbWF0aW9uQ29udHJvbGxlciA9IGRvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFu
aW1hdGlvbigpOyAgICAKIAogICAgIGF1dG8gcG9wID0gWyZdICh1bnNpZ25lZCBkZXB0aCkgewog
ICAgICAgICB3aGlsZSAodGVhcmRvd25TdGFjay5zaXplKCkgPiBkZXB0aCkgewpAQCAtNTY0LDcg
KzU2Miw2IEBAIHZvaWQgUmVuZGVyVHJlZVVwZGF0ZXI6OnRlYXJEb3duUmVuZGVyZXJzKEVsZW1l
bnQmIHJvb3QsIFRlYXJkb3duVHlwZSB0ZWFyZG93blR5CiAgICAgICAgICAgICAgICAgICAgIGVs
c2UgaWYgKHRlYXJkb3duVHlwZSA9PSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlQ2FuY2Vs
aW5nQW5pbWF0aW9ucykKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVsaW5lLT5jYW5jZWxE
ZWNsYXJhdGl2ZUFuaW1hdGlvbnNGb3JFbGVtZW50KGVsZW1lbnQsIFdlYkFuaW1hdGlvbjo6U2ls
ZW50bHk6Ok5vKTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgYW5pbWF0aW9u
Q29udHJvbGxlci5jYW5jZWxBbmltYXRpb25zKGVsZW1lbnQpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgY2FzZSBUZWFyZG93blR5cGU6OlJlbmRlcmVyVXBkYXRlOgogICAg
ICAgICAgICAgICAgIGlmICh0aW1lbGluZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlQWRqdXN0ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rl
ci5jcHAKaW5kZXggOGNlMDc1MmE2MzY2ZDgzMzAwMjYyYjAyZWUwODNlZTU5ZmMxMDczOC4uYTNl
YmY2ZmI2N2YxZmE2MTJiZjA2NDY3YTdkNThkODlhM2ViOTlhNiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvc3R5bGUvU3R5bGVBZGp1c3Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvc3R5
bGUvU3R5bGVBZGp1c3Rlci5jcHAKQEAgLTMwLDcgKzMwLDYgQEAKICNpbmNsdWRlICJjb25maWcu
aCIKICNpbmNsdWRlICJTdHlsZUFkanVzdGVyLmgiCiAKLSNpbmNsdWRlICJBbmltYXRpb25CYXNl
LmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiRE9NV2luZG93Lmgi
CiAjaW5jbHVkZSAiRWxlbWVudC5oIgpAQCAtNTcsNiArNTYsNyBAQAogI2luY2x1ZGUgIlNWR1VS
SVJlZmVyZW5jZS5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiVGV4dC5oIgor
I2luY2x1ZGUgIldlYkFuaW1hdGlvblR5cGVzLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIG5h
bWVzcGFjZSBTdHlsZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRy
ZWVSZXNvbHZlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9zdHlsZS9TdHlsZVRyZWVSZXNvbHZlci5j
cHAKaW5kZXggYjg1Y2Y0NjZjMTczYjg4MDNmNzVlMzc2MjViZjAyNTg2ZWY5MGFlNS4uZjdmZmQ0
NGY5YWE0Yjk3MWRkOWYxYjY2YWM1MmUwMzNlZjY3ZmY1NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvc3R5bGUvU3R5bGVUcmVlUmVzb2x2ZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3N0
eWxlL1N0eWxlVHJlZVJlc29sdmVyLmNwcApAQCAtMjYsNyArMjYsNiBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIlN0eWxlVHJlZVJlc29sdmVyLmgiCiAKLSNpbmNsdWRlICJDU1NB
bmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTRm9udFNlbGVjdG9yLmgiCiAjaW5j
bHVkZSAiQ29tcG9zZWRUcmVlQW5jZXN0b3JJdGVyYXRvci5oIgogI2luY2x1ZGUgIkNvbXBvc2Vk
VHJlZUl0ZXJhdG9yLmgiCkBAIC01NCw2ICs1Myw3IEBACiAjaW5jbHVkZSAiU3R5bGVSZXNvbHZl
ci5oIgogI2luY2x1ZGUgIlN0eWxlU2NvcGUuaCIKICNpbmNsdWRlICJUZXh0LmgiCisjaW5jbHVk
ZSAiV2ViQW5pbWF0aW9uVHlwZXMuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0zMTIs
MjYgKzMxMiwyMyBAQCBFbGVtZW50VXBkYXRlIFRyZWVSZXNvbHZlcjo6Y3JlYXRlQW5pbWF0ZWRF
bGVtZW50VXBkYXRlKHN0ZDo6dW5pcXVlX3B0cjxSZW5kZXJTdAogCiAgICAgT3B0aW9uU2V0PEFu
aW1hdGlvbkltcGFjdD4gYW5pbWF0aW9uSW1wYWN0OwogCi0gICAgLy8gTmV3IGNvZGUgcGF0aCBm
b3IgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucy4KLSAgICBpZiAoUnVudGltZUVu
YWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKCkpIHsKLSAgICAgICAgLy8gRmlyc3QsIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRo
YXQgYW55IG5ldyBDU1MgYW5pbWF0aW9uIG9jY3VyaW5nIG9uIHRoaXMgZWxlbWVudCBoYXMgYSBt
YXRjaGluZyBXZWJBbmltYXRpb24KLSAgICAgICAgLy8gb24gdGhlIGRvY3VtZW50IHRpbWVsaW5l
LiBOb3RlIHRoYXQgd2UgZ2V0IHRpbWVsaW5lKCkgb24gdGhlIERvY3VtZW50IGhlcmUgYmVjYXVz
ZSB3ZSBuZWVkIGEgdGltZWxpbmUgY3JlYXRlZAotICAgICAgICAvLyBpbiBjYXNlIG5vIFdlYiBB
bmltYXRpb25zIGhhdmUgYmVlbiBjcmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KLSAgICAgICAg
aWYgKGVsZW1lbnQuZG9jdW1lbnQoKS5iYWNrRm9yd2FyZENhY2hlU3RhdGUoKSA9PSBEb2N1bWVu
dDo6Tm90SW5CYWNrRm9yd2FyZENhY2hlICYmICFlbGVtZW50LmRvY3VtZW50KCkucmVuZGVyVmll
dygpLT5wcmludGluZygpKSB7Ci0gICAgICAgICAgICBpZiAob2xkU3R5bGUgJiYgKG9sZFN0eWxl
LT5oYXNUcmFuc2l0aW9ucygpIHx8IG5ld1N0eWxlLT5oYXNUcmFuc2l0aW9ucygpKSkKLSAgICAg
ICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JF
bGVtZW50KGVsZW1lbnQsICpvbGRTdHlsZSwgKm5ld1N0eWxlKTsKLQotICAgICAgICAgICAgLy8g
VGhlIG9yZGVyIGluIHdoaWNoIENTUyBUcmFuc2l0aW9ucyBhbmQgQ1NTIEFuaW1hdGlvbnMgYXJl
IHVwZGF0ZWQgbWF0dGVycyBzaW5jZSBDU1MgVHJhbnNpdGlvbnMgZGVmaW5lIHRoZSBhZnRlci1j
aGFuZ2Ugc3R5bGUKLSAgICAgICAgICAgIC8vIHRvIHVzZSBDU1MgQW5pbWF0aW9ucyBhcyBkZWZp
bmVkIGluIHRoZSBwcmV2aW91cyBzdHlsZSBjaGFuZ2UgZXZlbnQuIEFzIHN1Y2gsIHdlIHVwZGF0
ZSBDU1MgQW5pbWF0aW9ucyBhZnRlciBDU1MgVHJhbnNpdGlvbnMKLSAgICAgICAgICAgIC8vIHN1
Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlv
bnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBkdXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBl
dmVudC4KLSAgICAgICAgICAgIGlmICgob2xkU3R5bGUgJiYgb2xkU3R5bGUtPmhhc0FuaW1hdGlv
bnMoKSkgfHwgbmV3U3R5bGUtPmhhc0FuaW1hdGlvbnMoKSkgewotICAgICAgICAgICAgICAgIC8v
IEZJWE1FOiBSZW1vdmUgdGhpcyBoYWNrIGFuZCBwYXNzIHRoZSBwYXJlbnQgc3R5bGUgdmlhIHVw
ZGF0ZUNTU0FuaW1hdGlvbnNGb3JFbGVtZW50LgotICAgICAgICAgICAgICAgIHNjb3BlKCkucmVz
b2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJhbWVzKCZwYXJlbnQoKS5zdHlsZSk7
Ci0KLSAgICAgICAgICAgICAgICBtX2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTQW5pbWF0
aW9uc0ZvckVsZW1lbnQoZWxlbWVudCwgb2xkU3R5bGUsICpuZXdTdHlsZSk7Ci0KLSAgICAgICAg
ICAgICAgICBzY29wZSgpLnJlc29sdmVyLnNldFBhcmVudEVsZW1lbnRTdHlsZUZvcktleWZyYW1l
cyhudWxscHRyKTsKLSAgICAgICAgICAgIH0KKyAgICAvLyBGaXJzdCwgd2UgbmVlZCB0byBtYWtl
IHN1cmUgdGhhdCBhbnkgbmV3IENTUyBhbmltYXRpb24gb2NjdXJpbmcgb24gdGhpcyBlbGVtZW50
IGhhcyBhIG1hdGNoaW5nIFdlYkFuaW1hdGlvbgorICAgIC8vIG9uIHRoZSBkb2N1bWVudCB0aW1l
bGluZS4gTm90ZSB0aGF0IHdlIGdldCB0aW1lbGluZSgpIG9uIHRoZSBEb2N1bWVudCBoZXJlIGJl
Y2F1c2Ugd2UgbmVlZCBhIHRpbWVsaW5lIGNyZWF0ZWQKKyAgICAvLyBpbiBjYXNlIG5vIFdlYiBB
bmltYXRpb25zIGhhdmUgYmVlbiBjcmVhdGVkIHRocm91Z2ggdGhlIEpTIEFQSS4KKyAgICBpZiAo
ZWxlbWVudC5kb2N1bWVudCgpLmJhY2tGb3J3YXJkQ2FjaGVTdGF0ZSgpID09IERvY3VtZW50OjpO
b3RJbkJhY2tGb3J3YXJkQ2FjaGUgJiYgIWVsZW1lbnQuZG9jdW1lbnQoKS5yZW5kZXJWaWV3KCkt
PnByaW50aW5nKCkpIHsKKyAgICAgICAgaWYgKG9sZFN0eWxlICYmIChvbGRTdHlsZS0+aGFzVHJh
bnNpdGlvbnMoKSB8fCBuZXdTdHlsZS0+aGFzVHJhbnNpdGlvbnMoKSkpCisgICAgICAgICAgICBt
X2RvY3VtZW50LnRpbWVsaW5lKCkudXBkYXRlQ1NTVHJhbnNpdGlvbnNGb3JFbGVtZW50KGVsZW1l
bnQsICpvbGRTdHlsZSwgKm5ld1N0eWxlKTsKKworICAgICAgICAvLyBUaGUgb3JkZXIgaW4gd2hp
Y2ggQ1NTIFRyYW5zaXRpb25zIGFuZCBDU1MgQW5pbWF0aW9ucyBhcmUgdXBkYXRlZCBtYXR0ZXJz
IHNpbmNlIENTUyBUcmFuc2l0aW9ucyBkZWZpbmUgdGhlIGFmdGVyLWNoYW5nZSBzdHlsZQorICAg
ICAgICAvLyB0byB1c2UgQ1NTIEFuaW1hdGlvbnMgYXMgZGVmaW5lZCBpbiB0aGUgcHJldmlvdXMg
c3R5bGUgY2hhbmdlIGV2ZW50LiBBcyBzdWNoLCB3ZSB1cGRhdGUgQ1NTIEFuaW1hdGlvbnMgYWZ0
ZXIgQ1NTIFRyYW5zaXRpb25zCisgICAgICAgIC8vIHN1Y2ggdGhhdCB3aGVuIENTUyBUcmFuc2l0
aW9ucyBhcmUgdXBkYXRlZCB0aGUgQ1NTIEFuaW1hdGlvbnMgZGF0YSBpcyB0aGUgc2FtZSBhcyBk
dXJpbmcgdGhlIHByZXZpb3VzIHN0eWxlIGNoYW5nZSBldmVudC4KKyAgICAgICAgaWYgKChvbGRT
dHlsZSAmJiBvbGRTdHlsZS0+aGFzQW5pbWF0aW9ucygpKSB8fCBuZXdTdHlsZS0+aGFzQW5pbWF0
aW9ucygpKSB7CisgICAgICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgaGFjayBhbmQgcGFz
cyB0aGUgcGFyZW50IHN0eWxlIHZpYSB1cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudC4KKyAg
ICAgICAgICAgIHNjb3BlKCkucmVzb2x2ZXIuc2V0UGFyZW50RWxlbWVudFN0eWxlRm9yS2V5ZnJh
bWVzKCZwYXJlbnQoKS5zdHlsZSk7CisKKyAgICAgICAgICAgIG1fZG9jdW1lbnQudGltZWxpbmUo
KS51cGRhdGVDU1NBbmltYXRpb25zRm9yRWxlbWVudChlbGVtZW50LCBvbGRTdHlsZSwgKm5ld1N0
eWxlKTsKKworICAgICAgICAgICAgc2NvcGUoKS5yZXNvbHZlci5zZXRQYXJlbnRFbGVtZW50U3R5
bGVGb3JLZXlmcmFtZXMobnVsbHB0cik7CiAgICAgICAgIH0KICAgICB9CiAKQEAgLTM0NywxNyAr
MzQ0LDYgQEAgRWxlbWVudFVwZGF0ZSBUcmVlUmVzb2x2ZXI6OmNyZWF0ZUFuaW1hdGVkRWxlbWVu
dFVwZGF0ZShzdGQ6OnVuaXF1ZV9wdHI8UmVuZGVyU3QKICAgICB9IGVsc2UKICAgICAgICAgZWxl
bWVudC5zZXRMYXN0U3R5bGVDaGFuZ2VFdmVudFN0eWxlKG51bGxwdHIpOwogCi0gICAgLy8gT2xk
IGNvZGUgcGF0aCBmb3IgQ1NTIEFuaW1hdGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucy4KLSAgICBp
ZiAoIVJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKSB7Ci0gICAgICAgIGF1dG8mIGFuaW1hdGlvbkNvbnRy
b2xsZXIgPSBtX2RvY3VtZW50LmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpOwotCi0gICAgICAg
IGF1dG8gYW5pbWF0aW9uVXBkYXRlID0gYW5pbWF0aW9uQ29udHJvbGxlci51cGRhdGVBbmltYXRp
b25zKGVsZW1lbnQsICpuZXdTdHlsZSwgb2xkU3R5bGUpOwotICAgICAgICBhbmltYXRpb25JbXBh
Y3QuYWRkKGFuaW1hdGlvblVwZGF0ZS5pbXBhY3QpOwotCi0gICAgICAgIGlmIChhbmltYXRpb25V
cGRhdGUuc3R5bGUpCi0gICAgICAgICAgICBuZXdTdHlsZSA9IFdURk1vdmUoYW5pbWF0aW9uVXBk
YXRlLnN0eWxlKTsKLSAgICB9Ci0KICAgICBpZiAoYW5pbWF0aW9uSW1wYWN0KQogICAgICAgICBB
ZGp1c3Rlcjo6YWRqdXN0QW5pbWF0ZWRTdHlsZSgqbmV3U3R5bGUsIHBhcmVudEJveFN0eWxlKCks
IGFuaW1hdGlvbkltcGFjdCk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxTZXR0aW5ncy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0
dGluZ3MuY3BwCmluZGV4IGIzNzZiZjZjMTc1ZDU0NTlhNGUwYjQ2M2NhNDhiOWJmMGNhNjY3OTku
LjZhNWI2ZjRhZTQyMDI5Y2U2NjA4YzA0YmM5MjY0ZmQwMzZmZWQ4ZDAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmNwcApAQCAtMTAyOSwxMSArMTAyOSw2IEBA
IHZvaWQgSW50ZXJuYWxTZXR0aW5nczo6c2V0Rm9yY2VkU3VwcG9ydHNIaWdoRHluYW1pY1Jhbmdl
VmFsdWUoSW50ZXJuYWxTZXR0aW5nczo6CiAgICAgc2V0dGluZ3MoKS5zZXRGb3JjZWRTdXBwb3J0
c0hpZ2hEeW5hbWljUmFuZ2VWYWx1ZShpbnRlcm5hbFNldHRpbmdzVG9TZXR0aW5nc1ZhbHVlKHZh
bHVlKSk7CiB9CiAKLWJvb2wgSW50ZXJuYWxTZXR0aW5nczo6d2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCgpCi17Ci0gICAgcmV0dXJuIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6OnNo
YXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCgpOwotfQot
CiB2b2lkIEludGVybmFsU2V0dGluZ3M6OnNldFNob3VsZERlYWN0aXZhdGVBdWRpb1Nlc3Npb24o
Ym9vbCBzaG91bGQpCiB7CiAjaWYgRU5BQkxFKFZJREVPKSB8fCBFTkFCTEUoV0VCX0FVRElPKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmggYi9T
b3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGluZ3MuaAppbmRleCBiNTI3ZTE1NWM5
MGQ0NjY4ZTMxMjRjNWU5YjQ4YmZlMGQwZTM5NTcyLi5mNjVhNzQxMzQ5ZmZjYTI5YjE5NTVjNjc0
YWE0ODMzZDcyMzY1NzVhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFsU2V0dGluZ3MuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFsU2V0dGlu
Z3MuaApAQCAtMTM1LDggKzEzNSw2IEBAIHB1YmxpYzoKICAgICBzdGF0aWMgdm9pZCBzZXRQaWN0
dXJlSW5QaWN0dXJlQVBJRW5hYmxlZChib29sKTsKICAgICBzdGF0aWMgdm9pZCBzZXRGZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQoYm9vbCk7CiAKLSAgICBzdGF0aWMgYm9vbCB3ZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci0KICAgICB2b2lkIHNldFNob3VsZERlYWN0aXZhdGVB
dWRpb1Nlc3Npb24oYm9vbCk7CiAgICAgCiAgICAgdm9pZCBzZXRTdG9yYWdlQWNjZXNzQVBJUGVy
UGFnZVNjb3BlRW5hYmxlZChib29sKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
U2V0dGluZ3MuaWRsCmluZGV4IDQxYTI3ZDYyZTI3NjQ2NGFhZTVlMTI4YjhlOWJlMWVjZjkxZmVk
ZmYuLjVjYzYyZjMyNWEyZjY4OTYwMGUzYmY4OGNlYTA1YzY1NmZhZTRlZjAgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxTZXR0aW5ncy5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbFNldHRpbmdzLmlkbApAQCAtMTE3LDggKzExNyw2IEBA
IGVudW0gRm9udExvYWRUaW1pbmdPdmVycmlkZSB7ICJCbG9jayIsICJTd2FwIiwgIkZhaWx1cmUi
IH07CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQgc2V0U2hvdWxkTWFuYWdlQXVk
aW9TZXNzaW9uQ2F0ZWdvcnkoYm9vbGVhbiBzaG91bGQpOwogICAgIFtNYXlUaHJvd0V4Y2VwdGlv
bl0gdW5kZWZpbmVkIHNldEN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZChib29sZWFuIGVuYWJs
ZWQpOwogCi0gICAgW0VuYWJsZWRBdFJ1bnRpbWU9V2ViQW5pbWF0aW9uc10gYm9vbGVhbiB3ZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci0KICAgICB1bmRlZmluZWQgc2V0U2hv
dWxkRGVhY3RpdmF0ZUF1ZGlvU2Vzc2lvbihib29sZWFuIHNob3VsZERlYWN0aXZhdGUpOwogICAg
IAogICAgIHVuZGVmaW5lZCBzZXRTdG9yYWdlQWNjZXNzQVBJUGVyUGFnZVNjb3BlRW5hYmxlZChi
b29sZWFuIGVuYWJsZWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDFk
MTRkNzBlZDhmMTJhMWU2ZDNkMGYyNTVjYjFiYTBmNTA3ODNlOGMuLjdjNGRmMDNlNWUxODRiNWI1
OWM5MGQ0NmY2NmVjZTEwNjhkNmZiNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5j
cHAKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJCYWNrRm9yd2FyZENhY2hlLmgiCiAjaW5j
bHVkZSAiQmFja0ZvcndhcmRDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQml0bWFwSW1hZ2UuaCIK
LSNpbmNsdWRlICJDU1NBbmltYXRpb25Db250cm9sbGVyLmgiCiAjaW5jbHVkZSAiQ1NTS2V5ZnJh
bWVzUnVsZS5oIgogI2luY2x1ZGUgIkNTU01lZGlhUnVsZS5oIgogI2luY2x1ZGUgIkNTU1Byb3Bl
cnR5UGFyc2VyLmgiCkBAIC0xMDY5LDkgKzEwNjgsNyBAQCBib29sIEludGVybmFsczo6YW5pbWF0
aW9uV2l0aElkRXhpc3RzKGNvbnN0IFN0cmluZyYgaWQpIGNvbnN0CiAKIHVuc2lnbmVkIEludGVy
bmFsczo6bnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKCkgY29uc3QKIHsKLSAgICBpZiAoUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1l
bGluZSgpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICByZXR1cm4g
ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1l
KCktPmRvY3VtZW50KCkpOworICAgIHJldHVybiBmcmFtZSgpLT5kb2N1bWVudCgpLT50aW1lbGlu
ZSgpLm51bWJlck9mQWN0aXZlQW5pbWF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogRXhjZXB0aW9u
T3I8Ym9vbD4gSW50ZXJuYWxzOjphbmltYXRpb25zQXJlU3VzcGVuZGVkKCkgY29uc3QKQEAgLTEw
ODAsOSArMTA3Nyw3IEBAIEV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6YW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZCgpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1l
KCkpCiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAot
ICAgIGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIGRvY3VtZW50LT5l
bnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuYW5pbWF0aW9uc0FyZVN1c3BlbmRlZCgpOwotICAg
IHJldHVybiBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuYW5pbWF0aW9uc0Fy
ZVN1c3BlbmRlZEZvckRvY3VtZW50KGRvY3VtZW50KTsKKyAgICByZXR1cm4gZG9jdW1lbnQtPmVu
c3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5hbmltYXRpb25zQXJlU3VzcGVuZGVkKCk7CiB9CiAK
IGRvdWJsZSBJbnRlcm5hbHM6OmFuaW1hdGlvbnNJbnRlcnZhbCgpIGNvbnN0CkBAIC0xMDkxLDE1
ICsxMDg2LDkgQEAgZG91YmxlIEludGVybmFsczo6YW5pbWF0aW9uc0ludGVydmFsKCkgY29uc3QK
ICAgICBpZiAoIWRvY3VtZW50KQogICAgICAgICByZXR1cm4gSU5GSU5JVFk7CiAKLSAgICBpZiAo
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAgICAgICAgaWYgKGF1dG8gdGltZWxpbmUgPSBkb2N1
bWVudC0+ZXhpc3RpbmdUaW1lbGluZSgpKQotICAgICAgICAgICAgcmV0dXJuIHRpbWVsaW5lLT5h
bmltYXRpb25JbnRlcnZhbCgpLnNlY29uZHMoKTsKLSAgICAgICAgcmV0dXJuIElORklOSVRZOwot
ICAgIH0KLQotICAgIGlmICghZG9jdW1lbnQtPmZyYW1lKCkpCi0gICAgICAgIHJldHVybiBJTkZJ
TklUWTsKLSAgICByZXR1cm4gZG9jdW1lbnQtPmZyYW1lKCktPmxlZ2FjeUFuaW1hdGlvbigpLmFu
aW1hdGlvbkludGVydmFsKCkudmFsdWUoKTsKKyAgICBpZiAoYXV0byB0aW1lbGluZSA9IGRvY3Vt
ZW50LT5leGlzdGluZ1RpbWVsaW5lKCkpCisgICAgICAgIHJldHVybiB0aW1lbGluZS0+YW5pbWF0
aW9uSW50ZXJ2YWwoKS5zZWNvbmRzKCk7CisgICAgcmV0dXJuIElORklOSVRZOwogfQogCiBFeGNl
cHRpb25Pcjx2b2lkPiBJbnRlcm5hbHM6OnN1c3BlbmRBbmltYXRpb25zKCkgY29uc3QKQEAgLTEx
MDgsMTkgKzEwOTcsMTAgQEAgRXhjZXB0aW9uT3I8dm9pZD4gSW50ZXJuYWxzOjpzdXNwZW5kQW5p
bWF0aW9ucygpIGNvbnN0CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkp
CiAgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IgfTsKIAotICAg
IGlmIChSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkgewotICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGlt
ZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIGZvciAoRnJh
bWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVl
KCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQg
PSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAgICBkb2N1bWVudC0+ZW5zdXJlVGlt
ZWxpbmVzQ29udHJvbGxlcigpLnN1c3BlbmRBbmltYXRpb25zKCk7Ci0gICAgICAgIH0KLSAgICB9
IGVsc2UgewotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkuc3Vz
cGVuZEFuaW1hdGlvbnNGb3JEb2N1bWVudChkb2N1bWVudCk7Ci0KLSAgICAgICAgZm9yIChGcmFt
ZSogZnJhbWUgPSBkb2N1bWVudC0+ZnJhbWUoKTsgZnJhbWU7IGZyYW1lID0gZnJhbWUtPnRyZWUo
KS50cmF2ZXJzZU5leHQoKSkgewotICAgICAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9
IGZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICAgICAgICAgIGZyYW1lLT5sZWdhY3lBbmltYXRp
b24oKS5zdXNwZW5kQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRvY3VtZW50KTsKLSAgICAgICAgfQor
ICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlv
bnMoKTsKKyAgICBmb3IgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5mcmFtZSgpOyBmcmFtZTsg
ZnJhbWUgPSBmcmFtZS0+dHJlZSgpLnRyYXZlcnNlTmV4dCgpKSB7CisgICAgICAgIGlmIChEb2N1
bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKKyAgICAgICAgICAgIGRvY3VtZW50
LT5lbnN1cmVUaW1lbGluZXNDb250cm9sbGVyKCkuc3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICB9
CiAKICAgICByZXR1cm4geyB9OwpAQCAtMTEzMiw3MyArMTExMiwxNyBAQCBFeGNlcHRpb25Pcjx2
b2lkPiBJbnRlcm5hbHM6OnJlc3VtZUFuaW1hdGlvbnMoKSBjb25zdAogICAgIGlmICghZG9jdW1l
bnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpKQogICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZEFjY2Vzc0Vycm9yIH07CiAKLSAgICBpZiAoUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hh
cmVkRmVhdHVyZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpIHsKLSAg
ICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVBbmltYXRp
b25zKCk7Ci0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZy
YW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAg
IGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAg
ICAgICBkb2N1bWVudC0+ZW5zdXJlVGltZWxpbmVzQ29udHJvbGxlcigpLnJlc3VtZUFuaW1hdGlv
bnMoKTsKLSAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIGRvY3VtZW50LT5mcmFtZSgp
LT5sZWdhY3lBbmltYXRpb24oKS5yZXN1bWVBbmltYXRpb25zRm9yRG9jdW1lbnQoZG9jdW1lbnQp
OwotCi0gICAgICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1lbnQtPmZyYW1lKCk7IGZyYW1l
OyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkpIHsKLSAgICAgICAgICAgIGlm
IChEb2N1bWVudCogZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKSkKLSAgICAgICAgICAgICAg
ICBmcmFtZS0+bGVnYWN5QW5pbWF0aW9uKCkucmVzdW1lQW5pbWF0aW9uc0ZvckRvY3VtZW50KGRv
Y3VtZW50KTsKLSAgICAgICAgfQorICAgIGRvY3VtZW50LT5lbnN1cmVUaW1lbGluZXNDb250cm9s
bGVyKCkucmVzdW1lQW5pbWF0aW9ucygpOworICAgIGZvciAoRnJhbWUqIGZyYW1lID0gZG9jdW1l
bnQtPmZyYW1lKCk7IGZyYW1lOyBmcmFtZSA9IGZyYW1lLT50cmVlKCkudHJhdmVyc2VOZXh0KCkp
IHsKKyAgICAgICAgaWYgKERvY3VtZW50KiBkb2N1bWVudCA9IGZyYW1lLT5kb2N1bWVudCgpKQor
ICAgICAgICAgICAgZG9jdW1lbnQtPmVuc3VyZVRpbWVsaW5lc0NvbnRyb2xsZXIoKS5yZXN1bWVB
bmltYXRpb25zKCk7CiAgICAgfQogCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotRXhjZXB0aW9uT3I8
Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJp
bmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQpCi17
Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkQWNjZXNzRXJyb3IgfTsKLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5QW5pbWF0aW9uKCku
cGF1c2VBbmltYXRpb25BdFRpbWUoZWxlbWVudCwgQXRvbVN0cmluZyhhbmltYXRpb25OYW1lKSwg
cGF1c2VUaW1lKTsKLX0KLQotRXhjZXB0aW9uT3I8Ym9vbD4gSW50ZXJuYWxzOjpwYXVzZUFuaW1h
dGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRv
dWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQp
Ci17Ci0gICAgaWYgKHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IgfTsKLQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBw
c2V1ZG9JZCAhPSAiYWZ0ZXIiKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFj
Y2Vzc0Vycm9yIH07Ci0KLSAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRv
SWQgPT0gImJlZm9yZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQu
YWZ0ZXJQc2V1ZG9FbGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICBy
ZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICByZXR1cm4gZnJh
bWUoKS0+bGVnYWN5QW5pbWF0aW9uKCkucGF1c2VBbmltYXRpb25BdFRpbWUoKnBzZXVkb0VsZW1l
bnQsIEF0b21TdHJpbmcoYW5pbWF0aW9uTmFtZSksIHBhdXNlVGltZSk7Ci19Ci0KLUV4Y2VwdGlv
bk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lLCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiBlbGVtZW50
KQotewotICAgIGlmIChwYXVzZVRpbWUgPCAwKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsg
SW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0gICAgcmV0dXJuIGZyYW1lKCktPmxlZ2FjeUFuaW1hdGlv
bigpLnBhdXNlVHJhbnNpdGlvbkF0VGltZShlbGVtZW50LCBwcm9wZXJ0eU5hbWUsIHBhdXNlVGlt
ZSk7Ci19Ci0KLUV4Y2VwdGlvbk9yPGJvb2w+IEludGVybmFsczo6cGF1c2VUcmFuc2l0aW9uQXRU
aW1lT25Qc2V1ZG9FbGVtZW50KGNvbnN0IFN0cmluZyYgcHJvcGVydHksIGRvdWJsZSBwYXVzZVRp
bWUsIEVsZW1lbnQmIGVsZW1lbnQsIGNvbnN0IFN0cmluZyYgcHNldWRvSWQpCi17Ci0gICAgaWYg
KHBhdXNlVGltZSA8IDApCi0gICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNz
RXJyb3IgfTsKLQotICAgIGlmIChwc2V1ZG9JZCAhPSAiYmVmb3JlIiAmJiBwc2V1ZG9JZCAhPSAi
YWZ0ZXIiKQotICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07
Ci0KLSAgICBQc2V1ZG9FbGVtZW50KiBwc2V1ZG9FbGVtZW50ID0gcHNldWRvSWQgPT0gImJlZm9y
ZSIgPyBlbGVtZW50LmJlZm9yZVBzZXVkb0VsZW1lbnQoKSA6IGVsZW1lbnQuYWZ0ZXJQc2V1ZG9F
bGVtZW50KCk7Ci0gICAgaWYgKCFwc2V1ZG9FbGVtZW50KQotICAgICAgICByZXR1cm4gRXhjZXB0
aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9yIH07Ci0KLSAgICByZXR1cm4gZnJhbWUoKS0+bGVnYWN5
QW5pbWF0aW9uKCkucGF1c2VUcmFuc2l0aW9uQXRUaW1lKCpwc2V1ZG9FbGVtZW50LCBwcm9wZXJ0
eSwgcGF1c2VUaW1lKTsKLX0KLQogVmVjdG9yPEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRp
b24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRBbmltYXRpb25zRm9yRWxlbWVudChFbGVtZW50JiBl
bGVtZW50KQogewotICAgIGlmICghUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVy
ZXMoKS53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biB7IH07Ci0KICAgICBWZWN0b3I8SW50ZXJuYWxzOjpBY2NlbGVyYXRlZEFuaW1hdGlvbj4gYW5p
bWF0aW9uczsKICAgICBmb3IgKGNvbnN0IGF1dG8mIGFuaW1hdGlvbkFzUGFpciA6IGVsZW1lbnQu
ZG9jdW1lbnQoKS50aW1lbGluZSgpLmFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVsZW1lbnQoZWxl
bWVudCkpCiAgICAgICAgIGFuaW1hdGlvbnMuYXBwZW5kKHsgYW5pbWF0aW9uQXNQYWlyLmZpcnN0
LCBhbmltYXRpb25Bc1BhaXIuc2Vjb25kIH0pOwpAQCAtMTIwNyw5ICsxMTMxLDcgQEAgVmVjdG9y
PEludGVybmFsczo6QWNjZWxlcmF0ZWRBbmltYXRpb24+IEludGVybmFsczo6YWNjZWxlcmF0ZWRB
bmltYXRpb25zRm9yRWxlbWUKIAogdW5zaWduZWQgSW50ZXJuYWxzOjpudW1iZXJPZkFuaW1hdGlv
blRpbWVsaW5lSW52YWxpZGF0aW9ucygpIGNvbnN0CiB7Ci0gICAgaWYgKFJ1bnRpbWVFbmFibGVk
RmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkud2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZCgpKQotICAgICAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5u
dW1iZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKLSAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gZnJhbWUoKS0+ZG9jdW1lbnQoKS0+dGltZWxpbmUoKS5udW1i
ZXJPZkFuaW1hdGlvblRpbWVsaW5lSW52YWxpZGF0aW9uc0ZvclRlc3RpbmcoKTsKIH0KIAogZG91
YmxlIEludGVybmFsczo6dGltZVRvTmV4dEFuaW1hdGlvblRpY2soV2ViQW5pbWF0aW9uJiBhbmlt
YXRpb24pIGNvbnN0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFs
cy5oIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaAppbmRleCAzNzExNzZmNmMy
YTNjNzg3ZTAzNmY1MjI2NjI1ODM1ZmRjMTNlZThhLi5kMTdjZGVkMWQyMTllNjUzOGNjMTQ4MTMz
YzU2ZWZiMTJhYWM1YWUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmgKQEAgLTIzMywx
NCArMjMzLDggQEAgcHVibGljOgogICAgIEV4Y2VwdGlvbk9yPGJvb2w+IGFuaW1hdGlvbnNBcmVT
dXNwZW5kZWQoKSBjb25zdDsKICAgICBFeGNlcHRpb25Pcjx2b2lkPiBzdXNwZW5kQW5pbWF0aW9u
cygpIGNvbnN0OwogICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHJlc3VtZUFuaW1hdGlvbnMoKSBjb25z
dDsKLSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uRWxlbWVudChj
b25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQmKTsK
LSAgICBFeGNlcHRpb25Pcjxib29sPiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVu
dChjb25zdCBTdHJpbmcmIGFuaW1hdGlvbk5hbWUsIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQm
LCBjb25zdCBTdHJpbmcmIHBzZXVkb0lkKTsKICAgICBkb3VibGUgYW5pbWF0aW9uc0ludGVydmFs
KCkgY29uc3Q7CiAKLSAgICAvLyBDU1MgVHJhbnNpdGlvbiB0ZXN0aW5nLgotICAgIEV4Y2VwdGlv
bk9yPGJvb2w+IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uRWxlbWVudChjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgZG91YmxlIHBhdXNlVGltZSwgRWxlbWVudCYpOwotICAgIEV4Y2VwdGlvbk9y
PGJvb2w+IHBhdXNlVHJhbnNpdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChjb25zdCBTdHJpbmcm
IHByb3BlcnR5LCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50JiwgY29uc3QgU3RyaW5nJiBwc2V1
ZG9JZCk7Ci0KICAgICAvLyBXZWIgQW5pbWF0aW9ucyB0ZXN0aW5nLgogICAgIHN0cnVjdCBBY2Nl
bGVyYXRlZEFuaW1hdGlvbiB7CiAgICAgICAgIFN0cmluZyBwcm9wZXJ0eTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbCBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmlkbAppbmRleCA4ZDFhZDQyZmQ1YTdiNTAwNGNiMDhmYTY2ZWVmNzRh
YmM0NjQ4ZDQzLi5mZDY3ZTcxMjJhY2Q0MTZiY2RkNzA0ZWE1ZDAwMzU1ZjljNjhiMDQyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwKKysrIGIvU291cmNl
L1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuaWRsCkBAIC0zMTUsMTQgKzMxNSw4IEBAIGVudW0g
Q29udGVudFNpemVDYXRlZ29yeSB7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSB1bmRlZmluZWQg
c3VzcGVuZEFuaW1hdGlvbnMoKTsKICAgICBbTWF5VGhyb3dFeGNlcHRpb25dIHVuZGVmaW5lZCBy
ZXN1bWVBbmltYXRpb25zKCk7CiAgICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIGFuaW1h
dGlvbnNBcmVTdXNwZW5kZWQoKTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJvb2xlYW4gcGF1
c2VBbmltYXRpb25BdFRpbWVPbkVsZW1lbnQoRE9NU3RyaW5nIGFuaW1hdGlvbk5hbWUsIHVucmVz
dHJpY3RlZCBkb3VibGUgcGF1c2VUaW1lLCBFbGVtZW50IGVsZW1lbnQpOwotICAgIFtNYXlUaHJv
d0V4Y2VwdGlvbl0gYm9vbGVhbiBwYXVzZUFuaW1hdGlvbkF0VGltZU9uUHNldWRvRWxlbWVudChE
T01TdHJpbmcgYW5pbWF0aW9uTmFtZSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVs
ZW1lbnQgZWxlbWVudCwgRE9NU3RyaW5nIHBzZXVkb0lkKTsKICAgICByZWFkb25seSBhdHRyaWJ1
dGUgZG91YmxlIGFuaW1hdGlvbnNJbnRlcnZhbDsKIAotICAgIC8vIENTUyBUcmFuc2l0aW9uIHRl
c3RpbmcuCi0gICAgW01heVRocm93RXhjZXB0aW9uXSBib29sZWFuIHBhdXNlVHJhbnNpdGlvbkF0
VGltZU9uRWxlbWVudChET01TdHJpbmcgcHJvcGVydHlOYW1lLCB1bnJlc3RyaWN0ZWQgZG91Ymxl
IHBhdXNlVGltZSwgRWxlbWVudCBlbGVtZW50KTsKLSAgICBbTWF5VGhyb3dFeGNlcHRpb25dIGJv
b2xlYW4gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25Qc2V1ZG9FbGVtZW50KERPTVN0cmluZyBwcm9w
ZXJ0eSwgdW5yZXN0cmljdGVkIGRvdWJsZSBwYXVzZVRpbWUsIEVsZW1lbnQgZWxlbWVudCwgRE9N
U3RyaW5nIHBzZXVkb0lkKTsKLQogICAgIC8vIFdlYiBBbmltYXRpb25zIHRlc3RpbmcuCiAgICAg
c2VxdWVuY2U8QWNjZWxlcmF0ZWRBbmltYXRpb24+IGFjY2VsZXJhdGVkQW5pbWF0aW9uc0ZvckVs
ZW1lbnQoRWxlbWVudCBlbGVtZW50KTsKICAgICB1bnNpZ25lZCBsb25nIG51bWJlck9mQW5pbWF0
aW9uVGltZWxpbmVJbnZhbGlkYXRpb25zKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1No
YXJlZC9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dlYktpdC9TaGFy
ZWQvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCBmMzU2YWUyNzBhMTkyM2Jj
NzMyNDU4YzZhMWVlNTU5MWVmOTljNDdjLi5lMDVmMzBlMWI3OTYyNTNlZGQ4ZDMzMTQ4MmIzZjlk
OTMxNDA2Y2NlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1NoYXJlZC9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sCisrKyBiL1NvdXJjZS9XZWJLaXQvU2hhcmVkL1dlYlByZWZlcmVu
Y2VzRXhwZXJpbWVudGFsLnlhbWwKQEAgLTI4MCwyMiArMjgwLDYgQEAgQ1NTT01WaWV3U21vb3Ro
U2Nyb2xsaW5nRW5hYmxlZDoKICAgaHVtYW5SZWFkYWJsZURlc2NyaXB0aW9uOiAiRW5hYmxlIERP
TSBBUEkgYW5kIENTUyBwcm9wZXJ0eSBmb3IgJ3Ntb290aCcgc2Nyb2xsIGJlaGF2aW9yIgogICBj
YXRlZ29yeTogZXhwZXJpbWVudGFsCiAKLVdlYkFuaW1hdGlvbnNFbmFibGVkOgotICB0eXBlOiBi
b29sCi0gIGRlZmF1bHRWYWx1ZTogdHJ1ZQotICBodW1hblJlYWRhYmxlTmFtZTogIldlYiBBbmlt
YXRpb25zIgotICBodW1hblJlYWRhYmxlRGVzY3JpcHRpb246ICJXZWIgQW5pbWF0aW9ucyBwcm90
b3R5cGUiCi0gIGNhdGVnb3J5OiBleHBlcmltZW50YWwKLSAgd2ViY29yZUJpbmRpbmc6IFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXMKLQotV2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZDoK
LSAgdHlwZTogYm9vbAotICBkZWZhdWx0VmFsdWU6IHRydWUKLSAgaHVtYW5SZWFkYWJsZU5hbWU6
ICJDU1MgQW5pbWF0aW9ucyB2aWEgV2ViIEFuaW1hdGlvbnMiCi0gIGh1bWFuUmVhZGFibGVEZXNj
cmlwdGlvbjogIkV4cG9zZSBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5zaXRpb25zIHRocm91
Z2ggZ2V0QW5pbWF0aW9ucygpIgotICBjYXRlZ29yeTogZXhwZXJpbWVudGFsCi0gIHdlYmNvcmVC
aW5kaW5nOiBSdW50aW1lRW5hYmxlZEZlYXR1cmVzCi0KIFdlYkFuaW1hdGlvbnNDb21wb3NpdGVP
cGVyYXRpb25zRW5hYmxlZDoKICAgdHlwZTogYm9vbAogICBkZWZhdWx0VmFsdWU6IERFRkFVTFRf
RVhQRVJJTUVOVEFMX0ZFQVRVUkVTX0VOQUJMRUQKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL0FQSS9DL1dLUHJlZmVyZW5jZXMuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5jcHAKaW5kZXggZjRjNTViYmM1N2Y5OTAxM2IzNTY0ODhk
OWI4M2M5NWFiNTEwYjYxZC4uM2JmMzBlODQ4N2I5ODM1ZGY3OWI0YmJkODg4ZjhkMzI5ZjNmYWM3
NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNl
cy5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJlbmNlcy5j
cHAKQEAgLTQ4NiwyNiArNDg2LDYgQEAgYm9vbCBXS1ByZWZlcmVuY2VzR2V0QWNjZWxlcmF0ZWQy
RENhbnZhc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZikKICAgICByZXR1
cm4gdG9JbXBsKHByZWZlcmVuY2VzUmVmKS0+YWNjZWxlcmF0ZWQyZENhbnZhc0VuYWJsZWQoKTsK
IH0KIAotdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJl
bmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9vbCBmbGFnKQotewotICAgIHRvSW1wbChwcmVmZXJl
bmNlc1JlZiktPnNldFdlYkFuaW1hdGlvbnNFbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJl
ZmVyZW5jZXNHZXRXZWJBbmltYXRpb25zRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmIHByZWZlcmVu
Y2VzUmVmKQotewotICAgIHJldHVybiB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT53ZWJBbmltYXRp
b25zRW5hYmxlZCgpOwotfQotCi12b2lkIFdLUHJlZmVyZW5jZXNTZXRXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5jZXNSZWYsIGJvb2wg
ZmxhZykKLXsKLSAgICB0b0ltcGwocHJlZmVyZW5jZXNSZWYpLT5zZXRXZWJBbmltYXRpb25zQ1NT
SW50ZWdyYXRpb25FbmFibGVkKGZsYWcpOwotfQotCi1ib29sIFdLUHJlZmVyZW5jZXNHZXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYgcHJlZmVyZW5j
ZXNSZWYpCi17Ci0gICAgcmV0dXJuIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPndlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKTsKLX0KLQogdm9pZCBXS1ByZWZlcmVuY2VzU2V0TmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3MoV0tQcmVmZXJlbmNlc1JlZiBwcmVmZXJlbmNlc1JlZiwgYm9v
bCBmbGFnKQogewogICAgIHRvSW1wbChwcmVmZXJlbmNlc1JlZiktPnNldE5lZWRzU2l0ZVNwZWNp
ZmljUXVpcmtzKGZsYWcpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0MvV0tQcmVmZXJlbmNlc1JlZlByaXZhdGUuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQ
SS9DL1dLUHJlZmVyZW5jZXNSZWZQcml2YXRlLmgKaW5kZXggYWY3ZGQxZDVjOGUzNGM4ZjI3Y2Qw
OTQ3NDRiMDFmYzM0YjliNjRmZS4uYTdiMWQ1NWJiMTU2ZWZhNzU3NDI3YzFhMjgzMmZlMmEzOTdm
NGI2MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0MvV0tQcmVmZXJl
bmNlc1JlZlByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQy9XS1By
ZWZlcmVuY2VzUmVmUHJpdmF0ZS5oCkBAIC05NywxNCArOTcsNiBAQCBXS19FWFBPUlQgYm9vbCBX
S1ByZWZlcmVuY2VzR2V0V2ViR0xFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogV0tfRVhQT1JU
IHZvaWQgV0tQcmVmZXJlbmNlc1NldEFjY2VsZXJhdGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVy
ZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldEFjY2VsZXJh
dGVkMkRDYW52YXNFbmFibGVkKFdLUHJlZmVyZW5jZXNSZWYpOwogCi0vLyBEZWZhdWx0cyB0byBm
YWxzZQotV0tfRVhQT1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldFdlYkFuaW1hdGlvbnNFbmFibGVk
KFdLUHJlZmVyZW5jZXNSZWYsIGJvb2wgZmxhZyk7Ci1XS19FWFBPUlQgYm9vbCBXS1ByZWZlcmVu
Y2VzR2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KLS8vIERlZmF1
bHRzIHRvIGZhbHNlCi1XS19FWFBPUlQgdm9pZCBXS1ByZWZlcmVuY2VzU2V0V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZChXS1ByZWZlcmVuY2VzUmVmLCBib29sIGZsYWcpOwotV0tf
RVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVu
YWJsZWQoV0tQcmVmZXJlbmNlc1JlZik7Ci0KIC8vIERlZmF1bHRzIHRvIGZhbHNlLgogV0tfRVhQ
T1JUIHZvaWQgV0tQcmVmZXJlbmNlc1NldE5lZWRzU2l0ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVy
ZW5jZXNSZWYsIGJvb2wpOwogV0tfRVhQT1JUIGJvb2wgV0tQcmVmZXJlbmNlc0dldE5lZWRzU2l0
ZVNwZWNpZmljUXVpcmtzKFdLUHJlZmVyZW5jZXNSZWYpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJlbmNlcy5tbQppbmRleCAxM2E4ODEwYzNhZjRi
NzNmZTJlMGIyYmJkZDdlOGI1NzY4NjEyZGE2Li5kYWRhOTEzM2ZjZDk3M2JmNWZiNjYwMDJiNTM5
MTk5NmUyMDllY2EwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlcy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlcy5tbQpAQCAtMTQzMCwxNiArMTQzMCw2IEBAIC0gKEJPT0wpX3ZpZGVv
UXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZAogICAgIHJldHVybiBfcHJl
ZmVyZW5jZXMtPnZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0aW5nRW5hYmxlZCgp
OwogfQogCi0tICh2b2lkKV9zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkOihC
T09MKWVuYWJsZWQKLXsKLSAgICBfcHJlZmVyZW5jZXMtPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQoZW5hYmxlZCk7Ci19Ci0KLS0gKEJPT0wpX3dlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1cm4gX3ByZWZlcmVuY2VzLT53ZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCk7Ci19Ci0KIC0gKHZvaWQpX3NldERldmljZU9yaWVu
dGF0aW9uRXZlbnRFbmFibGVkOihCT09MKWVuYWJsZWQKIHsKICNpZiBFTkFCTEUoREVWSUNFX09S
SUVOVEFUSU9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29h
L1dLUHJlZmVyZW5jZXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29j
b2EvV0tQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCBhMzQ5ODk1NjkyNjk0NDc4NTM2YzRhNDQ0
NWU1YTgwZTQ0M2YxODcyLi41ODQwNGE2ODQ1ZDdhNDljOGE3NmFhZWFmODg0ZGYyYTBlMzNjZGRl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQcmVmZXJl
bmNlc1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tQ
cmVmZXJlbmNlc1ByaXZhdGUuaApAQCAtMTUxLDcgKzE1MSw2IEBAIHR5cGVkZWYgTlNfRU5VTShO
U0ludGVnZXIsIF9XS0VkaXRhYmxlTGlua0JlaGF2aW9yKSB7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRMb3dQb3dlclZpZGVvQXVkaW9CdWZmZXJTaXplRW5hYmxlZDopIEJPT0wg
X2xvd1Bvd2VyVmlkZW9BdWRpb0J1ZmZlclNpemVFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFj
b3MoMTAuMTQuNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9z
ZXRTaG91bGRJZ25vcmVNZXRhVmlld3BvcnQ6KSBCT09MIF9zaG91bGRJZ25vcmVNZXRhVmlld3Bv
cnQgV0tfQVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNC40KSwgaW9zKDEyLjIpKTsKIEBwcm9wZXJ0
eSAobm9uYXRvbWljLCBzZXR0ZXI9X3NldFZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBv
c2l0aW5nRW5hYmxlZDopIEJPT0wgX3ZpZGVvUXVhbGl0eUluY2x1ZGVzRGlzcGxheUNvbXBvc2l0
aW5nRW5hYmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE0LjQpLCBpb3MoMTIuMikpOwot
QHByb3BlcnR5IChub25hdG9taWMsIHNldHRlcj1fc2V0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZDopIEJPT0wgX3dlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQgV0tf
QVBJX0FWQUlMQUJMRShtYWNvcygxMC4xNCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0
b21pYywgc2V0dGVyPV9zZXREZXZpY2VPcmllbnRhdGlvbkV2ZW50RW5hYmxlZDopIEJPT0wgX2Rl
dmljZU9yaWVudGF0aW9uRXZlbnRFbmFibGVkIFdLX0FQSV9BVkFJTEFCTEUobWFjb3MoMTAuMTQu
NCksIGlvcygxMi4yKSk7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgc2V0dGVyPV9zZXROZWVkc1Np
dGVTcGVjaWZpY1F1aXJrczopIEJPT0wgX25lZWRzU2l0ZVNwZWNpZmljUXVpcmtzIFdLX0FQSV9B
VkFJTEFCTEUobWFjb3MoMTAuMTMuNCksIGlvcygxMy4wKSk7CiBAcHJvcGVydHkgKG5vbmF0b21p
Yywgc2V0dGVyPV9zZXRJdHBEZWJ1Z01vZGVFbmFibGVkOikgQk9PTCBfaXRwRGVidWdNb2RlRW5h
YmxlZCBXS19BUElfQVZBSUxBQkxFKG1hY29zKDEwLjE1KSwgaW9zKDEzLjApKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRs
ZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvSW5qZWN0ZWRCdW5kbGUvSW5qZWN0ZWRC
dW5kbGUuY3BwCmluZGV4IGMzZGRkZmU1ZDcxZDA1MGNhMTMyNTBhMTdjYTU1NjQ0ZmExNmE2ZWQu
LjBhMjhlZTRjMjM4Mjc5NTVkOTVjMTVhMzQ2ZTZmNDg4MDg0YmNlNTEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5jcHAK
KysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVu
ZGxlLmNwcApAQCAtMTg3LDEyICsxODcsNiBAQCB2b2lkIEluamVjdGVkQnVuZGxlOjpvdmVycmlk
ZUJvb2xQcmVmZXJlbmNlRm9yVGVzdFJ1bm5lcihXZWJQYWdlR3JvdXBQcm94eSogcGFnZQogICAg
IH0KICNlbmRpZgogCi0gICAgaWYgKHByZWZlcmVuY2UgPT0gIldlYktpdFdlYkFuaW1hdGlvbnNF
bmFibGVkIikKLSAgICAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChlbmFibGVkKTsKLQotICAgIGlmIChwcmVmZXJlbmNl
ID09ICJXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkIikKLSAgICAgICAg
UnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotCiAgICAgaWYgKHByZWZlcmVuY2UgPT0g
IldlYktpdENhY2hlQVBJRW5hYmxlZCIpCiAgICAgICAgIFJ1bnRpbWVFbmFibGVkRmVhdHVyZXM6
OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKGVuYWJsZWQpOwogCkBAIC01ODQs
MTYgKzU3OCw2IEBAIHZvaWQgSW5qZWN0ZWRCdW5kbGU6OnNldFRhYktleUN5Y2xlc1Rocm91Z2hF
bGVtZW50cyhXZWJQYWdlKiBwYWdlLCBib29sIGVuYWJsZWQpCiAgICAgcGFnZS0+Y29yZVBhZ2Uo
KS0+c2V0VGFiS2V5Q3ljbGVzVGhyb3VnaEVsZW1lbnRzKGVuYWJsZWQpOwogfQogCi12b2lkIElu
amVjdGVkQnVuZGxlOjpzZXRXZWJBbmltYXRpb25zRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0g
ICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRp
b25zRW5hYmxlZChlbmFibGVkKTsKLX0KLQotdm9pZCBJbmplY3RlZEJ1bmRsZTo6c2V0V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChib29sIGVuYWJsZWQpCi17Ci0gICAgUnVudGlt
ZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NTSW50
ZWdyYXRpb25FbmFibGVkKGVuYWJsZWQpOwotfQotCiB2b2lkIEluamVjdGVkQnVuZGxlOjpzZXRB
Y2Nlc3NpYmlsaXR5SXNvbGF0ZWRUcmVlRW5hYmxlZChib29sIGVuYWJsZWQpCiB7CiAjaWYgRU5B
QkxFKEFDQ0VTU0lCSUxJVFlfSVNPTEFURURfVFJFRSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9JbmplY3RlZEJ1bmRsZS9JbmplY3RlZEJ1bmRsZS5oIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKaW5kZXggMDlh
MTI1Y2E0Yzk2Y2MzYTAzMmFlNThhNGViYmMyYmM0M2M3NWZiZi4uYzAxZGU4MGZjY2JjZTNkMzVi
ZTMyYWY3YTBkYTRiM2MzYzFkZjY0MyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL0luamVjdGVkQnVuZGxlL0luamVjdGVkQnVuZGxlLmgKQEAgLTE0Miw4ICsxNDIs
NiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHNldFRhYktleUN5Y2xlc1Rocm91Z2hFbGVtZW50cyhX
ZWJQYWdlKiwgYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHNldFNlcmlhbExvYWRpbmdFbmFibGVk
KGJvb2wpOwotICAgIHZvaWQgc2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoYm9vbCk7Ci0gICAgdm9p
ZCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKGJvb2wpOwogICAgIHZvaWQg
c2V0QWNjZXNzaWJpbGl0eUlzb2xhdGVkVHJlZUVuYWJsZWQoYm9vbCk7CiAgICAgdm9pZCBkaXNw
YXRjaFBlbmRpbmdMb2FkUmVxdWVzdHMoKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaCBiL1NvdXJjZS9XZWJL
aXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmgKaW5kZXggYmQw
MzA5MjAxZTI0YTBmYmE4N2E0MzA1MDFiZDBkYTNkNDE4YjU2ZS4uY2RjYzc4YmRhYTkwZjQ5YWZk
MTc2YTI1NTZkNzc5YWQ4NjEyY2QwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9t
YWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VLZXlzUHJpdmF0ZS5oCkBAIC01Miw3ICs1
Miw2IEBACiAjZGVmaW5lIFdlYktpdEphdmFFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdEph
dmFFbmFibGVkIgogI2RlZmluZSBXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZFByZWZlcmVuY2VLZXkg
QCJXZWJLaXRKYXZhU2NyaXB0RW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0SmF2YVNjcmlwdE1hcmt1
cEVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0SmF2YVNjcmlwdE1hcmt1cEVuYWJsZWQiCi0j
ZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFdl
YkFuaW1hdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRl
T3BlcmF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBv
c2l0ZU9wZXJhdGlvbnNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRXZWJBbmltYXRpb25zTXV0YWJs
ZVRpbWVsaW5lc0VuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc011dGFi
bGVUaW1lbGluZXNFbmFibGVkIgogI2RlZmluZSBXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5k
VmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5k
VmFsdWVzRW5hYmxlZCIKQEAgLTIwNCw3ICsyMDMsNiBAQAogI2RlZmluZSBXZWJLaXRDb2xvckZp
bHRlckVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0Q29sb3JGaWx0ZXJFbmFibGVkIgogI2Rl
ZmluZSBXZWJLaXRQdW5jaE91dFdoaXRlQmFja2dyb3VuZHNJbkRhcmtNb2RlUHJlZmVyZW5jZUtl
eSBAIldlYktpdFB1bmNoT3V0V2hpdGVCYWNrZ3JvdW5kc0luRGFya01vZGUiCiAjZGVmaW5lIFdl
YktpdEZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZFByZWZlcmVuY2VLZXkgQCJXZWJLaXRGZXRjaEFQ
SUtlZXBBbGl2ZUVuYWJsZWQiCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3Jh
dGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5IEAiV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJ
bnRlZ3JhdGlvbkVuYWJsZWQiCiAjZGVmaW5lIFdlYktpdFdlYlNRTEVuYWJsZWRQcmVmZXJlbmNl
S2V5IEAiV2ViS2l0V2ViU1FMRW5hYmxlZCIKICNkZWZpbmUgV2ViS2l0VXNlckdlc3R1cmVQcm9t
aXNlUHJvcGFnYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSBAIldlYktpdFVzZXJHZXN0dXJlUHJv
bWlzZVByb3BhZ2F0aW9uRW5hYmxlZCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kv
bWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5jZXMubW0gYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9X
ZWJWaWV3L1dlYlByZWZlcmVuY2VzLm1tCmluZGV4IGE2M2IwMGM2YjgyYmQ5NThiMmE0ZDZjMmRk
ODVkN2E0MmUwZDczYmUuLjQ1NTU3MjZiZjZiZDZmMDNjNzM3MzljYTA2NjMxNmI3Mzc3N2Q0ZDIg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcvV2ViUHJlZmVyZW5j
ZXMubW0KKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNl
cy5tbQpAQCAtNjM2LDcgKzYzNiw2IEBAICsgKHZvaWQpaW5pdGlhbGl6ZQogICAgICAgICBATk8s
IFdlYktpdERpYWxvZ0VsZW1lbnRFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQE5PLCBX
ZWJLaXRIaWdobGlnaHRBUElFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2Vi
S2l0TW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWRQcmVmZXJlbmNlS2V5LAotICAgICAgICBAWUVT
LCBXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSwK
ICAgICAgICAgQFlFUywgV2ViS2l0TGF5b3V0Rm9ybWF0dGluZ0NvbnRleHRJbnRlZ3JhdGlvbkVu
YWJsZWRQcmVmZXJlbmNlS2V5LAogCiAjaWYgRU5BQkxFKFdFQkdMMikKQEAgLTY1OCw3ICs2NTcs
NiBAQCArICh2b2lkKWluaXRpYWxpemUKICAgICAgICAgQE5PLCBXZWJLaXREb3dubG9hZEF0dHJp
YnV0ZUVuYWJsZWRQcmVmZXJlbmNlS2V5LAogI2VuZGlmCiAgICAgICAgIEBOTywgV2ViS2l0RGly
ZWN0b3J5VXBsb2FkRW5hYmxlZFByZWZlcmVuY2VLZXksCi0gICAgICAgIEBZRVMsIFdlYktpdFdl
YkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSwKICAgICAgICAgQFlFUywgV2ViS2l0U3lu
dGhldGljRWRpdGluZ0NvbW1hbmRzRW5hYmxlZFByZWZlcmVuY2VLZXksCiAKICNpZiBQTEFURk9S
TShJT1NfRkFNSUxZKQpAQCAtMzE3NCwxNiArMzE3Miw2IEBAIC0gKHZvaWQpc2V0Q1NTT01WaWV3
U21vb3RoU2Nyb2xsaW5nRW5hYmxlZDooQk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTpmbGFnIGZvcktleTpXZWJLaXRDU1NPTVZpZXdTbW9vdGhTY3JvbGxpbmdFbmFibGVkUHJlZmVy
ZW5jZUtleV07CiB9CiAKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0VuYWJsZWQKLXsKLSAgICByZXR1
cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZl
cmVuY2VLZXldOwotfQotCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnNFbmFibGVkOihCT09MKWZs
YWcKLXsKLSAgICBbc2VsZiBfc2V0Qm9vbFZhbHVlOmZsYWcgZm9yS2V5OldlYktpdFdlYkFuaW1h
dGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KIC0gKEJPT0wpd2ViQW5pbWF0aW9uc0Nv
bXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkCiB7CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVG
b3JLZXk6V2ViS2l0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVy
ZW5jZUtleV07CkBAIC0zMjQ0LDE2ICszMjMyLDYgQEAgLSAodm9pZClzZXRNb2Rlcm5NZWRpYUNv
bnRyb2xzRW5hYmxlZDooQk9PTClmbGFnCiAgICAgW3NlbGYgX3NldEJvb2xWYWx1ZTpmbGFnIGZv
cktleTpXZWJLaXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXldOwogfQog
Ci0tIChCT09MKXdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQKLXsKLSAgICByZXR1
cm4gW3NlbGYgX2Jvb2xWYWx1ZUZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkUHJlZmVyZW5jZUtleV07Ci19Ci0KLS0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZDooQk9PTClmbGFnCi17Ci0gICAgW3NlbGYgX3NldEJvb2xWYWx1
ZTpmbGFnIGZvcktleTpXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJl
ZmVyZW5jZUtleV07Ci19Ci0KIC0gKEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkCiB7
CiAgICAgcmV0dXJuIFtzZWxmIF9ib29sVmFsdWVGb3JLZXk6V2ViS2l0SW50ZXJzZWN0aW9uT2Jz
ZXJ2ZXJFbmFibGVkUHJlZmVyZW5jZUtleV07CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L21hYy9XZWJWaWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oIGIvU291cmNlL1dlYktpdExl
Z2FjeS9tYWMvV2ViVmlldy9XZWJQcmVmZXJlbmNlc1ByaXZhdGUuaAppbmRleCAxZWNiZDc2MjM1
YjA5MDRlZDcxMThkMmMyODc5MTU1Yjg3MzNkYjkwLi4wMGExYjZkYzdlNDBiYjgyYTNjZmFmZGRj
MDVjMTZjZTJjODAxMDAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJW
aWV3L1dlYlByZWZlcmVuY2VzUHJpdmF0ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFj
L1dlYlZpZXcvV2ViUHJlZmVyZW5jZXNQcml2YXRlLmgKQEAgLTU2NCw5ICs1NjQsNiBAQCBleHRl
cm4gTlNTdHJpbmcgKldlYlByZWZlcmVuY2VzQ2FjaGVNb2RlbENoYW5nZWRJbnRlcm5hbE5vdGlm
aWNhdGlvbiBXRUJLSVRfREVQUgogLSAodm9pZClzZXREaXJlY3RvcnlVcGxvYWRFbmFibGVkOihC
T09MKWZsYWc7CiAtIChCT09MKWRpcmVjdG9yeVVwbG9hZEVuYWJsZWQ7CiAKLS0gKHZvaWQpc2V0
V2ViQW5pbWF0aW9uc0VuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0Vu
YWJsZWQ7Ci0KIC0gKHZvaWQpc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFi
bGVkOihCT09MKWZsYWc7CiAtIChCT09MKXdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25z
RW5hYmxlZDsKIApAQCAtNTg1LDkgKzU4Miw2IEBAIGV4dGVybiBOU1N0cmluZyAqV2ViUHJlZmVy
ZW5jZXNDYWNoZU1vZGVsQ2hhbmdlZEludGVybmFsTm90aWZpY2F0aW9uIFdFQktJVF9ERVBSCiAt
ICh2b2lkKXNldE1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOihCT09MKWZsYWc7CiAtIChCT09M
KW1vZGVybk1lZGlhQ29udHJvbHNFbmFibGVkOwogCi0tICh2b2lkKXNldFdlYkFuaW1hdGlvbnND
U1NJbnRlZ3JhdGlvbkVuYWJsZWQ6KEJPT0wpZmxhZzsKLS0gKEJPT0wpd2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZDsKLQogLSAodm9pZClzZXRJbnRlcnNlY3Rpb25PYnNlcnZlckVu
YWJsZWQ6KEJPT0wpZmxhZzsKIC0gKEJPT0wpaW50ZXJzZWN0aW9uT2JzZXJ2ZXJFbmFibGVkOwog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0g
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KaW5kZXggYTQyNWNj
ZjFjNWM5ZTc3OTk3NDRjNWJlNTM5Mzc0ZGZmODI3YjY5ZS4uYTlmZGIyYTZiMTgwYzc5NTU5MzY1
NzA4MWExYmRlMDlkYjc3ZWNkMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS9tYWMv
V2ViVmlldy9XZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvbWFjL1dlYlZpZXcv
V2ViVmlldy5tbQpAQCAtMTMyLDcgKzEzMiw2IEBACiAjaW1wb3J0IDxXZWJDb3JlL0FwcGxpY2F0
aW9uQ2FjaGVTdG9yYWdlLmg+CiAjaW1wb3J0IDxXZWJDb3JlL0JhY2tGb3J3YXJkQ2FjaGUuaD4K
ICNpbXBvcnQgPFdlYkNvcmUvQmFja0ZvcndhcmRDb250cm9sbGVyLmg+Ci0jaW1wb3J0IDxXZWJD
b3JlL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2FjaGVTdG9y
YWdlUHJvdmlkZXIuaD4KICNpbXBvcnQgPFdlYkNvcmUvQ2hyb21lLmg+CiAjaW1wb3J0IDxXZWJD
b3JlL0NvbG9yTWFjLmg+CkBAIC0zMzM0LDcgKzMzMzMsNiBAQCAtICh2b2lkKV9wcmVmZXJlbmNl
c0NoYW5nZWQ6KFdlYlByZWZlcmVuY2VzICopcHJlZmVyZW5jZXMKIAogICAgIHNldHRpbmdzLnNl
dEludGVyYWN0aXZlRm9ybVZhbGlkYXRpb25FbmFibGVkKFtzZWxmIGludGVyYWN0aXZlRm9ybVZh
bGlkYXRpb25FbmFibGVkXSk7CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVh
dHVyZXMoKS5zZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbcHJlZmVyZW5jZXMgbW9kZXJu
TWVkaWFDb250cm9sc0VuYWJsZWRdKTsKLSAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFy
ZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoW3ByZWZl
cmVuY2VzIHdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRdKTsKIAogICAgIFJ1bnRp
bWVFbmFibGVkRmVhdHVyZXM6OnNoYXJlZEZlYXR1cmVzKCkuc2V0Q2FjaGVBUElFbmFibGVkKFtw
cmVmZXJlbmNlcyBjYWNoZUFQSUVuYWJsZWRdKTsKIApAQCAtMzM1OCw3ICszMzU2LDYgQEAgLSAo
dm9pZClfcHJlZmVyZW5jZXNDaGFuZ2VkOihXZWJQcmVmZXJlbmNlcyAqKXByZWZlcmVuY2VzCiAg
ICAgc2V0dGluZ3Muc2V0RG93bmxvYWRBdHRyaWJ1dGVFbmFibGVkKFtwcmVmZXJlbmNlcyBkb3du
bG9hZEF0dHJpYnV0ZUVuYWJsZWRdKTsKICNlbmRpZgogCi0gICAgUnVudGltZUVuYWJsZWRGZWF0
dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZChbcHJlZmVyZW5j
ZXMgd2ViQW5pbWF0aW9uc0VuYWJsZWRdKTsKICAgICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpz
aGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxl
ZChbcHJlZmVyZW5jZXMgd2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkXSk7
CiAgICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmlt
YXRpb25zTXV0YWJsZVRpbWVsaW5lc0VuYWJsZWQoW3ByZWZlcmVuY2VzIHdlYkFuaW1hdGlvbnNN
dXRhYmxlVGltZWxpbmVzRW5hYmxlZF0pOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVn
YWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsIGIvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViRnJhbWVQcml2YXRlLmlkbAppbmRleCBmZTIyODExYzg2
ZWM1Y2Q4ZTMzMWM2N2UxNmYzY2Q5MzFiMjNkMzA3Li5kZjdjMTdmN2Y5YjA1ZjE4ZDY2MTliODg2
OWQwNjY3MzU2OTYwNDgwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRl
cmZhY2VzL0lXZWJGcmFtZVByaXZhdGUuaWRsCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2lu
L0ludGVyZmFjZXMvSVdlYkZyYW1lUHJpdmF0ZS5pZGwKQEAgLTg0LDEwICs4NCw2IEBAIGludGVy
ZmFjZSBJV2ViRnJhbWVQcml2YXRlIDogSVVua25vd24KIAogICAgIEhSRVNVTFQgZWxlbWVudERv
ZXNBdXRvQ29tcGxldGUoW2luXSBJRE9NRWxlbWVudCogZWxlbWVudCwgW291dCwgcmV0dmFsXSBC
T09MKiByZXN1bHQpOwogCi0gICAgSFJFU1VMVCBwYXVzZUFuaW1hdGlvbihbaW5dIEJTVFIgYW5p
bWF0aW9uTmFtZSwgW2luXSBJRE9NTm9kZSogbm9kZSwgW2luXSBkb3VibGUgc2Vjb25kc0Zyb21O
b3csIFtvdXQsIHJldHZhbF0gQk9PTCogYW5pbWF0aW9uV2FzUnVubmluZyk7Ci0gICAgSFJFU1VM
VCBwYXVzZVRyYW5zaXRpb24oW2luXSBCU1RSIHByb3BlcnR5TmFtZSwgW2luXSBJRE9NTm9kZSog
bm9kZSwgW2luXSBkb3VibGUgc2Vjb25kc0Zyb21Ob3csIFtvdXQsIHJldHZhbF0gQk9PTCogdHJh
bnNpdGlvbldhc1J1bm5pbmcpOwotICAgIEhSRVNVTFQgbnVtYmVyT2ZBY3RpdmVBbmltYXRpb25z
KFtvdXQsIHJldHZhbF0gVUlOVCogbnVtYmVyKTsKLQogICAgIEhSRVNVTFQgaXNEaXNwbGF5aW5n
U3RhbmRhbG9uZUltYWdlKFtvdXQsIHJldHZhbF0gQk9PTCogcmVzdWx0KTsKIAogICAgIEhSRVNV
TFQgYWxsb3dzRm9sbG93aW5nTGluayhbaW5dIEJTVFIgdXJsLCBbb3V0LCByZXR2YWxdIEJPT0wq
IHJlc3VsdCk7CkBAIC0xMTAsOSArMTA2LDYgQEAgaW50ZXJmYWNlIElXZWJGcmFtZVByaXZhdGUg
OiBJVW5rbm93bgogCiAgICAgSFJFU1VMVCB1bnVzZWQ1KCk7CiAKLSAgICBIUkVTVUxUIHN1c3Bl
bmRBbmltYXRpb25zKCk7Ci0gICAgSFJFU1VMVCByZXN1bWVBbmltYXRpb25zKCk7IAotCiAgICAg
SFJFU1VMVCBsb2FkUGxhaW5UZXh0U3RyaW5nKFtpbl0gQlNUUiBzdHJpbmcsIFtpbl0gQlNUUiB1
cmwpOwogCiAgICAgSFJFU1VMVCBjbGVhck9wZW5lcigpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbCBiL1Nv
dXJjZS9XZWJLaXRMZWdhY3kvd2luL0ludGVyZmFjZXMvSVdlYlByZWZlcmVuY2VzUHJpdmF0ZS5p
ZGwKaW5kZXggOWE4NzVkNDc5ZTdiZmFkNzM2MWE2ZjJmOGE0ZDMxOTMzN2VlNTdmMi4uYjBiZDA1
ZjI1MDU4MmUxNDdhNmE3ZmJkYTNiNmRiZjRiNmFiNjA4NyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdExlZ2FjeS93aW4vSW50ZXJmYWNlcy9JV2ViUHJlZmVyZW5jZXNQcml2YXRlLmlkbAorKysg
Yi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9JbnRlcmZhY2VzL0lXZWJQcmVmZXJlbmNlc1ByaXZh
dGUuaWRsCkBAIC0xODMsMTYgKzE4MywxMiBAQCBpbnRlcmZhY2UgSVdlYlByZWZlcmVuY2VzUHJp
dmF0ZTMgOiBJV2ViUHJlZmVyZW5jZXNQcml2YXRlMgogICAgIEhSRVNVTFQgc2V0Q3VzdG9tRWxl
bWVudHNFbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKICAgICBIUkVTVUxUIG1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCogZW5hYmxlZCk7CiAgICAgSFJFU1VM
VCBzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxlZChbaW5dIEJPT0wgZW5hYmxlZCk7Ci0gICAg
SFJFU1VMVCB3ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKFtvdXQsIHJldHZhbF0g
Qk9PTCogZW5hYmxlZCk7Ci0gICAgSFJFU1VMVCBzZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRp
b25FbmFibGVkKFtpbl0gQk9PTCBlbmFibGVkKTsKIH0KIAogW3V1aWQoRjk1ODJENzItNjM0OC00
NUIxLUFCMDktMzlFMzM0NTlCNUI5KV0KIGludGVyZmFjZSBJV2ViUHJlZmVyZW5jZXNQcml2YXRl
NCA6IElXZWJQcmVmZXJlbmNlc1ByaXZhdGUzCiB7CiAgICAgSFJFU1VMVCBzZXRBcHBsaWNhdGlv
bklkKFtpbl0gQlNUUiBhcHBsaWNhdGlvbklkKTsKLSAgICBIUkVTVUxUIHdlYkFuaW1hdGlvbnNF
bmFibGVkKFtvdXQsIHJldHZhbF0gQk9PTCopOwotICAgIEhSRVNVTFQgc2V0V2ViQW5pbWF0aW9u
c0VuYWJsZWQoW2luXSBCT09MIGVuYWJsZWQpOwogICAgIEhSRVNVTFQgdXNlclRpbWluZ0VuYWJs
ZWQoW291dCwgcmV0dmFsXSBCT09MKik7CiAgICAgSFJFU1VMVCBzZXRVc2VyVGltaW5nRW5hYmxl
ZChbaW5dIEJPT0wgZW5hYmxlZCk7CiAgICAgSFJFU1VMVCByZXNvdXJjZVRpbWluZ0VuYWJsZWQo
W291dCwgcmV0dmFsXSBCT09MKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJGcmFtZS5jcHAgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5jcHAKaW5k
ZXggZjA2MjliYmUzNzJjYmE5OGQzNmRkOGM4ZjI0MDFkNzYxNWViZjc1OC4uN2NjMGY5Y2Q5ZTlj
M2Y4Nzg0NDdjZDg3MTQzNTQ3MDU5ODk0NGVmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExl
Z2FjeS93aW4vV2ViRnJhbWUuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZy
YW1lLmNwcApAQCAtNTgsNyArNTgsNiBAQAogI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9CU3RyaW5nLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9D
T01QdHIuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0NTU0FuaW1hdGlvbkNvbnRyb2xsZXIuaD4KICNp
bmNsdWRlIDxXZWJDb3JlL0RPTVdpbmRvdy5oPgogI2luY2x1ZGUgPFdlYkNvcmUvRG9jdW1lbnQu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0RvY3VtZW50TG9hZGVyLmg+CkBAIC0xMTc3LDY0ICsxMTc2
LDYgQEAgSFJFU1VMVCBXZWJGcmFtZTo6ZWxlbWVudERvZXNBdXRvQ29tcGxldGUoX0luX29wdF8g
SURPTUVsZW1lbnQgKmVsZW1lbnQsIF9PdXRfIEIKICAgICByZXR1cm4gU19PSzsKIH0KIAotSFJF
U1VMVCBXZWJGcmFtZTo6cmVzdW1lQW5pbWF0aW9ucygpCi17Ci0gICAgRnJhbWUqIGZyYW1lID0g
Y29yZSh0aGlzKTsKLSAgICBpZiAoIWZyYW1lKQotICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVE
OwotCi0gICAgZnJhbWUtPmxlZ2FjeUFuaW1hdGlvbigpLnJlc3VtZUFuaW1hdGlvbnMoKTsKLSAg
ICByZXR1cm4gU19PSzsKLX0KLQotSFJFU1VMVCBXZWJGcmFtZTo6c3VzcGVuZEFuaW1hdGlvbnMo
KQotewotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKLQotICAgIGZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5zdXNwZW5kQW5pbWF0aW9ucygpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFdl
YkZyYW1lOjpwYXVzZUFuaW1hdGlvbihfSW5fIEJTVFIgYW5pbWF0aW9uTmFtZSwgX0luX29wdF8g
SURPTU5vZGUqIG5vZGUsIGRvdWJsZSBzZWNvbmRzRnJvbU5vdywgX091dF8gQk9PTCogYW5pbWF0
aW9uV2FzUnVubmluZykKLXsKLSAgICBpZiAoIW5vZGUgfHwgIWFuaW1hdGlvbldhc1J1bm5pbmcp
Ci0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICAqYW5pbWF0aW9uV2FzUnVubmluZyA9
IEZBTFNFOwotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBpZiAoIWZyYW1l
KQotICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOwotCi0gICAgQ09NUHRyPERPTU5vZGU+IGRv
bU5vZGUoUXVlcnksIG5vZGUpOwotICAgIGlmICghZG9tTm9kZSkKLSAgICAgICAgcmV0dXJuIEVf
RkFJTDsKLQotICAgICphbmltYXRpb25XYXNSdW5uaW5nID0gZnJhbWUtPmxlZ2FjeUFuaW1hdGlv
bigpLnBhdXNlQW5pbWF0aW9uQXRUaW1lKGRvd25jYXN0PEVsZW1lbnQ+KCpkb21Ob2RlLT5ub2Rl
KCkpLCBTdHJpbmcoYW5pbWF0aW9uTmFtZSwgU3lzU3RyaW5nTGVuKGFuaW1hdGlvbk5hbWUpKSwg
c2Vjb25kc0Zyb21Ob3cpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxUIFdlYkZyYW1l
OjpwYXVzZVRyYW5zaXRpb24oX0luXyBCU1RSIHByb3BlcnR5TmFtZSwgX0luX29wdF8gSURPTU5v
ZGUqIG5vZGUsIGRvdWJsZSBzZWNvbmRzRnJvbU5vdywgX091dF8gQk9PTCogdHJhbnNpdGlvbldh
c1J1bm5pbmcpCi17Ci0gICAgaWYgKCFub2RlIHx8ICF0cmFuc2l0aW9uV2FzUnVubmluZykKLSAg
ICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLQotICAgICp0cmFuc2l0aW9uV2FzUnVubmluZyA9IEZB
TFNFOwotCi0gICAgRnJhbWUqIGZyYW1lID0gY29yZSh0aGlzKTsKLSAgICBpZiAoIWZyYW1lKQot
ICAgICAgICByZXR1cm4gRV9VTkVYUEVDVEVEOwotCi0gICAgQ09NUHRyPERPTU5vZGU+IGRvbU5v
ZGUoUXVlcnksIG5vZGUpOwotICAgIGlmICghZG9tTm9kZSkKLSAgICAgICAgcmV0dXJuIEVfRkFJ
TDsKLQotICAgICp0cmFuc2l0aW9uV2FzUnVubmluZyA9IGZyYW1lLT5sZWdhY3lBbmltYXRpb24o
KS5wYXVzZVRyYW5zaXRpb25BdFRpbWUoZG93bmNhc3Q8RWxlbWVudD4oKmRvbU5vZGUtPm5vZGUo
KSksIFN0cmluZyhwcm9wZXJ0eU5hbWUsIFN5c1N0cmluZ0xlbihwcm9wZXJ0eU5hbWUpKSwgc2Vj
b25kc0Zyb21Ob3cpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVTVUxUIFdlYkZyYW1lOjp2
aXNpYmxlQ29udGVudFJlY3QoX091dF8gUkVDVCogcmVjdCkKIHsKICAgICBpZiAoIXJlY3QpCkBA
IC0xMjUzLDIxICsxMTk0LDYgQEAgSFJFU1VMVCBXZWJGcmFtZTo6dmlzaWJsZUNvbnRlbnRSZWN0
KF9PdXRfIFJFQ1QqIHJlY3QpCiAgICAgcmV0dXJuIFNfT0s7CiB9CiAKLUhSRVNVTFQgV2ViRnJh
bWU6Om51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhfT3V0XyBVSU5UKiBudW1iZXIpCi17Ci0gICAg
aWYgKCFudW1iZXIpCi0gICAgICAgIHJldHVybiBFX1BPSU5URVI7Ci0KLSAgICAqbnVtYmVyID0g
MDsKLQotICAgIEZyYW1lKiBmcmFtZSA9IGNvcmUodGhpcyk7Ci0gICAgaWYgKCFmcmFtZSkKLSAg
ICAgICAgcmV0dXJuIEVfVU5FWFBFQ1RFRDsKLQotICAgICpudW1iZXIgPSBmcmFtZS0+bGVnYWN5
QW5pbWF0aW9uKCkubnVtYmVyT2ZBY3RpdmVBbmltYXRpb25zKGZyYW1lLT5kb2N1bWVudCgpKTsK
LSAgICByZXR1cm4gU19PSzsKLX0KLQogSFJFU1VMVCBXZWJGcmFtZTo6aXNEaXNwbGF5aW5nU3Rh
bmRhbG9uZUltYWdlKF9PdXRfIEJPT0wqIHJlc3VsdCkKIHsKICAgICBpZiAoIXJlc3VsdCkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmggYi9Tb3VyY2UvV2Vi
S2l0TGVnYWN5L3dpbi9XZWJGcmFtZS5oCmluZGV4IDc2NzI3NDE1N2E4ZGUyMDNiZDBhMzBiNTIz
ZDk5Y2ViMTExNDgyNjEuLjQwNjIzNTQ2OTY2YjFkNWU3MmFiNDc5ZmRhODMwNDk0NGUzNjdkMzYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYkZyYW1lLmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViRnJhbWUuaApAQCAtMTM2LDkgKzEzNiw2IEBAIHB1Ymxp
YzoKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcGFpbnREb2N1bWVudFJl
Y3RUb0NvbnRleHQoUkVDVCwgX0luXyBIREMpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRI
T0RDQUxMVFlQRSBwYWludFNjcm9sbFZpZXdSZWN0VG9Db250ZXh0QXRQb2ludChSRUNULCBQT0lO
VCwgX0luXyBIREMpOwogICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBlbGVt
ZW50RG9lc0F1dG9Db21wbGV0ZShfSW5fb3B0XyBJRE9NRWxlbWVudCosIF9PdXRfIEJPT0wqKTsK
LSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcGF1c2VBbmltYXRpb24oX0lu
XyBCU1RSIGFuaW1hdGlvbk5hbWUsIF9Jbl9vcHRfIElET01Ob2RlKiwgZG91YmxlIHNlY29uZHNG
cm9tTm93LCBfT3V0XyBCT09MKiBhbmltYXRpb25XYXNSdW5uaW5nKTsKLSAgICB2aXJ0dWFsIEhS
RVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcGF1c2VUcmFuc2l0aW9uKF9Jbl8gQlNUUiBwcm9wZXJ0
eU5hbWUsIF9Jbl9vcHRfIElET01Ob2RlKiwgZG91YmxlIHNlY29uZHNGcm9tTm93LCBfT3V0XyBC
T09MKiB0cmFuc2l0aW9uV2FzUnVubmluZyk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhP
RENBTExUWVBFIG51bWJlck9mQWN0aXZlQW5pbWF0aW9ucyhfT3V0XyBVSU5UKik7CiAgICAgdmly
dHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGxvYWRQbGFpblRleHRTdHJpbmcoX0luXyBC
U1RSLCBfSW5fIEJTVFIgdXJsKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZ
UEUgaXNEaXNwbGF5aW5nU3RhbmRhbG9uZUltYWdlKF9PdXRfIEJPT0wqKTsKICAgICB2aXJ0dWFs
IEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgYWxsb3dzRm9sbG93aW5nTGluayhfSW5fIEJTVFIs
IF9PdXRfIEJPT0wqKTsKQEAgLTE1MCw4ICsxNDcsNiBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBI
UkVTVUxUIFNURE1FVEhPRENBTExUWVBFIGNsZWFyT3BlbmVyKCk7CiAgICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHNldFRleHREaXJlY3Rpb24oX0luXyBCU1RSKTsKICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgdW51c2VkNCgpIHsgcmV0dXJuIEVfTk9U
SU1QTDsgfQotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSByZXN1bWVBbmlt
YXRpb25zKCk7Ci0gICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHN1c3BlbmRB
bmltYXRpb25zKCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHJlbmRl
clRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb24odW5zaWduZWQgb3B0aW9ucywgX0RlcmVmX29w
dF9vdXRfIEJTVFIqIHJlc3VsdCk7CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExU
WVBFIHJlbmRlclRyZWVBc0V4dGVybmFsUmVwcmVzZW50YXRpb25Gb3JQcmludGluZyhfRGVyZWZf
b3B0X291dF8gQlNUUiogcmVzdWx0KTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdExlZ2Fj
eS93aW4vV2ViUHJlZmVyZW5jZUtleXNQcml2YXRlLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlS2V5c1ByaXZhdGUuaAppbmRleCAyYTIxMjFhZGI5Njg2OTg0MTIxYzBl
NGJhOGRhZmZjYTdiY2M2Y2FiLi45MjE3Yjg1ZTQ5N2RhMTNkYTc2ODIyOTViMmRlNzYyYTJkZTcx
NjVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaAorKysgYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlS2V5
c1ByaXZhdGUuaApAQCAtMTg4LDE0ICsxODgsMTAgQEAKIAogI2RlZmluZSBXZWJLaXRNb2Rlcm5N
ZWRpYUNvbnRyb2xzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdE1vZGVybk1lZGlhQ29udHJv
bHNFbmFibGVkIgogCi0jZGVmaW5lIFdlYktpdFdlYkFuaW1hdGlvbnNFbmFibGVkUHJlZmVyZW5j
ZUtleSAiV2ViS2l0V2ViQW5pbWF0aW9uc0VuYWJsZWQiCi0KICNkZWZpbmUgV2ViS2l0V2ViQW5p
bWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2Vi
QW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkIgogCiAjZGVmaW5lIFdlYktpdFdl
YkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdFdl
YkFuaW1hdGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZCIKIAotI2RlZmluZSBXZWJLaXRXZWJB
bmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0V2ViQW5p
bWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZCIKLQogI2RlZmluZSBXZWJLaXRDU1NDdXN0b21Q
cm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkgIldlYktpdENTU0N1c3RvbVBy
b3BlcnRpZXNBbmRWYWx1ZXNFbmFibGVkIgogCiAjZGVmaW5lIFdlYktpdFVzZXJUaW1pbmdFbmFi
bGVkUHJlZmVyZW5jZUtleSAiV2ViS2l0VXNlclRpbWluZ0VuYWJsZWQiCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViS2l0TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAgYi9Tb3VyY2UvV2ViS2l0
TGVnYWN5L3dpbi9XZWJQcmVmZXJlbmNlcy5jcHAKaW5kZXggYThlZjkwYzE3MzAzOTFkYjlkODA1
MWQzNjY2ZmU1ZDllZmZjOWE2My4uYjBhZDZjY2U2ZTY1YTk0YzZlZThiODY1YjRlMDJlZGUwODgw
OGFmNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMu
Y3BwCisrKyBiL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmNwcApAQCAt
MzExLDE0ICszMTEsMTAgQEAgdm9pZCBXZWJQcmVmZXJlbmNlczo6aW5pdGlhbGl6ZURlZmF1bHRT
ZXR0aW5ncygpCiAKICAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2Vi
S2l0Q3VzdG9tRWxlbWVudHNFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7
CiAKLSAgICBDRkRpY3Rpb25hcnlBZGRWYWx1ZShkZWZhdWx0cywgQ0ZTVFIoV2ViS2l0V2ViQW5p
bWF0aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVhblRydWUpOwotCiAgICAgQ0ZE
aWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFdlYkFuaW1hdGlvbnNDb21w
b3NpdGVPcGVyYXRpb25zRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFsc2UpOwog
CiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFdlYkFuaW1h
dGlvbnNNdXRhYmxlVGltZWxpbmVzRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZCb29sZWFuRmFs
c2UpOwogCi0gICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RSKFdlYktpdFdl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWRQcmVmZXJlbmNlS2V5KSwga0NGQm9vbGVh
bkZhbHNlKTsKLQogICAgIENGRGljdGlvbmFyeUFkZFZhbHVlKGRlZmF1bHRzLCBDRlNUUihXZWJL
aXRDU1NDdXN0b21Qcm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZFByZWZlcmVuY2VLZXkpLCBrQ0ZC
b29sZWFuRmFsc2UpOwogCiAgICAgQ0ZEaWN0aW9uYXJ5QWRkVmFsdWUoZGVmYXVsdHMsIENGU1RS
KFdlYktpdFVzZXJUaW1pbmdFbmFibGVkUHJlZmVyZW5jZUtleSksIGtDRkJvb2xlYW5GYWxzZSk7
CkBAIC0yMTM2LDIwICsyMTMyLDYgQEAgSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6bW9kZXJuTWVk
aWFDb250cm9sc0VuYWJsZWQoX091dF8gQk9PTCogZW5hYmxlZCkKICAgICByZXR1cm4gU19PSzsK
IH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6d2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQotewotICAgIGlmICghZW5hYmxlZCkKLSAgICAg
ICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAqZW5hYmxlZCA9IGJvb2xWYWx1ZUZvcktleShXZWJL
aXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSk7Ci0gICAg
cmV0dXJuIFNfT0s7Ci19Ci0KLUhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6OnNldFdlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoQk9PTCBlbmFibGVkKQotewotICAgIHNldEJvb2xWYWx1
ZShXZWJLaXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkUHJlZmVyZW5jZUtleSwg
ZW5hYmxlZCk7Ci0gICAgcmV0dXJuIFNfT0s7Ci19Ci0KIEhSRVNVTFQgV2ViUHJlZmVyZW5jZXM6
OmZldGNoQVBJS2VlcEFsaXZlRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVkKQogewogICAgIGlm
ICghZW5hYmxlZCkKQEAgLTIzMzcsMjAgKzIzMTksNiBAQCBIUkVTVUxUIFdlYlByZWZlcmVuY2Vz
OjpzZXRBcHBsaWNhdGlvbklkKEJTVFIgYXBwbGljYXRpb25JZCkKICAgICByZXR1cm4gU19PSzsK
IH0KIAotSFJFU1VMVCBXZWJQcmVmZXJlbmNlczo6c2V0V2ViQW5pbWF0aW9uc0VuYWJsZWQoQk9P
TCBlbmFibGVkKQotewotICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxl
ZFByZWZlcmVuY2VLZXksIGVuYWJsZWQpOwotICAgIHJldHVybiBTX09LOwotfQotCi1IUkVTVUxU
IFdlYlByZWZlcmVuY2VzOjp3ZWJBbmltYXRpb25zRW5hYmxlZChfT3V0XyBCT09MKiBlbmFibGVk
KQotewotICAgIGlmICghZW5hYmxlZCkKLSAgICAgICAgcmV0dXJuIEVfUE9JTlRFUjsKLSAgICAq
ZW5hYmxlZCA9IGJvb2xWYWx1ZUZvcktleShXZWJLaXRXZWJBbmltYXRpb25zRW5hYmxlZFByZWZl
cmVuY2VLZXkpOwotICAgIHJldHVybiBTX09LOwotfQotCiBIUkVTVUxUIFdlYlByZWZlcmVuY2Vz
OjpzZXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0aW9uc0VuYWJsZWQoQk9PTCBlbmFibGVk
KQogewogICAgIHNldEJvb2xWYWx1ZShXZWJLaXRXZWJBbmltYXRpb25zQ29tcG9zaXRlT3BlcmF0
aW9uc0VuYWJsZWRQcmVmZXJlbmNlS2V5LCBlbmFibGVkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmggYi9Tb3VyY2UvV2ViS2l0TGVnYWN5L3dp
bi9XZWJQcmVmZXJlbmNlcy5oCmluZGV4IDI0MzdiMGU3NjI4OTUwNmMyNjQwNDg4NmJkMmMwM2Y1
ODMyNTNjNTEuLjIxMjkwNWNiMWJhNjAwOTQwMzg2OTUzOTE3OGEzZmVhNzAzYTM4ZTggMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlByZWZlcmVuY2VzLmgKKysrIGIvU291
cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViUHJlZmVyZW5jZXMuaApAQCAtMjM2LDEzICsyMzYsOSBA
QCBwdWJsaWM6CiAgICAgdmlydHVhbCBIUkVTVUxUIFNURE1FVEhPRENBTExUWVBFIHNldEN1c3Rv
bUVsZW1lbnRzRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FM
TFRZUEUgbW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQoX091dF8gQk9PTCopOwogICAgIHZpcnR1
YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRNb2Rlcm5NZWRpYUNvbnRyb2xzRW5hYmxl
ZChCT09MKTsKLSAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZChfT3V0XyBCT09MKik7Ci0gICAgdmlydHVhbCBIUkVT
VUxUIFNURE1FVEhPRENBTExUWVBFIHNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQoQk9PTCk7CiAgICAgCiAgICAgLy8gSVdlYlByZWZlcmVuY2VzUHJpdmF0ZTQKICAgICB2aXJ0
dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgc2V0QXBwbGljYXRpb25JZChCU1RSKTsKLSAg
ICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgd2ViQW5pbWF0aW9uc0VuYWJsZWQo
X091dF8gQk9PTCopOwotICAgIHZpcnR1YWwgSFJFU1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRX
ZWJBbmltYXRpb25zRW5hYmxlZChCT09MKTsKICAgICB2aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9E
Q0FMTFRZUEUgdXNlclRpbWluZ0VuYWJsZWQoX091dF8gQk9PTCopOwogICAgIHZpcnR1YWwgSFJF
U1VMVCBTVERNRVRIT0RDQUxMVFlQRSBzZXRVc2VyVGltaW5nRW5hYmxlZChCT09MKTsKICAgICB2
aXJ0dWFsIEhSRVNVTFQgU1RETUVUSE9EQ0FMTFRZUEUgcmVzb3VyY2VUaW1pbmdFbmFibGVkKF9P
dXRfIEJPT0wqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXRMZWdhY3kvd2luL1dlYlZpZXcu
Y3BwIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKaW5kZXggZTI1ODMyYWE0
MGEwNTQ3ZGRlMWY2M2JiNGUwYjE4Y2Q3OTUzNDY0Ni4uZGFkNjRkZWYzMzYyMmY2M2YyZWI0YTIy
ZDU4MmRhNjM5YTFiZjljNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2Vi
Vmlldy5jcHAKKysrIGIvU291cmNlL1dlYktpdExlZ2FjeS93aW4vV2ViVmlldy5jcHAKQEAgLTUy
NDQsMTEgKzUyNDQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdl
ZChJV2ViTm90aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybiBocjsKICAg
ICBSdW50aW1lRW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldE1vZGVybk1lZGlh
Q29udHJvbHNFbmFibGVkKCEhZW5hYmxlZCk7CiAKLSAgICBociA9IHByZWZzUHJpdmF0ZS0+d2Vi
QW5pbWF0aW9uc0VuYWJsZWQoJmVuYWJsZWQpOwotICAgIGlmIChGQUlMRUQoaHIpKQotICAgICAg
ICByZXR1cm4gaHI7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6c2hhcmVkRmVhdHVyZXMo
KS5zZXRXZWJBbmltYXRpb25zRW5hYmxlZCghIWVuYWJsZWQpOwotCiAgICAgaHIgPSBwcmVmc1By
aXZhdGUtPndlYkFuaW1hdGlvbnNDb21wb3NpdGVPcGVyYXRpb25zRW5hYmxlZCgmZW5hYmxlZCk7
CiAgICAgaWYgKEZBSUxFRChocikpCiAgICAgICAgIHJldHVybiBocjsKQEAgLTUyNTksMTEgKzUy
NTQsNiBAQCBIUkVTVUxUIFdlYlZpZXc6Om5vdGlmeVByZWZlcmVuY2VzQ2hhbmdlZChJV2ViTm90
aWZpY2F0aW9uKiBub3RpZmljYXRpb24pCiAgICAgICAgIHJldHVybiBocjsKICAgICBSdW50aW1l
RW5hYmxlZEZlYXR1cmVzOjpzaGFyZWRGZWF0dXJlcygpLnNldFdlYkFuaW1hdGlvbnNNdXRhYmxl
VGltZWxpbmVzRW5hYmxlZCghIWVuYWJsZWQpOwogCi0gICAgaHIgPSBwcmVmc1ByaXZhdGUtPndl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoJmVuYWJsZWQpOwotICAgIGlmIChGQUlM
RUQoaHIpKQotICAgICAgICByZXR1cm4gaHI7Ci0gICAgUnVudGltZUVuYWJsZWRGZWF0dXJlczo6
c2hhcmVkRmVhdHVyZXMoKS5zZXRXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkKCEh
ZW5hYmxlZCk7Ci0KICAgICBociA9IHByZWZzUHJpdmF0ZS0+Q1NTQ3VzdG9tUHJvcGVydGllc0Fu
ZFZhbHVlc0VuYWJsZWQoJmVuYWJsZWQpOwogICAgIGlmIChGQUlMRUQoaHIpKQogICAgICAgICBy
ZXR1cm4gaHI7CmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cK
aW5kZXggNzc4MDdlMmZiODU1YmQ3ZWQyMTVjMjJhYWQ5NTQ3OWFkZDYzMGUwZi4uMWI1YjZjMWYx
Y2Q0YTVlZWIzNjBhNWI5YThmNDcwMmMyM2NhYzIxMyAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdl
TG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDIwLTA5LTE3ICBB
bnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSB0aGUg
bGVnYWN5IGFuaW1hdGlvbiBjb2RlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMTY2MDgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICAqIER1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcDoKKyAgICAgICAg
KFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyk6CisgICAgICAgIChUZXN0T3B0aW9uczo6d2ViVmll
d0lzQ29tcGF0aWJsZVdpdGhPcHRpb25zIGNvbnN0KToKKyAgICAgICAgKiBEdW1wUmVuZGVyVHJl
ZS9UZXN0T3B0aW9ucy5oOgorICAgICAgICAqIER1bXBSZW5kZXJUcmVlL21hYy9EdW1wUmVuZGVy
VHJlZS5tbToKKyAgICAgICAgKGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKToKKyAgICAgICAg
KHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMpOgorICAgICAgICAqIER1bXBSZW5kZXJU
cmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5jcHA6CisgICAgICAgIChlbmFibGVFeHBlcmltZW50YWxG
ZWF0dXJlcyk6CisgICAgICAgIChzZXRXZWJQcmVmZXJlbmNlc0ZvclRlc3RPcHRpb25zKToKKwog
MjAyMC0wOS0xNiAgRnVqaWkgSGlyb25vcmkgIDxIaXJvbm9yaS5GdWppaUBzb255LmNvbT4KIAog
ICAgICAgICBbQ01ha2VdIEFkZCBhIG5ldyBsaWJyYXJ5IHRhcmdldCBUZXN0UnVubmVyU2hhcmVk
CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5jcHAKaW5kZXggZTQwOWE5MmM1YTYwZjE5Y2M0
MzA1MTkyODI1NzI1MGVmNzExOGZjZS4uMTI1YWRkZTNjMjM0ZjdhNGFhYjYzZTlkMzAwNTM3ODhh
YzBhZGUyYiAxMDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuY3Bw
CisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmNwcApAQCAtMTI0LDggKzEy
NCw2IEBAIFRlc3RPcHRpb25zOjpUZXN0T3B0aW9ucyhjb25zdCBzdGQ6OnN0cmluZyYgcGF0aE9y
VVJMLCBjb25zdCBzdGQ6OnN0cmluZyYgYWJzb2x1CiAgICAgICAgICAgICBkdW1wSlNDb25zb2xl
TG9nSW5TdGRFcnIgPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgICAg
ICBlbHNlIGlmIChrZXkgPT0gImFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNy
ZWRlbnRpYWxzIikKICAgICAgICAgICAgIGFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fz
a0ZvckNyZWRlbnRpYWxzID0gcGFyc2VCb29sZWFuVGVzdEhlYWRlclZhbHVlKHZhbHVlKTsKLSAg
ICAgICAgZWxzZSBpZiAoa2V5ID09ICJleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZCIpCi0gICAgICAgICAgICBlbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb24gPSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgICAgICBlbHNl
IGlmIChrZXkgPT0gImludGVybmFsOnNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXNFbmFi
bGVkIikKICAgICAgICAgICAgIGVuYWJsZVNlbGVjdGlvbkFjcm9zc1NoYWRvd0JvdW5kYXJpZXMg
PSBwYXJzZUJvb2xlYW5UZXN0SGVhZGVyVmFsdWUodmFsdWUpOwogICAgICAgICBlbHNlIGlmIChr
ZXkgPT0gImVuYWJsZUNvbG9yRmlsdGVyIikKQEAgLTE2NSw2ICsxNjMsNSBAQCBUZXN0T3B0aW9u
czo6VGVzdE9wdGlvbnMoY29uc3Qgc3RkOjpzdHJpbmcmIHBhdGhPclVSTCwgY29uc3Qgc3RkOjpz
dHJpbmcmIGFic29sdQogYm9vbCBUZXN0T3B0aW9uczo6d2ViVmlld0lzQ29tcGF0aWJsZVdpdGhP
cHRpb25zKGNvbnN0IFRlc3RPcHRpb25zJiBvdGhlcikgY29uc3QKIHsKICAgICByZXR1cm4gb3Ro
ZXIubGF5ZXJCYWNrZWRXZWJWaWV3ID09IGxheWVyQmFja2VkV2ViVmlldwotICAgICAgICAmJiBv
dGhlci5qc2NPcHRpb25zID09IGpzY09wdGlvbnMKLSAgICAgICAgJiYgb3RoZXIuZW5hYmxlV2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uID09IGVuYWJsZVdlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbjsKKyAgICAgICAgJiYgb3RoZXIuanNjT3B0aW9ucyA9PSBqc2NPcHRpb25zOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaCBiL1Rvb2xzL0R1bXBS
ZW5kZXJUcmVlL1Rlc3RPcHRpb25zLmgKaW5kZXggZDI5OWJhMjgwZmFjYjMxNjI5NjNmODFkYjYy
ZDI2ZGQ2ZjdjMDZlMi4uZjMxYzQwYzMzYjdmYmM2MzEzZTE4NTFkNTVmMDJjMjkxNDQ3MmVhMyAx
MDA2NDQKLS0tIGEvVG9vbHMvRHVtcFJlbmRlclRyZWUvVGVzdE9wdGlvbnMuaAorKysgYi9Ub29s
cy9EdW1wUmVuZGVyVHJlZS9UZXN0T3B0aW9ucy5oCkBAIC0yOSw3ICsyOSw2IEBACiAKIHN0cnVj
dCBUZXN0T3B0aW9ucyB7CiAgICAgYm9vbCBlbmFibGVBdHRhY2htZW50RWxlbWVudCB7IGZhbHNl
IH07Ci0gICAgYm9vbCBlbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24geyB0cnVlIH07
CiAgICAgYm9vbCB1c2VBY2NlbGVyYXRlZERyYXdpbmcgeyBmYWxzZSB9OwogICAgIGJvb2wgZW5h
YmxlSW50ZXJzZWN0aW9uT2JzZXJ2ZXIgeyBmYWxzZSB9OwogICAgIGJvb2wgdXNlRXBoZW1lcmFs
U2Vzc2lvbiB7IGZhbHNlIH07CmRpZmYgLS1naXQgYS9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMv
RHVtcFJlbmRlclRyZWUubW0gYi9Ub29scy9EdW1wUmVuZGVyVHJlZS9tYWMvRHVtcFJlbmRlclRy
ZWUubW0KaW5kZXggZTBjYmVjMTU5OGJiNjZhNTc0MzM2N2Q3YzlmY2NjMmZmMjA5NzU0Yi4uOTRh
YmIzODM5ZjEyZGJlMDU5ZGE4ZTliZGZkYTYzNDExZDY2MjMwMyAxMDA2NDQKLS0tIGEvVG9vbHMv
RHVtcFJlbmRlclRyZWUvbWFjL0R1bXBSZW5kZXJUcmVlLm1tCisrKyBiL1Rvb2xzL0R1bXBSZW5k
ZXJUcmVlL21hYy9EdW1wUmVuZGVyVHJlZS5tbQpAQCAtODE0LDcgKzgxNCw2IEBAIHN0YXRpYyB2
b2lkIGVuYWJsZUV4cGVyaW1lbnRhbEZlYXR1cmVzKFdlYlByZWZlcmVuY2VzKiBwcmVmZXJlbmNl
cykKICAgICBbcHJlZmVyZW5jZXMgc2V0TWVkaWFQcmVsb2FkaW5nRW5hYmxlZDpZRVNdOwogICAg
IC8vIEZJWE1FOiBJbnB1dEV2ZW50cwogICAgIFtwcmVmZXJlbmNlcyBzZXRGZXRjaEFQSUtlZXBB
bGl2ZUVuYWJsZWQ6WUVTXTsKLSAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0VuYWJs
ZWQ6WUVTXTsKICAgICBbcHJlZmVyZW5jZXMgc2V0V2ViQW5pbWF0aW9uc0NvbXBvc2l0ZU9wZXJh
dGlvbnNFbmFibGVkOllFU107CiAgICAgW3ByZWZlcmVuY2VzIHNldFdlYkFuaW1hdGlvbnNNdXRh
YmxlVGltZWxpbmVzRW5hYmxlZDpZRVNdOwogICAgIFtwcmVmZXJlbmNlcyBzZXRDU1NDdXN0b21Q
cm9wZXJ0aWVzQW5kVmFsdWVzRW5hYmxlZDpZRVNdOwpAQCAtOTc3LDcgKzk3Niw2IEBAIHN0YXRp
YyB2b2lkIHNldFdlYlByZWZlcmVuY2VzRm9yVGVzdE9wdGlvbnMoY29uc3QgVGVzdE9wdGlvbnMm
IG9wdGlvbnMpCiAgICAgcHJlZmVyZW5jZXMubW9kZXJuTWVkaWFDb250cm9sc0VuYWJsZWQgPSBv
cHRpb25zLmVuYWJsZU1vZGVybk1lZGlhQ29udHJvbHM7CiAgICAgcHJlZmVyZW5jZXMuaW5zcGVj
dG9yQWRkaXRpb25zRW5hYmxlZCA9IG9wdGlvbnMuZW5hYmxlSW5zcGVjdG9yQWRkaXRpb25zOwog
ICAgIHByZWZlcmVuY2VzLmFsbG93Q3Jvc3NPcmlnaW5TdWJyZXNvdXJjZXNUb0Fza0ZvckNyZWRl
bnRpYWxzID0gb3B0aW9ucy5hbGxvd0Nyb3NzT3JpZ2luU3VicmVzb3VyY2VzVG9Bc2tGb3JDcmVk
ZW50aWFsczsKLSAgICBwcmVmZXJlbmNlcy53ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFi
bGVkID0gb3B0aW9ucy5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb247CiAgICAgcHJl
ZmVyZW5jZXMuY29sb3JGaWx0ZXJFbmFibGVkID0gb3B0aW9ucy5lbmFibGVDb2xvckZpbHRlcjsK
ICAgICBwcmVmZXJlbmNlcy5zZWxlY3Rpb25BY3Jvc3NTaGFkb3dCb3VuZGFyaWVzRW5hYmxlZCA9
IG9wdGlvbnMuZW5hYmxlU2VsZWN0aW9uQWNyb3NzU2hhZG93Qm91bmRhcmllczsKICAgICBwcmVm
ZXJlbmNlcy53ZWJHUFVFbmFibGVkID0gb3B0aW9ucy5lbmFibGVXZWJHUFU7CmRpZmYgLS1naXQg
YS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRlclRyZWUuY3BwIGIvVG9vbHMvRHVt
cFJlbmRlclRyZWUvd2luL0R1bXBSZW5kZXJUcmVlLmNwcAppbmRleCA5NjNmYzBhMmY0ZjkyZmI3
OWYwMmQ2NjM5MmUwOTI0MTA0NTI2ZjU0Li42MzI5ZGM0YWI4NzJkOGFjZGUwNTQyNmU3YzQxMGY0
MGQ0OTBmNTMyIDEwMDY0NAotLS0gYS9Ub29scy9EdW1wUmVuZGVyVHJlZS93aW4vRHVtcFJlbmRl
clRyZWUuY3BwCisrKyBiL1Rvb2xzL0R1bXBSZW5kZXJUcmVlL3dpbi9EdW1wUmVuZGVyVHJlZS5j
cHAKQEAgLTc5Niw3ICs3OTYsNiBAQCBzdGF0aWMgdm9pZCBlbmFibGVFeHBlcmltZW50YWxGZWF0
dXJlcyhJV2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzKQogICAgIHByZWZzUHJpdmF0ZS0+c2V0
VmlzdWFsVmlld3BvcnRBUElFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0Q1NT
T01WaWV3U2Nyb2xsaW5nQVBJRW5hYmxlZChUUlVFKTsKICAgICBwcmVmc1ByaXZhdGUtPnNldFJl
c2l6ZU9ic2VydmVyRW5hYmxlZChUUlVFKTsKLSAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1h
dGlvbnNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0V2ViQW5pbWF0aW9uc0Nv
bXBvc2l0ZU9wZXJhdGlvbnNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0V2Vi
QW5pbWF0aW9uc011dGFibGVUaW1lbGluZXNFbmFibGVkKFRSVUUpOwogICAgIHByZWZzUHJpdmF0
ZS0+c2V0Q1NTQ3VzdG9tUHJvcGVydGllc0FuZFZhbHVlc0VuYWJsZWQoVFJVRSk7CkBAIC05MDks
NyArOTA4LDYgQEAgc3RhdGljIHZvaWQgc2V0V2ViUHJlZmVyZW5jZXNGb3JUZXN0T3B0aW9ucyhJ
V2ViUHJlZmVyZW5jZXMqIHByZWZlcmVuY2VzLCBjb25zdAogewogICAgIENPTVB0cjxJV2ViUHJl
ZmVyZW5jZXNQcml2YXRlOD4gcHJlZnNQcml2YXRlIHsgUXVlcnksIHByZWZlcmVuY2VzIH07CiAK
LSAgICBwcmVmc1ByaXZhdGUtPnNldFdlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQo
b3B0aW9ucy5lbmFibGVXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb24pOwogICAgIHByZWZzUHJp
dmF0ZS0+c2V0TWVudUl0ZW1FbGVtZW50RW5hYmxlZChvcHRpb25zLmVuYWJsZU1lbnVJdGVtRWxl
bWVudCk7CiAgICAgcHJlZnNQcml2YXRlLT5zZXRLZXlnZW5FbGVtZW50RW5hYmxlZChvcHRpb25z
LmVuYWJsZUtleWdlbkVsZW1lbnQpOwogICAgIHByZWZzUHJpdmF0ZS0+c2V0TW9kZXJuTWVkaWFD
b250cm9sc0VuYWJsZWQob3B0aW9ucy5lbmFibGVNb2Rlcm5NZWRpYUNvbnRyb2xzKTsKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCAzZjU3MTVmZTA1NDgwMDgzN2FmZjAzMmU0ZGY4YTBlOGY5M2M1Zjg0Li44ZDk4ZTkzZmU5ZjIx
MWU2ZDEzOWFlODIwMzRhM2MyNzUyMmY1OTNhIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODkgQEAKKzIwMjAt
MDktMTcgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVt
b3ZlIHRoZSBsZWdhY3kgYW5pbWF0aW9uIGNvZGUKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjYwOAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogYW5pbWF0aW9ucy9sZWdhY3ktZW5jb2RpbmctdGltaW5n
LWZ1bmN0aW9uLmh0bWw6CisgICAgICAgICogYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0aW9u
LXRlc3QtaGVscGVycy5qczoKKyAgICAgICAgKHBhdXNlQW5pbWF0aW9uQXRUaW1lT25FbGVtZW50
KToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25zL2Nzcy1kaXNwbGF5LW5v
bmUta2V5ZnJhbWUuaHRtbDoKKyAgICAgICAgKiBpbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9y
ZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5l
ci5odG1sOiBSZW1vdmVkLgorICAgICAgICAqIHRyYW5zaXRpb25zL2JhY2tncm91bmQtcG9zaXRp
b24tdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRy
YW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvYmxlbmRtb2RlLXRyYW5zaXRp
b25zLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9u
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMu
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sOgorICAgICAgICAqIHRyYW5zaXRp
b25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1sOgorICAgICAgICAqIHRyYW5z
aXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9jcm9zcy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0
aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1jb2xvci5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25z
L2N1YmljLWJlemllci1vdmVyZmxvdy1sZW5ndGguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9u
cy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93LXN2Zy1sZW5ndGguaHRtbDoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFu
c2l0aW9ucy9kZWxheS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlv
bnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNp
dGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2ZyYW1lcy10aW1pbmctZnVuY3Rpb24u
aHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwtdHJhbnNpdGlvbi5o
dG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFs
Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9ucy5odG1sOgorICAg
ICAgICAqIHRyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0bWw6
CisgICAgICAgICogdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWw6Cisg
ICAgICAgICogdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbDoK
KyAgICAgICAgKiB0cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWw6CisgICAgICAgICogdHJhbnNp
dGlvbnMvbW92ZS1hZnRlci10cmFuc2l0aW9uLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMv
bXVsdGlwbGUtYmFja2dyb3VuZC1zaXplLXRyYW5zaXRpb25zLmh0bWw6CisgICAgICAgICogdHJh
bnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAq
IHRyYW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9tdWx0aXBsZS1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL29w
YWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9yZXNv
dXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMuanM6CisgICAgICAgICogdHJhbnNpdGlvbnMv
c2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3No
b3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9z
aG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdGVwcy10
aW1pbmctZnVuY3Rpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmctbGF5b3V0LXRy
YW5zaXRpb24uaHRtbDoKKyAgICAgICAgKiB0cmFuc2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJh
bnNpdGlvbi5odG1sOgorICAgICAgICAqIHRyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1s
OgorICAgICAgICAqIHRyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRpb24uaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlzdC1tYXRjaC5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1lbmQtZXZlbnQtcmVuZGVyaW5nLmh0bWw6CisgICAg
ICAgICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zvcm0uaHRtbDoKKyAg
ICAgICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1sOgorICAgICAgICAqIHRy
YW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRtbDoKKyAgICAg
ICAgKiB0cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sOgorICAgICAg
ICAqIHRyYW5zaXRpb25zL3RyYW5zaXRpb24tdGltaW5nLWZ1bmN0aW9uLmh0bWw6CisgICAgICAg
ICogdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbDoKKyAgICAgICAgKiB0
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZyb20tdW5kZWZpbmVkLmh0bWw6CisgICAgICAgICog
dHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWw6CisgICAgICAgICogdHJhbnNpdGlv
bnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWw6CisgICAgICAgICogdHJhbnNpdGlvbnMvemVy
by1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWw6CisgICAgICAgICogd2Vi
YW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXktbm9u
ZS5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJl
bW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRpb24uaHRtbDoKKyAgICAgICAgKiB3ZWJhbmlt
YXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWw6CisgICAgICAgICog
d2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5
Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFm
dGVyLWNsZWFyaW5nLWNzcy1hbmltYXRpb24tZWZmZWN0Lmh0bWw6CisgICAgICAgICogd2ViYW5p
bWF0aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRp
b24tdGFyZ2V0LXJlbW92YWwuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25zL2Nzcy1hbmlt
YXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2UtYW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0
bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQt
Y2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0
aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sOgorICAgICAgICAqIHdlYmFuaW1hdGlvbnMvY3NzLXRy
YW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWw6CisgICAgICAgICog
d2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbDoKKyAgICAgICAgKiB3ZWJh
bmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3Bl
cnR5Lmh0bWw6CisgICAgICAgICogd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24t
bm9uZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbDoKKyAgICAgICAgKiB3ZWJhbmltYXRpb25z
L3NldHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNs
ZWFyaW5nLWVmZmVjdC5odG1sOgorCiAyMDIwLTA5LTE1ICBTZXJnaW8gVmlsbGFyIFNlbmluICA8
c3ZpbGxhckBpZ2FsaWEuY29tPgogCiAgICAgICAgIFtjc3MtZmxleF0gUmVtb3ZlIGZsZXhib3gn
cyBzcGVjaWZpYyBjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocygpCmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy9hbmltYXRpb25zL2xlZ2FjeS1lbmNvZGluZy10aW1pbmctZnVuY3Rpb24uaHRt
bCBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlv
bi5odG1sCmluZGV4IDQwMmY5OGVhMzExNWFhMWQ3NzZmYWY4OGVlZGI5MWEyODc1MWY5NzMuLjA4
ZWJjNDRjNGQxNmRhNjkyNWQ2NWVkYzEzMTk0ZDhhZDMyNTY0NzUgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlvbi5odG1sCisr
KyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvbGVnYWN5LWVuY29kaW5nLXRpbWluZy1mdW5jdGlv
bi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+IDwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
ZmFsc2UgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KICAgICA8c3R5bGU+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24t
dGVzdC1oZWxwZXJzLmpzIGIvTGF5b3V0VGVzdHMvYW5pbWF0aW9ucy9yZXNvdXJjZXMvYW5pbWF0
aW9uLXRlc3QtaGVscGVycy5qcwppbmRleCAxOGE1YTAxMjlmZjdmMmFlMjRiZDMzZTMxOWU2MDZm
NTc5YWE0MTllLi42ZGUwOGQzODU1MTg0NDM2NzExN2YwMDcyMjU3MDkwM2VhZjViY2ZlIDEwMDY0
NAotLS0gYS9MYXlvdXRUZXN0cy9hbmltYXRpb25zL3Jlc291cmNlcy9hbmltYXRpb24tdGVzdC1o
ZWxwZXJzLmpzCisrKyBiL0xheW91dFRlc3RzL2FuaW1hdGlvbnMvcmVzb3VyY2VzL2FuaW1hdGlv
bi10ZXN0LWhlbHBlcnMuanMKQEAgLTUxNCwxMSArNTE0LDYgQEAgZnVuY3Rpb24gY2hlY2tFeHBl
Y3RlZFZhbHVlQ2FsbGJhY2soZXhwZWN0ZWQsIGluZGV4KQogCiBmdW5jdGlvbiBwYXVzZUFuaW1h
dGlvbkF0VGltZU9uRWxlbWVudChhbmltYXRpb25OYW1lLCB0aW1lLCBlbGVtZW50KQogewotICAg
IC8vIElmIHdlIGhhdmVuJ3Qgb3B0ZWQgaW50byBDU1MgQW5pbWF0aW9ucyBhbmQgQ1NTIFRyYW5z
aXRpb25zIGFzIFdlYiBBbmltYXRpb25zLCB1c2UgdGhlIGludGVybmFsIEFQSS4KLSAgICBpZiAo
J2ludGVybmFscycgaW4gd2luZG93ICYmICFpbnRlcm5hbHMuc2V0dGluZ3Mud2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gaW50ZXJuYWxzLnBhdXNl
QW5pbWF0aW9uQXRUaW1lT25FbGVtZW50KGFuaW1hdGlvbk5hbWUsIHRpbWUsIGVsZW1lbnQpOwot
Ci0gICAgLy8gT3RoZXJ3aXNlLCB1c2UgdGhlIFdlYiBBbmltYXRpb25zIEFQSS4KICAgICBjb25z
dCBhbmltYXRpb25zID0gZWxlbWVudC5nZXRBbmltYXRpb25zKCk7CiAgICAgZm9yIChsZXQgYW5p
bWF0aW9uIG9mIGFuaW1hdGlvbnMpIHsKICAgICAgICAgaWYgKGFuaW1hdGlvbiBpbnN0YW5jZW9m
IENTU0FuaW1hdGlvbiAmJiBhbmltYXRpb24uYW5pbWF0aW9uTmFtZSA9PSBhbmltYXRpb25OYW1l
KSB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NvbnRlbnRleHRlbnNpb25z
L2Nzcy1kaXNwbGF5LW5vbmUta2V5ZnJhbWUuaHRtbCBiL0xheW91dFRlc3RzL2h0dHAvdGVzdHMv
Y29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sCmluZGV4IGMx
YzZmZDY3MmM0ZDBlZjc5ZjhiZTdiYTg4MTk0OWZiMjZkOTRjOTkuLmE1Y2UzNDJkNTJlYmZiMDA1
ZmQwNDFiNzg4ZmJiMTE2YjE2N2Y2ZGYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2h0dHAvdGVz
dHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9uZS1rZXlmcmFtZS5odG1sCisrKyBi
L0xheW91dFRlc3RzL2h0dHAvdGVzdHMvY29udGVudGV4dGVuc2lvbnMvY3NzLWRpc3BsYXktbm9u
ZS1rZXlmcmFtZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIEhUTUw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD1mYWxzZSBdIC0tPgorPCFET0NUWVBFIEhUTUw+CiA8c2NyaXB0PgogaWYgKHdpbmRv
dy50ZXN0UnVubmVyKSB7CiAgICAgdGVzdFJ1bm5lci5kdW1wQXNUZXh0KCk7CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0
eS10cmFuc2Zvcm0tdHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5odG1sIGIvTGF5b3V0
VGVzdHMvaW1wb3J0ZWQvYmxpbmsvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL29wYWNpdHktdHJhbnNm
b3JtLXRyYW5zaXRpb25zLWluc2lkZS1pZnJhbWUtaW5uZXIuaHRtbApkZWxldGVkIGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggY2I0MWNiYzhiZmM3ODQzYzNiYjk4OTMyZmM5ZWM5OTczYmM1MDcyNC4u
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAotLS0gYS9MYXlvdXRUZXN0
cy9pbXBvcnRlZC9ibGluay90cmFuc2l0aW9ucy9yZXNvdXJjZXMvb3BhY2l0eS10cmFuc2Zvcm0t
dHJhbnNpdGlvbnMtaW5zaWRlLWlmcmFtZS1pbm5lci5odG1sCisrKyAvZGV2L251bGwKQEAgLTEs
NzcgKzAsMCBAQAotPCFET0NUWVBFPgotPGh0bWw+Ci08aGVhZD4KLTxzdHlsZT4KLSAgICAjYmFj
a2dyb3VuZCB7Ci0gICAgICAgIHdpZHRoOiAyMDBweDsKLSAgICAgICAgaGVpZ2h0OiAyMDBweDsK
LSAgICAgICAgZGlzcGxheTogYmxvY2s7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IGdyZWVu
OwotICAgIH0KLSAgICAub3ZlcmxheSB7Ci0gICAgICAgIHdpZHRoOiA1MHB4OwotICAgICAgICBo
ZWlnaHQ6IDUwcHg7Ci0gICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1
NSwgMSk7Ci0gICAgICAgIC13ZWJraXQtdHJhbnNpdGlvbjogb3BhY2l0eSAxczsKLSAgICB9Ci0K
LSAgICAjcG9wdXAgewotICAgICAgICB3aWR0aDogMjBweDsKLSAgICAgICAgaGVpZ2h0OiAyMHB4
OwotICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7Ci0gICAgICAgIGJvcmRlci1yYWRpdXM6
IDZweDsKLSAgICAgICAgLXdlYmtpdC10cmFuc2l0aW9uOiAtd2Via2l0LXRyYW5zZm9ybSAxczsK
LSAgICB9Ci0KLSAgICAudHJhbnNwYXJlbnQgewotICAgICAgICBvcGFjaXR5OiAwOwotICAgIH0K
LQotICAgIFtoaWRkZW5dIHsKLSAgICAgICAgZGlzcGxheTogbm9uZTsKLSAgICB9Ci0KLSAgICAu
b3ZlcmxheS50cmFuc3BhcmVudCAucGFnZSB7Ci0gICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkg
dHJhbnNsYXRlWSgwcHgpOwotICAgIH0KLQotPC9zdHlsZT4KLTxzY3JpcHQgdHlwZT0idGV4dC9q
YXZhc2NyaXB0IiBjaGFyc2V0PSJ1dGYtOCI+Ci0gICAgZnVuY3Rpb24gcnVuVGVzdCgpCi0gICAg
ewotICAgICAgICB2YXIgc29saWRfY29sb3Jfb3ZlcmxheSA9IGRvY3VtZW50LmdldEVsZW1lbnRC
eUlkKCJzb2xpZF9jb2xvcl9vdmVybGF5Iik7Ci0gICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXku
cmVtb3ZlQXR0cmlidXRlKCdoaWRkZW4nKTsKLQotICAgICAgICB2YXIgcG9wdXAgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgicG9wdXAiKTsKLSAgICAgICAgcG9wdXAucmVtb3ZlQXR0cmlidXRl
KCdoaWRkZW4nKTsKLQotICAgICAgICAvLyBOT1RFOiBUaGlzIGlzIGEgaGFja3kgd2F5IHRvIGZv
cmNlIHRoZSBjb250YWluZXIgdG8gbGF5b3V0IHdoaWNoCi0gICAgICAgIC8vIHdpbGwgYWxsb3cg
dXMgdG8gdHJpZ2dlciB0aGUgd2Via2l0IHRyYW5zaXRpb24uCi0gICAgICAgIC8vIFNlZSBjcmJ1
Zy5jb20vMzI0Njg1Ci0gICAgICAgIHNvbGlkX2NvbG9yX292ZXJsYXkuc2Nyb2xsVG9wOwotICAg
ICAgICBzb2xpZF9jb2xvcl9vdmVybGF5LmNsYXNzTGlzdC5yZW1vdmUoJ3RyYW5zcGFyZW50Jyk7
Ci0KLSAgICAgICAgLy8gZHVtcCB0aGUgcGl4ZWwgaW4gdGhlIG1pZGRsZSBvZiB0aGUgdHJhbnNp
dGlvbgotICAgICAgICBpZiAod2luZG93LmludGVybmFscykgewotICAgICAgICAgICAgd2luZG93
LmludGVybmFscy5mb3JjZUNvbXBvc2l0aW5nVXBkYXRlKGRvY3VtZW50KTsKLSAgICAgICAgICAg
IHdpbmRvdy5pbnRlcm5hbHMucGF1c2VBbmltYXRpb25zKDAuNSk7Ci0gICAgICAgIH0KLSAgICAg
ICAgdHJpZ2dlclBpeGVsUmVzdWx0cygpOwotICAgIH0KLQotICAgIGZ1bmN0aW9uIHRyaWdnZXJQ
aXhlbFJlc3VsdHMoKQotICAgIHsKLSAgICAgICAgcGFyZW50LnBvc3RNZXNzYWdlKCJUcmlnZ2Vy
UGl4ZWxSZXN1bHRzIiwgJyonKTsKLSAgICB9Ci0KLSAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5l
cignbG9hZCcsIHJ1blRlc3QsIGZhbHNlKTsKLTwvc2NyaXB0PgotPC9oZWFkPgotPGJvZHk+Ci08
ZGl2IGlkPSJiYWNrZ3JvdW5kIj4KLSAgICA8ZGl2IGlkPSJzb2xpZF9jb2xvcl9vdmVybGF5IiBj
bGFzcz0ib3ZlcmxheSB0cmFuc3BhcmVudCIgaGlkZGVuPXRydWU+Ci0gICAgICAgIDxkaXYgaWQ9
InBvcHVwIiBjbGFzcz0icGFnZSIgaGlkZGVuPXRydWU+PC9kaXY+Ci0gICAgPC9kaXY+Ci08L2Rp
dj4KLTwvYm9keT4KLTwvaHRtbD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL2JhY2tncm91bmQtcG9zaXRpb24tdHJhbnNpdGlvbnMuaHRtbAppbmRleCA2MDFjZDVh
ODdmMjA0MTA2MmYxYTlkMDk4MDA5YzU0N2Y1MmYzNDVlLi5kOTE0ZmNiYmU4MWQ0N2NkYmIxYWVl
YmFjYjc5NWEzNzkzMWE0YTFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9i
YWNrZ3JvdW5kLXBvc2l0aW9uLXRyYW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvYmFja2dyb3VuZC1wb3NpdGlvbi10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFj
a2dyb3VuZC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYmFja2dy
b3VuZC10cmFuc2l0aW9ucy5odG1sCmluZGV4IGE4MzdlMDU3ZGJjMTE4Yzc0YWJiYjYwM2VlYzU1
NmU3Yzg4N2U1YTguLmJhNDAwY2FjOWViZmUxY2ExMGUyOTBhNzk4ZTk5ZDcyYjM0ODgwYmEgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JhY2tncm91bmQtdHJhbnNpdGlvbnMu
aHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9iYWNrZ3JvdW5kLXRyYW5zaXRpb25z
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIg
WyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0g
LS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9ibGVuZG1vZGUtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2JsZW5kbW9kZS10cmFuc2l0aW9ucy5odG1sCmluZGV4IDg5N2NiNDc4OTBlY2Y0
OGUxZmQwMDU4OGQ0Yjg4YzkxNzJiMjYxMDMuLmE1YmZhMjdkM2FkMzIxOTkyMDg5MjE2MTUzMGI1
ZDczZTE5ZDU2OTYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9k
ZS10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JsZW5kbW9k
ZS10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2JvcmRlci1yYWRpdXMtdHJhbnNp
dGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0
aW9uLmh0bWwKaW5kZXggYjhhM2ZiNTNlN2JkNmJiMDZkMTk5ZDk1NWU0MDNjOTEzNzA3ZDU4OS4u
NTYzYmE5YzhmZjRmOGFjMmRiM2Q1MTRhYjFiMzYxNjI0Y2NlMzMwYyAxMDA2NDQKLS0tIGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvYm9yZGVyLXJhZGl1cy10cmFuc2l0aW9uLmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmlt
ZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURP
Q1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9jbGlwLXBhdGgtcGF0aC10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvY2xpcC1wYXRoLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBmZjIzZmEwNDUxMjNl
ZDMxMDU3ZTgyN2Q3MWFhZGM5ODhkMjEyZDc4Li5jMWZhYTVjZjQyMTIxODAzNWI0MTBlMmFlYzJi
ZDYyM2I3NDBhNzZkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBh
dGgtcGF0aC10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Ns
aXAtcGF0aC1wYXRoLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY2xpcC1wYXRo
LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJh
bnNpdGlvbnMuaHRtbAppbmRleCBiNTVlZGZiN2VhODQ1NTVkOGFjNDRiY2FmZmNhODQwYzc1Nzhl
ZjU2Li41ZTY2NDRhODg0ZmNjZDYwN2JiNzYwYjE5OGQ5OTBmNzFlMjlhZmRiIDEwMDY0NAotLS0g
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jbGlwLXBhdGgtdHJhbnNpdGlvbnMuaHRtbApAQCAt
MSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhw
ZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgor
PCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jbGlwLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL2NsaXAtdHJhbnNpdGlvbi5odG1sCmluZGV4IDNjN2UyOWYxOTcwMTJkZmRlYTQzMDQzY2Mw
NDJhNzIxZGUwODEzZTEuLmZkZTFmMTczYWJjOTZiOTFhYTQ2YmVmOTdhOGY5MDllY2Y3ZDAxYjkg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NsaXAtdHJhbnNpdGlvbi5odG1sCkBAIC0x
LDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tYWxsLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLWFsbC5odG1sCmluZGV4IDMzYzU5ODBlNjg3YWIzZTAy
ZTdlM2YyNTc3NmM4NzNmZDVkZThhYjkuLmE0OTJlNzEzMzk0NDAwYzI2ZDM0N2U4OGFlMWQxM2Mz
MTdlM2RjN2YgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5z
aXRpb24tYWxsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNp
dGlvbi1hbGwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcHJlbXVsdGlwbGllZC5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVk
Lmh0bWwKaW5kZXggYzczZmQ0YWE4M2NmYWQ5NWI1MGI2ZTYzNTkxZTlhZTY3OTg5NTZkZC4uNTdj
NjNlYzlhOGMxYWUwN2RhZDhjMzc4NWRmM2I4MTQ0YjkyOGYyMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVkLmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1wcmVtdWx0aXBsaWVk
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5odG1sIGIv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY29sb3ItdHJhbnNpdGlvbi1yb3VuZGluZy5odG1sCmlu
ZGV4IDZlNzU2YmYzMzc4M2ZkNzIxZjMzYTY3YzhmYmQ2ZjI4ZjE1NWU1YjAuLmNhYWExMTU3OWY5
YjBkZjg2ZTA4MTk0YzBkOTBmMWRkZjhiNTAzMTcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL2NvbG9yLXRyYW5zaXRpb24tcm91bmRpbmcuaHRtbAorKysgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9jb2xvci10cmFuc2l0aW9uLXJvdW5kaW5nLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2Vi
QW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jcm9z
cy1mYWRlLWJhY2tncm91bmQtaW1hZ2UuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Ny
b3NzLWZhZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCmluZGV4IDc2ZTlkYjI2YTNiMTRkNGEzOGEz
Y2RhZjAwZWY2NmJmZjhlZGRiNjQuLmI4ZDcwYTI3OTM1MTU1YmVhYjI4ZTc4NWNhZWY4ZjI1Mzhk
Yzk1NmIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYmFj
a2dyb3VuZC1pbWFnZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZh
ZGUtYmFja2dyb3VuZC1pbWFnZS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2Uu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2Nyb3NzLWZhZGUtYm9yZGVyLWltYWdlLmh0
bWwKaW5kZXggNGRiZGY3YTZiMTNmOGFlZTAzYTc3ODliMzY4YzEwOGUzZDFhNGRkZi4uODdkYzAw
N2VkZjVmYjc2ZmYxNDUxY2E5YWZmOGNiOWNhYWE0MTg5NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvY3Jvc3MtZmFkZS1ib3JkZXItaW1hZ2UuaHRtbAorKysgYi9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9jcm9zcy1mYWRlLWJvcmRlci1pbWFnZS5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3Vi
aWMtYmV6aWVyLW92ZXJmbG93LWNvbG9yLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9j
dWJpYy1iZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbAppbmRleCBiNzZlYjY1YWVkMzNjODQ2YzRk
Y2VjNDViOTdkNTQxYTAzOGNlN2JhLi43NDc0ZjY2ZDExNmM2ZjJhMjNhMmFmNjMzYTUwNDRlMjhj
MmI3NjczIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXIt
b3ZlcmZsb3ctY29sb3IuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1i
ZXppZXItb3ZlcmZsb3ctY29sb3IuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAg
PGhlYWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxvdzogQ29sb3JzPC90
aXRsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1v
dmVyZmxvdy1sZW5ndGguaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemll
ci1vdmVyZmxvdy1sZW5ndGguaHRtbAppbmRleCA2NmZlYmFjZmY5N2U0MmE2NzNiMWRhNTlhYWMw
ZjYzNzFmOWVjNWFkLi4xYjVkZGFmZGY2NDhkOWYxMGYwZWM4ZjIwZDk0OWJhMzYxNmZlODRmIDEw
MDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ct
bGVuZ3RoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92
ZXJmbG93LWxlbmd0aC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3
ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0
aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4K
ICAgICA8dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBMZW5ndGhzPC90aXRsZT4K
ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxv
dy1zaGFkb3cuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVy
Zmxvdy1zaGFkb3cuaHRtbAppbmRleCBhOTlhNGRiYTczNmFmYjJmOTU4MDVhZTg4ODVlMDJiZTBj
MGE3M2Y4Li4wYmNjYTg4ZTg3MTdkYWRmNTllM2NlYmQwNjkxOWNlYWM0YTJhNzZlIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZsb3ctc2hhZG93
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92ZXJmbG93
LXNoYWRvdy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFkb2N0eXBlIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IWRvY3R5cGUgaHRtbD4KIDxodG1sPgogICA8aGVhZD4KICAgICA8
dGl0bGU+Y3ViaWMtYmV6aWVyIHZhbHVlIG92ZXJmbG93OiBTaGFkb3dzPC90aXRsZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmct
bGVuZ3RoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJpYy1iZXppZXItb3ZlcmZs
b3ctc3ZnLWxlbmd0aC5odG1sCmluZGV4IDcyMDI0NjgxYjNjM2E3Y2RkMTlhMjhmNGMyODM4ZTYw
NGFkNWI3Y2IuLjM1NTUzMDM5ZmM5ZGE4ZGI2ZWVhMzI5NTZkOTFhYzFlNjQyY2ExZDMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1vdmVyZmxvdy1zdmct
bGVuZ3RoLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVyLW92
ZXJmbG93LXN2Zy1sZW5ndGguaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhZG9jdHlwZSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFkb2N0eXBlIGh0bWw+CiA8aHRtbD4KICAgPGhl
YWQ+CiAgICAgPHRpdGxlPmN1YmljLWJlemllciB2YWx1ZSBvdmVyZmxvdzogU1ZHIExlbmd0aHM8
L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMtYmV6aWVy
LW92ZXJmbG93LXRyYW5zZm9ybS5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvY3ViaWMt
YmV6aWVyLW92ZXJmbG93LXRyYW5zZm9ybS5odG1sCmluZGV4IDY2MDk3MjUzNGRjNjYyYmMzYjgw
ZmY3NjQ5MzZmZmI0YWRhNWYyNjguLjY1MjkxMTJiMTFkNjRmMWVjNDBhYmFjNTc1YTY4NjgxNTQw
NWQ1NzUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2N1YmljLWJlemllci1v
dmVyZmxvdy10cmFuc2Zvcm0uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9jdWJp
Yy1iZXppZXItb3ZlcmZsb3ctdHJhbnNmb3JtLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IWRvY3R5
cGUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhZG9jdHlwZSBodG1sPgogPGh0
bWw+CiAgIDxoZWFkPgogICAgIDx0aXRsZT5jdWJpYy1iZXppZXIgdmFsdWUgb3ZlcmZsb3c6IFRy
YW5zZm9ybXM8L3RpdGxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVm
YXVsdC10aW1pbmctZnVuY3Rpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlZmF1
bHQtdGltaW5nLWZ1bmN0aW9uLmh0bWwKaW5kZXggNzk4M2ZkY2VkMjI2MzcwZTFhMzQ0OTAxM2Uw
Yzk4NWUwZDZlMjg2Yy4uMzUwODdjMzY0YTNmMWM5OGU0NDBkOWE3OTllMGJkZDBjYmYwMDBhZSAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZGVmYXVsdC10aW1pbmctZnVuY3Rp
b24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9kZWZhdWx0LXRpbWluZy1mdW5j
dGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9kZWxheS5odG1sCmluZGV4IDk5YzMxZWE4N2RhMDkxZDVkNjdkYTU5ZjExYjNmMjY5
M2EwZmY0YzAuLjNhMDJiNjI3OTgxMDVhMzZkNjBlZWExODIxYWY3MDM4MGVjY2VhMmQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2RlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvZGVsYXkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorCiA8aHRtbD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0
cy90cmFuc2l0aW9ucy9mbGV4LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggOWZjNDY2MDM3YTUzOTUy
ZmRiOTAwZGMwZTk2M2Y0MzUyZTkxNjk0NS4uNjFmNDU2YWNlOTE3MzBlN2IyNGNmZjZjNTQxOGY3
MjA1ZDc1M2NkNyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZmxleC10cmFu
c2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZsZXgtdHJhbnNpdGlv
bnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRT4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvZm9udC1mYW1pbHktZHVyaW5nLXRyYW5zaXRpb24u
aHRtbAppbmRleCBjZGNkMjBmMTU3NDkzN2Q5YWJjYjc2NmYyZTkyMDdkYzc4ZmRjYzc4Li4wM2Y5
NTJkYTFiNzMzZTg0OTY5MTRjNWExNzY5YTgwMTdiYzZjOGZmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy90cmFuc2l0aW9ucy9mb250LWZhbWlseS1kdXJpbmctdHJhbnNpdGlvbi5odG1sCisrKyBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ZvbnQtZmFtaWx5LWR1cmluZy10cmFuc2l0aW9uLmh0
bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5l
ciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUg
XSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvZnJhbWVzLXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4IDMwZmVj
YzZkNTFkNGMwNmU2NGVjN2FlZjAwMDk4NTA0NmJiNWYwOGEuLmU4YjE2MjEwZWE3NjU3ZTQ3MGIw
ZGEyODE0MDM5Zjg1NTIyYTQzMDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L2ZyYW1lcy10aW1pbmctZnVuY3Rpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9mcmFtZXMtdGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUg
aHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25z
Q1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogCiA8aHRt
bD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvaW50ZXJydXB0
ZWQtYWxsLXRyYW5zaXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2ludGVycnVw
dGVkLWFsbC10cmFuc2l0aW9uLmh0bWwKaW5kZXggN2Q0NzNlOTEyMTQ2NTgzZjgxMTA5M2RlMjk3
YmUzYWFmNTM4YmI0OC4uOWU2NmNkNGY5MjYxNGUxZTUwN2YyY2ZhNjQyM2Y3ZDJlNjEwMDlkZCAx
MDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvaW50ZXJydXB0ZWQtYWxsLXRyYW5z
aXRpb24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9pbnRlcnJ1cHRlZC1hbGwt
dHJhbnNpdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1p
bml0aWFsLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9sb25naGFuZC12cy1zaG9ydGhh
bmQtaW5pdGlhbC5odG1sCmluZGV4IDYwOTkzM2Y2MDRhNzE1MjhjZWY0MzFhN2JhNDk1OGJhNzJl
NDc5NWYuLjIwMmU2NGQ2NDRkZjVjOGQ1ZjVlNGY5OTE4N2I0NzdhM2E4ZmJkMWUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL2xvbmdoYW5kLXZzLXNob3J0aGFuZC1pbml0aWFs
Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbG9uZ2hhbmQtdnMtc2hvcnRoYW5k
LWluaXRpYWwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL21hc2stdHJhbnNpdGlvbnMuaHRtbAppbmRleCBiYzdjNzE4M2VhZjNmOWQ5
YjRjMDY4N2RiYjk3NjRkM2E5NzJmNTA4Li4wYzNkMzlhYjlmMjFhZDFmYjA5Nzg2MmYwM2VkMTJl
ZTVmY2ExNmIzIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tYXNrLXRyYW5z
aXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWFzay10cmFuc2l0aW9u
cy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlvbnMuaHRtbCBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL21pbi1tYXgtd2lkdGgtaGVpZ2h0LXRyYW5zaXRpb25zLmh0
bWwKaW5kZXggMTIwNDExN2JjYzMyMGMxMmE4MWVlMmJlZWUyMjhlNDExZjk5YjljNy4uOWRkZjM5
MzhhMjliZjNlMTBjOGM4YjZiNzQ2ZTMxYjAzZDc0MjYwYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvbWluLW1heC13aWR0aC1oZWlnaHQtdHJhbnNpdGlvbnMuaHRtbAorKysg
Yi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taW4tbWF4LXdpZHRoLWhlaWdodC10cmFuc2l0aW9u
cy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVy
IFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBd
IC0tPgorPCFET0NUWVBFPgogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctc3R5bGVzLmh0bWwgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMuaHRtbAppbmRl
eCBlMmU1Y2IwNzI5ZDgxM2Q5ODQ2MGI4OTg0YTQxMjBiNGZiOWVkZTI3Li44NzIzYzI3NDE2ODhi
ZWQ0OTAzYzc4YzgyOTY4NGI0NWQ0Y2M3NjAxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9taXNtYXRjaGVkLXNoYWRvdy1zdHlsZXMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldl
YkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0
bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9taXNtYXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbWlzbWF0Y2hlZC1zaGFkb3ctdHJhbnNpdGlvbnMuaHRtbAppbmRleCBjYjZkMzRkODQ3
NWJmYTYxMTM2YjM2MzM4YmJjNzg3ZTBlOGVjNTA4Li42ODdkMTBmMTIwOGE4MzVjZDI1ZmU5MDA5
ZDQ1MzdkNGEwOGM2NzA0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXNt
YXRjaGVkLXNoYWRvdy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL21pc21hdGNoZWQtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08
IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1s
PgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBl
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9taXhlZC10eXBlLmh0bWwKaW5kZXggMjRm
YjExZmVmNGUxODcyZjE0MmIwZjU3MmRmNTUxYzA3MzkzYjFiZC4uMzMzMjM2OGQ2ZTQ0ODUyMGZi
ODE2ODM3ZDQ5ZjdjOTc4ZTQ0ODlmYSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvbWl4ZWQtdHlwZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL21peGVkLXR5
cGUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8c3R5bGU+CiAjYm94IHsKICAgICB3aWR0aDog
MTAlOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbW92ZS1hZnRlci10cmFu
c2l0aW9uLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRp
b24uaHRtbAppbmRleCBjZWQyZDVhMjIyMjgwNzAxN2U1MzY5YWQwMWUxM2RiNjE1ZjNlNzJmLi5k
YzQ0NThmMmQ1Mjc2NzZjOGNkNzMyZTBlMmJlYzk2MGVkOGIzYjZmIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9tb3ZlLWFmdGVyLXRyYW5zaXRpb24uaHRtbApAQCAtMSw0ICsx
LDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NU
WVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXNpemUtdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IDIxM2UyMWFkY2VkNjZhN2FhZDY3ZWM4YjVmOTU2OGM3ZjdiZWZmMjQuLjE0ZDc1
MWM2NDk3MzNjMWMzMGEwN2JkYzRmZmI4ZWUzNjFjNTIwMjkgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10cmFuc2l0aW9ucy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtc2l6ZS10
cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0aW9ucy5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtYmFja2dyb3VuZC10cmFuc2l0
aW9ucy5odG1sCmluZGV4IGIyOWVlNzNkMzUwZDk1YjM3YjcyMTcxODZlYWE5YmMyOTMxODA2YzUu
LjUwMzA2N2MxNjRjYTYwNzk1N2FkNThmMzY2ZGZmZGEyNzRlNzU4NTcgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxlLWJhY2tncm91bmQtdHJhbnNpdGlvbnMuaHRt
bAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1iYWNrZ3JvdW5kLXRyYW5z
aXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1y
dW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10
cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9tdWx0aXBsZS1tYXNrLXRyYW5zaXRpb25zLmh0bWwKaW5kZXgg
MzkyM2Q5M2M2ZDg0NTM0ZTVmN2Q3OGViOWYzZTM2YWRhNGZkMzAyYy4uNWNiZTY5ZmMwNDc1NzJl
YWJlNjBhMDQ4N2YxNTM2NWE0Y2E5YTkxOSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvbXVsdGlwbGUtbWFzay10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL211bHRpcGxlLW1hc2stdHJhbnNpdGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAK
LTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRT4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL211bHRpcGxl
LXNoYWRvdy10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlw
bGUtc2hhZG93LXRyYW5zaXRpb25zLmh0bWwKaW5kZXggMzRhMGFkMjYzY2E5ZjE1OGQ3NDk5MDVh
NGM1ZGZjNjU1MWU5M2ViNi4uNGE5ZDRlYzU2NGYzM2M1NTQ3MzMxN2UxMThmNGY5MDdlY2U3NTA4
OCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hhZG93LXRy
YW5zaXRpb25zLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvbXVsdGlwbGUtc2hh
ZG93LXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJr
aXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9u
RW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2ZS1kZWxheS5odG1sIGIvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvbmVnYXRpdmUtZGVsYXkuaHRtbAppbmRleCBjNzViZTdmM2NjNmQ1
OTNjZmQxMDYyYTc3NTY1NzZiNWJhYTZhNmI2Li5kMzNlNGI1NzYwZjU1M2M3Y2NkNzBiN2Q0Yzdk
ODM2NjU1M2QxZjRkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9uZWdhdGl2
ZS1kZWxheS5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL25lZ2F0aXZlLWRlbGF5
Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZm
IC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRl
eC5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvb3BhY2l0eS10cmFuc2l0aW9uLXppbmRl
eC5odG1sCmluZGV4IGQ4NjM3MDU5ZWY3MGZlN2EyMmViMGNkMjA5NTZlN2FiZGQ4NzcxOGUuLjg2
MmJhMDJiMTVmNjJlYjM0Mjg3ZmE1OGY0NGNiNWViNDdmOWM5YjYgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL29wYWNpdHktdHJhbnNpdGlvbi16aW5kZXguaHRtbAorKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9vcGFjaXR5LXRyYW5zaXRpb24temluZGV4Lmh0bWwKQEAg
LTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpzIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvcmVzb3VyY2VzL3RyYW5zaXRpb24tdGVzdC1oZWxwZXJzLmpz
CmluZGV4IDdlNzlkMGM5ZTFiNDlhOGU3ODE2OTNlODRiZmY0MDkxODMyNWJmYzYuLmYzNTczMWI2
NWZhNGM3NTJmZDEyNjAyZDcwMWZjMDliODYwZDA3ZWEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3RyYW5zaXRpb25zL3Jlc291cmNlcy90cmFuc2l0aW9uLXRlc3QtaGVscGVycy5qcworKysgYi9M
YXlvdXRUZXN0cy90cmFuc2l0aW9ucy9yZXNvdXJjZXMvdHJhbnNpdGlvbi10ZXN0LWhlbHBlcnMu
anMKQEAgLTM4MSwxNCArMzgxLDkgQEAgY29uc3QgcHJvcGVydGllc1JlcXVpcmluZ1ByZWZpeCA9
IFsiLXdlYmtpdC10ZXh0LXN0cm9rZS1jb2xvciIsICItd2Via2l0LXRleHQtZmkKIAogZnVuY3Rp
b24gcGF1c2VUcmFuc2l0aW9uQXRUaW1lT25FbGVtZW50KHRyYW5zaXRpb25Qcm9wZXJ0eSwgdGlt
ZSwgZWxlbWVudCkKIHsKLSAgICAvLyBJZiB3ZSBoYXZlbid0IG9wdGVkIGludG8gQ1NTIEFuaW1h
dGlvbnMgYW5kIENTUyBUcmFuc2l0aW9ucyBhcyBXZWIgQW5pbWF0aW9ucywgdXNlIHRoZSBpbnRl
cm5hbCBBUEkuCi0gICAgaWYgKCdpbnRlcm5hbHMnIGluIHdpbmRvdyAmJiAhaW50ZXJuYWxzLnNl
dHRpbmdzLndlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQoKSkKLSAgICAgICAgcmV0
dXJuIGludGVybmFscy5wYXVzZVRyYW5zaXRpb25BdFRpbWVPbkVsZW1lbnQodHJhbnNpdGlvblBy
b3BlcnR5LCB0aW1lLCBlbGVtZW50KTsKLQogICAgIGlmICh0cmFuc2l0aW9uUHJvcGVydHkuc3Rh
cnRzV2l0aChwcmVmaXgpICYmICFwcm9wZXJ0aWVzUmVxdWlyaW5nUHJlZml4LmluY2x1ZGVzKHRy
YW5zaXRpb25Qcm9wZXJ0eSkpCiAgICAgICAgIHRyYW5zaXRpb25Qcm9wZXJ0eSA9IHRyYW5zaXRp
b25Qcm9wZXJ0eS5zdWJzdHIocHJlZml4Lmxlbmd0aCk7CiAKLSAgICAvLyBPdGhlcndpc2UsIHVz
ZSB0aGUgV2ViIEFuaW1hdGlvbnMgQVBJLgogICAgIGNvbnN0IGFuaW1hdGlvbnMgPSBlbGVtZW50
LmdldEFuaW1hdGlvbnMoKTsKICAgICBmb3IgKGxldCBhbmltYXRpb24gb2YgYW5pbWF0aW9ucykg
ewogICAgICAgICBpZiAoYW5pbWF0aW9uIGluc3RhbmNlb2YgQ1NTVHJhbnNpdGlvbiAmJiBhbmlt
YXRpb24udHJhbnNpdGlvblByb3BlcnR5ID09IHRyYW5zaXRpb25Qcm9wZXJ0eSkgewpkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5o
dG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc2hhcGUtb3V0c2lkZS10cmFuc2l0aW9ucy5o
dG1sCmluZGV4IDcwODgxZmU5MDIxYzg5NTAxMTA1M2Y0MmYxY2JiYWFjNDMyODYyNGQuLmFlZmM5
YTA1MzhmZWIwNGY4M2FlMTVlNDhiMjUyMzk5ZGQ4MTY1ZjEgMTAwNjQ0Ci0tLSBhL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3NoYXBlLW91dHNpZGUtdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy9zaGFwZS1vdXRzaWRlLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEs
NCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVy
aW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwh
RE9DVFlQRSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1sIGIvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvc2hvcnRoYW5kLWJvcmRlci10cmFuc2l0aW9ucy5odG1sCmluZGV4IDM1
YzllMzI5MWZhYTEyNjIyMmQ0NDEwZTJhMmZlM2U3NDQ5ZTdmOWMuLmZhYTc0NWMxYjFlN2UxYTM5
MWQ2MjRjZWIxZjUxNTRjM2QwMDg3MjggMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRp
b25zL3Nob3J0aGFuZC1ib3JkZXItdHJhbnNpdGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy9zaG9ydGhhbmQtYm9yZGVyLXRyYW5zaXRpb25zLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogCiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvc2hvcnRoYW5kLXRyYW5zaXRpb25zLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy9zaG9ydGhhbmQtdHJhbnNpdGlvbnMuaHRtbAppbmRleCBkMzIyYjRlMWY0MWM1NWUwNGQzMDk5
MzdmZGRjYmIxMTY1Zjk5N2NjLi5iNTUxYTJjYmM3NjRiY2UyZWNmZGI1NzE2MmI0YTE3YTI0ZDMx
NmQwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNp
dGlvbnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zaG9ydGhhbmQtdHJhbnNp
dGlvbnMuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRl
c3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJs
ZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdGVwcy10aW1pbmctZnVuY3Rpb24uaHRtbCBi
L0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sCmluZGV4
IDNlZTU1ZTAwYTRjY2MyN2RhNDc3OTU1N2NhM2Y5NmZlNzBlY2JmZWYuLmJiOTYyYmNiOTcwNDMy
Mjk2MjliODRhOTJlNGEwY2UwNTgwMTU0MWUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3N0ZXBzLXRpbWluZy1mdW5jdGlvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NU
WVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0
aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAog
PGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy1s
YXlvdXQtdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91
dC10cmFuc2l0aW9uLmh0bWwKaW5kZXggMTQ1ZDgzYTAyYjAyMmM2MWU2ZmE4OGQ5NDY3MDNmYmFh
NGFhMTk1MS4uMDA1OGFiNWQxNDE2ZGE0YjdjZGViYmQyZDE0ZWFkMjg2MGY3YmNiZSAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvc3ZnLWxheW91dC10cmFuc2l0aW9uLmh0bWwK
QEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEU+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBl
cmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8
IURPQ1RZUEU+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFu
c2l0aW9ucy9zdmctdGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvc3ZnLXRleHQtc2hhZG93LXRyYW5zaXRpb24uaHRtbAppbmRleCAzZmNhZDM4ODA2
Y2E2MDA3YmE3OGY1ZjBiNDIwMjgwMTU0MjNhNjVmLi41Nzk3ZTVlZGUzZGVhZGQ3MmQzYzNhYTM1
MTU2YTEyYTEwNGM3YWFiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy9zdmct
dGV4dC1zaGFkb3ctdHJhbnNpdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25z
L3N2Zy10ZXh0LXNoYWRvdy10cmFuc2l0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGh0
bWw+CiA8aGVhZD4KICAgICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0
aW9ucy9zdmctdHJhbnNpdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10
cmFuc2l0aW9ucy5odG1sCmluZGV4IDhmM2Q4MmY0ZTc1ZDM0ZDVhYjZmYjM4N2I0M2VkOGIzNWI4
ZWM0YzEuLmFhMzk4ODA3OGZjOWVkY2E2ZTIwZTIyNThmMTNlYzllMTllOWRlNzcgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sCisrKyBiL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3N2Zy10cmFuc2l0aW9ucy5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NT
U0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+CisKIDxodG1sPgogPGhlYWQ+CiAgIDxzdHls
ZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5z
aXRpb24uaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RleHQtaW5kZW50LXRyYW5zaXRp
b24uaHRtbAppbmRleCA0NzQ0YjU4NWNlZWZiODE0NWViMmU0OWM3OTYwMWE2MTkzMWRkMWUxLi4x
NmY4YWYxODgyYTVhNzZjYWQzY2Y3MzU0NGFmNTkzYTlmMjAwNzFjIDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90ZXh0LWluZGVudC10cmFuc2l0aW9uLmh0bWwKKysrIGIvTGF5
b3V0VGVzdHMvdHJhbnNpdGlvbnMvdGV4dC1pbmRlbnQtdHJhbnNpdGlvbi5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCFET0NUWVBFPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFs
OldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBF
PgogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3QtbWF0Y2guaHRtbCBiL0xheW91dFRlc3RzL3RyYW5z
aXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW1hdGNoLmh0bWwKaW5kZXggMGY5YzQ4NzM0ZGRmZWRj
ZjZmY2ZmYjdlMzk3ODkwNThhZWI4MTU0Mi4uMGQzZjMzZWQxNTI3OTM0MDMxNTljMzIyNjBkMmIy
ZmQ4MDJkNjM1ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3Jt
LW9wLWxpc3QtbWF0Y2guaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zv
cm0tb3AtbGlzdC1tYXRjaC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEt
LSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVn
cmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVh
ZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0
LW5vLW1hdGNoLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2Zvcm0tb3AtbGlz
dC1uby1tYXRjaC5odG1sCmluZGV4IDg2ZGVhN2UwZmE1ZWJkMzU2N2JjMjE0MDhjMDc3ZjJhNDcy
ODJhMjcuLmJmNmQzMGRkM2RhNmEyOGM3ODE1ODBkNjQxZjdiZDJjMmVjMGE5OWUgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zZm9ybS1vcC1saXN0LW5vLW1hdGNoLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNmb3JtLW9wLWxpc3Qtbm8tbWF0
Y2guaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWVuZC1ldmVudC1yZW5kZXJpbmcu
aHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRl
cmluZy5odG1sCmluZGV4IDAwN2NlOGRkMDU4NTM1NjcyN2RlOTE2NTE1ZmJiM2NjNDI3YjE3YmQu
Ljk1OWFmZDYwZDA5YjAxMWJjZTNhZTEwNmQ2NzljYTliNmQwYzNhOWYgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRlcmluZy5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tZW5kLWV2ZW50LXJlbmRl
cmluZy5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVz
dC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxl
ZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdp
dCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3Jt
Lmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0LXRyYW5z
Zm9ybS5odG1sCmluZGV4IDNkMzI5ZjQ2MDIxOTZhYTFmNDkzNDAwODgyYzg4ODBjZjQ1ODIzN2Mu
LmVmODA2YzcxMWExZTE1YWJkZDM3OTZjNWE1ODcxYjY5MTJkYzdkMzggMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taGl0LXRlc3QtdHJhbnNmb3JtLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1oaXQtdGVzdC10cmFuc2Zv
cm0uaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3Qt
cnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9
dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQg
YS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwgYi9MYXlv
dXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWhpdC10ZXN0Lmh0bWwKaW5kZXggZDlkZjg1
YzE0NDdmMDlhZGU1MmFhYTQyYjAxZjIyMzhjYmNiZTNjNy4uODNhNjBhNmUyZTU1M2YzN2E3ZjU5
ZTY3MjFiOTg1YmVkNzNhMDE2NSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dHJhbnNpdGlvbi1oaXQtdGVzdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zaXRpb24taGl0LXRlc3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwh
LS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRl
Z3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhl
YWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRl
bGF5LXBoYXNlLmh0bWwgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLWluLWRl
bGF5LXBoYXNlLmh0bWwKaW5kZXggOTNlMDRmMmEzMjhmZjJjZGExNjU2YTQzNDkxMDRmMjE0MjEw
M2FiMC4uZmMyY2U5OTUxMGFkZTcyZDZjZTgxNTY5MTc0NWI5OTAwODBhNjgyYyAxMDA2NDQKLS0t
IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi1pbi1kZWxheS1waGFzZS5odG1s
CisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24taW4tZGVsYXktcGhhc2Uu
aHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVu
dGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorCiA8aHRt
bD4KIDxoZWFkPgogICA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLW9uLWVsZW1lbnQtd2l0aC1jb250ZW50Lmh0bWwKaW5kZXgg
MWYwM2VlYTc3NDk2ZjdiNzNmYWVhN2YyYzBjYzdkNjdkODRhMmJhYi4uM2M0NzI5NDkxNjdkNjgz
MjJhMjczNzFlYTA3MWYyNzYxMWY2NTM2OSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNp
dGlvbnMvdHJhbnNpdGlvbi1vbi1lbGVtZW50LXdpdGgtY29udGVudC5odG1sCisrKyBiL0xheW91
dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tb24tZWxlbWVudC13aXRoLWNvbnRlbnQuaHRt
bApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRT48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4
cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4K
KzwhRE9DVFlQRT4KIAogPGh0bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3Ry
YW5zaXRpb25zL3RyYW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy90cmFuc2l0aW9uLXNob3J0aGFuZC1kZWxheS5odG1sCmluZGV4IDY4NzMyMjlk
MTRkNzk0NjNjZTBmNDRkZjQ0OTBhYjQ5ODdkY2JjM2MuLmRmMDk4OWQ5ZjY0ZmE3ZGU0ZTRlYjM1
MDgzYWU4ZDQ0OWJlZjQ2ZjYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Ry
YW5zaXRpb24tc2hvcnRoYW5kLWRlbGF5Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlv
bnMvdHJhbnNpdGlvbi1zaG9ydGhhbmQtZGVsYXkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9D
VFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1h
dGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAK
IDxodG1sPgogPGhlYWQ+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFu
c2l0aW9uLXRpbWluZy1mdW5jdGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJh
bnNpdGlvbi10aW1pbmctZnVuY3Rpb24uaHRtbAppbmRleCA5MTE3NDkyYjBiYjNhMTJiODEwMzdl
ZDIyOWZjNTllMGI2ZWNmZDk5Li4wNTBjNTJkMzE3MWM4NjI5NmZjMjc2NTVjYjEzNDNhNTQ0ZjE5
YmY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRpbWlu
Zy1mdW5jdGlvbi5odG1sCisrKyBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24t
dGltaW5nLWZ1bmN0aW9uLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0tIHdlYmtpdC10ZXN0LXJ1
bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRy
dWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KICAgPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbCBiL0xheW91dFRl
c3RzL3RyYW5zaXRpb25zL3RyYW5zaXRpb24tdG8tZnJvbS1hdXRvLmh0bWwKaW5kZXggNGUzN2Ux
NjdmNDFmMTIzYmVkZWRiMDI4MGUyMWIwMGM5MTZiMDhlZi4uZDg0NTliNzFkNGM4M2E5YzNkN2Uz
NjkxNTM2ZjU4YmE2OTA5NGJhNCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMv
dHJhbnNpdGlvbi10by1mcm9tLWF1dG8uaHRtbAorKysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9u
cy90cmFuc2l0aW9uLXRvLWZyb20tYXV0by5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBF
IGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9u
c0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0
bWw+CiA8aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5zaXRp
b24tdG8tZnJvbS11bmRlZmluZWQuaHRtbCBiL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3RyYW5z
aXRpb24tdG8tZnJvbS11bmRlZmluZWQuaHRtbAppbmRleCAxNGU3OGM1MDE2MWRlODI0MjZkYWMy
Zjc5ZjQ2NDY4ZjA0MjRlY2UwLi42MjhjZjI2ODUyZWFhOGY5MzU2NjI0ZDkxMTljNmU4NzhlYmFm
Nzg4IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy90cmFuc2l0aW9uLXRvLWZy
b20tdW5kZWZpbmVkLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdHJhbnNpdGlv
bi10by1mcm9tLXVuZGVmaW5lZC5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIAogPGh0bWw+CiA8
aGVhZD4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3Zpc2l0ZWQtbGluay1j
b2xvci5odG1sIGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0
bWwKaW5kZXggMmVhNDQ2YzZiMmY5NWFhMmNmM2RlZDM2Njc2MWU0MDY1ODM2MmMyZS4uYjE4Nzhk
MzE5MDUyMTc2OGU2M2JhNWU1YWQ3YzZkNTMyZGVlNzNlMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvdHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMv
dHJhbnNpdGlvbnMvdmlzaXRlZC1saW5rLWNvbG9yLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IS0t
IHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdy
YXRpb25FbmFibGVkPXRydWUgXSAtLT4KKwogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3RyYW5zaXRpb25zL3plcm8tZHVyYXRpb24taW4tbGlzdC5odG1s
IGIvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWwKaW5k
ZXggZTY2YWRmM2IxOTBjOWUwZDg1ZWE3ODAyYzFkOTcxZDM4YTFjZmUyZC4uYjJiY2JmNTI1OTdk
ZGIzZDZlZGZlODkwY2RkNjA1NmY1MGUyZDdkYiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvdHJh
bnNpdGlvbnMvemVyby1kdXJhdGlvbi1pbi1saXN0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURP
Q1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmlt
YXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgog
CiA8aHRtbD4KIDxoZWFkPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvdHJhbnNpdGlvbnMvemVy
by1kdXJhdGlvbi13aXRoLW5vbi16ZXJvLWRlbGF5LXN0YXJ0Lmh0bWwgYi9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbApp
bmRleCA2NjYxZjkxYTQwOWE5MWFiZDNiOWMwNWUxNGJhNDc0NDEwNTMyNDUwLi42MDhlMDAzZjVj
MGRlN2Y2MzAzNThhNmIwNDczYTQzNTk1NDVjMjI2IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy90
cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8tZGVsYXktc3RhcnQuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy90cmFuc2l0aW9ucy96ZXJvLWR1cmF0aW9uLXdpdGgtbm9uLXplcm8t
ZGVsYXktc3RhcnQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0gd2Vi
a2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3JhdGlv
bkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiAKIDxodG1sPgogPGhlYWQ+CmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlv
bi1pbnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRp
b25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1pbnRlcnJ1cHRpb24tZGlzcGxheS1ub25lLmh0bWwK
aW5kZXggOWM3YTEzYjQ1YjY0NTNhODQ1ZDU4ZTIwNWM5YjRlM2VjODU0NjU0Yy4uZDExNWM5NTEx
ODQ3Y2M1YjFhOGY2ODg0OTkzNTdlNmViMGEyMDBiYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMv
d2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24taW50ZXJydXB0aW9uLWRpc3BsYXkt
bm9uZS5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5p
bWF0aW9uLWludGVycnVwdGlvbi1kaXNwbGF5LW5vbmUuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwh
RE9DVFlQRSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFu
aW1hdGlvbnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+
CiA8aHRtbD4KIDxoZWFkPgogPHN0eWxlPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5p
bWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29t
cGxldGlvbi5odG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmlt
YXRpb24tcmVtb3ZhbC11cG9uLXRyYW5zaXRpb24tY29tcGxldGlvbi5odG1sCmluZGV4IGIzNzY2
ODE3Y2Y0MGUzZDlkYWU2NWU0MzljYTJkZmYzYzY5ZTViYjYuLmExYzg0OGEzYTE1NmEwYTA0YzAw
ZGIzZDkyNzY0YjRkMDc5YjYxMjMgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXJlbW92YWwtdXBvbi10cmFuc2l0aW9uLWNvbXBsZXRp
b24uaHRtbAorKysgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1h
dGlvbi1yZW1vdmFsLXVwb24tdHJhbnNpdGlvbi1jb21wbGV0aW9uLmh0bWwKQEAgLTEsNCArMSw0
IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRh
bDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQ
RSBodG1sPgogPGh0bWw+CiA8aGVhZD4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24uaHRtbCBiL0xh
eW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtYW5pbWF0aW9uLXN1c3BlbnNpb24u
aHRtbAppbmRleCAwNjU0YTY5NWY1YjI0YmM0MmZjYTdmMWQyMzgxZGEwZjcyYWI2ODhjLi5lZmFh
NTQzOWQ0ZmI3NDBhYjVjNzQzMTBkMTQ3Njg4ODNjMzY4ZmVmIDEwMDY0NAotLS0gYS9MYXlvdXRU
ZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLWFuaW1hdGlvbi1zdXNwZW5zaW9uLmh0bWwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9hY2NlbGVyYXRlZC1hbmltYXRpb24tc3Vz
cGVuc2lvbi5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQt
dGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5h
YmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2VsZXJhdGVkLXRyYW5z
aXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlv
bnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCmluZGV4
IGJlZjA4MDhlOTQ3Yzk2YTA1NGMzMThiOTFkNTlhNTI0MDIxZTNiMjcuLmYzNDAxYjZjZTY2MGZi
NjIwN2Q4YjkxZjNjNTI2ZWJmNmM2YzA3ZDYgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFu
aW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1s
CisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1i
eS1yZW1vdmluZy1wcm9wZXJ0eS5odG1sCkBAIC0xLDQgKzEsNCBAQAotPCFET0NUWVBFIGh0bWw+
PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6V2ViQW5pbWF0aW9uc0NTU0lu
dGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUgaHRtbD4KIDxib2R5PgogPHN0
eWxlPgogICAgIGRpdiB7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Fj
Y2Vzc2luZy1jdXJyZW50LXRpbWUtYWZ0ZXItY2xlYXJpbmctY3NzLWFuaW1hdGlvbi1lZmZlY3Qu
aHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1h
ZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sCmluZGV4IGI2MDVjMDg5MTFi
YTY5MzFiMGNmMzgzNWI3OWNjYjBjNGZmNTM2NzQuLjlkZDU2MThiYjY3NTAxZWY5MDlmNjM3MmQx
ZjExOTFmNWFlYzkyNjcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNj
ZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5o
dG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGlt
ZS1hZnRlci1jbGVhcmluZy1jc3MtYW5pbWF0aW9uLWVmZmVjdC5odG1sCkBAIC0xLDQgKzEsNCBA
QAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50YWw6
V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZUEUg
aHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q3Jhc2ggYWNjZXNzaW5nIGEgQ1NT
QW5pbWF0aW9uJ3MgY3VycmVudCB0aW1lIGFmdGVyIHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxs
PC90aXRsZT4KIDxzdHlsZT4KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
YWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3MtYW5pbWF0aW9uLXRhcmdl
dC1yZW1vdmFsLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2FjY2Vzc2luZy1jdXJy
ZW50LXRpbWUtYWZ0ZXItZmluaXNoZWQtY3NzLWFuaW1hdGlvbi10YXJnZXQtcmVtb3ZhbC5odG1s
CmluZGV4IDU4ZjZjNDliOWM4YzA4MmRmOGNlOTE2ZDhjNjE2OGEwZDg5OGNlM2YuLjQzMDZhMTll
YmJkM2NjZjhkZTk5MWI1YzU4MzJiNGIxM2Y3ZDBhMWIgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3Rz
L3dlYmFuaW1hdGlvbnMvYWNjZXNzaW5nLWN1cnJlbnQtdGltZS1hZnRlci1maW5pc2hlZC1jc3Mt
YW5pbWF0aW9uLXRhcmdldC1yZW1vdmFsLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0
aW9ucy9hY2Nlc3NpbmctY3VycmVudC10aW1lLWFmdGVyLWZpbmlzaGVkLWNzcy1hbmltYXRpb24t
dGFyZ2V0LXJlbW92YWwuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PXV0
Zi04PgogPHRpdGxlPkNyYXNoIGFjY2Vzc2luZyBhIENTU0FuaW1hdGlvbidzIGN1cnJlbnQgdGlt
ZSBhZnRlciByZW1vdmFsIG9mIGl0cyB0YXJnZXQ8L3RpdGxlPgogPHN0eWxlPgpkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQt
Y2hhbmdlLWFuZC1hbmltYXRpb24tcmVtb3ZhbC1jcmFzaC5odG1sIGIvTGF5b3V0VGVzdHMvd2Vi
YW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1hbmltYXRp
b24tcmVtb3ZhbC1jcmFzaC5odG1sCmluZGV4IGQ5ODBkMzU2MjhlNGFhMzlhMTgzNDAzNWQ1N2U0
N2FmMGNkMWNiYjcuLjY2ZmJhNTUyZjg1ZGQzYzI4MTdkNzIxMTk4Mzc1NjMyYjhkNjk5MmUgMTAw
NjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLWFuaW1hdGlvbi1lZmZlY3Qt
dGFyZ2V0LWNoYW5nZS1hbmQtYW5pbWF0aW9uLXJlbW92YWwtY3Jhc2guaHRtbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb24tZWZmZWN0LXRhcmdldC1jaGFuZ2Ut
YW5kLWFuaW1hdGlvbi1yZW1vdmFsLWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZ
UEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRp
b25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPGJv
ZHk+CiA8c3R5bGU+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3Nz
LWFuaW1hdGlvbi1lZmZlY3QtdGFyZ2V0LWNoYW5nZS1hbmQtZ2V0LWtleWZyYW1lcy1jcmFzaC5o
dG1sIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10YXJn
ZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwKaW5kZXggNTYwODcyMTNhNDVl
ZGQ0NzZhMDhlZDkzOWNjMTZiMDhmNTE0Y2M3Yi4uOWU1NTNiZGZiYTRiZjZlNWYxMTEzZTgxODlm
YzJhMDEzNzc0MTg3NiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3Mt
YW5pbWF0aW9uLWVmZmVjdC10YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0
bWwKKysrIGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9uLWVmZmVjdC10
YXJnZXQtY2hhbmdlLWFuZC1nZXQta2V5ZnJhbWVzLWNyYXNoLmh0bWwKQEAgLTEsNCArMSw0IEBA
Ci08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpX
ZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVkPXRydWUgXSAtLT4KKzwhRE9DVFlQRSBo
dG1sPgogPGJvZHk+CiA8c3R5bGU+CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmFuaW1h
dGlvbnMvY3NzLWFuaW1hdGlvbnMuaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3Nz
LWFuaW1hdGlvbnMuaHRtbAppbmRleCA4M2ZlOTVjYTdkZjE2NjNhZDU5MDhhYmUwNGEzNmJmNTcx
YTU1MWFlLi5lNWY5NTIwMDBjNmE0ZWVlNWVmZGIyMWFhNmU3ZTQ3N2Q1OWJiYTBjIDEwMDY0NAot
LS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy1hbmltYXRpb25zLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtYW5pbWF0aW9ucy5odG1sCkBAIC0xLDQgKzEs
NCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmltZW50
YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURPQ1RZ
UEUgaHRtbD4KIDxtZXRhIGNoYXJzZXQ9dXRmLTg+CiA8dGl0bGU+Q1NTIEFuaW1hdGlvbnM8L3Rp
dGxlPgogPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvY3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVy
c2FsLWFjY2VsZXJhdGVkLmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL2Nzcy10cmFu
c2l0aW9uLWluLWZsaWdodC1yZXZlcnNhbC1hY2NlbGVyYXRlZC5odG1sCmluZGV4IDMwNzgzYThi
ZmYwYmIwMWE0ZWZiNDA1OGJhZGM3MDkxOGEyZTk3MGYuLjA0ZGJhYTUzY2ExZDIzNmZkOTgwYmNj
ZDcxY2E4YjlhM2FmOTI4NzcgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
Y3NzLXRyYW5zaXRpb24taW4tZmxpZ2h0LXJldmVyc2FsLWFjY2VsZXJhdGVkLmh0bWwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9jc3MtdHJhbnNpdGlvbi1pbi1mbGlnaHQtcmV2ZXJz
YWwtYWNjZWxlcmF0ZWQuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1sPjwhLS0g
d2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJbnRlZ3Jh
dGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFyc2V0PSJ1
dGYtOCI+CiA8dGl0bGU+UmV2ZXJzYWwgb2YgYWNjZWxlcmF0ZWQgaW4tZmxpZ2h0IENTUyBUcmFu
c2l0aW9uczwvdGl0bGU+CiA8c3R5bGUgdHlwZT0idGV4dC9jc3MiIG1lZGlhPSJzY3JlZW4iPgpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jh
c2guaHRtbCBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvZW1wdHkta2V5ZnJhbWVzLWNyYXNo
Lmh0bWwKaW5kZXggNjBhYzM2NWYzMDU2NTQzYTNmMTg2NTRiOWY3YzJmM2UxMjQ3YzU2Mi4uMGY1
ZmZiM2YyNzA4NjdiM2E2M2VlMDMxYTMyNWJiYWJhYTQxNzdkMyAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvd2ViYW5pbWF0aW9ucy9lbXB0eS1rZXlmcmFtZXMtY3Jhc2guaHRtbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJhbmltYXRpb25zL2VtcHR5LWtleWZyYW1lcy1jcmFzaC5odG1sCkBAIC0xLDQg
KzEsNCBAQAotPCFET0NUWVBFIGh0bWw+PCEtLSB3ZWJraXQtdGVzdC1ydW5uZXIgWyBleHBlcmlt
ZW50YWw6V2ViQW5pbWF0aW9uc0NTU0ludGVncmF0aW9uRW5hYmxlZD10cnVlIF0gLS0+Cis8IURP
Q1RZUEUgaHRtbD4KIDxodG1sPgogPGhlYWQ+CiA8c3R5bGU+CmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2NlbGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92
aW5nLXByb3BlcnR5Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3BhcnRseS1hY2Nl
bGVyYXRlZC10cmFuc2l0aW9uLWJ5LXJlbW92aW5nLXByb3BlcnR5Lmh0bWwKaW5kZXggNGRiZjcw
NmU0MTc0ZjI5YWIxOTViOGUyZmY1NjJhOWQwOTM3YWY3YS4uZmEzYzg1NWRiY2IyNmU4ZDk5N2Mx
MjUyNDI4ODMyYzkxMTE4N2M4ZiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9u
cy9wYXJ0bHktYWNjZWxlcmF0ZWQtdHJhbnNpdGlvbi1ieS1yZW1vdmluZy1wcm9wZXJ0eS5odG1s
CisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvcGFydGx5LWFjY2VsZXJhdGVkLXRyYW5z
aXRpb24tYnktcmVtb3ZpbmctcHJvcGVydHkuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQ
RSBodG1sPjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlv
bnNDU1NJbnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8Ym9k
eT4KIDxwcmUgaWQ9InJlc3VsdHMiPjwvcHJlPgogPGRpdiBpZD0idGFyZ2V0IiBzdHlsZT0icG9z
aXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IHdpZHRoOiAxMDBweDsgaGVpZ2h0OiAx
MDBweDsgYmFja2dyb3VuZC1jb2xvcjogYmxhY2s7Ij48L2Rpdj4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xl
YXJpbmctZWZmZWN0Lmh0bWwgYi9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3Nz
LWFuaW1hdGlvbi1ub25lLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sCmluZGV4IGJkMjQwNjhi
Y2M0NWRjMzgyOTA4ODlmZDdjM2EzNDY0Y2YyMDE3ZWIuLmY4MGIwNDdmMjY1NmZlNTkxODgxNWIw
MzJjODc1NTQ4NmUwN2JmYmEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMv
c2V0dGluZy1jc3MtYW5pbWF0aW9uLW5vbmUtYWZ0ZXItY2xlYXJpbmctZWZmZWN0Lmh0bWwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tbm9uZS1h
ZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbApAQCAtMSw0ICsxLDQgQEAKLTwhRE9DVFlQRSBodG1s
PjwhLS0gd2Via2l0LXRlc3QtcnVubmVyIFsgZXhwZXJpbWVudGFsOldlYkFuaW1hdGlvbnNDU1NJ
bnRlZ3JhdGlvbkVuYWJsZWQ9dHJ1ZSBdIC0tPgorPCFET0NUWVBFIGh0bWw+CiA8bWV0YSBjaGFy
c2V0PXV0Zi04PgogPHRpdGxlPkNyYXNoIHNldHRpbmcgYSBDU1MgQW5pbWF0aW9uIHRvICJub25l
IiBhZnRlciBzZXR0aW5nIGl0cyBlZmZlY3QgdG8gbnVsbDwvdGl0bGU+CiA8c3R5bGU+CmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3NldHRpbmctY3NzLWFuaW1hdGlvbi10
aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFyaW5nLWVmZmVjdC5odG1sIGIvTGF5
b3V0VGVzdHMvd2ViYW5pbWF0aW9ucy9zZXR0aW5nLWNzcy1hbmltYXRpb24tdGltaW5nLXByb3Bl
cnR5LXZpYS1zdHlsZS1hZnRlci1jbGVhcmluZy1lZmZlY3QuaHRtbAppbmRleCA0YjE1MDRhYmNh
ZDNlN2RiMDQxM2NkZGJmMzMzNjFlYTQ5NDU0YWYxLi45MzJiYzkxYTc2ZWExNTVmOWFiODZkOGM5
MDRkOGZlYjUzNWM3NzZiIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy93ZWJhbmltYXRpb25zL3Nl
dHRpbmctY3NzLWFuaW1hdGlvbi10aW1pbmctcHJvcGVydHktdmlhLXN0eWxlLWFmdGVyLWNsZWFy
aW5nLWVmZmVjdC5odG1sCisrKyBiL0xheW91dFRlc3RzL3dlYmFuaW1hdGlvbnMvc2V0dGluZy1j
c3MtYW5pbWF0aW9uLXRpbWluZy1wcm9wZXJ0eS12aWEtc3R5bGUtYWZ0ZXItY2xlYXJpbmctZWZm
ZWN0Lmh0bWwKQEAgLTEsNCArMSw0IEBACi08IURPQ1RZUEUgaHRtbD48IS0tIHdlYmtpdC10ZXN0
LXJ1bm5lciBbIGV4cGVyaW1lbnRhbDpXZWJBbmltYXRpb25zQ1NTSW50ZWdyYXRpb25FbmFibGVk
PXRydWUgXSAtLT4KKzwhRE9DVFlQRSBodG1sPgogPG1ldGEgY2hhcnNldD11dGYtOD4KIDx0aXRs
ZT5DcmFzaCBzZXR0aW5nIGEgQ1NTQW5pbWF0aW9uJ3MgcHJvcGVydHkgdmlhIHN0eWxlIGFmdGVy
IHNldHRpbmcgaXRzIGVmZmVjdCB0byBudWxsPC90aXRsZT4KIDxzdHlsZT4K
</data>
<flag name="commit-queue"
          id="424601"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>